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

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

Vorheriges Thema - Nächstes Thema

phantom

Wo findet man denn die historischen Daten, die man z.B. mit "BatteryChargingDischargingPower" abrufen kann ?
Ich sehe nur die Resultbox "historical data requested".
Ich habe einen STREAM ULTRA, der die normalen Daten per HTTP-REST ansonsten prima empfängt.

KölnSolar

sollten nach dem request dann in den readings stehen. Ggfs. bei einem 1. request in den internals.
Ich würde 3 readings erwarten: indexName, indexValue, unit. Bei manchen requests noch ein 'extra'

Poste gerne mal ein list des devices mit dem vorhergehenden request...
RPi5/3/2 Trixie-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)-ecovacs(mqtt2)-zigbee2mqtt

phantom

#197
es ist deine Modulversion aus Post #168
hier ein list des Ecoflow STREAM Ultra:
Internals:
   AccessKey  xxxxxxxx
   DEF        yyyyyyyy BKzzzzz
   FUUID      69bbd54e-f33f-d00b-a4c2-5722bab9a85c49d4
   Model      STREAM UP
   ModulVersion V 0.0.0.1
   NAME       Ecoflow_Ultra1
   NR         453
   STATE      PV: 24 GridCon: -229 SysGrid: 1382 SysLoad: 1369 BP: 36 SoC: 30 - - 2026-04-02 18:17:34
   SerialNo   BKzzzzz
   TYPE       Ecoflow
   eventCount 71
   READINGS:
     2026-04-02 15:55:12   code            0
     2026-04-02 18:17:34   data_backupReverseSoc 30
     2026-04-02 18:17:34   data_cmsBattSoc 30.0
     2026-04-02 18:17:34   data_cmsMaxChgSoc 95
     2026-04-02 18:17:34   data_cmsMinDsgSoc 20
     2026-04-02 18:17:34   data_energyStrategyOperateMode.operateIntelligentScheduleModeOpen false
     2026-04-02 18:17:34   data_energyStrategyOperateMode.operateSelfPoweredOpen true
     2026-04-02 18:17:34   data_feedGridMode 2
     2026-04-02 18:17:34   data_gridConnectionPower -229.46362
     2026-04-02 18:17:34   data_powGetBpCms 36.463623
     2026-04-02 18:17:34   data_powGetPvSum 24.0
     2026-04-02 18:17:34   data_powGetSysGrid 1382.0
     2026-04-02 18:17:34   data_powGetSysLoad 1369.5364
     2026-04-02 18:17:34   data_quota_cloud_ts 2026-04-03 00:15:12
     2026-04-02 18:17:34   data_relay2Onoff true
     2026-04-02 18:17:34   data_relay3Onoff true
     2026-04-02 15:55:12   eagleEyeTraceId
     2026-04-02 18:17:34   message         Success
     2026-04-02 15:55:12   tid             
Attributes:
   Model      STREAM UP
   interval   120
   room       PowerMeter
   stateFormat {sprintf("PV: %d GridCon: %d SysGrid: %d SysLoad: %d BP: %d SoC: %d - - %s", ReadingsVal($name,"data_powGetPvSum",0), ReadingsVal($name,"data_gridConnectionPower",0),ReadingsVal($name,"data_powGetSysGrid",0), ReadingsVal($name,"data_powGetSysLoad",0), ReadingsVal($name,"data_powGetBpCms",0),ReadingsVal($name,"data_cmsBattSoc",0),ReadingsTimestamp($name,"data_gridConnectionPower","???") )}
ein attr global showInternalValues 1 zeigt zusätzlich nur MQTT-secrets

KölnSolar

#198
mach noch die SerialNo unkenntlich !

Ist ja übersichtlich im Vergleich zu einer Delta....

Ich gleiche es mal mit der Developer-Doku ab und editiere dann diesen Beitrag

Edit:
regelmäßige Daten
2026-04-02 18:17:34   data_backupReverseSoc 30
     2026-04-02 18:17:34   data_cmsBattSoc 30.0
     2026-04-02 18:17:34   data_cmsMaxChgSoc 95
     2026-04-02 18:17:34   data_cmsMinDsgSoc 20
     2026-04-02 18:17:34   data_energyStrategyOperateMode.operateIntelligentScheduleModeOpen false
     2026-04-02 18:17:34   data_energyStrategyOperateMode.operateSelfPoweredOpen true
     2026-04-02 18:17:34   data_feedGridMode 2
     2026-04-02 18:17:34   data_gridConnectionPower -229.46362
     2026-04-02 18:17:34   data_powGetBpCms 36.463623
     2026-04-02 18:17:34   data_powGetPvSum 24.0
     2026-04-02 18:17:34   data_powGetSysGrid 1382.0
     2026-04-02 18:17:34   data_powGetSysLoad 1369.5364
     2026-04-02 18:17:34   data_quota_cloud_ts 2026-04-03 00:15:12
     2026-04-02 18:17:34   data_relay2Onoff true
     2026-04-02 18:17:34   data_relay3Onoff true
historische Daten
keine
Wie sah Dein get aus ? get Ecoflow_Ultra1 BatteryChargingDischargingPower ?????????
RPi5/3/2 Trixie-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)-ecovacs(mqtt2)-zigbee2mqtt

phantom

nach dem get Ecoflow_Ultra1 BatteryChargingDischargingPower erscheint nur eine Anzeig-Box mit dem Inhalt historical data requested ; die kann man dann mit OK schließen


KölnSolar

#200
schon klar, das kommt ja so vom Modul.
Denis hatte zwar geschrieben, dass ohne Angabe von timestamps der aktuelle Tag ausgelesen wird, aber vielleicht musst Du ja Zeiten mitgeben
ZitatbeginTime   dateTime   Query start time, formatted as 'yyyy-MM-dd HH:mm:ss', in UTC timezone. The effective range refers to the query latitude column.
endTime   dateTime   Query end time, formatted as 'yyyy-MM-dd HH:mm:ss', in UTC timezone. The effective range refers to the query latitude column.
z.B.
get Ecoflow_Ultra1 BatteryChargingDischargingPower 2026-04-02 07:00:00 2026-04-02 21:00:00 Sonst müssen wir auf Denis warten...

Edit: wenn ich Denis's code richtig interpretiert habe, wird ohne Angabe von timestamps der aktuelle Tag in den request generiert. Kannst ja auch mal ein get bei verbose=5 machen und das Log posten.
RPi5/3/2 Trixie-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)-ecovacs(mqtt2)-zigbee2mqtt

KölnSolar

Frohe Ostern,

anbei eine neue Version:
- kleiner bug, der zu Plotfehlern führte, beseitigt
- Code vereinheitlicht und lesbarer gestaltet

Wegen Letzterem prüft bitte etwas intensiver, ob mir beim change vieler Zeilen nicht vielleicht ein Tipp-Fehlerchen unterlaufen ist. Insbesondere die Abfrage historischer Daten.

Grüße Markus
RPi5/3/2 Trixie-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)-ecovacs(mqtt2)-zigbee2mqtt

dergolem

#202
Hallo Markus,

ich habe es jetzt endlich mal geschafft, die neue Version zu testen. Die "Historischen" Daten funktionieren nicht.
bei der Antwort steht nur:
2026.04.20 08:52:13 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Response(): $url = https://api-e.ecoflow.com/iot-open/sign/device/quota/data
in Zeile 846 und 847 muß noch || $param->{url} eq $HOST.$GET_QUOTA_URL."/data"
Gruß Denis[/code]

dergolem

Hi,

so hab weiter getestet, in der Response ist jetzt der Fehler "signature is wrong":


2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Get(): cmd = Grid
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Get(): EcoFlowMax has GetCmdCodes
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Get(): $key = params.beginTime
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Get(): params $str_value = a[2] a[3]
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Get(): $key = params.endTime
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Get(): params $str_value = a[4] a[5]
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Get(): $key = params.code
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Get(): params $str_value = BK621-App-HOME-GRID-ENERGY-FLOW-grid_prop_bar-NOTDISTINGUISH-MASTER_DATA
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Gets(): setting URL to /iot-open/sign/device/quota/data
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_SingleRequest(): $json = {"sn": "BK41xxxxxxxxxxxxx", "params": {"beginTime": "2026-04-20 00:00:00","code": "BK621-App-HOME-GRID-ENERGY-FLOW-grid_prop_bar-NOTDISTINGUISH-MASTER_DATA","endTime": "2026-04-20 23:59:59"}}
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Request(): $json={"sn": "BK41xxxxxxxxxxxx", "params": {"beginTime": "2026-04-20 00:00:00","code": "BK621-App-HOME-GRID-ENERGY-FLOW-grid_prop_bar-NOTDISTINGUISH-MASTER_DATA","endTime": "2026-04-20 23:59:59"}} $query_str=params.beginTime=2026-04-20%2000%3A00%3A00¶ms.code=BK621-App-HOME-GRID-ENERGY-FLOW-grid_prop_bar-NOTDISTINGUISH-MASTER_DATA¶ms.endTime=2026-04-20%2023%3A59%3A59&sn=BK41ZE1B2H5B7155&
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Request(): $accessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx $nonce=951547 $timestamp=1776672352854
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Request(): $url = /iot-open/sign/device/quota/data $query_str = params.beginTime=2026-04-20%2000%3A00%3A00¶ms.code=BK621-App-HOME-GRID-ENERGY-FLOW-grid_prop_bar-NOTDISTINGUISH-MASTER_DATA¶ms.endTime=2026-04-20%2023%3A59%3A59&sn=BK41xxxxxxxxxxx&accessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&nonce=951547×tamp=1776672352854
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Request(): $sign = d908a0b3d51907fabb0373b50248d7853fc10e6cf4ebe69c6e1cb060a6a63800
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Request(): $json = {"sn": "BK41xxxxxxxxxxxx", "params": {"beginTime": "2026-04-20 00:00:00","code": "BK621-App-HOME-GRID-ENERGY-FLOW-grid_prop_bar-NOTDISTINGUISH-MASTER_DATA","endTime": "2026-04-20 23:59:59"}}
2026.04.20 10:05:52 5: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Response(): $url = https://api-e.ecoflow.com/iot-open/sign/device/quota/data
2026.04.20 10:05:52 0: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Response(): ERROR! {"code":"8521","message":"signature is wrong","eagleEyeTraceId":"","tid":""}
2026.04.20 10:05:52 4: EcoFlowMax(Ecoflow 0.0.0.2): Ecoflow_Response(): Update Readings

KölnSolar

Hi Denis,
Danke Dir.

Ich habe auch noch einen Bug entdeckt, der aber nur bei den Deltas zum Tragen kommt. Ich gucke dann mal, ob ich Deine Korrekturvorschläge in meiner neusten Version so einfach umgesetzt bekomme.

@StreamUltra/Pro/Max-User: Die Dinger sind ja spottbillig. Könnte mal jemand ein list einstellen, dass man die möglichen readings sieht.
Und könnte vielleicht jemand beschreiben, ob Laden/Entladen bei der Ultra/Pro/Max(eben nicht AC) auch über den Netzanschluss steuerbar ist.
Was ich damit meine: Bei der Delta ist das möglich, wenn man an die Delta einen Powerstream anschließt. Man kann dann die Entladeleistung über den Powerstream steuern, braucht also keinen zusätzlichen Smartmeter, sondern steuert die Entladeleistung am Powerstream per FHEM, wenn dort bereits die Daten von einem anderen Smartmeter verfügbar sind.

Grüße Markus
RPi5/3/2 Trixie-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)-ecovacs(mqtt2)-zigbee2mqtt

KölnSolar

Hi Denis,

historische Daten und Abfrage der URL ist jetzt klar für mich.

Das signature-Problem noch nicht. Ich habe gesehen, dass ich Deine damalige Änderung $ContentType=$ContentType.";charset=UTF-8";
nicht drin habe. Liegt es daran ? Wenn nicht, gehen denn andere sets/gets und nur bei den historischen Daten kommt "signature is wrong" ?

Grüße Markus
RPi5/3/2 Trixie-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)-ecovacs(mqtt2)-zigbee2mqtt