Easee API
Moderator: Redaktion
Easee API
Ä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.
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
Re: Easee API
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.
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
Model Y LR +FSD, Grå med matt PPF, svart premiumklädsel, 21" custom made fälgar
Re: Easee API
Jag har lyckats fiska ut lite info från ease.cloud. Kanske räcker för dina ändamål?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.
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
}
Re: Easee API
Hur lyckades du få ut det här?
eVazer skrev:Jag har lyckats fiska ut lite info från ease.cloud. Kanske räcker för dina ändamål?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.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 }
Re: Easee API
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.
Kan posta någon kodsnutt om det är intressant.
Re: Easee API
Ahh, jag hade inte fått någon notifiering om svar på det här.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.
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.
Re: Easee API
Det är i allra högsta grad lite grund.Men lite kod som grund vore kanon.
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)
Inloggningstoken gäller 24h så den behöver inte hämtas för varje anrop.
Re: Easee API
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.eVazer skrev:Det är i allra högsta grad lite grund.Men lite kod som grund vore kanon.
Blev mest en utmaning att lyckas - koden kan snyggas till avsevärt.
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?
Re: Easee API
Absolut! Nu kan jag förvisso styra laddningen via bilens API, men av ren nyfikenhet är jag intresserad!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?
Re: Easee API
Dela gärna med dig när du känner dig redomoonshine skrev: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.eVazer skrev:Det är i allra högsta grad lite grund.Men lite kod som grund vore kanon.
Blev mest en utmaning att lyckas - koden kan snyggas till avsevärt.
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?
Re: Easee API
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?
Re: Easee API
Ä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
Model Y LR +FSD, Grå med matt PPF, svart premiumklädsel, 21" custom made fälgar
Re: Easee API
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. får bara följande tillbakaeVazer skrev:Det är i allra högsta grad lite grund.Men lite kod som grund vore kanon.
Blev mest en utmaning att lyckas - koden kan snyggas till avsevärt.
Python3: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 ..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)
Inloggningstoken gäller 24h så den behöver inte hämtas för varje anrop.
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)
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
Model Y LR +FSD, Grå med matt PPF, svart premiumklädsel, 21" custom made fälgar
Re: Easee API
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...
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)
Re: Easee API
Ett riktigt stort tack!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...
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
Model Y LR +FSD, Grå med matt PPF, svart premiumklädsel, 21" custom made fälgar
Re: Easee API
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
Model Y LR +FSD, Grå med matt PPF, svart premiumklädsel, 21" custom made fälgar
Re: Easee API
Ett hemautomation system som stödjer Python är Home Assistant. https://www.home-assistant.io/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.
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/
https://www.instagram.com/m455e/
https://www.instagram.com/ginger_modely/
Re: Easee API
Ö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).
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
Model Y LR +FSD, Grå med matt PPF, svart premiumklädsel, 21" custom made fälgar
Re: Easee API
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...
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")
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)
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")
Re: Easee API
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.
All the functions work except for the one setting the current (my_charger.set_current...) It always responses with the following error:
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.
Thanks for creating this great thread! I already thought I wouldn't get the Easee to work. Now it's at least working partially.
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
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)
Re: Easee API
Alright. I found the mistake myself.
Easee probably made some changes to their API or whatever...
This code is working for me just fine:
You can decide whether to charge with one or three phases by changing this value to one or three:
And the charging current can be set by this command [lowest current supported by Easee Home is 6A!):
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!
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)
Kod: Markera allt
resp = my_charger.set_phasemode(3)
Kod: Markera allt
resp = my_charger.set_charge_current(7)
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!
Re: Easee API
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
”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