oder den Überschuss für andere Zwecke nutzen, wie z.B. Warmwasseraufbereitung. Da wir im Frühjahr eine neue Heizung mit Heizstab bekommen, werde ich dann den Stromüberschuss für das Erwärmen des Brauchwassers nutzen.
Aber hier geht´s jetzt primär um die Ansteuerung der Easee Wallbox.
Das Programm ist eine kleine QuickApp in der man das Login zur API der Easee Cloud herstellt und dann ein gültiges Token zur Verarbeitung der Kommandos erzeugen kann. Ich hab mich einfach auf das nötigste beschränkt. Der Code ist fast ohne Änderungen auf dem HC2 als Szene oder VD portierbar.
Hier der LUA-Code der QA:
-- {jeep} 09.2022
local version = 0.08
local INTERVAL = 60000 * 60 * 24 --24 std
local QA = nil
local Token = ""
local request = ""
local function debug(...) if DEBUG then quickApp:debug(string.format(...)) end end
local function getToken()
local requestBody = {
["username"] = user,
["password"] = pwd
}
local extraheaders = {
['Accept'] = 'application/json',
['Content-Type'] = 'application/*+json'
}
local selfhttp = net.HTTPClient({timeout=2000})
selfhttp:request(url, {
options= {
headers = extraheaders,
data = json.encode(requestBody),
method = "POST",
data = json.encode(requestBody),
},
success = function(response)
data = response.data
easee = (json.decode(data))
Token = easee.accessToken
end,
error = function(message)
if err then err(msg) end
print("error:", msg)
end
})
end --function getToken
----======================================================----
local function evalRequest(method)
--print(method)
if method == "POST" then method = "POST" else method = "GET" end
local extraheaders = {
['Authorization'] = "Bearer " .. Token,
['Content-Type'] = 'application/*+json'
}
local selfhttp = net.HTTPClient({timeout=2000})
selfhttp:request(request, {
options= {
headers = extraheaders,
method = method
},
success = function(response)
if response.status == 200 then
print("request send")
end
data = json.encode(response.data)
print(data)
end,
error = function(message)
print("error:", message)
end
})
end --function
---==========================================================
function QuickApp:onInit()
self:debug(self.name,", version:",version,", deviceId:",self.id)
QA = self
url = self:getVariable("url")
pwd = self:getVariable("pwd")
user = self:getVariable("user")
WBid = self:getVariable("WBid")
getToken()
setInterval(getToken,INTERVAL)
end
---============================================================
function QuickApp:button1_onReleased(event)
request = string.format("https://api.easee.cloud/api/chargers/"..WBid.."/commands/start_charging" )
print("Request: ".. request)
method = "POST"
evalRequest(method)
end
function QuickApp:button2_onReleased(event)
request = string.format("https://api.easee.cloud/api/chargers/"..WBid.."/commands/stop_charging" )
method = "POST"
evalRequest(method)
end
function QuickApp:button3_onReleased(event) --Charger details
request = string.format("https://api.easee.cloud/api/chargers/"..WBid.."/details")
method = "GET"
evalRequest(method)
end
function QuickApp:button4_onReleased(event)
request = string.format("https://api.easee.cloud/api/chargers/"..WBid.."/commands/pause_charging" )
method = "POST"
evalRequest(method)
end
function QuickApp:button5_onReleased(event)
request = string.format("https://api.easee.cloud/api/chargers/"..WBid.."/commands/resume_charging" )
method = "POST"
evalRequest(method)
end
--[[
function QuickApp:button999_onReleased(event)
request = string.format("https://api.easee.cloud/api/chargers/"..WBid.."/commands/state
method = "GET"
evalRequest(method)
end
--]]
Wie funktioniert das jetzt? Der Überschuss aus meiner SENEC-V3 PV wir in einer anderen QA berechnet und die wird sobald Überschuss vorhanden ist, die Wallbox Ein- oder Ausschalten. Diese QA habe ich noch nicht ganz fertig. Sie ist aber schon funktionstüchtig da ich die QA schon seit längeren nutze, um Stromproduktion und -Verbrauch ans HC3 zu melden und ich dass dann im Energiebereich des HC3 grafisch ansehen kann. In dieser QA wird ein Ereignis generiert das den entsprechenden Button in der Easee QA drückt. Natürlich kann man auch direkt in der QA auf einen Button klicken.
Wenn jemand den Code als *.fqa haben will einfach melden.
Soviel fürs Erste.