Easee API

Här diskuteras allt som inte hör hemma någon annanstans

Moderator: Redaktion

Användarvisningsbild
Sweetspot
Teslaägare
Inlägg: 25
Blev medlem: 02 aug 2019 08:59
Ort: Lidingö

Easee API

Inlägg av Sweetspot »

Är det någon som råkar veta hur jag kan koppla upp mig mot Easee API och få ut min förbrukning från laddboxen?
Tibber och Efuel appar i all ära men jag skulle behöva (bygga) en webbsida att ta ut en rapport ifrån.

tack för svar.
Model S LR 2019 - Midnight Silver Metallic, 21” Sonicgrå Twin Turbine
chaffis75
elbilist
Inlägg: 4835
Blev medlem: 21 okt 2016 07:39
Ort: Löddeköpinge

Re: Easee API

Inlägg av chaffis75 »

VW Id.3 Life MY20 och Volvo V60 MY19
Användarvisningsbild
dbar
Teslaägare
Inlägg: 300
Blev medlem: 12 sep 2018 13:42

Re: Easee API

Inlägg av dbar »

Också väldigt intresserad av detta.
Hållar på att utveckla en lösning för att ladda bilen med överproducerad solkraft som annars hade gått ut på elnätet.

För att lyckas med detta på effektivt sätt måste jag ha möjligheten att justera laddhastigheten.
I teslan kan du ställa den till 5-16A eller något sådant. Men det går inte att justera via appen eller Teslas API, tibbers API gör inget mot laddaren (så vitt jag kunnat se i dokumentationen). Har inte hittat något om easees API alls. Måste finnas ett som tibber använder för sin fasövervakning. Men hittar inget publikt om dem.
Model 3 LR +FSD+AccBoost, Pearl White, svart premiumklädsel, 18" Aero-fälgar
Model Y LR +FSD, Grå med matt PPF, svart premiumklädsel, 21" custom made fälgar
Användarvisningsbild
eVazer
Teslaägare
Inlägg: 22
Blev medlem: 29 dec 2019 11:18

Re: Easee API

Inlägg av eVazer »

Sweetspot skrev:
Är det någon som råkar veta hur jag kan koppla upp mig mot Easee API och få ut min förbrukning från laddboxen?
Tibber och Efuel appar i all ära men jag skulle behöva (bygga) en webbsida att ta ut en rapport ifrån.
Jag har lyckats fiska ut lite info från ease.cloud. Kanske räcker för dina ändamål?

Kod: Markera allt

{
    "cableLocked": true,
    "cableRating": 32000.0,
    "cellRSSI": -58,
    "chargerFirmware": 195,
    "chargerOpMode": 4,
    "chargerRAT": 1,
    "dynamicCircuitCurrentP1": 40.0,
    "dynamicCircuitCurrentP2": 40.0,
    "dynamicCircuitCurrentP3": 40.0,
    "energyPerHour": 0.023000000044703484,
    "inCurrentT2": 0.0,
    "inCurrentT3": 0.0,
    "inCurrentT4": 0.061000000685453415,
    "inCurrentT5": 0.061000000685453415,
    "inVoltageT1T2": 0.8450000286102295,
    "inVoltageT1T3": 228.73199462890625,
    "inVoltageT1T4": 233.802001953125,
    "inVoltageT1T5": 237.46400451660156,
    "inVoltageT2T3": 229.2949981689453,
    "inVoltageT2T4": 232.95700073242188,
    "inVoltageT2T5": 238.0279998779297,
    "inVoltageT3T4": 405.07000732421875,
    "inVoltageT3T5": 400.8450012207031,
    "inVoltageT4T5": 407.322998046875,
    "isOnline": true,
    "latestFirmware": 195,
    "latestPulse": "2020-02-18T16:00:32Z",
    "ledMode": 23,
    "localRSSI": null,
    "lockCablePermanently": false,
    "outputCurrent": 16.0,
    "outputPhase": 30,
    "sessionEnergy": 1.7899999618530273,
    "smartCharging": false,
    "totalPower": 0.029999999329447746,
    "voltage": 229.2949981689453,
    "wiFiRSSI": -74
}
moonshine
elbilist
Inlägg: 3
Blev medlem: 28 feb 2020 21:19
Ort: Arboga

Re: Easee API

Inlägg av moonshine »

Hur lyckades du få ut det här?
eVazer skrev:
Sweetspot skrev:
Är det någon som råkar veta hur jag kan koppla upp mig mot Easee API och få ut min förbrukning från laddboxen?
Tibber och Efuel appar i all ära men jag skulle behöva (bygga) en webbsida att ta ut en rapport ifrån.
Jag har lyckats fiska ut lite info från ease.cloud. Kanske räcker för dina ändamål?

Kod: Markera allt

{
    "cableLocked": true,
    "cableRating": 32000.0,
    "cellRSSI": -58,
    "chargerFirmware": 195,
    "chargerOpMode": 4,
    "chargerRAT": 1,
    "dynamicCircuitCurrentP1": 40.0,
    "dynamicCircuitCurrentP2": 40.0,
    "dynamicCircuitCurrentP3": 40.0,
    "energyPerHour": 0.023000000044703484,
    "inCurrentT2": 0.0,
    "inCurrentT3": 0.0,
    "inCurrentT4": 0.061000000685453415,
    "inCurrentT5": 0.061000000685453415,
    "inVoltageT1T2": 0.8450000286102295,
    "inVoltageT1T3": 228.73199462890625,
    "inVoltageT1T4": 233.802001953125,
    "inVoltageT1T5": 237.46400451660156,
    "inVoltageT2T3": 229.2949981689453,
    "inVoltageT2T4": 232.95700073242188,
    "inVoltageT2T5": 238.0279998779297,
    "inVoltageT3T4": 405.07000732421875,
    "inVoltageT3T5": 400.8450012207031,
    "inVoltageT4T5": 407.322998046875,
    "isOnline": true,
    "latestFirmware": 195,
    "latestPulse": "2020-02-18T16:00:32Z",
    "ledMode": 23,
    "localRSSI": null,
    "lockCablePermanently": false,
    "outputCurrent": 16.0,
    "outputPhase": 30,
    "sessionEnergy": 1.7899999618530273,
    "smartCharging": false,
    "totalPower": 0.029999999329447746,
    "voltage": 229.2949981689453,
    "wiFiRSSI": -74
}
Användarvisningsbild
eVazer
Teslaägare
Inlägg: 22
Blev medlem: 29 dec 2019 11:18

Re: Easee API

Inlägg av eVazer »

Ett litet phyton-script som loggar in på easee.cloud och ansluter till samma API som hemsidan använder.

Kan posta någon kodsnutt om det är intressant.
moonshine
elbilist
Inlägg: 3
Blev medlem: 28 feb 2020 21:19
Ort: Arboga

Re: Easee API

Inlägg av moonshine »

eVazer skrev:
Ett litet phyton-script som loggar in på easee.cloud och ansluter till samma API som hemsidan använder.

Kan posta någon kodsnutt om det är intressant.
Ahh, jag hade inte fått någon notifiering om svar på det här.
Jag lyckades också precis hitta API:et och att det går att göra mycket via det. Inte bara det som går att göra via webbsidan.
Troligen samma API som alla använder för att styra boxen.

Men lite kod som grund vore kanon. Jag kan bygga vidare lite på den själv sen för jag har eventuellt tänkt att bygga en egen begränsare mot huvudsäkringen då jag inte kunnat ansluta min Pulse än, men har mätning av faserna i annat system.
Användarvisningsbild
eVazer
Teslaägare
Inlägg: 22
Blev medlem: 29 dec 2019 11:18

Re: Easee API

Inlägg av eVazer »

Men lite kod som grund vore kanon.
Det är i allra högsta grad lite grund. :)

Blev mest en utmaning att lyckas - koden kan snyggas till avsevärt.

Python3:

Kod: Markera allt

import requests, json, time
from pprint import pprint

class connect:
    def __init__(self, 
                 access_token=None,
                 ):

        if (access_token is None):
            access_token_resp = self.get_access_token()
            access_token = access_token_resp["accessToken"]
        self.headers = {"Authorization": "Bearer {}".format(access_token)}

    def get_access_token(self):
        return requests.post("https://api.easee.cloud/api/accounts/token", json={"grantType":"password","username":"+46[PHONENO]","password":"[PASSWORD]"}).json()

    def get_data_request(self):
        return requests.get(
            'https://api.easee.cloud/api/chargers/[CHARGERID T.EX. EH123456]/state',headers=self.headers).json()


my_charger = connect()
resp = my_charger.get_data_request()

print(resp['latestPulse'] + "  ", end='')
print(str(round(resp['inCurrentT3'],1)) + "A  ", end='')
print(str(round(resp['inCurrentT4'],1)) + "A  ", end='')
print(str(round(resp['inCurrentT5'],1)) + "A  ", end='')
print(str(round(resp['sessionEnergy'],3)) + "kWh  ", end='')
print(str(round(resp['totalPower'],3)) + "kWh")

# dump entire object
# pprint(resp)

Observera att du byter ut [ xxx ] mot dess faktiska värden fast utan [ ] för laddboxens ID samt mobilnummer och password för easee.cloud ..
Inloggningstoken gäller 24h så den behöver inte hämtas för varje anrop.
moonshine
elbilist
Inlägg: 3
Blev medlem: 28 feb 2020 21:19
Ort: Arboga

Re: Easee API

Inlägg av moonshine »

eVazer skrev:
Men lite kod som grund vore kanon.
Det är i allra högsta grad lite grund. :)

Blev mest en utmaning att lyckas - koden kan snyggas till avsevärt.
Tack så mycket! Det var en utmärkt grund och den såg i alla fall bättre ut än det jag skulle gjort. Jag är inte helt van med programering i Python, men jag hankar mig fram i alla fall.
I vilket fall så var den en utmärkt grund att jobba vidare på så igår kväll la jag till funktioner för att starta laddning, stoppa laddning samt att styra strömbegränsningen.
Allt verkade fungera bra, men kommer slipa lite mer på den innan jag lägger ut den någon stans.
Skulle du vara intresserad av den eller är det saker du kanske inte har behov av?
Användarvisningsbild
eVazer
Teslaägare
Inlägg: 22
Blev medlem: 29 dec 2019 11:18

Re: Easee API

Inlägg av eVazer »

moonshine skrev:
I vilket fall så var den en utmärkt grund att jobba vidare på så igår kväll la jag till funktioner för att starta laddning, stoppa laddning samt att styra strömbegränsningen.
Allt verkade fungera bra, men kommer slipa lite mer på den innan jag lägger ut den någon stans.
Skulle du vara intresserad av den eller är det saker du kanske inte har behov av?
Absolut! Nu kan jag förvisso styra laddningen via bilens API, men av ren nyfikenhet är jag intresserad! :)
x0r
Inlägg: 7
Blev medlem: 06 jun 2019 23:11

Re: Easee API

Inlägg av x0r »

moonshine skrev:
eVazer skrev:
Men lite kod som grund vore kanon.
Det är i allra högsta grad lite grund. :)

Blev mest en utmaning att lyckas - koden kan snyggas till avsevärt.
Tack så mycket! Det var en utmärkt grund och den såg i alla fall bättre ut än det jag skulle gjort. Jag är inte helt van med programering i Python, men jag hankar mig fram i alla fall.
I vilket fall så var den en utmärkt grund att jobba vidare på så igår kväll la jag till funktioner för att starta laddning, stoppa laddning samt att styra strömbegränsningen.
Allt verkade fungera bra, men kommer slipa lite mer på den innan jag lägger ut den någon stans.
Skulle du vara intresserad av den eller är det saker du kanske inte har behov av?
Dela gärna med dig när du känner dig redo :)
barco
Inlägg: 1
Blev medlem: 25 mar 2020 10:51

Re: Easee API

Inlägg av barco »

Jag är också intresserad. Har börjat interagera med easee.cloud's API men jag kan bara hämta ut information, inte stop/starta laddning. Misstänker att det är för att min laddare är bunden till Tibber men osäker. Tibbers API stödjer ju fortafarandet inte så mycket styrande alls (ännu). Någon som har lyckats med något runt detta?
Användarvisningsbild
dbar
Teslaägare
Inlägg: 300
Blev medlem: 12 sep 2018 13:42

Re: Easee API

Inlägg av dbar »

Är väldigt intresserad! Är i bästa fall en halvdan scriptkiddie, absolut inte programmerare. Men är i behov av att framför allt kunna justera Max ampere som laddaren ger vi API:et.
Model 3 LR +FSD+AccBoost, Pearl White, svart premiumklädsel, 18" Aero-fälgar
Model Y LR +FSD, Grå med matt PPF, svart premiumklädsel, 21" custom made fälgar
Användarvisningsbild
dbar
Teslaägare
Inlägg: 300
Blev medlem: 12 sep 2018 13:42

Re: Easee API

Inlägg av dbar »

eVazer skrev:
Men lite kod som grund vore kanon.
Det är i allra högsta grad lite grund. :)

Blev mest en utmaning att lyckas - koden kan snyggas till avsevärt.

Python3:

Kod: Markera allt

import requests, json, time
from pprint import pprint

class connect:
    def __init__(self, 
                 access_token=None,
                 ):

        if (access_token is None):
            access_token_resp = self.get_access_token()
            access_token = access_token_resp["accessToken"]
        self.headers = {"Authorization": "Bearer {}".format(access_token)}

    def get_access_token(self):
        return requests.post("https://api.easee.cloud/api/accounts/token", json={"grantType":"password","username":"+46[PHONENO]","password":"[PASSWORD]"}).json()

    def get_data_request(self):
        return requests.get(
            'https://api.easee.cloud/api/chargers/[CHARGERID T.EX. EH123456]/state',headers=self.headers).json()


my_charger = connect()
resp = my_charger.get_data_request()

print(resp['latestPulse'] + "  ", end='')
print(str(round(resp['inCurrentT3'],1)) + "A  ", end='')
print(str(round(resp['inCurrentT4'],1)) + "A  ", end='')
print(str(round(resp['inCurrentT5'],1)) + "A  ", end='')
print(str(round(resp['sessionEnergy'],3)) + "kWh  ", end='')
print(str(round(resp['totalPower'],3)) + "kWh")

# dump entire object
# pprint(resp)

Observera att du byter ut [ xxx ] mot dess faktiska värden fast utan [ ] för laddboxens ID samt mobilnummer och password för easee.cloud ..
Inloggningstoken gäller 24h så den behöver inte hämtas för varje anrop.
Vill kunna sätta maxlast på faserna i Ease (kontrollera laddhastigheten) via API. eVazer's kod fungerade utmärkt, gjorde ett höftskott på hur det skulle gå till med hjälp av eVazer's kod. Men min totala okunnighet i såväl python som rest api lyser igenom ganska snabbt.
Skärmavbild 2020-03-27 kl. 11.29.10.png
får bara följande tillbaka

Kod: Markera allt

Traceback (most recent call last):
  File "/path/Python/easee_test1.py", line 30, in <module>
    chargerA = my_charger.set_circuit_max()
  File "/path/Python/easee_test1.py", line 21, in set_circuit_max
    "dynamicCircuitCurrentP3":10
  File "/Library/Python/3.7/site-packages/requests/models.py", line 898, in json
    return complexjson.loads(self.text, **kwargs)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/json/__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Någon som kan ge mig en stöt i rätt riktning?
Model 3 LR +FSD+AccBoost, Pearl White, svart premiumklädsel, 18" Aero-fälgar
Model Y LR +FSD, Grå med matt PPF, svart premiumklädsel, 21" custom made fälgar
Olalid
Inlägg: 1
Blev medlem: 05 aug 2019 16:53

Re: Easee API

Inlägg av Olalid »

Jag implementerade lite flera funktioner som verkar funka för mig iaf.

För att kunna sätta strömmen måste man först ta reda på vad man har för site-id och circuit-id.
Så anropa get_sites() för att lista alla siter du har konfigurerat och lägg sedan in den site du vill använda i koden för get_site_info() så kan du anropa den för att få reda på circuit-id.
Lägg sedan in dessa båda värden i koden för set_current(), så ska det funka sen...

Kod: Markera allt

import requests, json, time
from pprint import pprint

class connect:
    def __init__(self,
                 access_token=None,
                 ):

        if (access_token is None):
            access_token_resp = self.get_access_token()
            access_token = access_token_resp["accessToken"]
        self.headers = {"Authorization": "Bearer {}".format(access_token)}

    def get_access_token(self):
        return requests.post("https://api.easee.cloud/api/accounts/token", json={"grantType":"password","username":"+46xxxxxxxx","password":"xxxxxxxx"}).json()

    def get_state(self):
        return requests.get(
            'https://api.easee.cloud/api/chargers/EH<serial>/state',headers=self.headers).json()

    def get_sites(self):
        return requests.get(
            'https://api.easee.cloud/api/sites',headers=self.headers).json()

    def get_site_info(self):
        return requests.get(
            'https://api.easee.cloud/api/sites/<site-id>?detailed=true',headers=self.headers).json()

    def set_current(self, current):
        return requests.post("https://api.easee.cloud/api/sites/<site-id>/circuits/<circuit-id>/settings", headers=self.headers, json={"dynamicCircuitCurrentP1":current, "dynamicCircuitCurrentP2":current, "dynamicCircuitCurrentP3":current}).json()

    def pause(self):
        return requests.post("https://api.easee.cloud/api/chargers/EH<serial>/commands/pause_charging", headers=self.headers).json()

    def resume(self):
        return requests.post("https://api.easee.cloud/api/chargers/EH<serial>/commands/resume_charging", headers=self.headers).json()

my_charger = connect()
resp = my_charger.get_sites()
pprint(resp)
resp = my_charger.get_site_info()
pprint(resp)
resp = my_charger.set_current(10)
pprint(resp)
resp = my_charger.pause()
pprint(resp)
resp = my_charger.resume()
pprint(resp)

resp = my_charger.get_state()
pprint(resp)

Användarvisningsbild
dbar
Teslaägare
Inlägg: 300
Blev medlem: 12 sep 2018 13:42

Re: Easee API

Inlägg av dbar »

Olalid skrev:
Jag implementerade lite flera funktioner som verkar funka för mig iaf.

För att kunna sätta strömmen måste man först ta reda på vad man har för site-id och circuit-id.
Så anropa get_sites() för att lista alla siter du har konfigurerat och lägg sedan in den site du vill använda i koden för get_site_info() så kan du anropa den för att få reda på circuit-id.
Lägg sedan in dessa båda värden i koden för set_current(), så ska det funka sen...
Ett riktigt stort tack!
Fungerade klockrent!
Model 3 LR +FSD+AccBoost, Pearl White, svart premiumklädsel, 18" Aero-fälgar
Model Y LR +FSD, Grå med matt PPF, svart premiumklädsel, 21" custom made fälgar
Användarvisningsbild
dbar
Teslaägare
Inlägg: 300
Blev medlem: 12 sep 2018 13:42

Re: Easee API

Inlägg av dbar »

Allt funkar från datorn, men kan inte köra python script från min smarthub (homey), så gick lite bet när jag skulle konvertera till JavaScript. Ska försöka hacka ihop något, men är inte så säker på att jag lyckas. om någon här pratar flytande java och kan hjälpa på traven med ett kodexempel likt pythonscriptet hade jag hoppat jämfota.
Model 3 LR +FSD+AccBoost, Pearl White, svart premiumklädsel, 18" Aero-fälgar
Model Y LR +FSD, Grå med matt PPF, svart premiumklädsel, 21" custom made fälgar
Användarvisningsbild
M455E
Teslaägare
Inlägg: 82
Blev medlem: 30 jun 2019 22:45
Ort: Skultuna
Kontakt:

Re: Easee API

Inlägg av M455E »

dbar skrev:
Allt funkar från datorn, men kan inte köra python script från min smarthub (homey), så gick lite bet när jag skulle konvertera till JavaScript. Ska försöka hacka ihop något, men är inte så säker på att jag lyckas. om någon här pratar flytande java och kan hjälpa på traven med ett kodexempel likt pythonscriptet hade jag hoppat jämfota.
Ett hemautomation system som stödjer Python är Home Assistant. https://www.home-assistant.io/
Finns extremt stort stöd för olika smarta saker. Bl.a. Homey.
<~ Nu Model Y LR tidigare Tesla Model 3, LR, Dragkrok, Easee, Tibber ~>
https://www.instagram.com/m455e/
https://www.instagram.com/ginger_modely/
Användarvisningsbild
dbar
Teslaägare
Inlägg: 300
Blev medlem: 12 sep 2018 13:42

Re: Easee API

Inlägg av dbar »

Övervakar så väl elproduktion av solpanelerna som elförbrukning av huset och styr teslan i Homey. Home Assistant är en minst lika kompetent hub (om inte mer kompetent).
Men bli att krångla till det att skaffa en hubb till om inte det blir absolut nödvändigt.

Homey är ganska appfokuserad, och kan till exempel inte köra python script. Men det är möjligt att köra egna javascript.

Redan idag styr jag min laddning via homey efter solproduktionen. Men eftersom jag inte har fått till styrningen av hur mycket effekt som ska ges till bilen har det i praktiken gjort att jag endast laddat när överproduktionen varit över 11kW.
Med styrning av effekten kan jag ladda redan vid 3.5kW överproduktion genom att begränsa laddningen till 3*5A. För att sedan stegvis öka effekten i takt med att solen lyser starkare.

Detta skulle göra att jag även kan ”solladda” någon timme före eller efter jobbet på låg effekt. Inte bara mitt på dagen (när bilen oftast inte är hemma).
Model 3 LR +FSD+AccBoost, Pearl White, svart premiumklädsel, 18" Aero-fälgar
Model Y LR +FSD, Grå med matt PPF, svart premiumklädsel, 21" custom made fälgar
Användarvisningsbild
Ellak
Teslaägare
Inlägg: 1
Blev medlem: 18 mar 2020 13:09

Re: Easee API

Inlägg av Ellak »

Tack för all kod!

Jag har solceller som laddar ett 10kwh batteri. En Victron BMV-700 mäter SOC på batteriet.
Jag har gjort ett hack som kollar SOC var femte minut och som pause/resume laddning beroende på SOC.

Varför får jag exception när jag anropar pause/resume ?
Annars fungerar koden bra...

Kod: Markera allt

import requests, json, time, dbus

class connect:
    def __init__(self,
                 access_token=None,
                 ):

        if (access_token is None):
            access_token_resp = self.get_access_token()
            access_token = access_token_resp["accessToken"]
        self.headers = {"Authorization": "Bearer {}".format(access_token)}

    def get_access_token(self):
        return requests.post("https://api.easee.cloud/api/accounts/token", json={"grantType":"password","username":"+46xxxxx","password":"xxxx"}).json()

    def pause(self):
        try:
            return requests.post("https://api.easee.cloud/api/chargers/EHxxxxxx/commands/pause_charging", headers=self.headers).json()
        except:
            print "Oooops!"

    def resume(self):
        try:
            return requests.post("https://api.easee.cloud/api/chargers/EHxxxxxx/commands/resume_charging", headers=self.headers).json()
        except:
            print "Oooops!"

bus = dbus.SystemBus()
bmv = bus.get_object('com.victronenergy.battery.ttyUSB0','/Soc')
my_charger = connect()

while True:
    soc = bmv.GetValue()
    print(soc)
    if soc >= 90:
        my_charger.resume()
    if soc <= 88:
        my_charger.pause()
    time.sleep(300)
Denna exception får när jag anropar resume:
Traceback (most recent call last):
File "Nylogic.py", line 30, in <module>
my_charger.resume()
File "Nylogic.py", line 20, in resume
return requests.post("https://api.easee.cloud/api/chargers/EH ... e_charging", headers=s
File "/usr/lib/python2.7/site-packages/requests/models.py", line 892, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
LeoT
Inlägg: 2
Blev medlem: 24 feb 2021 17:57

Re: Easee API

Inlägg av LeoT »

Hey everybody,
Thanks for creating this great thread! I already thought I wouldn't get the Easee to work. Now it's at least working partially. :lol:

All the functions work except for the one setting the current (my_charger.set_current...) It always responses with the following error:

Kod: Markera allt

{u'detail': u'[Empty in production]',
 u'errorCode': 0,
 u'errorCodeName': u'Uknown',
 u'extensions': {},
 u'instance': None,
 u'status': 500,
 u'title': u'Something went wrong. Try again',
 u'type': None}

Process finished with exit code 0
I think I tried everything but can't get it to work...
Maybe someone of you has an idea? That would be awesome! Maybe they changed something in their API?!


I "developed" the code a bit further so it works with variables. Like that its easier to fill in the needed data:
You obviously still have to collect certain data at first, as mentioned in the original post.

Kod: Markera allt

import requests, json, time
from pprint import pprint

easee_username = '+49xxxxx'
easee_password = 'xxxxxx'
easee_serialnumber = 'EHxxxxxx'
easee_site_id = 'xxxxxxxxx'
circuit_id = 'xxxxx'

class connect:
    def __init__(self,
                 access_token=None,
                 ):

        if (access_token is None):
            access_token_resp = self.get_access_token()
            access_token = access_token_resp["accessToken"]
        self.headers = {"Authorization": "Bearer {}".format(access_token)}

    def get_access_token(self):
        return requests.post("https://api.easee.cloud/api/accounts/token", json={"grantType":"password","username":easee_username,"password":easee_password}).json()

    def get_state(self):
        return requests.get(
            'https://api.easee.cloud/api/chargers/%s/state' % easee_serialnumber, headers=self.headers).json()

    def get_sites(self):
        return requests.get(
            'https://api.easee.cloud/api/sites',headers=self.headers).json()

    def get_site_info(self):
         return requests.get(
            'https://api.easee.cloud/api/sites/%s?detailed=true' % easee_site_id, headers=self.headers).json()

    def set_current(self, current):
        return requests.post("https://api.easee.cloud/api/sites/%s/circuits/%s/settings" % (easee_site_id, circuit_id), headers=self.headers, json={
            "dynamicCircuitCurrentP1":current,
            "dynamicCircuitCurrentP2":current,
            "dynamicCircuitCurrentP3":current
        }).json()

    def start (self):
        return requests.post("https://api.easee.cloud/api/chargers/%s/commands/resume_charging" % easee_serialnumber, headers=self.headers).json()

    def stop (self):
        return requests.post("https://api.easee.cloud/api/chargers/%s/commands/pause_charging" % easee_serialnumber, headers=self.headers).json()

# Commands to call an action:
my_charger = connect()
#resp = my_charger.get_sites()
#pprint(resp)
#resp = my_charger.get_site_info()
#pprint(resp)
#resp = my_charger.set_current(13) #max 20 request per minute!
#pprint(resp)
#resp = my_charger.start()
#pprint(resp)
#resp = my_charger.stop()
#pprint(resp)
resp = my_charger.get_state()
pprint(resp)
LeoT
Inlägg: 2
Blev medlem: 24 feb 2021 17:57

Re: Easee API

Inlägg av LeoT »

Alright. I found the mistake myself.
Easee probably made some changes to their API or whatever...
This code is working for me just fine:

Kod: Markera allt

import requests, json, time
from pprint import pprint

easee_username = '+49xxxxxxxxxx'
easee_password = 'xxxxxxxx'
easee_serialnumber = 'EHxxxxxx'
easee_site_id = 'xxxxxx'
circuit_id = 'xxxxx'

class connect:
    def __init__(self,
                 access_token=None,
                 ):

        if (access_token is None):
            access_token_resp = self.get_access_token()
            access_token = access_token_resp["accessToken"]
        self.headers = {"Authorization": "Bearer {}".format(access_token)}

    def get_access_token(self):
        return requests.post("https://api.easee.cloud/api/accounts/token", json={"grantType":"password","username":easee_username,"password":easee_password}).json()

    def get_state(self):
        return requests.get(
            'https://api.easee.cloud/api/chargers/%s/state' % easee_serialnumber, headers=self.headers).json()

    def get_sites(self):
        return requests.get(
            'https://api.easee.cloud/api/sites',headers=self.headers).json()

    def get_site_info(self):
         return requests.get(
            'https://api.easee.cloud/api/sites/%s?detailed=true' % easee_site_id, headers=self.headers).json()

    def set_charge_current(self, current):
        return requests.post("https://api.easee.cloud/api/chargers/%s/settings" % easee_serialnumber, headers=self.headers, json={
            "dynamicChargerCurrent":current,
        }).json()

    def set_phasemode(self, phase):
        return requests.post("https://api.easee.cloud/api/chargers/%s/settings" % easee_serialnumber, headers=self.headers, json={
            "phaseMode":phase,
        }).json()

    def start (self):
        return requests.post("https://api.easee.cloud/api/chargers/%s/commands/resume_charging" % easee_serialnumber, headers=self.headers).json()

    def stop (self):
        return requests.post("https://api.easee.cloud/api/chargers/%s/commands/pause_charging" % easee_serialnumber, headers=self.headers).json()

# Commands to call an action:
my_charger = connect() #Connect to your Easee
#resp = my_charger.get_sites() #Getting the 'circuit_id' value at first run.
#pprint(resp)
#resp = my_charger.get_site_info() #Getting the 'easee_site_id' value at first run.
#pprint(resp)
#resp = my_charger.set_phasemode(3) #can only be set to 1 or 3.
#pprint(resp)
#resp = my_charger.set_charge_current(7) #can be set from 6A-16A according to your verhicle. [Never 5A!]
#pprint(resp)
#resp = my_charger.start() #Start the charging
#pprint(resp)
#resp = my_charger.stop() #Stop the charging
#pprint(resp)
resp = my_charger.get_state() #Retrieve information from your charger
pprint(resp)
You can decide whether to charge with one or three phases by changing this value to one or three:

Kod: Markera allt

resp = my_charger.set_phasemode(3)
And the charging current can be set by this command [lowest current supported by Easee Home is 6A!):

Kod: Markera allt

resp = my_charger.set_charge_current(7)
The other commands like starting/stopping to charge are marked in the code but should be self explanatory...

In addition to that the most important thing is that you go to your mobile up and chose under "Power options", "Phase mode" = "Locked to 3 phase". Otherwise you won't be able to change between one phase and two phase charging!

I hope this helped someone as much as me :)
Have a great one!
Användarvisningsbild
martinot
Teslaägare
Inlägg: 11474
Blev medlem: 13 maj 2019 19:22

Re: Easee API

Inlägg av martinot »

Thanks for the insight and update Leo! :)
M3LR
”Vi har i Sverige billig el, vi har ren el, vi har säker el, vi har kort sagt den energiförsörjning som alla andra länder skulle vilja ha. Och vårt huvudsakliga bekymmer är hur vi på kortast möjliga tid ska komma ur denna situation.” - Percy Barnevik
Skriv svar