Code:
-- 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:
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)