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.

@KaWi

Deine Frage „Optimierung Überschuss PV-Laden“ und Dein Script-Beispiel sind gut und gehen in die richtige Richtung. Ich ergänze hier an der Stelle meine Vorgehensweise.

Ich besitze eine PV-Anlage (Eine Hauptanlage + drei Unteranlagen), eine Wallbox im Carport (Mennekes Amtron), ein Elektroauto (VW ID.3), eine Fibaro Homecenter 2 (ca. 80 Stück ZWave Sensoren und Aktoren), eine Poolwärmepumpe (Gesamtleistungsaufnahme 1,6kW), eine Wärmepumpe für das Haus (Leistungsaufnahme 2,1kW + 6kW Heizstab) und noch weitere Verbraucher. Der ganze Sumpf soll nun vernünftig also gesteuert werden.

Betrachten wir mal Überschuss PV-Laden und nehmen ein Beispiel: Freitags hängt man den Wagen an die Wallbox, und man möchte Montags (Angenommen man fährt wenig am Wochenende) wieder 80% SoC haben. Wie geht das nun? Man benötigt den SoC vom Fahrzeug, welchen man aber nicht bei AC-Laden über die Wallbox erhält. Und korrekt, dazu muss man die Hersteller-API anzapfen.

Ich hatte auch erst überlegt dieses über die HC2 zu realisieren, bin aber Anfang letzten Jahres über EVCC gestolpert. EVCC tut genau dieses, ein lastabhängiges Steuern des Ladestroms in Abhängigkeit der PV-Erzeugung, SoC und Ziel. Meine Mennekes-Wallbox mit ihrer EBEE-Steuerung wurde da noch nicht unterstützt, diese habe ich dann mit dem Entwicklerteam von EVCC hinzugefügt.

Also kümmert sich EVCC auf einem Raspberry PI 3 um das PV-Überschussladen. EVCC besitzt eine REST-Api, welche ich dann auf der HC2 eingebunden habe. Die HC2 kümmert sich um das Steuern von Pool-Wärmepumpe,die Haus-Wärmepumpe gebe ich über einen Eingang ihrer Steuerung frei. Meine Siemens-Novelan Wärmepumpe ist bereits 16 Jahre alt und daher noch nicht vernetzbar. Funktioniert aber hervorragend.

Die Leistungswerte der größten Verbraucher hatte ich im Vorfeld in eine Liste geschrieben und mir dann überlegt, wann ich welchen Verbraucher ansteuern möchte. So gebe ich also erst die Warmwasseraufbereitung morgens wieder frei, wenn ein PV-Überschuss von 3kW vorhanden ist. Diesen Wert passe ich aktuell noch nach Jahreszeit manuell an, da ich z.B. im Winter auf den Zukauf von Graustrom angewiesen bin. Da überlege ich gerade wie ich diese aktuell manuelle Tabelle variabel automatisiert bekomme.

Im Grundsatz bei mir ganz einfach:
EVCC → Lademanagement Auto
HC2 → Lastmanagement Haus

Hier noch zwei Links zu dem Projekt EVCC:

Selbst ist der Gröönlandhof: Wallbox-Ladesteuerung selbst gebaut – pv magazine Deutschland (pv-magazine.de)

evcc - Sonne tanken :sunny::oncoming_automobile: - PV-Überschussladen für steuerbare Wallboxen

Die API-Referenz wirst Du finden, als neuer User darf ich lustigerweise nur zwei Links hinzufügen :sweat_smile:

Sonnige Grüße
Daniel

@KaWi

Deine Komponenten werden von EVCC unterstützt, sowohl Deine Wallbox als auch die Renault-Api ist Bestandteil von EVCC.

Ich bevorzuge es (Meine Philosophie) weitgehend herstellerunabhängig zu bleiben. Daher werkelt z.B. auch bei mir ein Smartmeter von ELGRIS (kompatibel zu Kostal, SMA, SolarEdge, usw). Der ist einerseits sehr günstig, andererseits einfach einzubinden über LUA in die HC2. Hier hat ja jemand die Modbus TCP Scripte hinzugefügt für PV-Überschuss hinzugefügt. Diese hatte ich gesehen, als ich meine bereits fertig hatte. Ich habe mir dieses Script aus Interesse vorgenommen und zwei bessere Teile in meines übernommen. :sweat_smile:

Smart Meter Produkte - Intelligentes Energiemanagement für PV-Anlagen (elgris.de)

API | evcc - Sonne tanken :sunny::oncoming_automobile:

Mit der Kombination HC2 / HC3 und EVCC kann man ganz viele feine Sachen sehr einfach zaubern.

Schönes Wochenende
Daniel

Hallo @Grogi und willkommen im Forum

das ist ja eine ganze Menge, die Du da umgesetzt hast. Respekt :ok_hand:

Ich mache das PV-Überschussladen bei mir relativ simpel.
Meine PV-Anlage bringt max. 8kW. Die Momentane Leistung frage ich alle 20 Sekunden über eine selbstgeschriebene QuickApp nach dieser Anleitung (SMA Photovoltaik-Anlage mit Fibaro auslesen | SmartHome Blog, abgeleitet und umgebastelt fürs HC3) von @kingfisher ab.
Dann habe ich einen Aeotec HEM Gen5, der mir entweder den Netzbezug oder aber die Netzeinspeisung ausgibt.
Der Rest ist Mathematik. Wenn Überschuss vorhanden ist, dann ist z.B. PV - Überschuss = Hausverbrauch. Oder wenn Netzbezug vorhanden ist bei gleichzeitiger PV-Leistung halt PV+Netzbezug = Hausverbrauch.

Wenn ich jetzt meine WallBox mit PV-Überschuss füttern will, habe ich soweit schon alle Werte in meinem HC3. Warum sollte ich diese Werte also erst an EVCC übermitteln, um dann das Rechenergebnis zurückzubekommen? Und in meinem Fall würde ich für die Übermittlung sogar noch etwas zahlen müssen (2€/Monat oder einmalig 100€), da meine WallBox lediglich über einen Sponsor-Token unterstützt wird. Das Projekt von EVCC finde ich grundsätzlich Klasse, habe aber für mich entschieden dem nicht weiter nachzugehen.

Dann habe ich eine weitere QuickApp geschrieben, mit der ich je nach vorhandenem PV-Überschuss die WallBox in der Ladeleistung einstellen kann. Natürlich ist da auch ein umschalten zwischen 1-Phasig und 3-Phasig dabei.
Ich habe die QuickApp nahezu fertig (mit richtig guter Unterstützung von @jeep), so das ich diese bald hier veröffentlichen kann. Für mich wichtige Werte (derzeitige Ladeleistung, Verbrauch WallBox usw.) schreibe ich in Childs, um diese dann mit einer weiteren Szene abzufragen und in festgelegten Intervallen in meine InfluxDB zu schreiben. Die Auswertung in Grafana rundet das Ganze dann ab.

Konnte einige Features mangels Sonne noch nicht in Gänze testen. Deshalb warte ich mit einer Veröffentlichung noch ein wenig.

Der SoC meines Fahrzeugs hat mich bisher nicht wirklich interessiert. Denn wenn die Batterie leer ist und keine Sonne vorhanden ist, dann ist es relativ egal was ich für eine Steuerung habe, dann brauche ich Energie in der Batterie und zwar jetzt. Wenn ich jetzt nicht den Akku komplett mit Graustrom laden möchte, unterbreche ich entweder nach 1-2 Stunden den Ladevorgang oder aber ich baue mir in meiner QuickApp noch eine Zeitschleife ein. Mal gucken. Idee kam gerade eben beim Schreiben dieser Zeilen :wink:

Gruß
KaWi

Respekt an Euch alle!!!

Ich hab’s mir einfach gemacht, hat in Summe ~75€ und keine Stunde „Arbeit“ gekostet.
Zusätzlich musste ich noch das alte Androidtablet hervorkramen, laden, die App installieren und konfigurieren. (ein altes Handy, ein virtualisiertes Android, oder ein Android auf Raspberry Pi würde ebenfalls funktionieren)
Das Video hier ist zwar etwas langatmig, aber vollständig. :wink:
Ich bin vollends zufrieden und m. M. nach muss mein Smarthome-Gateway das Überschussladen nicht zwingend steuern, wenn es da eine Möglichkeit gibt, die 1A funktioniert und die ständig weiter entwickelt wird (letztes Update 04.01.23).

Sonnige Grüße, Heiko…