Modul für Ecoflow-Komponenten (über HTTP-REST)

Begonnen von Neolux, 17 Februar 2025, 13:10:08

Vorheriges Thema - Nächstes Thema

phantom

die Set Funktion für die Ausgänge, etc.  wird bei mir erst gar nicht im Frontend angezeigt  :o

ich vermute, weil auch die "detect model" Set-Funktion des Ecoflow Model nicht erkennt (dessen Name ist bei mir als "Ultra-1083" über die App eingetragen)
ist das Erkennen des Modells ggf. eine Voraussetzung für alles Weitere?

KölnSolar

ZitatSollten wir den SourceCode nach Github transferieren?

Sorry, über dne Winter war ich ziemlich untätig,
Und weil Du Dich lange nicht gemeldet hattest, habe ich zwischenzeitlich eine stark veränderte Version entwickelt.
Da sollten wir dann
1. schauen, ob meine Version nicht sinnvoller ist und
2. Warum github ? wenn doch ins FHEM-SVN als offizielles Modul.

ZitatErkennen des Modells ggf. eine Voraussetzung für alles Weitere?
Das lässt sich im Augenblick über das attr testmodel lösen. Set müsstest Du mit der zitierten Version dann bekommen(wird aber vermutlich wie bei Denis ohne Erfolg sein)

Ich werde vermutlich in 1-2 Wochen so weit sein, dass ich hier eine erste Version veröffentlichen kann und dann auch detailliert erläutern, was und warum ich "Funktionalitäten" verändert habe.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

phantom

Hi zusammen, 
es stimmt  :P  testModel bringt nicht wirklich weiter; es bleibt bei den GET's
die SET's über PUT bzw. POST bekomme ich auch mittels curl nicht hin, obwohl curl-GET problemlos klappt
--> ich werde hier auf eine verbesserte Version von KölnSolar warten (nur kein Stress, es scheint ja ohnehin nicht so viel Sonne ...)

Bis dahin habe ich mal die Ecoflow STREAM's mittels MQTT2_CLIENT in FHEM eingebunden und darüber konnte man auch SET's per MQTT-Publish absetzen. Das Ganze via MQTT ist etwas "unplanbar", da nicht zu erkennen ist wann Ecoflow welche der vielen subscribe-Werte aktualisiert.

bis dahin  Gruß phantom

KölnSolar

ZitatBis dahin habe ich mal die Ecoflow STREAM's mittels MQTT2_CLIENT in FHEM eingebunden und darüber konnte man auch SET's per MQTT-Publish absetzen.
Genau.
Zitat--> ich werde hier auf eine verbesserte Version von KölnSolar warten (nur kein Stress, es scheint ja ohnehin nicht so viel Sonne ...)
Da muss ich Dich leider enttäuschen. Ich habe ja dasselbe und ungelöste Problem mit meinem powerstream, der bei anderen problemlos funktioniert. :'(
Mit meiner Version wird lediglich das debugging transparenter, da nicht z.B. durch das set ein reading ein update erfährt, sondern nur, wenn wirklich Daten von der API kommen. Überraschend wieviele readings es gibt, aber nur wenige tatsächlich "genutzt" werden.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

phantom

#139
ich habe die HTTP API nochmal "von Hand" mit curl gemäß der Ecoflow Dokumentation durchprobiert
GET: /iot-open/sign/device/system/main/sn?sn=BKXXXXXXXXXX  klappt problemlos
aber
PUT: /iot-open/sign/device/quota: SetCmdRequest
POST: /iot-open/sign/device/quota: GetCmdRequest, GetCmdResponse

klappt mit den identischen Zugangsdaten nicht, es bringt stets "signature ist wrong"

hat das evtl. schon jemand erfolgreich beim Ecoflow STREAM geschafft?

Neolux

Zitat von: KölnSolar am 21 Februar 2026, 18:17:56
ZitatSollten wir den SourceCode nach Github transferieren?

Sorry, über dne Winter war ich ziemlich untätig,
Und weil Du Dich lange nicht gemeldet hattest, habe ich zwischenzeitlich eine stark veränderte Version entwickelt.
Da habe ich keine Schmerzen mit, ich hatte neulich erst festgestellt, daß alle Notifications vom Forum im Spam gelandet waren, und der wird leider auch recht schnell geleert.
Mich freut, daß Leben in die Sache kommt, und daß ich Verantwortung abgeben kann, ich war dann auch beruflich stark eingespannt und hatte kaum Zeit, mich um das Modul weiter zu kümmern, von daher ist es besser, wenn es auch mehreren Schultern liegt.
Zumal meine Perl-Kenntnisse für den Hausgebrauch reichen, tief in Perl einsteigen wollte ich eigentlich nie.  ;)
Zitat von: KölnSolar am 21 Februar 2026, 18:17:56Da sollten wir dann
1. schauen, ob meine Version nicht sinnvoller ist und
Da muss man nicht schauen, alles andere wäre ein Rückschritt.

Zitat von: KölnSolar am 21 Februar 2026, 18:17:562. Warum github ? wenn doch ins FHEM-SVN als offizielles Modul.
Ja, das meinte ich eigentlich.  :-[

Nein, stellt das ins FHEM-SVN und macht weiter, ich hab im Moment beruflich soviel vorm Bauch, dass ich da sowieso nicht weiterkomme.
Im Gegenteil, das soll ja weitergehen, und dazu ist OpenSource doch da.

Wie schon mal gesagt (glaube ich), ich wollte schon immer mal ein kleines FHEM-Modul schreiben, dieses wurde aus der Not geboren. Und da sich der Solarmarkt so explosiv entwickelt und die Hersteller ihr Angebot so schnell und groß verbreitern... da komm ich wohl nicht hinterher. :)

Also, haut rein, Jungs!
Gruß
Knut

---
Modul 98_Ecoflow.pm für Ecoflow-Komponenten, die aktuellste Version gibt es immer hier

Neolux

Zitat von: phantom am 22 Februar 2026, 17:48:12PUT: /iot-open/sign/device/quota: SetCmdRequest
POST: /iot-open/sign/device/quota: GetCmdRequest, GetCmdResponse
klappt mit den identischen Zugangsdaten nicht, es bringt stets "signature ist wrong"
hat das evtl. schon jemand erfolgreich beim Ecoflow STREAM geschafft?
Da kann ich aus Erfahrung nur den Tipp geben: Meist muss die Reihenfolge der Parameter beachtet werden, sonst ist die Prüfsumme ("Signature") angeblich falsch, obwohl der Wert der Signature sich eigentlich nicht ändert. Nicht ärgern, nur wundern.
Gruß
Knut

---
Modul 98_Ecoflow.pm für Ecoflow-Komponenten, die aktuellste Version gibt es immer hier

MasterRay

Zitat von: Neolux am 26 Februar 2026, 11:40:03Da kann ich aus Erfahrung nur den Tipp geben: Meist muss die Reihenfolge der Parameter beachtet werden, sonst ist die Prüfsumme ("Signature") angeblich falsch, obwohl der Wert der Signature sich eigentlich nicht ändert. Nicht ärgern, nur wundern.

Siehe Ecoflow-Doku (General Information): "Step 1: request parameters must be sorted by ASCII value and concatenated with characters =, &"

dergolem

Hallo zusammen,

kleine Status Update meinerseits:
 $ContentType=$ContentType.";UTF-8"; Geändert in :
 $ContentType=$ContentType.";charset=UTF-8";

¶ms. ×tamp sind natürlich nur Anzeigefehler im Browser &para ist eine HTML-Entität die eine Absatzzeichen erzeugt und &times erzeugt ein x (Multiplikationszeichen) in der Anzeige des Browsers. Wenn man in den Seitenquelltext der Browsers guckt erkennt das schnell...

Get funktioniert:
2026.03.03 10:44:19 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Get(): EcoFlowMax: $model = STREAM MAX
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Get(): EcoFlowMax: $model = STREAM MAX
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Get(): cmd = relay2Onoff
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Get(): EcoFlowMax has GetCmdCodes
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Get(): $key = params.quotas
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Get(): $str_value =
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): Method = POST
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): $nonce=958137 $timestamp=1772531088118
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): $json = {"sn": "BK41Zxxxxxxxxxxx", "params": {"quotas":["relay2Onoff"]}}
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): $request_str = params.quotas[0]=relay2Onoff&sn=BK41Zxxxxxxxxxxx
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): $query_str = params.quotas[0]=relay2Onoff&sn=BK41Zxxxxxxxxxxx&accessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&nonce=958137×tamp=1772531088118
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): $url = /iot-open/sign/device/quota $query_str = params.quotas[0]=relay2Onoff&sn=BK41Zxxxxxxxxxxx&accessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&nonce=958137×tamp=1772531088118
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): $sign = c10141ab3d40c8900a8963b548616c0afd58d82d97a86b04e3ac832e34f6b3d7
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): $json = {"sn": "BK41Zxxxxxxxxxx", "params": {"quotas":["relay2Onoff"]}}
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Response(): $url = https://api-e.ecoflow.com/iot-open/sign/device/quota
2026.03.03 10:44:48 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Response(): $data = {"code":"0","message":"Success","data":{"relay2Onoff":false},"eagleEyeTraceId":"","tid":""}
2026.03.03 10:44:48 4: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Response(): Setting Reading Vars

Nur das die Readings nach dem lesen nicht sofort aktualisiert werden.

Set funktioniert noch nicht :
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Set(): $key = needAck
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Set(): $key = cmdFunc
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Set(): $key = dirSrc
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Set(): $key = cmdId
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Set(): $key = params.cfgRelay2Onoff
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Set(): $str_value = a[2]
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Set(): $key = dirDest
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Set(): $key = dest
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): Method = PUT
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): $nonce=416540 $timestamp=1772531500698
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): $json = {"cmdFunc": "254","cmdId": "17","dest": "2","dirDest": "1","dirSrc": "1","needAck": "true","sn": "BK41Zxxxxxxxxxx", "params": {"cfgRelay2Onoff": "true"}}
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): $request_str = cmdFunc=254&cmdId=17&dest=2&dirDest=1&dirSrc=1&needAck=true&params.cfgRelay2Onoff=true&sn=BK41Zxxxxxxxxx
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): $query_str = cmdFunc=254&cmdId=17&dest=2&dirDest=1&dirSrc=1&needAck=true&params.cfgRelay2Onoff=true&sn=BK41Zxxxxxxxxx&accessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&nonce=416540&timestamp=1772531500698
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): $url = /iot-open/sign/device/quota $query_str = cmdFunc=254&cmdId=17&dest=2&dirDest=1&dirSrc=1&needAck=true&params.cfgRelay2Onoff=true&sn=BK41Zxxxxxxxxxxxxxx&accessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&nonce=416540&timestamp=1772531500698
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): $sign = 19a3010cff2ed1b4c3eddea2a790f88a9b2a29b4a1564a59a652cd62875f8d96
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Request(): $json = {"cmdFunc": "254","cmdId": "17","dest": "2","dirDest": "1","dirSrc": "1","needAck": "true","sn": "BK41Zxxxxxxxxxxxx", "params": {"cfgRelay2Onoff": "true"}}
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Response(): $url = https://api-e.ecoflow.com/iot-open/sign/device/quota
2026.03.03 10:51:40 5: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Response(): $data = {"code":"8524","message":"Validation failed, Please check your param: cfgRelay2Onoff","eagleEyeTraceId":"","tid":""}
2026.03.03 10:51:40 0: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Response(): ERROR! {"code":"8524","message":"Validation failed, Please check your param: cfgRelay2Onoff","eagleEyeTraceId":"","tid":""}
2026.03.03 10:51:40 4: EcoFlowMax(Ecoflow 0.3.9.0): Ecoflow_Response(): Setting Reading Vars
(Params und Timestamp hier verbessert da es sonnst die irrefürende Anzeige aus dem Browser gäbe)


gruß Denis 

KölnSolar

ZitatNur das die Readings nach dem lesen nicht sofort aktualisiert werden
langsame Hardware ? könnte am BlockingCall liegen. Ist dann aber richtig so.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt