NEWS
Adapter für Ecoflow Einbindung
-
Hi zusammen,
bis eben habe ich immer nur fleißig mitgelesen und zu Hause selber getüftelt. Aktuell auch leider nur mit ernüchternden Ergebnissen. Ich habe mal dem Support geschrieben und diese Antwort erhalten…
Da ich ebenfalls die Einspeisemenge des Powerstreams mit dem Hausverbrauch abgleichen und dementsprechend einstellen will, hoffe ich, dass wir hier vorher eine Lösung hinbekommen, bis Ecoflow etwas „einfacheres und offizielleres“ freigibt….richtig Lust haben die darauf ja nicht. -
@applepro Es sieht ganz gut aus Dank xNodKane's Arbeit hab ich es inzwischen geschafft sowohl einige der Statusmeldungen (PV1 und PV2 Watt sowie Leistung zum Haus) auszulesen, als auch den Wert für "Leistungsbedarf am AC..." zu schreiben.
Allerdings gibt es noch einige Probleme.Das wichtigste ist, die entsprechenden Felder im MQTT auf den Typ "file" zu stellen und dann den Adapter neu zu starten...
Danach könnt ihr mit diesem Script den Inhalt auslesen und mit https://protobuf-decoder.netlify.app/ entschlüsseln.
getBinaryState('mqtt.<Instanznummer>.app.<USER_ID>.<SERIENNUMMER>.thing.property.set', function (err, data) { log("frisch ausgelesen:"+ data.toString("hex")) });
Senden geht dann so:
sendTo('mqtt.<Instanznummer>', 'sendMessage2Client', {topic: '/app/.<USER_ID>/<SERIENNUMMER>/thing/property/set', message:<buffer>});
die Daten müssen als Buffer object übergeben werden.
Viel Erfolg
Ein Problem, wofür vielleicht einer von Euch eine Lösung weiß:
Wenn ich den STATE im MQTT auf 'file' umstelle, kann ich keine Änderungen mehr Monitoren.on({id: /mqtt.2.app.device.property.HWXXXXXXXXXXXX/, change: 'any'}, function (obj) { log("EVENT!") });
...da kommt nach der Umstellung nichts mehr. Hat jemand eine Idee?
VG
Markus -
@waly_de @applepro
Habe gerade noch mal etwas probiert:
Wenn man auf folgendes Topic hört bekommt man alle Powerstream Daten (in .proto format)./app/device/property/{serialNumber}
Dann das Proto PowerMessage benutzen und dann kommt im Feld 38 der Wert für PV Sum (muss man durch 10 teilen um den Wert in W zu erhalten).
Für alle SmartPlug user, diese können über PlugPower Feld 10 die Leistungsaufnahme messen. Auch hier wieder durch 10 teilen.syntax = "proto3"; message PowerMessage { PowerItem item = 1; } message PowerItem { optional Meta meta = 1; string serialNumber = 25; } message Meta { int32 value = 1; int32 pvPowerSum = 38; int32 plugPower = 10; }
Da jedoch noch viele weitere verschiedene Daten hier in das Topic kommen, weiß ich noch nicht nach was ich filtern muss.
Vielleicht weiß da jemand schon mehr. -
-
@waly_de Ich habe folgenden Code benutzt:
on({id: 'mqtt.<Instanznummer>.app.<USER_ID>.<SERIENNUMMER>.thing.property.set', change: 'any'}, async function (obj) { log("EVENT!") });
Damit läuft das Monitoring!
VG
Jannick -
@applepro hmm bei mir leider nicht ... welche Version vom js-controller und welche node.js nutzt Du?
-
@xnodkane sehr gut ... hab auch ein wenig geforscht. Meinst du nicht das 38 der wert für "Andere Verbraucher" ist?
Und kann man nicht eine .proto für alles machen. Die anderen Felder scheint es da ja auch zu geben.
Ich hatte das hier erstellt. Spricht da etwas gegen?syntax = "proto3"; message PowerItem { optional Meta meta = 1; uint32 src = 2; uint32 dest = 3; uint32 cmdFunc = 8; CmdFunction cmdId = 9; uint32 unknown = 10; uint32 needAck = 11; uint64 timestamp = 14; string serialNumber = 25; } message PowerMessage { PowerItem item = 1; } message Meta { optional int32 value = 1; optional int32 PV1_Watt = 19; optional int32 PV2_Watt = 24; optional int32 ToHome_Watt = 38; } enum CmdFunction { Unknown = 0; PermanentWattsPack = 129; SupplyPriorityPack = 130; }
-
@waly_de js-controller: 4.0.24 und node.js: v16.17.1, hier werde ich gleich mal updaten
-
auch nach update auf v16.20.1 läuft es weiterhin, es funktioniert nur dann nicht mehr, wenn man auf file umstellt, so wie du beschrieben hast, man sollte vlt richtig lesen....
-
@applepro Das ist seltsam. Bist Du sicher das du das Feld auf "File" umgestellt hast? Hab einen Bug dazu gemeldet und es wurde bestätigt das das so ist, und uns leider auch noch ziemlich lange erhalten bleibt...
-
@waly_de sagte in Adapter für Ecoflow Einbindung:
Bist Du sicher das du das Feld auf "File" umgestellt hast?
File / Binary states sind doch eh deprecated (und müssen auch ganz anders geschrieben werden als normale states). Das wird niemand mehr implementieren, da es gerade aus allen Adaptern rausfliegt.
Eine Lösung wäre ja, dass der Wert als base64 oder hex geschrieben wird, falls Binärdaten kommen.
-
@haus-automatisierung sagte in Adapter für Ecoflow Einbindung:
Eine Lösung wäre ja, dass der Wert als base64 oder hex geschrieben wird, falls Binärdaten kommen.
Gute Idee... müsste dann in den MQTT implementiert werden... magst Du einen Request stellen, oder gibt es den schon?
@haus-automatisierung sagte in Adapter für Ecoflow Einbindung:
File / Binary states sind doch eh deprecated (und müssen auch ganz anders geschrieben werden als normale states). Das wird niemand mehr implementieren, da es gerade aus allen Adaptern rausfliegt.
Es gibt aber auch noch keine funktionierende Alternative, oder? File wird ja implementiert, aber das Handling ist noch nicht eingebaut. Soweit ich weiss braucht es dazu js-controller 5.0.x
-
@waly_de sagte in Adapter für Ecoflow Einbindung:
File wird ja implementiert, aber das Handling ist noch nicht eingebaut. Soweit ich weiss braucht es dazu js-controller 5.0.x
Doch, das ist alles in den Adaptern soweit vorbereitet. Im JavaScript-Adapter gibt es schon "onFile" usw. Das funktioniert aber nur mit der js-controller 5.x beta. Die gibts ja schon.
-
@waly_de sagte in Adapter für Ecoflow Einbindung:
Ich hatte das hier erstellt. Spricht da etwas gegen?
Ich habe gerade noch mal bei mir auf das Dashboard geschaut im Reiter "Bereich" und dann nochmal auf das Powerstream system drücken (Die große Ansicht).
Würde jedenfalls hier noch die SmartPlug Daten ergänzensyntax = "proto3"; message PowerItem { optional Meta meta = 1; uint32 src = 2; uint32 dest = 3; uint32 cmdFunc = 8; CmdFunction cmdId = 9; uint32 unknown = 10; uint32 needAck = 11; uint64 timestamp = 14; string serialNumber = 25; } message PowerMessage { PowerItem item = 1; } message Meta { optional int32 value = 1; optional int32 plugPower = 10; // power/10=W optional int32 pv1_Power = 19; // power/10=W optional int32 pv2_Power = 24; // power/10=W optional int32 toHomePower = 38; // power/10=W } enum CmdFunction { Unknown = 0; PermanentWattsPack = 129; SupplyPriorityPack = 130; }
-
@xnodkane
gut .. hab nämlich keine Smartplugs...Hab heute auch getüftelt...
Hier mal meine Version ... Hab auch alles eingefügt was ich gesehen habe aber nicht zuordnen kann.syntax = "proto3"; message PowerItem { optional Meta meta = 1; optional uint32 src = 2; optional uint32 dest = 3; optional uint32 unknown1 = 4; optional uint32 unknown2 = 5; optional uint32 unknown3 = 6; optional uint32 unknown4 = 7; optional uint32 cmdFunc = 8; optional CmdFunction cmdId = 9; optional uint32 unknown5 = 10; optional uint32 needAck = 11; uint64 timestamp = 14; optional uint32 unknown6 = 16; //3 Byte? optional uint32 unknown7 = 17; //3 Byte? optional string OS = 23; optional string serialNumber = 25; } message PowerMessage { PowerItem item = 1; } message Meta { optional int32 value = 1; optional int32 plugPower = 10; optional int32 M_Unknown7 = 14; // bei Prio-änderung gesehen optional int32 M_Unknown8 = 15; //bei Prio-änderung gesehen optional int32 PV1_Power = 19; optional int32 M_Unknown1 = 21; optional int32 PV2_Power = 24; optional int32 From_Bat_Power = 29; optional int32 Batt_Poz = 31; optional int32 M_Unknown2 = 33; optional int32 M_Unknown3 = 35; optional int32 M_Unknown6 = 37; optional int32 ToHome_Power = 38; optional int32 M_Unknown9 = 43; //prio Power von summe PVx_Power abziehen ? optional int32 Needed_Power = 48; optional int32 M_Unknown4 = 59; optional int32 M_Unknown5 = 60; } enum CmdFunction { Unknown = 0; PermanentWattsPack = 129; SupplyPriorityPack = 130; }
-
@waly_de Hey, das einzige was ich noch nicht hinbekommen habe ist das Schriebn von Daten per Buffer, wie hast du das genau angestellt, ich kann zwar Daten senden, aber es tut sich nichts...
Gruß
Jannick -
@applepro
genau so wie oben geschrieben... wenn du die Daten in einem hexString hast, dann kannst du damit daraus einen Buffer machen:const buffer = Buffer.from(hexString, "hex");
und dann einfach
sendTo('mqtt.<Instanznummer>', 'sendMessage2Client', {topic: '/app/<USER_ID>/<SERIENNUMMER>/thing/property/set', message: buffer});
-
@waly_de mhh komisch, genau so hatte ich es eigentlich gemacht. Edit: Gerade nochmal alles sauber aufgesetzt, jetzt läuft es.
-
-
Wäre dankbar, wenn hier die notwendigen Schritte evtl. nochmal einfacher erklärt werden würden.
Bislang habe ich es nur geschafft, den HEX Wert darzustellen und mit https://protobuf-decoder.netlify.app/ zu entschlüsseln.
Allerdings haben meine Versuche mit dem Senden noch nicht funktioniert.
Der "Leistungsverbrauch von anderen Verbrauchern" hat sich leider nicht verändert, nach dem Senden.
Vielleicht baut ja sogar jemand ein fertiges ScriptWäre wirklich prima, wenn ich den Leistungsverbrauch dynamisch anpassen könnte. Weitere Werte bräuchte ich
eigentlich nicht für meinen Zweck.