Adapter for Myenergi Zappi Wallbox
What kind of device or service you would like to see an adapter for? Myenergi Zappi Wallbox
Is an official API including documentation is available? There is an API key within the application, but not offically released. https://myenergi.info/api-f54/
Are other libraries for an integration available? There is a web interface to controll / monitor your system: https://myaccount.myenergi.com/energy-usage
Is this device already integrated in other Smart Home systems? I don't think so.
Is this device already integrated in homebridge? Might the ham adapter together with the homebridge plugin be sufficient? I don't think so.
Additional context


After you created the issue vote for yourself in the first post of the issue using the "+1"/"Thumbs up" button
Here is some additional information that might help:
- https://github.com/twonk/MyEnergi-App-Api
- https://github.com/ashleypittman/mec
- https://github.com/wills106/homeassistant-config
- https://github.com/javierarrieta/myenergi-feeder
I will be also really interested!!
Ich wäre auch interessiert, die Zappi-Community dürfte inzwischen auch recht groß sein.
Auch ich wäre sehr interessiert.
Dann solltet Uhr alle oben im ersten Post auf Thumbs up drücken ... Posts sind unsichtbar
This would be a lifesaver. It would let me control the charge limit on my Renault Zoe using Tronity. A few EV's dont allow you to control the charge limit.
ich wäre auch arg interessiert. Wäre das hier ein Anfang bzw. Teil der Lösung? https://github.com/bisand/myenergi-api
@MPTrixi @JamesDemaine-wit did you click the "Thumbs Up" button in the first post?
@Apollon77 https://github.com/bisand/myenergi-api ist eine NodeJS Implementierung der MyEnergi API. Ich denke die könnte wirklich als Basis für einen Adapter dienen, oder?
@dj-mib yep - mein Daumen ist dabei
Habe mal als Beispiel in den Powerfox Adapter geschaut, was ja ähnlich sein sollte - nicht dass ich das ganze verstehen würde (meine Programmierkenntnisse sind recht angestaubt). Wenn ich es richtig verstanden habe braucht die myenergi API eine digest Authentifizierung, was wohl in axios nicht so (ohne weiteres oder überhaupt?) geht (hab zumindest nur die Aussage gefunden) und man müsste es mit fetch machen? Wie gesagt: Ahnung davon habe ich wirklich nicht. Zumindest bekomme ich die Daten im Browser mit URL (es gibt verschiedene). Ruft man die auf kommt ein Popup mit Abfrage des Users und eines Passworts. Der User ist die SN des eigenen Hubs. Als Passwort kann man mit seinem myenergi Online Konto einen API Key erzeugen. Für Tests stehe ich gerne zur Verfügung (hab aber nur gefährliches Halbwissen ;)). Aber ich dachte die NodeJS Implementierung müsste sich doch auch direkt "anzapfen" lassen.
For testing purposes I am also available.
Moin zusammen, ich hab ein wenig gebastelt und versucht in einem Script meinen Zappi auszulesen und es klappt!
Voraussetzungen:
- Im JS Adapter myenergi-api als zusätzliches nmp-Modul ergänzen.
- API-Key für den Hub erzeugen. (Passwort für den Login) Es wird nicht das Passwort zum Login an das Portal verwendet, sondern im Portal muss man für seinen Hub einen API-Key erzeugen - dann klappt auch die Anmeldung.
Hier das Script: myenergi.txt
Ergebnis jeweils ein JSON Objekt mit dem man etwas anfangen kann: ***** ZAPPI ALL ***** [{'sno':222333444,'dat':'27-05-2022','tim':'07:37:26','ectt1':'Internal Load','ectt2':'Internal Load','ectt3':'Internal Load','bsm':0,'bst':0,'cmt':254,'dst':1,'div':0,'frq':50.01,'fwv':'3560S3.171','grd':-5573,'pha':1,'pri':1,'sta':1,'tz':2,'vol':2382,'che':1.27,'bss':0,'lck':23,'pst':'A','tbk':99,'zmo':3,'pwm':5300,'zs':258,'rac':8,'rrac':-4,'zsh':1,'zsl':2,'ectp4':-1966,'ectp5':-1928,'ectp6':-1839,'ectt4':'Grid','ectt5':'Grid','ectt6':'Grid','mgl':100,'sbh':14,'sbk':5,'sbm':30}]
***** MEIN ZAPPI *****
{'sno':222333444,'dat':'27-05-2022','tim':'07:37:27','ectt1':'Internal Load','ectt2':'Internal Load','ectt3':'Internal Load','bsm':0,'bst':0,'cmt':254,'dst':1,'div':0,'frq':50.01,'fwv':'3560S3.171','grd':-5118,'pha':1,'pri':1,'sta':1,'tz':2,'vol':2382,'che':1.27,'bss':0,'lck':23,'pst':'A','tbk':99,'zmo':3,'pwm':5300,'zs':258,'rac':8,'rrac':-4,'zsh':1,'zsl':2,'ectp4':-1966,'ectp5':-1928,'ectp6':-1839,'ectt4':'Grid','ectt5':'Grid','ectt6':'Grid','mgl':100,'sbh':14,'sbk':5,'sbm':30} #643
Für ein paar andere Anwendungsfälle habe ich mir aber schonmal Scripte gebaut, die mir z.B, Werte meiner Heizung auslesen und in Objekten speichern... Ich habe allerdings noch nie einen Adapter für den IO-Broker gebaut. Mit etwas Unterstützung und einem Adapter für Dummies Guide könnte das aber der erste werden.
@dj-mib top - läuft bei mir auch und ist doch schon mal ein Durchbruch. Im Prinzip würde das ja erstmal reichen, oder? Damit könnte man doch nun im ioBroker das als JS regelmäßig laufen lassen und die Werte die einem interessieren in vorher eigen erstellte Datenpunkte schreiben lassen. Wie wäre da das Vorgehen?
- "npm install myernergi-api" auf dem ioBroker System
- die Datenpunkte erstellen
- ?wie bekommt man das nun von der Rückgabe im JSON Format in die einzelnen Datenpunkte?
Zur Adaptererstellung gibt es diverse Anleitungen (inkl. Linksammlungen) und auch Videos. So richtig trivial ist es aber zumindest für mich als DAU in der Sache nicht. Z.B.: https://herwig.de/anleitungen/smarthome/iobroker/adapter-entwicklung.html#adapter-template https://github.com/Mic-M/iobroker-Adapter-Entwicklung-fuer-Anfaenger/wiki
Super!
Ich freue mich echt, dass sich jemand der Sache angenommen hat!
Ein Adapter würde das Ganze natürlich für die Mehrheit (und auch mich) sehr vereinfachen... :-)
@MPTrixi zu:
-
Ich hab tatsächlich erst tatsächlich erst auf der Konsole "npm install myernergi-api" ausgeführt. ich glaube aber es reicht das Modul in der Instanz des JS Adapters bekannt zu machen, der installiert das dann von selbst,
-
Kann man von Hand machen, oder ggfs auch generisch im Script
-
https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse So macht man aus dem JSON String ein Objekt in Javascript und so setzt man einen Status : setState("DatenpunktName", result.wert, true);
@dj-mib ich bin da tatsächlich zu blöd dafür. Könntest Du mal Dein Script um einen geschriebenen Datenpunkt aus dem Ergebnis von "MEIN ZAPPI" ergänzen?
BTW: hier findet sich übrigens eine gute Übersicht der Bedeutung der einzelnen Ausgaben
@MPTrixi Wenn ich etwas halbwegs brauchbares zustandebekommen habe, werde ich das hier posten. Ich muss mich da auch erstmal noch ein wenig einlesen, hab auch noch nicht verstanden, welcher der Werte jetzt angibt wieviel kW in Summe geladen wird...
@dj-mib Danke, bin gespannt drauf. Hab grad meinen Post drüber mit einem Link ergänzt. Da sind Beschreibungen zu den einzelnen Werten aufgeführt. Weiter unten dann auch zur Zappi Steuerung.
Bei mir funktioniert es auch. Ich konnte problemlos einmal die Datei lesen. Jetzt wäre es nötig die Daten regelmäßig zu lesen (jede 10s?) und und in einem Datenpunkt schreiben (oder besser gesagt, dass der Skript automatisch Datenpunkte anlegt und aktualisiert)
Wenn ich helfen kann, einfach sagen wie. Zum testen gerne!
Ich wollte mir eigentlich eine Entwicklungsumgebung aufbauen und versuchen einen Adapter zu bauen - Da es mir erstmal nicht gelungen ist eine lauffähige IOBroker Instanz unter Windows zu bauen und ich mir den ganzen Rest erst auch noch beibringen müsste, mache ich es jetzt erstmal Quick and Dirty als Javascript mit nem Cron, der zyklisch die Daten abruft.
Ich habe jetzt ein Script entwickelt mit dem man erstmal "was machen" kann.
Mit dem Script werden in einem definierbaren Intervall die Daten aus der Box gelesen und in Datenpunkte geschrieben. Das Root der Datenpunkte kann als Konstante vorgegeben werden,
Dazu kann der ChargeMode über ein Command gesetzt werden. Ich denke die meisten wollen irgendwann stoppen, wenn das EV einen bestimmten SoC erreicht haben, das sollte damit gehen :)
Das Script ist experimentell, wer mag kann es nach Prüfung aber gerne testen. Vielleicht hab ich irgendwann mal Zeit mich an die Entwicklung eines Adapters zu setzten. Auf meinem produktiven Broker will ich das aber nicht machen und unter Windows hab ich's nicht hinbekommen :( Die Doku von @Apollon77 sieht aber auf den ersten Blick recht gut aus. Mir fehlt hat gerade nur die Zeit...
Feedback, Tipps und Verbesserungsvorschläge von Testopfern sind willkommen :)
Hi,
könntest du für einen Dummy eine kurze Anleitung schreiben wie man vorgehen muss um das zum laufen zu bekommen?
LG Holger
@dj-mib Das hört sich doch schon mal gut an. Ich hab zumindest mal nen iobroker auf nem alten Windows Notebook zum Laufen bekommen. Hab aber vom Rest keine Ahnung. Das ganze asynchrone Zeugs inkl. den "Versprechungen" kam lange nach meiner aktiven Programmierzeit :)
Ich hoffe ich kann morgen mal testen. Ich danke aber schon mal vorab.
@dj-mib ich konnte heute morgen kurz testen. Habe es auf meinem Windows Test ioBroker versucht. Beim ersten Lauf schmeisst die Console ein paar Warnings. Datenpunkte werden aber angelegt. Habe auch Daten drin die sich aktualisieren. Sieht also soweit gut aus. Super Arbeit. Was mir erstmal aufgefallen ist und was noch angepasst werden sollte: in Zeile 18 kann man ja einen eigenen Pfad für die Datenpunkte definieren. Das geht auch, allerdings wird beim Setzen des Chargemodes fest auf den ursprünglichen Wert referenziert (hier sollte auch die Variable gezogen werden (Zeile 444)). Ich schau mal noch die Tage tiefer rein ob die Werte etc. passen. Was ich schon versucht habe und 1a funktioniert, ist das Umschalten des Chargemodes (zumindest von ECO+ auf ECO und zurück).
@hobili ich versuche es mal, ist aber nicht schwer:
- der Punkt ist noch nicht ganz klar. Evtl. reicht es myenergi-api in der Instanz des Skripte-Adapters unter zustätzliche NPM-Module einzutragen. Wenn nicht, installiere auf deinem ioBroker System das entsprechende npm package auf der Konsole (s. hier)
- im Script (s. Anhang myenergi.txt) von dj-mib folgende Anpassungen vornehmen:
- Zeile 24: 4711 durch die Seriennummer seines Hubs ersetzen
- Zeile 29: 0815 durch die Seriennummer seiner Zappi ersetzen
- Zeile 35: API-Key durch den erzeugten API-Key ersetzen (s. dazu hier)
- die nächsten zwei Konstanten definieren, ob man eine 3- oder 1-Phaseninstallation hat und wie oft die Datenpunkte abgefragt werden sollen
- Optional Zeile 18: Hier kann nach Belieben angegeben werden wo und unter welchem "Verzeichnis" die Datenpunkte angelegt werden sollen. Wird dies geändert muss es aktuell noch in Zeile 444 nachgezogen werden.
- Im ioBroker unter Skripte ein neues JavaScript erstellen und die angepasste myenergie.txt da reinkopieren und laufen lassen
- fertisch
Wenn man nun in den Datenpunkten einen Datenpunkt unter ...Chargemode auf TRUE setzt (wird gleich wieder FALSE) wird der Lademodus auf den entsprechenden Wert umgestellt.
@MPTrixi
super! Vielen Dank für die Anleitung!
Funktioniert auf Anhieb - die Warnings kamen auch bei mir, Datenpunkte wurden angelegt und werden regelmäßig gefüllt.
sehr geil!
Danke für die Hinweise @MPTrixi
UPDATE: myenergi.txt
- Warnings sollten nicht mehr kommen - Nach dem Anlegen der Datenpunkte mit den Commands wollte ich sie mit false initialisieren, kam wohl zu schnell.
- Trigger für die Commands wird jetzt entsprechend des definierten dataRoots angezogen (Copy and Waste Fehler)
- status, chargerState und chargeMode gibt es jetzt noch einmal als zusätzliche Datenpunkte mit lesbarem Text
Hab ich eigentlich erwähnt, dass ich Javascript hasse? Ich mach eigentlich eher Java und brech mir hier ständig die Finger...
TOP! Super gemacht! bei mir klappt auch alles!
Habe eine weitere Erfahrung gemacht, die ich kurz teilen möchte: Nachdem es auf dem Windows-Testsystem gut läuft, wollte ich das Script auf meinem produktiven ioBroker (Raspberry Debian 11, ioBroker 4.0.23, npm 8.9.0, Admin 5.3.8, Skripte-Adapter 5.2.21) laufen lassen. Erstmal habe ich es ohne npm install myernergi-api versucht. Es kam dann ein Fehler. Also den Befehl auf der Konsole ausgeführt. Leider blieb der Fehler, dass myernergi-api nicht verfügbar sei. Ich musste myenergie-api in der Skripte-Instanz unter zusätzliche NPM-Module eintragen. Erst dann lief es im Produktivsystem (falls jemand auf ähnliche Probleme stößt).
Erstmal habe ich es ohne npm install myernergi-api versucht. Es kam dann ein Fehler. Also den Befehl auf der Konsole ausgeführt. Leider blieb der Fehler, dass myernergi-api nicht verfügbar sei. Ich musste myenergie-api in der Skripte-Instanz unter zusätzliche NPM-Module eintragen.
Eigentlich müsste man sich den Install auf der Konsole sparen können. Der Javascript Adapter macht es selbst, wenn man es unter zusätzliche Module einträgt.

Ich hatte es leider anders herum versucht. Also nach dem Fehler erst den npm install auf der Konsole. Danach erst in der Adapterinstanz eingetragen. Komisch finde ich das unterschiedliche Verhalten der Windows- und der Rasp-Installation. Auf der Windowsseite ging es gleich nach dem npm install ohne dass was in der Instanz eingetragen ist. Auf dem Rasp nicht, hier musste es in der Instanz rein... aber Hauptsache es läuft :)
Eine Frage zu dem Lock State:
ich habe da als Wert "16" stehen - egal ob Stecker entfernt oder im Auto oder Ladend ...
meine Zappi hat ein fest angeschlossenes Kabel, nur zur Info
In einem anderen Beitrag auf Github habe ich das gefunden:
Lock Status
'lck' - representation of current PIN lock settings and zappi lock status Bit 0: Locked Now Bit 1: Lock when plugged in Bit 2: Lock when unplugged. Bit 3: Charge when locked. Bit 4: Charge Session Allowed (Even if locked)
Damit kann ich aber leider nichts anfangen; hat da jemand eine Idee?
LG Holger
@hobili bei mir ist es auch 16 (Auto ist grad nicht da ;)). Denke aber das hat nichts mit dem Ladestatus oder angesteckt oder nicht angesteckt zu tun. Es geht wohl darum, ob eine PIN in der Zappi vergeben ist (damit nicht fremdgeladen werden kann) und wie damit umgegangen wird. Habe im Netz bei Beispielauszügen der Abfrage bisher auch nur die 16 gefunden. Aber Denken heißt nicht Wissen. An Doku sonst nicht. Wenn Du das brauchst müsstest mal mit den Zappi Einstellungen zur PIN rumspielen und schauen wie sich der Wert verändert.