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

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

Vorheriges Thema - Nächstes Thema

KölnSolar

Hi Knut,
so gar nicht mehr aktiv ?
ZitatVersuche für gets scheitern mit 405=Method not allowed. dasselbe bekomme ich bei gets mit meinem Powerstream. Evtl. Probleme durch restriktiven Internetzugang konnte ich auch ausschließen. Die MQTT-Variante funktioniert problemlos.
Konnte ich nun lösen. gets bentötigen bei MEINEM powerstream u. Delta2 die Methode "POST". Dass bei "anderen" powerstreams "GET" funktioniert, liegt vielleicht am firmware-Stand ? ::)

Daran
ZitatHabe ich Deine gets richtig verstanden, dass Du nur das Reading ausliest und anzeigst ?
Das würde keinen Sinn machen. Ein get bezieht sich auf das physische Device(in dem Fall die Cloud), also z.B. get update/request, um sofort Daten vom device zu holen, weil man nicht auf den Ablauf des Intervalls warten möchte. Oder um Daten zu ermitteln, die nicht mit dem Standardzyklus übertragen werden.
und dem Thema Events bzw. event-on.... sollten wir uns widmen. Fällt mir immer wieder beim set auf die Füße, weil mir das Modul sagt, es hätte was gemacht und dann stelle ich später fest, dass in der Cloud u. dem Device doch nur der alte Wert steht.  :'( z.B. wenn die WLAN-Verbindung zum Device instabil ist.

Solltest Du so gar keine Zeit haben, würde ich einen fork machen.

Grüße Markus



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

MasterRay

ZitatDass bei "anderen" powerstreams "GET" funktioniert, liegt vielleicht am firmware-Stand ?

Mein PowerStream läuft mit der (aktuellen?) Version 1.0.1.228 (Wifi 1.1.4.150) und das mit "PUT".

Schönen Tach auch.

KölnSolar

PUT beim set, oder ? Der Standard im Modul beim get ist GET und nur beim POWEROCEAN ist es POST.
Um so mehr war ich verwundert, dass mein POWERSTREAM auch nur mit POST funktioniert.

Mein Firmwarestand ist 1.1.4.61 und es wird mir die Aktuellste mit 1.1.4.140 angeboten.
Siehst Du die WifiVersion irgendwo in der Äpp oder auch nur in den readings ? Dort ist es bei mir ebenfalls 1.1.4.61  :-\

Grüße
Markus
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

MasterRay

... HTTP-GET zum Lesen von "Ressourcen" (read), HTTP-PUT zum Senden (also ändern) bestehender "Ressourcen" (modify). Ganz klassisch ;-)

HTTP-POST wird ja, so wie ich das kenne, eher zum Hinzufügen (add) verwendet. Wenn z.B. Dateien hochgeladen werden sollen. Daher wundert mich Deine Erfahrung.

Der Wifi-Stand wird in der App beim PowerStream unter Einstellungen/Firmware angezeigt. Bei der Delta3 aber nicht.

Viele Grüße

KölnSolar

#94
Et is wie et is.  8) Schon alleine wieder, dass in Deiner Äpp 2 Firmwareversionen angezeigt werden. Bei mir nur eine unter Einstellungen/Firmware. Und jetzt kann ich nicht noch einmal gucken, weil das Ding keinen Saft mehr hat. :'(

Für die Ungläubigen habe ich es mal mit der Delta2(die hat ja 24/7 ne Verbindung  :-X ) gelogged mit Methode GET:
2025.12.16 16:51:35 3: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): redirects: 0, protocol: https, path: /iot-open/sign/device/quota, host: api-e.ecoflow.com, httpheader: HTTP/1.1 405 Method Not Allowed
Date: Tue, 16 Dec 2025 15:51:35 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 75
Connection: close
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Allow: POST,PUT
x-timestamp: 1765900295683, addr: https://api-e.ecoflow.com:443, host: api-e.ecoflow.com

Wenn die Methode also noch nicht einmal modellabhängig ist, wird man wohl oder übel zur Verallgemeinerung ein Internal beschreiben müssen, in welchem man die Methode hinterlegt, wenn der jeweils 1. Aufruf mit einem Standard(GET) in einem Fehler 405 endet.

Grüße Markus


Edit: Hab dann auch noch einmal schnell ein set mit der Modifizierung des standardmäßigen PUT durch ein GET bei der Delta2 probiert:
405 und Allow: POST,PUT Also mal auf POST geändert, http fehlerfrei, aber leider
2025.12.16 17:49:15 0: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): ERROR! {"code":"8524","message":"invalid parameter","eagleEyeTraceId":"","tid":""}
Und wie ich oben bereits schrieb: mit PUT geht das set durch(SUCCESS). Nur leider kommt es in der Delta2 nie an.  :'(
Bisher hatte ich ja immer mein nicht ganz so einfaches Netzwerk im Verdacht, aber beim Powerstream kommt der Befehl bei identischen Netzwerkbedingungen an, bei der Delta2 nicht.  :o

Edit2: Wo es nun wieder hell ist, habe ich wegen der firmware vom powerstream in die Äpp geguckt: Ich finde unter "Mikro-Wechselrichtersystem"/Einstellungen/Firmware die Seriennr. des powerstream. Unter "AndereGeräte/Powerstream"/Einstellungen/Firmware "WLAN". Meintest Du das ? Bei mir sind die Versionen allerdings identisch.
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

Stefan6183

Hallo zusammen,

ich habe jetzt seit einigen Wochen einen EcoFlow PowerOcean Plus 20kW Wechselrichter mit einer EcoFlow PowerOcean 5kWh Batterie in Betrieb und würde gerne eine einfache Ansteuerung über FHEM realisieren.
Die aktuelle 98_Ecoflow.pm und die abhängigen Module habe ich auf meinem Raspi installiert mit:
sudo apt-get update
sudo apt-get install liburl-encode-perl
sudo apt-get install libwww-curl-perl
sudo apt-get install libtime-hires-perl
sudo apt-get install libdigest-sha-perl

In FHEM habe ich folgendes gemacht:
define PowerOcean Ecoflow <meinAccessKey> <meineSerialNr>
set PowerOcean SecretKey <meinSecretKey>
attr PowerOcean ecInterval 120

Leider erhalte ich als Readings nur:
code: 1006
message: current device is not allowed to get device info

Das set PowerOcean detectModel schreibt ins Log:
2025.12.30 18:13:25 3: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_DetectModel(): Trying to detect model.
2025.12.30 18:13:25 2: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_DetectModel(): Model "" detected.
2025.12.30 18:13:25 0: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_DetectModel(): Modul initialised.
2025.12.30 18:13:26 0: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Response(): ERROR! {"code":"1006","message":"current device is not allowed to get device info","eagleEyeTraceId":"","tid":""}

Habt ihr einen Tipp, was ich noch versuchen könnte?

Grüße und einen guten Rutsch ins Neue Jahr!
Stefan

KölnSolar

Die Meldung kommt ja vom ecoflow-Server.

Ich könnte mir vorstellen, dass das Gerät bei ecoflow nicht Deinem Developer-Account zugeordnet ist, mit dem Du Dir access- und secret-key besorgt hast.

Ansonsten mal ein Log mit verbose 5 hier einstellen, wenn Du "get devices" ausführst.
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

Stefan6183

Wie kann ich denn bei EcoFlow das Gerät meinem Developer-Account zuordnen?
Ich verwende bei meinem Developer Account die selbe Emailadresse und den selben Login wie in der EcoFlow App, wo die Seriennummern von Wechselrichter und Batterie korrekt erfasst sind.

Hier ein Log mit verbose 5 vom "get devices" (ein paar sensible Daten habe ich verändert):
2025.12.30 19:33:13 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Get(): PowerOcean: $model =
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Get(): PowerOcean: $model =
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Get(): cmd = devices
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Request(): Method = GET
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Request(): $nonce=742945 $timestamp=1767119604670
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Request(): $url = /iot-open/sign/device/list $query_str = accessKey=hierStehtMeinAccessKey&nonce=742945&timestamp=1767119604670
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Request(): $sign = 7dfd2d1acd25b160333cverändert7d19c432ac2d71768veränderte67edc383
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Response(): $url = https://api-e.ecoflow.com/iot-open/sign/device/list
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Response(): $data = {"code":"0","message":"Success","data":[{"sn":"hierStehtMeineSeriennummer","online":1}],"eagleEyeTraceId":"","tid":""}
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Response(): code = 0
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Response(): data_1_online = 1
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Response(): data_1_sn = hierStehtMeineSeriennummer
2025.12.30 19:33:24 4: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Response(): data_1_sn : Comparing SerialNo hierStehtMeineSeriennummer
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Response(): $base = data_1
2025.12.30 19:33:24 4: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Response():
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Response(): eagleEyeTraceId =
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Response(): message = Success
2025.12.30 19:33:24 5: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Response(): tid =

KölnSolar

ZitatIch verwende bei meinem Developer Account die selbe Emailadresse und den selben Login wie in der EcoFlow App, wo die Seriennummern von Wechselrichter und Batterie korrekt erfasst sind.
...ist genau richtig und wichtig.
Zitat{"code":"0","message":"Success","data":[{"sn":"hierStehtMeineSeriennummer","online":1}],"eagleEyeTraceId":"","tid":""}
Also funktioniert es ja !
Und jetzt habe ich erst richtig hingeguckt:
Das set PowerOcean detectModel schreibt ins Log:
2025.12.30 18:13:25 3: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_DetectModel(): Trying to detect model.
2025.12.30 18:13:25 2: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_DetectModel(): Model "" detected.
2025.12.30 18:13:25 0: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_DetectModel(): Modul initialised.
2025.12.30 18:13:26 0: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Response(): ERROR! {"code":"1006","message":"current device is not allowed to get device info","eagleEyeTraceId":"","tid":""}
ist leider eine irreführende "normale" Meldung beim Start des Moduls. Danach funktionieren alle Zugriffe.

Bitte demnächst Log-Auszüge in Code-Tags posten.  ;)

Grüße Markus
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

Stefan6183

Ok, also verstehe ich das richtig, dass ich die Meldung "current device is not allowed to get device info" ignorieren kann?

Aber sollte bei Ecoflow_DetectModel(): Model "" detected nicht Model "POWEROCEAN" stehen?
Das Ecoflow Device bietet mir nämlich keine gerätespezifischen get und set Kommandos an.
Bei get z.B. nur get AccessKey, get SerialNo und get devices.

KölnSolar

Wahrscheinlich schon. Probier es mal, indem Du das attr model setzt.

Bei powerstream u. Delta2 sieht das Ergebnis eines get devices(ohne attr model) so aus25.12.13 09:58:11 5: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): $data = {"code":"0","message":"Success","data":[{"sn":"xy","deviceName":"PowerStream-8875","online":1,"productName":"PowerStream"},{"sn":"yz","deviceName":"DELTA 2-0024","online":1,"productName":"DELTA 2"}],"eagleEyeTraceId":"","tid":""}
2025.12.13 09:58:11 5: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): code = 0
2025.12.13 09:58:11 5: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): data_1_deviceName = PowerStream-8875
2025.12.13 09:58:11 5: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): data_1_online = 1
2025.12.13 09:58:11 5: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): data_1_productName = PowerStream
2025.12.13 09:58:11 5: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): data_1_sn = xy
2025.12.13 09:58:11 4: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): data_1_sn : Comparing SerialNo xy
2025.12.13 09:58:11 5: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): data_2_deviceName = DELTA 2-0024
2025.12.13 09:58:11 5: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): data_2_online = 1
2025.12.13 09:58:11 5: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): data_2_productName = DELTA 2
2025.12.13 09:58:11 5: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): data_2_sn = yz
2025.12.13 09:58:11 4: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): data_2_sn : Comparing SerialNo yz
2025.12.13 09:58:11 5: Delta2_AC(Ecoflow 0.3.9.0): Ecoflow_Response(): $base = data_2

Die Zeilen ..._productName ..._deviceName vermisse ich in Deinem Log.

Hast Du das Internal "Model" ?
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

matsches

Hi

Der PowerOcen-Plus wird m.E. generell (noch) nicht unterstützt.

Zitat und Quelle: "Ich hab grad 'ne Antwort von Ecoflow bekommen. PowerOcean Plus Geräte werden in ihrer API nicht unterstützt, und es ist unklar, ob und wann das der Fall sein wird. :("

Mein PO ohne "Plus" wird zwar unterstützt und hat auch mal mit fhem funktioniert, aber ich bin letztendlich dann zu Homeassistant gewechselt.
Dort funktioniert es etwas reibungsloser mit der PO-Integration.

Grüße
Mathias