NEWS
Easee Wallbox mit iobroker
-
@bishop9191 @Newan Das war bei mir heute den ganzen Vormittag auch so, mittlerweile kommt wohl der ein oder andere Wert zur Easee durch und sie regelt den Ladestrom. Weiss nicht ob das am Adapter oder wieder an der Cloud liegt, wobei auf der EASEE page offiziell keine Ausfälle gelistet sind.
Ich überlege mir langsam ob ich nicht einfach noch eine andere Wallbox kaufe, wenn dann aber mit lokal API, ohne Cloud.
FYI das Log sieht dann so aus. Wohlgemerkt ich mache einfach Nichts, die Überschussladung schreibt alle 5 min. den dynamic current:
easee.0 2023-04-14 13:30:18.726 info undefined is not a valid state value for id "easee.0.xxxxxx.status.latestFirmware" easee.0 2023-04-14 13:30:01.259 info Config update successful easee.0 2023-04-14 13:29:48.544 info undefined is not a valid state value for id "easee.0.xxxxxx.status.latestFirmware" easee.0 2023-04-14 13:29:17.766 warn No Chargers found! easee.0 2023-04-14 13:29:17.766 error Error: Request failed with status code 504 easee.0 2023-04-14 13:28:37.151 warn No Chargers found! easee.0 2023-04-14 13:28:37.150 error Error: Request failed with status code 504 easee.0 2023-04-14 13:27:56.219 warn No Chargers found! easee.0 2023-04-14 13:27:56.218 error Error: Request failed with status code 504 easee.0 2023-04-14 13:27:15.568 info undefined is not a valid state value for id "easee.0.xxxxxx.status.latestFirmware" easee.0 2023-04-14 13:26:45.309 info undefined is not a valid state value for id "easee.0.xxxxxx.status.latestFirmware" easee.0 2023-04-14 13:26:14.519 warn No Chargers found! easee.0 2023-04-14 13:26:14.515 error Error: Request failed with status code 504 easee.0 2023-04-14 13:25:33.846 info undefined is not a valid state value for id "easee.0.xxxxxx.status.latestFirmware" easee.0 2023-04-14 13:25:03.713 info undefined is not a valid state value for id "easee.0.xxxxxx.status.latestFirmware" easee.0 2023-04-14 13:25:00.600 info Config update successful easee.0 2023-04-14 13:24:33.296 info undefined is not a valid state value for id "easee.0.xxxxxx.status.latestFirmware" easee.0 2023-04-14 13:24:02.946 info undefined is not a valid state value for id "easee.0.xxxxxx.status.latestFirmware" easee.0 2023-04-14 13:23:32.124 warn No Chargers found! easee.0 2023-04-14 13:23:32.119 error Error: Request failed with status code 504 easee.0 2023-04-14 13:22:51.194 warn No Chargers found! easee.0 2023-04-14 13:22:51.189 error Error: Request failed with status code 504
-
Ich habe nicht gesehen wann, aber auf jeden Fall hat meine Box vor ein paar Tagen ein FW Update auf 310 bekommen. Vielleicht hat es ja damit zu tun.
Aber ganz allgemein, bin ich wirklich der einzige bei dem die Box macht was sie will?
-
@alex-warkentin
Meine ist noch auf 309 -
@bishop9191 habe auch noch 309
-
fyi meine ist auch 3.09
-
Ich bin mir nicht ganz sicher, aber ich habe keine Fehler mehr im Log.
Ich habe die Wallbox einmal neu gestartet und den Adapter derweil gestoppt. Nach dem Neustart den Adapter wieder gestartet.Vielleicht verträgt der Adapter das Firmwareupdate nicht einfach so. Ich war nämlich bis vor kurzem noch nicht auf der 309...
Ich beobachte mal weiter.
-
@bishop9191 504 Gateway Timeout server - sieht für mich nach API aus.
Hast du die Version vom git? Würde mal ne neue stable Version machen -
@newan
Habe die 1.0.7 -
Hallo,
blöde Frage, wie bekomme ich die Meldung weg
undefined is not a valid state value for id "easee.0.xxxxxxxx.status.latestFirmware"
Firmware3.09
Latest easee AdapterZeile in enum.js gelöscht, laut github.
Alles neu gestartet
Objekt gelöscht.Danke für die Hilfe.
Gruß
-
@knima Ich denke das kann nur newman in seinem Adapter korrigieren.
-
@knima neuste commit auf git ist das gefixt.
Ist aber noch net released -
@seb2010 said in Easee Wallbox mit iobroker:
ok, also dann fasse ich mal kurz zusammen:
- mit phaseMode = 2 (Auto) kann ich über dynamicCircuitCurrentPX die Ladeleistung steuern
- dynamicCircuitCurrentP1 > 0 und dynamicCircuitCurrentP2 & 3 = 0 resultiert dann in 1-phasigem Laden
- dynamicCircuitCurrentP1 & 2 & 3 > 0 in 3-phasigem Laden
- für das Umschalten ist kein pause/resume/start notwendig. Für den Start/Stop eines Ladevorgangs natürlich schon.
- in der App auf "nur per Key" einstellen, damit man das Laden wirklich selbst steuert, da sonst bei Einstecken einfach losgeladen werden würde.
Bedeutet aber auch, dass man dann immer aktiv werden muss, wenn man außer der Reihe laden will. - mit chargerOpMode wird der Zustand des Chargers abgefragt, uA ob ein Auto angeschlossen ist oder nicht.
- das Schreiben von phaseMode und circuitMaxCurrentPX ist schlecht, da es in den Flash-Speicher gespielt wird und der sich theoretisch abnutzen kann. Daher die Steuerung alleine über dynamicCircuitCurrentPX
Fragen:
- auf was muss dann dynamicChargerCurrent stehen?
- wenn man keine Info darüber hat, ob das Auto voll ist, was muss ich dann in Bezug auf die Ladeleistungen einstellen? Im Grunde ist es ja egal, da dann nur einfach nicht weiter geladen wird, oder?
Das Überschussladen kann man sich ja an den obigen Skripten ansehen, funktioniert aber immer durch Überwachung des PV-Überschusses und dynamischer 1- oder 3-phasiger Anpassung der dynamicCircuitCurrentPX um mindestens 6A pro Phase zu erreichen.
Gibt es sonst noch wichtige Details die man vergessen könnte aber dran denken sollte?
Viele Grüße
SebastianSorry, hab das erst jetzt gelesen.
Hinzuzufügen wäre vielleicht noch Folgendes:- Ich arbeite auch ausschließlich mit dynamicCircuitCurrentPx. Wenn man mehrere Easees hat, wird dieser Wert nur in die primäre Wallbox geschrieben und gilt dann für alle Boxen.
- Start / Stop / Pause / Resume benutze ich alles nicht
- Wenn man eine Zoe lädt benötigt man mindestens 8A egal ob auf einer Phase oder 3 x 8 A
- Wenn man einphasig lädt, scheint die Zoe intern die Phasen zusammenzuschalten. Würde man nun Phasen 2 + 3 dazuschalten, zerreißt es wohl die Leistungselektronik der Zoe. Ich habe daher mein Blockly so erstellt, dass man Phasen 2 + 3 nur > 0 setzen kann, wenn das Kabel physisch gezogen ist. Es wäre schöner, wenn man den Wechsel auf 3-phasig auch einfacher vornehmen könnte, ohne das Kabel physisch zu ziehen. Aber ich weiß eben nicht, was konkret zu tun ist, damit die Zoe die Zusammenschaltung der 3 Phasen wieder auftrennt, wie man das prüfen könnte, und mag das aus offensichtlichen Gründen auch nicht testen.
-
Nur zur Info...
Ich hatte heute Kontakt zum EASEE support weil die Cloud in letzter Zeit mehrfach nicht erreichbar war und mein Hausakku wieder mal ins Auto umgeladen wurde. Das passiert bei mir immer dann, wenn die Überschussladung zwar anspringt, dann aber die Cloud zur Regelung bzw. Abschaltung der Ladung nicht zur Verfügung steht.
Habe also wieder mal nachgehakt ob denn endlich ein local API kommt oder ob man seine Easee box besser weggeben sollte....
Antwort:We are planning to release local API functions this summer. We have not a specific date ready, but we have been working for a while, and still are working on this function😊
Ich glaube das jetzt mal und bin positiv vorgespannt - und zähle dann natürlich auf @Newan für die Implemenitierung . Würde mich dann auch als Sponsor und Tester "opfern"
-
@aiouh Klar wenn die kommt stellen wir um!
-
@newan Sag mal bitte, schreibt dein Adapter zufällig den Datenpunkt "easee.0.XXXXXX.config.dynamicChargerCurrent" bei irgendwelchen Zuständen? Zum Beispiel bei einer Neuverbindung des Adapters? Ich habe das Problem, dass dieser Wert immer mal wieder auf 6 steht, obwohl ich ihn 100% nicht beschreibe. Ich kriege dieses Problem leider nicht aus der Welt. Die Sonne ballert, auf den "dynamicCircuitCurrentPn" liegen 3x10 A an und das Auto wird trotzdem nur mit 6A geladen.
-
@alex-warkentin nicht bewusst. Der Datenpunkt wird nur aus der Cloud geholt.
Mach den Adapter doch aus zum testen.Zu beachten nur:
dynamicCircuitCurrentPX -> All phases must be set within 500ms (script) otherwise the phase will be set to 0. -
@newan
Kannst du schon sagen, ob sich dann im Adapter selbst etwas ändern wird?
An den Datenpunkten etc.? -
@bishop9191 ne hab noch keine Infos gesehen
Könnten dann auch nen 2. Adapter easee-lokal machen. Mal sehen -
@newan said in Easee Wallbox mit iobroker:
@knima neuste commit auf git ist das gefixt.
Ist aber noch net releasedIst das über die normale IoBroker Adapter Update Routine erreichbar?
-
Nachdem ich die letzten Tage einige Tests mache konnte, bin ich mit der ersten Versions meines Scripts recht zufrieden. Ausgangslage war das Script von hardy. Da ich aber kein Fan von Blockly bin und mir die Möglichkeit fehlte, das Auto auch mal ohne Sonne vollzuladen, habe ich es in Javascript angepasst. Das Script nutzt den Telegram Adapter, um Nachrichten über den Status zu versenden und um zwischen Überschuss und voller Leistung zu wählen. Würde mich freuen, wenn ihr es ausprobiert und bei Bedarf mit mir zusammen optimiert.
var stateTimer, timerDreiphasig, timerStop, overageList, pvOverage, overageSum, pvOverageKWh, timeout, socLevelLast, maxSocLevel, currentP1, currentP2, currentP3, overageCurrent, chargerOPmode, smartCharge; // ### Wallbox Garage ### timerDreiphasig = 0; // Timer für Start für dreiphasiges Laden timerStop = 0; // Timer für Ladestop, wenn zu wenig Leistung von der PV-Anlage const reservePower = 200; // Leistung die für den Haushalt reserviert bleibt overageList = []; // Array für den gleitenden Mittelwert const scheduleInterval = 12; // Aktualisierungsintervall in Sekunden // ---------------------------------------------------------------------------------------------- // Funktion zum Anlegen und Beschreiben eines Datenpunkts // ---------------------------------------------------------------------------------------------- function ForceSetState(objectname, value, options) { if (!existsState(objectname)) createState(objectname, value, options); else setState(objectname, value); } // ---------------------------------------------------------------------------------------------- // Funktion: Message über Telegram // ---------------------------------------------------------------------------------------------- function Telegram (sText, sValue, blPing, blQuestion) { if (blQuestion) { sendTo('telegram.0', { text: sText + sValue, disable_notification: blPing, reply_markup: { keyboard: [ ['Volle Power', 'Überschuss'], ], resize_keyboard: true, one_time_keyboard: true } }); const Sleep = setInterval(()=> { // Warten auf eine Auswahl des Lademodus on({id: "javascript.0.Wallbox.Garage.Überschussladen", change: "any"}, async function (obj) { clearInterval(Sleep); }); },300000); } else { sendTo('telegram.0', { text: sText + sValue, disable_notification: blPing, }); } }; // ---------------------------------------------------------------------------------------------- // Easee und VW Adapter neustarten falls offline // ---------------------------------------------------------------------------------------------- on({id: "easee.0.info.connection", change: "lt"}, async function (obj) { var value = obj.state.val; (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})(); timeout = setTimeout(function () { if (!value) { setState("system.adapter.easee.0.alive", false); setStateDelayed("system.adapter.easee.0.alive", true, 5000, false); } }, 20000); }); on({id: "system.adapter.easee.0.connected", change: "lt"}, async function (obj) { var value = obj.state.val; (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})(); timeout = setTimeout(function () { if (!value) { setState("system.adapter.easee.0.alive", false); setStateDelayed("system.adapter.easee.0.alive", true, 5000, false); } }, 20000); }); on({id: "vw-connect.0.info.connection", change: "ne"}, async function (obj) { var value = obj.state.val; (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})(); timeout = setTimeout(function () { if (!value) { setState("system.adapter.vw-connect.0.alive", false); setStateDelayed("system.adapter.vw-connect.0.alive", true, 5000, false); } }, 20000); }); on({id: "system.adapter.vw-connect.0.connected", change: "ne"}, async function (obj) { var value = obj.state.val; (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})(); timeout = setTimeout(function () { if (!value) { setState("system.adapter.vw-connect.0.alive", false); setStateDelayed("system.adapter.vw-connect.0.alive", true, 5000, false); } }, 20000); }); // ---------------------------------------------------------------------------------------------- // Führt die Abfrage in regelmäßigen Zeitabständen durch // ---------------------------------------------------------------------------------------------- schedule(`*/${scheduleInterval} * * * * *`, async function () { stateTimer++; // Variablen einlesen socLevelLast = getState("Datenpunkt.AktuellerBatteriestand").val; maxSocLevel = getState("Datenpunkt.ZielBatteriestand").val; currentP1 = getState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1").val; currentP2 = getState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2").val; currentP3 = getState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3").val; chargerOPmode = getState("easee.0.XXXXXXXX.status.chargerOpMode").val; smartCharge = getState("javascript.0.Wallbox.Garage.Überschussladen").val; // ---------------------------------------------------------------------------------------------- // PV Überschuss ermitteln = Import/Export - Offset + aktuelle Leistung Wallbox // ---------------------------------------------------------------------------------------------- pvOverage = Math.round((parseFloat(getState("Datenpunkt.AktuellerÜberschuss").val) - reservePower) + parseFloat(getState("easee.0.XXXXXXXX.status.totalPower").val) * 1000); console.log('PV Überschuss = ' + pvOverage); // Gleitender Mittelwert innerhalb 3 Minuten berechnen, gerundet auf 100er overageList.unshift(pvOverage); if (overageList.length > 180/scheduleInterval) { overageSum = overageList.reduce(function(x, y) {return x + y;}); pvOverageKWh = Math.round(parseFloat(overageSum) / overageList.length); overageCurrent = Math.round(pvOverageKWh / getState("easee.0.XXXXXXXX.status.voltage").val); overageList.pop(); // Logging ForceSetState("javascript.0.Wallbox.Garage.pvOverageKWh", pvOverageKWh, {name: "", unit: "kWh"}); console.log(('Überschuss Leistung gemittelt = ' + String(pvOverageKWh))); console.log(('Überschuss Strom gemittelt = ' + String(overageCurrent))); } // ---------------------------------------------------------------------------------------------- // Timer 3-phasig laden: Erhöhe den Timer sekundengenau, wenn PV-Überschuss >18 Ampere // ---------------------------------------------------------------------------------------------- if (socLevelLast < maxSocLevel && overageCurrent >= 18) { timerDreiphasig = (typeof timerDreiphasig == 'number' ? timerDreiphasig : 0) + scheduleInterval; console.log((['Timer 3-phasig = ',timerDreiphasig,'Sekunden'].join(''))); } // Andernfalls Timer zurücksetzen else timerDreiphasig = 0; // ---------------------------------------------------------------------------------------------- // Timer Ladeabbruch: Erhöhe den Timer sekundengenau, wenn PV-Überschuss <6 Ampere // ---------------------------------------------------------------------------------------------- if (overageCurrent < 6) { timerStop = (typeof timerStop == 'number' ? timerStop : 0) + scheduleInterval; console.log((['Timer Ladeabbruch = ',timerStop,'Sekunden'].join(''))); } // Andernfalls Timer zurücksetzen else timerStop = 0; // ---------------------------------------------------------------------------------------------- // Wenn Überschussladen aktiviert ist // ---------------------------------------------------------------------------------------------- if (smartCharge == true) { console.debug(('Überschussladen ist aktiv' + '')); // 1-phasig laden: Wenn PV Überschuss größer als minimale Ladeleistung für eine Phase und kleiner als minimale Ladeleistung für drei Phases if (socLevelLast < maxSocLevel && overageCurrent >= 6 && (overageCurrent < 18 || timerDreiphasig < 300)) { console.log((['Einphasiges Laden mit ',overageCurrent,' Ampere'].join(''))); setState("easee.0.XXXXXXXX.config.dynamicChargerCurrent", 16); setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1", overageCurrent); setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2", 0); setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3", 0); } // 3-phasig laden: Wenn PV Überschuss 5 Minuten konstant größer als 18 Ampere war if (timerDreiphasig >= 300) { console.log((['Dreiphasiges Laden mit ',Math.round(overageCurrent / 3),' Ampere'].join(''))); setState("easee.0.XXXXXXXX.config.dynamicChargerCurrent", 16); setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1", Math.round(overageCurrent / 3)); setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2", Math.round(overageCurrent / 3)); setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3", Math.round(overageCurrent / 3)); } // Stoppe Laden, wenn nach 5 Minuten nicht genug PV-Überschuss vorhanden ist. Stoppe Timeout wenn während 5 Minuten doch wieder genug PV-Überschuss vorhanden ist if (timerStop >= 60 && currentP1 > 0) { console.warn(('Pausiere Laden, weil kein PV-Überschuss' + '')); setState("easee.0.XXXXXXXX.config.dynamicChargerCurrent", 16); setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1", 0); setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2", 0); setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3", 0); //setState("easee.0.XXXXXXXX.control.pause", true); //setState("easee.0.XXXXXXXX.control.stop", true); } } // ---------------------------------------------------------------------------------------------- // Wenn Laden mit voller Leistung aktiv ist // ---------------------------------------------------------------------------------------------- else { console.debug('Dreiphasiges Laden mit voller Leistung'); setState("easee.0.XXXXXXXX.config.dynamicChargerCurrent", 16); setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1", 16); setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2", 16); setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3", 16); } }); // ---------------------------------------------------------------------------------------------- // Trigger beim Einstecken des Ladekabels // ---------------------------------------------------------------------------------------------- on({id: "easee.0.XXXXXXXX.status.chargerOpMode", change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; stateTimer = 0; // Ladekabel wurde angeschlossen if (oldValue == 1) { console.warn(('Ladekabel wurde an das Fahrzeug angeschlossen' + '')); Telegram("Der Akkustand beträgt: ", socLevelLast, false, true); } // Ladekabel wurde entfernt if (value == 1) { console.warn(('Ladekabel wurde vom Fahrzeug getrennt' + '')); Telegram("Ladekabel wurde vom Fahrzeug getrennt. Der Akkustand beträgt: ", socLevelLast, false, false); } // Auto angeschlossen, aber lädt nicht if (value == 2) { console.log(('Ladevorgang gestoppt. Wallbox bereits zum Laden' + '')); Telegram("Ladevorgang gestoppt. Wallbox bereit zum Laden. Der Akkustand beträgt: ", socLevelLast, false, false); if (currentP1 > 0 && maxSocLevel > socLevelLast) { if (smartCharge == true) console.warn(('PV Überschussladen gestartet' + '')); else console.warn(('Laden mit voller Leistung gestartet' + '')); //setState("easee.0.XXXXXXXX.control.resume", true); setState("easee.0.XXXXXXXX.control.start", true); Telegram("Ladevorgang gestartet.", "", false, false); } else if (maxSocLevel <= socLevelLast) { console.log(('Ladevorgang gestoppt. Ladeziel erreicht' + '')); Telegram("Ladevorgang gestoppt. Ladeziel erreicht. Der Akkustand beträgt: ", socLevelLast, false, false); } } if (value == 4) { console.log(('Ladevorgang gestoppt. Batterie vollgeladen' + '')); Telegram("Ladevorgang gestoppt. Batterie vollgeladen.", "", false, false); } if (value == 5) { console.log(('Ladevorgang gestoppt. Es ist ein Fehler aufgetreten' + '')); Telegram("Ladevorgang gestoppt. Es ist ein Fehler aufgetreten. Der Akkustand beträgt: ", socLevelLast, false, false); } }); // ---------------------------------------------------------------------------------------------- // Wenn Auto bis Sonnenuntergang nicht geladen, fragen ob über Netz vollgeladen werden soll // ---------------------------------------------------------------------------------------------- schedule({astro: "sunset", shift: 0}, async function () { if (maxSocLevel > socLevelLast && chargerOPmode != 1) { Telegram("Der Akkustand beträgt: ", socLevelLast, true, false); } });