EASEE Wallbox mit Überschuss aus der PV steuern

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.

image

Wenn jemand den Code als *.fqa haben will einfach melden.
Soviel fürs Erste.

Hallo @jeep
Vielen Dank fürs teilen der QA.

Ich habe eine Frage. Hast Du vor die WallBox dynamisch je nach PV-Überschuss zu regeln? Wenn ich den LUA-Code richtig verstanden habe wird im Moment der Ladevorgang gestartet und die WallBox lädt dann mit voller Leistung. Ist das richtig?
Gruß
KaWi

Hallo @KaWi,
genau so oder so ähnlich. Wenn ich ein E-Auto hätte würde der Ladevorgang beginnen wenn ab 2KW Überschuss da ist und dann natürlich mit voller Leistung. Ziehen Wolken vorbei und der Überschuss geht unter 2 KW, wird immer 5 Minuten weitergeladen bis die nächste Berechnung kommt.
Da meine PV bei max. Sonneneinstrahlung nicht mehr als 6 kWp liefert, versuche ich jeden Überschuss selbst zu nutzen und nichts für 7 Cent dem Energieversorger lassen. Ich habe dieses Jahr bis jetzt schon über 4000 kWh ins Netz gespeichert. Das tut weh.

Die 2 KW sind in der anderen QA festgelegt und auch nur von 8 - 18 Uhr. Wird im Winter kaum was bringen. Ich habe auch nur einen kleinen Heizstab mit 2 KW bestellt (Kessel wird nur 200L), so das ich vermutlich nur minimal Strom vom Netz beziehen werde. Die neue Heizung kommt im Frühjahr, so dass ich jetzt nicht verlässliches sagen kann.

Klar kann man vermutlich noch mehr aus der API rausholen, aber ich wollte mal sehen ob es funktioniert und das tut es.
Wie sieht´s bei Dir mit dem E-Auto aus? Würde mich freuen wenn Du schon mal testen könntest.

Grüße, jeep

Mein E-Auto wird lt. Renault-App in der Zeit vom 07.10-14.10.22 geliefert. Es soll schon produziert sein und sich auf dem Weg zum Verteilzentrum befinden.
Ich hatte letztens einen Dienstwagen bei mir zuhause und wollte dann mal kurz laden um zu sehen wie sich die Schaltzustände der WallBox ändern. Aber: Der Teufel ist ein Eichhörnchen. Genau in dem Moment bricht die Cloud von Easee zusammen. Also, wieder nix mit testen.

Aber ich bleibe am Ball.

Ich habe insgesamt 9,6 KW auf dem Dach liegen. Die Anlage läuft seit 29.06. und hat seitdem 3.350 kWh produziert. Wieviel davon ins Netz gegangen ist kann ich im Moment nicht sagen, müsste ich heute Abend in meiner InfluxDB nachgucken.
Aber alleine am heutigen Tag sind wieder mehr als 2/3 der PV-Leistung ins Netz geflossen.

Ich versuche mal das Auto meines Nachbarn zu bekommen. Dann werde ich testen und mich melden. Wird aber nichts vor Montag, da ich übers Wochenende nicht zuhause bin.

Gruß
KaWi