Geräte, die aber nur mit ihrer pröperitären App sprechen haben nichts mit „Smart Home“ zutun. So auch bei der Ecoflow Wave 2, die ich erst mit viel Mühe zum richtigen Smart Home fähigen Gerät machen konnte.
Das Ziel ist es die Ecoflow Wave 2 remote zu steuern und ihre Leistungsdaten auslesen zu können. Das schöne daran ist, dass es nicht sonderlich schwierig ist, weil Node-Red und MQTT uns sehr viel Arbeit abnehmen.
Zugangsdaten extrahieren
Als erstes brauchen wir unsere Zugänge mit denen wir uns auf den MQTT Broker von Ecoflow subscriben können. Dazu gibt es diese dieses schöne Batch Script. Führt es aus, tragt die Mailadresse und das Passwort von Eurem Ecoflow Account ein und ihr erhaltet ein paar wichtige Daten:
Merkt Euch: Protocol, Host, Port, den Username und das Passwort.
Aus diesem Block merkt Ihr Euch noch die „userId“:
Was jetzt noch fehlt ist die Seriennummer Eurer Ecoflow Wave 2. Diese findet ihr in der Ecoflow App unter Eigenschaften –> Spezifikationen. In meinem Fall beginnt sie mit KTXXXX….
Node-Red
Theoretisch könnt Ihr jeden MQTT Client benutzen wie z.B. MQTTX um die Daten zu empfangen und zu senden. Node-Red ist mein Go-To Programm für fast jegliche Logik im Heimautomationsbereich. Es ist einfach, übersichtlich und hat eine ganz gute Verbreitung gefunden.
Daten via MQTT empfangen
Zieht eine „mqtt in“ Node in den Arbeitsbereich und konfiguriert sie wie folgt.
Anstatt der SERIALNUMBER tragt ihr Eure eigene Seriennummer bei dem Pfad der Topic ein.
Mit dem Stiftsymbol bei Server erstellt ihr einen neuen Server auf den Ihr Euch verbindet. Tragt bei Server:
mqtts://mqtt.ecoflow.com:8883
ein. Stellt das Protokoll auf MQTT V3.1 und setzt Eure Client-ID wie folgt zusammen:
Das wort ANDROID ist fix. Die UUID ist ein Unique Zahlenwert, der Euch je nach System auch in dem Batch Script ausgegeben wird. Bei mir hat das nicht geklappt aber ihr könnt z.B. folgende UUID nehmen und sie an ein paar Stellen abändern. Verändert nur das Format und die Länge nicht.
FF12A24A-B3D1-3719-9314-DF617C133742
Die USERID kennt ihr ja über das Batch Script.
ANDROID_<UUID>_<USERID>
Das sieht dann z.B. so aus:
ANDROID_FF12A24A-B3D1-3719-9314-DF617C133742_1234567890123456789
Im Tab „Sicherheit“ tragt ihr aus dem Batch Script Euren Benutzernamen und Passwort ein.
Die Node ist nun fertig und wenn alles passt wird sie nun den Status „verbunden“ haben. Packt noch eine „Debug“ Node dahinter und ihr seht, dass jetzt z.B. Temperaturwerte eintrudeln.
Ihr werdet viele verschiedene MQTT Pakete sehen. Pakete zum Motor der Ecoflow Wave 2, zur Batterie, zur Spannungsversorgung, zu den Einstellungen der Ecoflow usw. Wie ihr damit umgeht überlasse ich Euch. Als kleiner Tipp noch, wenn Ihr einen Home Assistant am Laufen habt: Installiert Euch über HACS die Node-Red Companion integration und schreibt die interessanten Werte in den Home Assistant hinein mit der „sensor“ Node.
Settings via MQTT senden
Wir können nicht nur Werte auslesen sondern auch an den MQTT Broker schicken und die Ecoflow Wave 2 wird darauf reagieren.
An/Aus
Jetzt kommen wir zum spannenden, und sehr einfachen Teil. Wir schalten die Ecoflow Wave aus Node-Red heraus ein und aus.
Packt eine Inject, function und eine mqtt-out Node zusammen wie hier:
Die Function Node füllt ihr wie folgt und passt die Seriennummer an.
msg.payload = {
"params":
{
"powerMode": 2
},
"from": "iOS",
"lang": "de-de",
"id": "188631149",
"moduleSn": "SERIALNUMBER",
"moduleType": 1,
"operateType": "powerMode",
"version": "1.0"
}
return msg;
Der Unterschied zwischen Anschalten und Abschalten ist der „powerMode“.
1=Anschalten
2=Ausschalten
Fehlt noch die Konfiguration der mqtt-out Node. Die Topic setzt sich wie folgt zusammen. Ändert die USERID und die SERIALNUMBER ab.
/app/USERID/SERIALNUMBER/thing/property/set
Je nachdem was ihr beim powerMode eingestellt habt wird Eure Ecoflow Wave 2 jetzt beim Drücken der Inject Node an oder ausgehen.
Temperatur ändern
Der mqtt-out Knotenpunkt, den wir gerade erstellt haben kann man für alle weiteren Einstellungen wiederverwenden. So auch zur Temperaturänderung. Die Function Node dafür sieht so aus:
msg.payload = {
"params":
{
"setTemp": 20
},
"from": "iOS",
"lang": "de-de",
"id": "138638149",
"moduleSn": "SERIALNUMBER",
"moduleType": 1,
"operateType": "powerMode",
"version": "1.0"
}
return msg;
Die „setTemp“ könnt ihr in Node-Red einfach als Variable definieren und der Wert dazu kann z.B. aus Home Assistant heraus kommen.
Weitere Nodes für Settings ganz einfach selbst erstellen
Das waren jetzt zwei Beispiele für die Basic Einstellungen der Ecoflow Wave2. Jetzt seid ihr dran die restlichen Applikationsintegrationen selbst zu erstellen. Wie geht das?
Ganz einfach. Mit einer weiteren „mqtt-in“ Node, die ihr wie folgt konfiguriert:
/app/USERID/SERIALNUMBER/thing/property/set
In dieser MQTT-Topic kommen alle Settings, die ihr über die App einstellt an. Ihr braucht jetzt lediglich an die mqtt-in Node an eine Debug Node hängen und ihr könnt im Debug Fenster zuschauen was passiert, wenn Ihr in der App Einstellungen vornehmt.
So lernt ihr welche Befehle von der App abgesetzt werden. Ihr baut diese Befehle einfach nach, wie bei der ON/Off oder Temperatur Node.
Ich hoffe Euch hat das geholfen zu verstehen, wie die Ecoflow Wave (und auch viele andere derer Produkte) via MQTT kommunizieren und wie man diese Funktionen aus Node-Red heraus ansteuern kann.
Für die Extraktion der Login-Credentials über die REST API bei Ecoflow habe ich eine statische Webseite gebaut, die vielleicht einfacher zu nutzen ist, als das Bash-Script. Gerne in den Source-Code schauen, dass auch wirklich nur mit dem Ecoflow Server kommuniziert wird.
Die statische Webseite ist deployed unter: https://energychain.github.io/site_ecoflow_mqtt_credentials/
Der Source findet sich unter:
https://github.com/energychain/site_ecoflow_mqtt_credentials
Gruss,
Thorsten
Hi, danke für die Anleitung, aber ich bekomme in Node Red keine Verbindung mit meinen DeltaPro zustande (Verbindung wird hergestellt). Im Terminal mit „mosquitto_sub ..:“ gibts keinerlei Probleme. Keine Ahnung was ich falsch mache …
VG Chris
Sehr nützliches Script. Danke dafür.