This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Easee EV Charger
#1
Hello, any ideas on how to integrate this? 

https://api.easee.cloud/index.html



I've found a Python script on github, is it possible to convert this in any way?

https://github.com/fondberg/pyeasee



Regards..
Reply
#2
This is a similar API: https://forum.logicmachine.net/showthread.php?tid=1786
There's a difference in login procedure (GetToken function). You need to set the 'content-type' header to 'application/json' and send username/password as json string:
Code:
1234
request_body= json.encode({   userName = 'aaa',   password = 'bbb', })
Reply
#3
Thanks, it works.

What would be the best way if i wanted the connection to the API to stay active, and then run seperate scripts for various commands?
It's not best practise to request new tokens for every command.
Reply
#4
Create a scheduled script that will call GetToken() periodically and save the token into storage. All other scripts will use this token to make requests.
Check the expiresIn field that /api/accounts/token returns. It will tell for how many seconds the token is valid. Adjust scheduled script execution period accordingly.
Reply
#5
(15.04.2021, 19:56)tomnord Wrote: Thanks, it works.

What would be the best way if i wanted the connection to the API to stay active, and then run seperate scripts for various commands?
It's not best practise to request new tokens for every command.

Did you get your script to work?

Are you willing to share your script and the commands for the Easee charger?
Reply
#6
that would be very nice and would save me a lot of time :-)
Reply
#7
Works like a charm. I'll post when I have access to my LM again.
Reply
#8
(28.01.2022, 16:28)tomnord Wrote: Works like a charm. I'll post when I have access to my LM again.

Hi soo exaited about this!

Will you post it? Or sent it on PM?

Thanks
Reply
#9
Code:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
-- Load modules require('json') require('ssl.https') require('ltn12') -- Set credentials for Easee API ChargerID = storage.get('EaseeAPI_ChargerID') API_Token = storage.get('EaseeAPI_Token'--reads API Token from storage, The token is fetched from scheduled script: "Easee_Authenticate" --log(ChargerID) function RequestFromEasee(request)   request_url = 'https://api.easee.cloud/api/' .. request   local response_body = {}   local request_body = ""   local body, code, hdrs, stat = ssl.https.request{     url = request_url;     method = "GET";     headers =     {       ["Content-Type"] = "application/json";       ["Authorization"] = "Bearer " .. API_Token;     };     source = ltn12.source.string(request_body);     sink = ltn12.sink.table(response_body);   }   log(code)   if code == 200 then     ret = table.concat(response_body)     ret = json.pdecode(ret)     return ret   else     --API_Token = GetToken() -- request a new token   end end -- Get products, run once to get charger ID if ChargerID == nil then chargers = RequestFromEasee('chargers') Easee_ChargerID = chargers[1]["id"] --log(Easee_ChargerID, 'ID') -- Check here for your charger ID storage.set('EaseeAPI_ChargerID', Easee_ChargerID) end ChargerState = RequestFromEasee('chargers/' .. ChargerID  .. '/state') log(ChargerState) currentChargePower = ChargerState["totalPower"] currentCableRating = ChargerState["cableRating"] currentMaxPower = ChargerState["outputCurrent"] chargerOnline = ChargerState["isOnline"] currentChargeEnergy = ChargerState["sessionEnergy"] log(currentChargePower, currentCableRating, currentMaxPower, chargerOnline, currentChargeEnergy) function WriteToEasee(request, request_body)   request_url = 'https://api.easee.cloud/api/' .. request   local response_body = {}   local content_length   if type(request_body) == "string" then     content_length = #request_body   else     request_body = ""   end   local body, code, hdrs, stat = ssl.https.request{     url = request_url;     method = "POST";     headers =     {       ["Content-Type"] = "application/json";       ["Authorization"] = "Bearer " .. API_Token;       ["Content-Length"] = content_length;     };     source = ltn12.source.string(request_body);     sink = ltn12.sink.table(response_body);   }   log(code)   if code == 200 then     ret = table.concat(response_body)     ret = json.pdecode(ret)     return ret   else     API_Token = GetToken() -- request a new token   end end

Code:
1234567891011121314151617181920212223242526272829303132333435363738394041424344
require('json') require('ssl.https') require('ltn12') -- Set credentials for Easee API email ='****************' password ='*************' function GetToken()   request_token_url = 'https://api.easee.cloud/api/accounts/login'   local response_body = {}   local request_body = json.encode({       userName = email,       password = password, })   local body, code, hdrs, stat = ssl.https.request{     url = request_token_url;     method = "POST";     headers =     {       ["Content-Type"] = "application/json";       ["Content-Length"] = #request_body;     };     source = ltn12.source.string(request_body);     sink = ltn12.sink.table(response_body);   }   log(code)   if code == 200 then     ret = table.concat(response_body)     ret = json.pdecode(ret)     log(ret)     return ret.accessToken   end end -- Request token if not API_Token then     API_Token = GetToken()       log(API_Token, 'api_token') end --Store API Token to memory storage.set('EaseeAPI_Token', API_Token)
Reply


Forum Jump: