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

Es wäre etwas feines den Renault auch über seine App in Fibaro zu bekommen.
Beim Home Assistant gibt es ein PlugIn für Renault :stuck_out_tongue_winking_eye:

Moin zusammen,
nachdem ich nun endlich seit zwei Tagen meinen Renault Megane e-tech habe, will ich mal ein kurzes Feedback geben.

@jeep
Die QA funktioniert soweit. Der Ladevorgang lässt sich starten/beenden. Allerdings mag der e-tech scheinbar nicht, wenn man den Ladevorgang pausiert und dann fortsetzt. Auch nach einem beenden des Ladevorgangs muss man einmal das Kabel abziehen und neu einstecken. Mag eine Einstellungssache im Fahrzeug selbst sein. Muss ich noch herausfinden.

Zur Thematik „PV-laden“ habe ich mich etwas mit der API von EASEE beschäftigt. In den Charger Settings gibt es einen Wert „maxChargerCurrent“. Diesen Wert habe ich mal über diverse Tasten mit verschiedenen Ampere-Leistungen belegt.


Das funktioniert insoweit, das ich während des Ladens die Ausgangsleistung entsprechend einstellen/ändern kann, ohne das der Ladevorgang abbricht.
Als nächsten Schritt will ich mal versuchen das automatisiert in Abhängigkeit des vorhandenen PV-Überschusses zu machen. Dafür müsste aber die Wallbox ein umschalten von 3-Phasig auf 1-Phasig während des Ladevorgangs mitmachen. Ob das funktioniert muss ich noch testen.
Ich werde wieder berichten. :grinning:

@macschimmi
Gute Idee. Derzeit kämpfe ich noch damit, das mir z.B. der Ladestand der Batterie in der MyRenault-App angezeigt wird. Irgendwo ist da noch der Wurm drin :upside_down_face:
Gibt es denn für/von Renault eine API die man direkt ansprechen kann? Ich hab da leider nichts gefunden.

Hallo,
ja das wollen einige Autos, bei mir (KIA EV6) wüsste ich nicht, dass das im Auto zu verändern ginge.
Allerdings kann meine Wallbox (go-e) das simulieren, evtl. geht das ja auch mit deiner?

Viel Erfolg.

Hallo @heikoh
Simulieren kann meine WallBox das (denke ich zumindest) nicht.
Aber ich bin für mich schon wieder ein Schritt weiter. Die Änderung der Ausgangsleistung hatte ich ja bereits zurechtgebastelt. Was mir noch fehlte war die Umschaltung von 3-Phasig auf 1-Phasig laden ohne eben den Stecker vom Fahrzeug abziehen zu müssen.
Das klappt in der Reichenfolge „Laden pausieren => PhasenMode ändern => Laden fortsetzen“. Diese Reihenfolge macht sowohl die WallBox als auch der Megane mit. :grinning:

Jetzt gehts daran das alles in die QA von @jeep zu schreiben.