FHEM Forum

FHEM - Energiemanagement und Energieerzeugung => Solaranlagen => Thema gestartet von: Neolux am 17 Februar 2025, 13:10:08

Titel: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 17 Februar 2025, 13:10:08
Da bei mir die MQTT2-Anbindung zur Ecoflow-API seit Wochen nichts mehr sendet, hab ich mich mal hingesetzt und angefangen, ein Modul für die Ecoflow-Komponenten zu schreiben.

Für die Anbindung benötigt ihr noch folgende Perl-Module:
Time::HiRes,Digest::SHA,URL::Encode

Und noch was: Das ist mein allererstes FHEM-Modul, wahrscheinlich ist noch nicht alles so, wie es soll. :)

Installation:
- Modul ins FHEM-Verzeichnis kopieren
- Developer-Zugang bei https://developer-eu.ecoflow.com beantragen
- AccessKey und Secret erstellen bei https://developer-eu.ecoflow.com/us/security
- Seriennummern der Ecoflow-Geräte aus der App bereithalten

Modul in FHEM definieren:
define <Name> Ecoflow <AccessKey> <SerialNr>

set <Name> SecretKey # Password/SecretKey für AccessKey eingeben
attr <Name> ecInterval <zahl> # Polling Intervall für HTTP-REST-API in Sekunden zwischen 60 und 600

Geräte-Spezifische Gets und Sets können in der Doku nachgeschlagen werden: https://developer-eu.ecoflow.com/us/document/ (https://developer-eu.ecoflow.com/us/document/)

Ich hoffe, das nützt jemandem. Ich hab einen Powerstream und eine Delta2Max, daher weiß ich noch nicht, was andere Komponenten so für Daten ausgeben. ;)

Hab die Unterstützung für die PowerOcean angefangen, einzubauen, hier ist anscheinend noch weitere Arbeit nötig. Geräte-Erkennung habe ich verbessert.
Unterstützung für die Delta Pro ist nun auch begonnen. Hier wurde ich etwas von der API überrascht, und konnte einiges an Code kürzen und optimieren.

Die aktuellste Version gibt es nun immer hier!


98_Ecoflow.pm Version 0.3.8.8 vom 10.06.2025
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: matsches am 17 Februar 2025, 16:26:40
Hi. So ein Zufall! Super!
Ich verzweifle seit tagen an der MQQT2-Einbindung und bekomme einfach keinerlei Daten. Die Api von Ecoflow ist irgendwie...
Werde dein Modul später ausprobieren. Vielen Dank schonmal!
Bin gespannt, ob ich vom PowerOcean dann endlich Daten erhalte.

Viele Grüße
Mathias
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 17 Februar 2025, 16:28:58
Das sollten wir hinbekommen... etwas debuggen, dann kommen auch von dem Daten. ;)
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 21 Februar 2025, 11:45:39
Update:
Status wird nicht mehr "hart" gesetzt, sondern beachtet jetzt "stateFmt".
Readings funktionieren jetzt ganz gut (zumindest bei meinen Komponenten Delta 2 Max und Powerstream), beim Setzen von Werten hab ich noch Probleme, obwohl das lt. API-Dokumentation korrekt sein sollte, das hab ich erstmal beiseite gelegt und mach da später nochmal einen neuen Ansatz.

Ich sehe jetzt erstmal zu, daß ich die verschiedenen Modelle einpflege.

(Aktuellste Version immer im 1. Post dieses Threads!)
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: DeeSPe am 21 Februar 2025, 12:31:30
Nur zur Info wegen der Modulentwicklung:

Das Modul bitte nicht mit "99_" anfangen lassen da diese Module automatisch von FHEM geladen werden, egal ob es ein Device dazu gibt oder nicht.
Also z.B. einfach "98_" daraus machen.

Gruß
Dan
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 21 Februar 2025, 14:52:58
Okay. :)

(Aktuellste Version immer im 1. Post dieses Threads!)
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Gunther am 26 Februar 2025, 21:41:14
Super, dass Du ein Modul baust...   :)

Zitat von: Neolux am 17 Februar 2025, 13:10:08Für die Anbindung benötigt ihr noch folgende Perl-Module:
WWW::Curl::Easy, Time::HiRes,Digest::SHA
Was muss ich hier tun?
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: MOLUSER am 27 Februar 2025, 21:26:30
Hallo zusammen,
ich stehe hier vor dem gleichen Problem, da meine Ecoflow API nicht mehr funktioniert.

Wie sind denn die Perl-Module zu installieren?
WWW::Curl::Easy, Time::HiRes,Digest::SHA
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 27 Februar 2025, 21:32:54
Kommt drauf an... entweder über Deine Distribution mit den Paketen libperl... (z.B. Debian oder Ubuntu, andere kenne ich nicht so gut) oder direkt über den ,,cpan"-Befehl auf der Kommandozeile.

https://linux.die.net/man/3/cpan
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: matsches am 04 März 2025, 12:30:55
Hi.

Das funktioniert ganz gut auch mit der PowerOcean. Vielen Dank.
Wahnsinn, was da für eine Datenflut ankommt die man dann eindämmen muss. :)
Das Update habe ich allerdings verpasst, ich bin noch mit der ersten Version unterwegs.

Zitat von: Neolux am 21 Februar 2025, 11:45:39Update:
Status wird nicht mehr "hart" gesetzt, sondern beachtet jetzt "stateFmt".
Bin mal gespannt, wie sich das auswirkt. Muss ich heuteabend mal testen.

Grüße
Mathias

Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: KölnSolar am 04 März 2025, 17:35:46
Ich les mal mit und probiere das Modul aus, wenn ich mal wieder Zeit dazu habe.

Meine Delta2 habe ich super über MQTT (https://forum.fhem.de/index.php?topic=133322.msg1298851#msg1298851) im Griff. Steuern funktioniert immer. Werte auslesen nur, wenn die App mit der Cloud verbunden wird.

Der Powerstream lässt sich nicht per MQTT einbinden.  :'( 
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: tschimi am 07 März 2025, 10:32:15
Hi, ich hab das jetzt mal ausprobiert. Leider hat das Beantragen des Devzugangs ne Weile gedauert. Nun konnte ich auch alles installieren und die Defines in Fhem anlegen.
Beim Password gehe ich mal davon aus, das es sich um den SecretKey handelt.

Jetzt sagt aber leider die Message in meinem Ecoflow-device "no permission to do it".

Frage: Was habe ich übersehen??

Lg, tschimi

P.S.: Für alle die, die mit Cpan so ihre Probleme hatten... Versucht mal "sudo apt-get install libwww-curl-perl". Nur so hab ich WWW::Curl::Easy installiert bekommen bei meinem Debian
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 07 März 2025, 11:07:03
So, sorry, war eine Woche mal nicht zuhause.  ;)

Zitat von: tschimi am 07 März 2025, 10:32:15Hi, ich hab das jetzt mal ausprobiert. Leider hat das Beantragen des Devzugangs ne Weile gedauert. Nun konnte ich auch alles installieren und die Defines in Fhem anlegen.
Beim Password gehe ich mal davon aus, das es sich um den SecretKey handelt.

Jetzt sagt aber leider die Message in meinem Ecoflow-device "no permission to do it".

Frage: Was habe ich übersehen??
Richtig, Password ist der SecretKey. Ganke für die Rückmeldungen, ich kann das natürlich ändern, daß man statt "set <DeviceName> password <secretkey>" besser "<set DeviceName> secretkey <secretkey>" verwenden muss. Ist notiert.

"No permmission to do it" sagt mir so nichts. Am besten setzt Du mal "verbose" des Devices auf "5", dann "set <DeviceName> connect" und postest mal den Logauszug. Ich denke mal, AccessKey und SecretKey hast Du korrekt gesetzt.

Zitat von: KölnSolar am 04 März 2025, 17:35:46Der Powerstream lässt sich nicht per MQTT einbinden.  :'( 
Hm, bei mir ging beides wunderbar, hab die Anlage seit Juli '24, und ich konnte die Anlage über MQTT auslesen und über FHEM steuern. Seit Mitte Januar '25 schweigt die MQTT-Verbindung, und auch SET-Befehle werden nicht mehr angenommen.

Im übrigen kann man den Support von Ecoflow echt vergessen. Da kommen dann nur Vorschläge wie: Die Anlage komplett auseinanderstöpseln, stromlos machen und wieder zusammenstecken, und dann mal sehen.

Die SET-Befehle per HTTP-API liefern nach wie vor eine Fehlermeldung, obwohl die Signatur korrekt berechnet wird, was ich anhand der Beispiele aus der Doku geprüft habe, erhalte diesselbe Prüfsumme. Hier schweigt der Developer-Support.

Ich bin derzeit geneigt, dieses Modul einfach nur zum Auslesen zu nutzen, da die App immer umfangreicher wird, so daß ich dort auch viel automatisieren kann. Allerdings kann man da nicht so "schlaue" Sachen machen, wie täglich die Batterie erstmal auf 80% laden und dann die Stromversorgung priorisieren, sofern die Solareinspeisung unter dem Strombedarf liegt. oder so feinere Steuerungen. Das ginge mit FHEM echt smarter.

Wie auch immer, bin gespannt auf das Logfile (Bitte alles sicherheitsrelevante rauslöschen, ist ja klar) und bin auch neugierig, Screenshots zu sehen, ob die Geräte wie eine PowerOcean richtig erkannt werden, ich hab das ja nur "blind" aus der Doku übernommen.
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 07 März 2025, 11:11:24
Zu den Perl-Modulen: Ich mach das bei mir mit CPAN:
sudo cpan -i WWW::Curl::Easy Time::HiRes Digest::SHA
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: matsches am 07 März 2025, 12:06:30
Hi.

Hier mal das was die PowerOcean so auswirft.
Anlage: 10.235 kWp Bauer-Module, Ecoflow PowerOcean 10kW, 10kWh PowerOcean-Batterie (2 Module a 5 kWh)

Ich hoffe ich habe alles sicherheitsrelevante ausgeixxt und die Vorgehensweise "Copy for forum.fhem.de" ist so korrekt.
Leider aktualisieren sich die Daten nur, wenn ich parallel die App oder das Webportal aufrufe. Ich meine das war bei der ersten Version deines Moduls nicht so.

define PO2 Ecoflow SCy68xxxxxxxxxxxxxxxxxx HJ3xxxxxxxxxxxxxxx
attr PO2 ecInterval 10
attr PO2 group Energie
attr PO2 icon measure_photovoltaic_inst
attr PO2 room Energie
attr PO2 stateFormat Solarertrag: [$name:data_mpptPwr] W <br>Hausnetz: [$name:data_sysLoadPwr] W <br> Batterie: [$name:data_bpPwr] W <br>Ladestatus: [$name:data_bpSoc] % <br>Netzeinspeisung: [$name:data_sysGridPwr] W <br>Letzte Meldung: [$name:data_sysLoadPwr:t]
attr PO2 verbose 5
#  AccessKey  SCy68xxxxxxxxxxxxxxxxxxxxxxxxxx
#  DEF        SCy68xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#  FUUID      67c76xxxxxxxxxxxxxxxxxxxxxxxxxx
#  NAME      PO2
#  NR        801
#  NTFY_ORDER 50-PO2
#  Online    1
#  STATE      Solarertrag: 6350.0 W <br>Hausnetz: 1070.0 W <br> Batterie: 0.0 W <br>Ladestatus: 100 % <br>Netzeinspeisung: -5280.0 W <br>Letzte Meldung: 2025-03-07 11:53:42
#  SerialNo  HJ3xxxxxxxxxxxxxx
#  TYPE      Ecoflow
#  eventCount 40433
#  READINGS:
#    2025-03-06 18:24:25  code            0
#    2025-03-07 11:39:52  data_bpPwr      0.0
#    2025-03-07 11:39:51  data_bpSoc      100
#    2025-03-07 11:52:38  data_bp_addr.HJ3xxxxxxxxxxxxx {
#  "bpPwr": -0.64905936,
#  "bpSoc": 100,
#  "bpSoh": 100,
#  "bpTemp": [29.0, 31.0, 29.0, 30.0, 31.0, 28.0, 29.0, 29.0, 30.0],
#  "bpCellMaxVol": 3405.0,
#  "bpCellMinVol": 3355.0,
#  "bpRunSta": "RUNSTA_RUN",
#  "bpVol": 54.326,
#  "bpAmp": -0.01194749,
#  "bpBusVol": 832.07184,
#  "bpErrCode": 2,
#  "bpCellVol": [3395.0, 3399.0, 3398.0, 3395.0, 3399.0, 3404.0, 3401.0, 3404.0, 3355.0, 3402.0, 3405.0, 3402.0, 3401.0, 3401.0, 3397.0, 3403.0],
#  "bpDsrc": 1,
#  "bpSn": "Sxxxxxxxxxxxxxxxxxxxxxx",
#  "bpCycles": 28,
#  "bpBalanceState": 21589,
#  "bpHvMosTemp": 40.0,
#  "bpLvMosTemp": 38.0,
#  "bpPtcTemp": 31.0,
#  "bpHtsTemp": 38.0,
#  "bpBusNegTemp": 36.0,
#  "bpBusPosTemp": 39.0,
#  "bpEnvTemp": 37.0,
#  "bpAccuChgCap": 2637324,
#  "bpAccuDsgCap": 2571636,
#  "bpDesignCap": 100000,
#  "bpFullCap": 100000,
#  "bpMaxCellTemp": 31.0,
#  "bpMinCellTemp": 28.0,
#  "bpMaxMosTemp": 40.0,
#  "bpMinMosTemp": 38.0,
#  "bpBmsFault": 0,
#  "bpEcloundSoc": 65535,
#  "bpHeartbeatVer": 33,
#  "bpTimestamp": 1741344751,
#  "bpRealSoc": 99.0,
#  "bpRealSoh": 104.86778,
#  "bpGlobalProtect": 32,
#  "bpDownLimitSoc": 5,
#  "bpUpLimitSoc": 100,
#  "bpActiveCalReqStat": 0,
#  "bpActiveCalRunStat": 0,
#  "moduleProductInfo": 21251,
#  "moduleProgramSta": 1,
#  "moduleAplSwVer": 67176967,
#  "moduleLoaderSwVer": 67174401,
#  "bmsRunSta": "PB_BMS_STATE_DISCHARGEABLE",
#  "bmsChgDsgSta": "PB_STANDBY_STATE",
#  "dabModSta": "PB_MOD_STA_WARNNING",
#  "bpChgSop": 0,
#  "bpDsgSop": 80,
#  "bpRemainWatth": 5120.0,
#  "bpTargetSoc": 99.9,
#  "bpDiffSoc": 2.734375,
#  "bpMaxSoc": 100.0,
#  "bpMinSoc": 97.26585,
#  "bpLimitSoc": 0.5,
#  "bpCalendarSoh": 99.84766,
#  "bpCycleSoh": 99.84766,
#  "bpAcRechargeFlag": false,
#  "bpPtcHeatFlag": false,
#  "bpPtcExitEvent": "PB_PTC_OT_STATE",
#  "bpAccuChgEnergy": 142158,
#  "bpAccuDsgEnergy": 133496,
#  "bpPtcTemp2": 30.0,
#  "bpSysState": "NORMAL_STATE",
#  "bpAuxCellVol01": 3394.0
#}
#    2025-03-07 11:52:39  data_bp_addr.HJ3xxxxxxxxxxxxxxx {
#  "bpPwr": -0.3821171,
#  "bpSoc": 100,
#  "bpSoh": 100,
#  "bpTemp": [28.0, 31.0, 29.0, 30.0, 30.0, 27.0, 28.0, 28.0, 29.0],
#  "bpCellMaxVol": 3386.0,
#  "bpCellMinVol": 3370.0,
#  "bpRunSta": "RUNSTA_RUN",
#  "bpVol": 54.006,
#  "bpAmp": -0.007075456,
#  "bpBusVol": 831.59674,
#  "bpErrCode": 2,
#  "bpCellVol": [3370.0, 3373.0, 3372.0, 3380.0, 3379.0, 3378.0, 3382.0, 3377.0, 3382.0, 3382.0, 3382.0, 3382.0, 3386.0, 3381.0, 3385.0, 3380.0],
#  "bpDsrc": 2,
#  "bpSn": "SExxxxxxxxxxxxxxxxxxxx",
#  "bpCycles": 28,
#  "bpBalanceState": 0,
#  "bpHvMosTemp": 37.0,
#  "bpLvMosTemp": 35.0,
#  "bpPtcTemp": 29.0,
#  "bpHtsTemp": 35.0,
#  "bpBusNegTemp": 35.0,
#  "bpBusPosTemp": 36.0,
#  "bpEnvTemp": 34.0,
#  "bpAccuChgCap": 2663070,
#  "bpAccuDsgCap": 2595472,
#  "bpDesignCap": 100000,
#  "bpFullCap": 100000,
#  "bpMaxCellTemp": 31.0,
#  "bpMinCellTemp": 27.0,
#  "bpMaxMosTemp": 37.0,
#  "bpMinMosTemp": 35.0,
#  "bpBmsFault": 0,
#  "bpEcloundSoc": 65535,
#  "bpHeartbeatVer": 33,
#  "bpTimestamp": 1741344746,
#  "bpRealSoc": 100.0,
#  "bpRealSoh": 102.700005,
#  "bpGlobalProtect": 0,
#  "bpDownLimitSoc": 5,
#  "bpUpLimitSoc": 100,
#  "bpActiveCalReqStat": 0,
#  "bpActiveCalRunStat": 0,
#  "moduleProductInfo": 21251,
#  "moduleProgramSta": 1,
#  "moduleAplSwVer": 67176967,
#  "moduleLoaderSwVer": 67174401,
#  "bmsRunSta": "PB_BMS_STATE_DISCHARGEABLE",
#  "bmsChgDsgSta": "PB_STANDBY_STATE",
#  "dabModSta": "PB_MOD_STA_WARNNING",
#  "bpChgSop": 49,
#  "bpDsgSop": 80,
#  "bpRemainWatth": 5120.0,
#  "bpTargetSoc": 99.9,
#  "bpDiffSoc": 0.15625,
#  "bpMaxSoc": 100.0,
#  "bpMinSoc": 99.84404,
#  "bpLimitSoc": 0.5,
#  "bpCalendarSoh": 99.84766,
#  "bpCycleSoh": 99.84766,
#  "bpAcRechargeFlag": false,
#  "bpPtcHeatFlag": false,
#  "bpPtcExitEvent": "PB_PTC_OT_STATE",
#  "bpAccuChgEnergy": 143528,
#  "bpAccuDsgEnergy": 134706,
#  "bpPtcTemp2": 29.0,
#  "bpSysState": "NORMAL_STATE",
#  "bpAuxCellVol01": 3370.0
#}
#    2025-03-07 11:52:39  data_bp_addr.updateTime 2025-03-07 18:52:35
#    2025-03-04 21:36:19  data_ems_change_report.afciEn 0
#    2025-03-04 21:36:22  data_ems_change_report.afciEnSet 0
#    2025-03-04 21:36:20  data_ems_change_report.afciEnableCmdState 0
#    2025-03-04 21:36:20  data_ems_change_report.afciFaultClearState 0
#    2025-03-04 21:36:22  data_ems_change_report.afciFaultCntCh1 0
#    2025-03-04 21:36:22  data_ems_change_report.afciFaultCntCh2 0
#    2025-03-04 21:36:22  data_ems_change_report.afciFaultFlagCh1 0
#    2025-03-04 21:36:22  data_ems_change_report.afciFaultFlagCh2 0
#    2025-03-04 21:36:19  data_ems_change_report.afciFaultMaxValueCh1 0.0
#    2025-03-04 21:36:22  data_ems_change_report.afciFaultMaxValueCh2 0.0
#    2025-03-04 21:36:19  data_ems_change_report.afciFaultValueCh1 0.0
#    2025-03-04 21:36:20  data_ems_change_report.afciFaultValueCh2 0.0
#    2025-03-04 21:36:22  data_ems_change_report.afciIsExist 0
#    2025-03-04 21:36:19  data_ems_change_report.afciProtectValueCh1 0.0
#    2025-03-04 21:36:22  data_ems_change_report.afciProtectValueCh2 0.0
#    2025-03-04 21:36:22  data_ems_change_report.afciSelfTestCmdState 0
#    2025-03-04 21:36:21  data_ems_change_report.afciSellfTestResult 0
#    2025-03-04 21:36:20  data_ems_change_report.afciSwitchFreqCh1 0
#    2025-03-04 21:36:19  data_ems_change_report.afciSwitchFreqCh2 0
#    2025-03-04 21:36:19  data_ems_change_report.batRealyStatus 2
#    2025-03-04 21:36:22  data_ems_change_report.batRelayCloseFailFlag 0
#    2025-03-04 21:36:21  data_ems_change_report.batSoftRelayStatus 0
#    2025-03-07 11:39:52  data_ems_change_report.bpChgDsgSta 2
#    2025-03-04 21:36:22  data_ems_change_report.bpLineOffFlag 0
#    2025-03-04 21:36:21  data_ems_change_report.bpOnlineSum 2
#    2025-03-04 21:36:21  data_ems_change_report.bpRestartFlag 1
#    2025-03-04 21:36:19  data_ems_change_report.bpReverseFlag 0
#    2025-03-07 11:39:39  data_ems_change_report.bpSoc 100
#    2025-03-07 11:51:34  data_ems_change_report.bpTotalChgEnergy 274940
#    2025-03-07 09:51:32  data_ems_change_report.bpTotalDsgEnergy 258836
#    2025-03-04 21:36:21  data_ems_change_report.chgDsgMode 0
#    2025-03-04 21:36:20  data_ems_change_report.chgDsgPwr 700.0
#    2025-03-04 21:36:22  data_ems_change_report.devMaxPower 0
#    2025-03-04 21:36:22  data_ems_change_report.duration 0
#    2025-03-04 21:36:21  data_ems_change_report.emsBackupEvent 0
#    2025-03-04 21:36:21  data_ems_change_report.emsCtrlLedBright 10
#    2025-03-04 21:36:21  data_ems_change_report.emsCtrlLedType 1
#    2025-03-04 21:36:19  data_ems_change_report.emsFeedMode 1
#    2025-03-04 21:36:20  data_ems_change_report.emsFeedPwr 10000
#    2025-03-04 21:36:20  data_ems_change_report.emsFeedRatio 100
#    2025-03-04 21:36:20  data_ems_change_report.emsSgReadyEn false
#    2025-03-04 21:36:20  data_ems_change_report.emsSgRunStat 0
#    2025-03-04 21:36:22  data_ems_change_report.emsStopAll 0
#    2025-03-04 21:36:20  data_ems_change_report.emsWordMode WORKMODE_SELFUSE
#    2025-03-04 21:36:20  data_ems_change_report.emsWorkState 0
#    2025-03-04 21:36:21  data_ems_change_report.endTimestamp 0
#    2025-03-04 21:36:22  data_ems_change_report.ethWanStat 0
#    2025-03-04 21:36:19  data_ems_change_report.iot4gErr 7
#    2025-03-04 21:36:21  data_ems_change_report.iot4gOn 1
#    2025-03-04 21:36:19  data_ems_change_report.iot4gPdp -1
#    2025-03-06 21:51:48  data_ems_change_report.iot4gSta 2
#    2025-03-07 06:30:20  data_ems_change_report.mppt1FaultCode 0
#    2025-03-04 21:36:22  data_ems_change_report.mppt1WarningCode 0
#    2025-03-07 06:29:55  data_ems_change_report.mppt2FaultCode 0
#    2025-03-04 21:36:21  data_ems_change_report.mppt2WarningCode 0
#    2025-03-04 21:36:20  data_ems_change_report.parallelAllowState false
#    2025-03-04 21:36:20  data_ems_change_report.parallelType 0
#    2025-03-04 21:36:20  data_ems_change_report.parallelTypeCur 0
#    2025-03-04 21:36:21  data_ems_change_report.parallelTypeSet 0
#    2025-03-04 21:36:21  data_ems_change_report.pcs10minOverVol 253.0
#    2025-03-04 21:36:20  data_ems_change_report.pcs10minOverVolSwitch 1
#    2025-03-04 21:36:21  data_ems_change_report.pcs10minOverVolTime 100
#    2025-03-04 21:36:21  data_ems_change_report.pcsAcErrCode 0
#    2025-03-04 21:36:19  data_ems_change_report.pcsAcWarningCode 0
#    2025-03-04 21:36:21  data_ems_change_report.pcsActivePowerDeratingPercent 1.0
#    2025-03-04 21:36:21  data_ems_change_report.pcsActivePowerDeratingSwitch 0
#    2025-03-04 21:36:19  data_ems_change_report.pcsActivePowerGradient 0.0033
#    2025-03-04 21:36:19  data_ems_change_report.pcsActivePowerNormalRampUpRate 60.0
#    2025-03-04 21:36:19  data_ems_change_report.pcsActivePowerSoftStartRate 0.1
#    2025-03-04 21:36:21  data_ems_change_report.pcsActivePowerSoftstartSwitch 1
#    2025-03-04 21:36:20  data_ems_change_report.pcsActivePowerSoftstartTime 666
#    2025-03-04 21:36:20  data_ems_change_report.pcsAntiBackFlowSwitch 1
#    2025-03-04 21:36:19  data_ems_change_report.pcsAutoTestFlag 0
#    2025-03-04 21:36:21  data_ems_change_report.pcsAutoTestPercent 0
#    2025-03-04 21:36:20  data_ems_change_report.pcsAutoTestState 0
#    2025-03-04 21:36:22  data_ems_change_report.pcsAvgOvpProtectCnt 0
#    2025-03-04 21:36:19  data_ems_change_report.pcsAvgOvpProtectValue 0.0
#    2025-03-04 21:36:21  data_ems_change_report.pcsCospP1 0.1
#    2025-03-04 21:36:21  data_ems_change_report.pcsCospP2 0.5
#    2025-03-04 21:36:19  data_ems_change_report.pcsCospP3 1.0
#    2025-03-04 21:36:21  data_ems_change_report.pcsCospP4 0.0
#    2025-03-04 21:36:20  data_ems_change_report.pcsCospPf1 -1.0
#    2025-03-04 21:36:21  data_ems_change_report.pcsCospPf2 -1.0
#    2025-03-04 21:36:19  data_ems_change_report.pcsCospPf3 -0.9
#    2025-03-04 21:36:20  data_ems_change_report.pcsCospPf4 0.0
#    2025-03-04 21:36:19  data_ems_change_report.pcsDcErrCode 0
#    2025-03-04 21:36:22  data_ems_change_report.pcsFastCheck 0
#    2025-03-04 21:36:20  data_ems_change_report.pcsFaultRecoverHighFreqOnGrid 50.1
#    2025-03-04 21:36:19  data_ems_change_report.pcsFaultRecoverHighVolOnGrid 253.0
#    2025-03-04 21:36:22  data_ems_change_report.pcsFaultRecoverLowFreqOnGrid 47.53
#    2025-03-04 21:36:22  data_ems_change_report.pcsFaultRecoverLowVolOnGrid 195.5
#    2025-03-04 21:36:20  data_ems_change_report.pcsFaultRecoverOnGridWaitTime 60000
#    2025-03-04 21:36:20  data_ems_change_report.pcsFreqExternalSignal 0
#    2025-03-04 21:36:20  data_ems_change_report.pcsFreqLocalCommand 1
#    2025-03-04 21:36:21  data_ems_change_report.pcsFreqRecoverTime 1000
#    2025-03-04 21:36:19  data_ems_change_report.pcsFunctionEnable 0
#    2025-03-04 21:36:21  data_ems_change_report.pcsHighFreqOnGrid 50.1
#    2025-03-04 21:36:21  data_ems_change_report.pcsHighVolOnGrid 253.0
#    2025-03-04 21:36:22  data_ems_change_report.pcsHighVolRideThroughRecover 253.0
#    2025-03-04 21:36:21  data_ems_change_report.pcsHvrtLvrtSwitch 1
#    2025-03-04 21:36:21  data_ems_change_report.pcsIslandDetectSwitch 1
#    2025-03-04 21:36:20  data_ems_change_report.pcsLowFreq1 47.5
#    2025-03-04 21:36:19  data_ems_change_report.pcsLowFreq2 47.5
#    2025-03-04 21:36:20  data_ems_change_report.pcsLowFreqOnGrid 47.53
#    2025-03-04 21:36:22  data_ems_change_report.pcsLowFreqRecover 47.53
#    2025-03-04 21:36:21  data_ems_change_report.pcsLowFreqTime1 100
#    2025-03-04 21:36:19  data_ems_change_report.pcsLowFreqTime2 100
#    2025-03-04 21:36:20  data_ems_change_report.pcsLowVol1 184.0
#    2025-03-04 21:36:19  data_ems_change_report.pcsLowVol2 103.5
#    2025-03-04 21:36:19  data_ems_change_report.pcsLowVol3 57.5
#    2025-03-04 21:36:19  data_ems_change_report.pcsLowVolOnGrid 195.5
#    2025-03-04 21:36:20  data_ems_change_report.pcsLowVolRecover 195.5
#    2025-03-04 21:36:19  data_ems_change_report.pcsLowVolRideThroughProtectTime1 5200
#    2025-03-04 21:36:21  data_ems_change_report.pcsLowVolRideThroughProtectTime2 3000
#    2025-03-04 21:36:20  data_ems_change_report.pcsLowVolRideThroughProtectTime3 1000
#    2025-03-04 21:36:21  data_ems_change_report.pcsLowVolRideThroughRecover 195.5
#    2025-03-04 21:36:22  data_ems_change_report.pcsLowVolRideThroughStart1 184.0
#    2025-03-04 21:36:19  data_ems_change_report.pcsLowVolRideThroughStart2 103.5
#    2025-03-04 21:36:21  data_ems_change_report.pcsLowVolRideThroughStart3 34.5
#    2025-03-04 21:36:20  data_ems_change_report.pcsLowVolTime1 3000
#    2025-03-04 21:36:21  data_ems_change_report.pcsLowVolTime2 300
#    2025-03-04 21:36:20  data_ems_change_report.pcsLowVolTime3 240
#    2025-03-04 21:36:19  data_ems_change_report.pcsOfpProtectCnt 0
#    2025-03-04 21:36:19  data_ems_change_report.pcsOfpProtectValue 0.0
#    2025-03-04 21:36:19  data_ems_change_report.pcsOnGridWaitTime 60000
#    2025-03-04 21:36:22  data_ems_change_report.pcsOngridReconnectFlag 0
#    2025-03-04 21:36:19  data_ems_change_report.pcsOverFreq1 51.5
#    2025-03-04 21:36:21  data_ems_change_report.pcsOverFreq2 51.5
#    2025-03-04 21:36:20  data_ems_change_report.pcsOverFreqDeratingCutoffPower 0.0
#    2025-03-04 21:36:22  data_ems_change_report.pcsOverFreqDeratingEnd 50.2
#    2025-03-04 21:36:22  data_ems_change_report.pcsOverFreqDeratingEndDelay 0.0
#    2025-03-04 21:36:20  data_ems_change_report.pcsOverFreqDeratingFrozeSwitch 0
#    2025-03-04 21:36:22  data_ems_change_report.pcsOverFreqDeratingPowerBased 2.0
#    2025-03-04 21:36:19  data_ems_change_report.pcsOverFreqDeratingRecoverSlope 0.09
#    2025-03-04 21:36:19  data_ems_change_report.pcsOverFreqDeratingRecoverSlopeSwitch 1
#    2025-03-04 21:36:22  data_ems_change_report.pcsOverFreqDeratingSlope 0.4
#    2025-03-04 21:36:21  data_ems_change_report.pcsOverFreqDeratingStart 50.2
#    2025-03-04 21:36:20  data_ems_change_report.pcsOverFreqDeratingStartDelay 0.0
#    2025-03-04 21:36:21  data_ems_change_report.pcsOverFreqDeratingSwitch 0
#    2025-03-04 21:36:21  data_ems_change_report.pcsOverFreqRecover 50.1
#    2025-03-04 21:36:20  data_ems_change_report.pcsOverFreqTime1 100
#    2025-03-04 21:36:20  data_ems_change_report.pcsOverFreqTime2 100
#    2025-03-04 21:36:21  data_ems_change_report.pcsOverVol1 287.5
#    2025-03-04 21:36:19  data_ems_change_report.pcsOverVol2 287.5
#    2025-03-04 21:36:20  data_ems_change_report.pcsOverVol3 0.0
#    2025-03-04 21:36:22  data_ems_change_report.pcsOverVolDeratingDaleyTime 0.0
#    2025-03-04 21:36:19  data_ems_change_report.pcsOverVolDeratingEnd 257.6
#    2025-03-04 21:36:22  data_ems_change_report.pcsOverVolDeratingEndPower 0.0
#    2025-03-04 21:36:22  data_ems_change_report.pcsOverVolDeratingStart 253.0
#    2025-03-04 21:36:22  data_ems_change_report.pcsOverVolDeratingStartingPower 1.0
#    2025-03-04 21:36:22  data_ems_change_report.pcsOverVolDeratingSwitch 0
#    2025-03-04 21:36:20  data_ems_change_report.pcsOverVolDeratingTimeConst 10.0
#    2025-03-04 21:36:19  data_ems_change_report.pcsOverVolRecover 253.0
#    2025-03-04 21:36:22  data_ems_change_report.pcsOverVolRideThroughProtectTime1 5500
#    2025-03-04 21:36:21  data_ems_change_report.pcsOverVolRideThroughProtectTime2 1000
#    2025-03-04 21:36:20  data_ems_change_report.pcsOverVolRideThroughStart1 265.65
#    2025-03-04 21:36:19  data_ems_change_report.pcsOverVolRideThroughStart2 287.5
#    2025-03-04 21:36:21  data_ems_change_report.pcsOverVolTime1 100
#    2025-03-04 21:36:21  data_ems_change_report.pcsOverVolTime2 100
#    2025-03-04 21:36:19  data_ems_change_report.pcsOverVolTime3 0
#    2025-03-04 21:36:19  data_ems_change_report.pcsOvpProtectCnt 0
#    2025-03-04 21:36:19  data_ems_change_report.pcsOvpProtectValue 0.0
#    2025-03-04 21:36:19  data_ems_change_report.pcsPfValue 1.0
#    2025-03-04 21:36:21  data_ems_change_report.pcsPowerDeratingFlag 5
#    2025-03-04 21:36:21  data_ems_change_report.pcsPowerDeratingSet 200
#    2025-03-04 21:36:22  data_ems_change_report.pcsQuLockinPower 0.0
#    2025-03-04 21:36:19  data_ems_change_report.pcsQuLockoutPower 0.0
#    2025-03-04 21:36:22  data_ems_change_report.pcsQuMinimumCosphi 0.4
#    2025-03-04 21:36:20  data_ems_change_report.pcsQuQ1 0.6
#    2025-03-04 21:36:20  data_ems_change_report.pcsQuQ2 0.0
#    2025-03-04 21:36:20  data_ems_change_report.pcsQuQ3 0.0
#    2025-03-04 21:36:20  data_ems_change_report.pcsQuQ4 -0.6
#    2025-03-04 21:36:21  data_ems_change_report.pcsQuTimeConst 10.0
#    2025-03-04 21:36:22  data_ems_change_report.pcsQuV1 213.90001
#    2025-03-04 21:36:21  data_ems_change_report.pcsQuV2 223.1
#    2025-03-04 21:36:20  data_ems_change_report.pcsQuV3 236.9
#    2025-03-04 21:36:20  data_ems_change_report.pcsQuV4 246.1
#    2025-03-04 21:36:19  data_ems_change_report.pcsReactPwrCompensation 0.0062
#    2025-03-04 21:36:21  data_ems_change_report.pcsReactPwrModeSelect 0
#    2025-03-04 21:36:22  data_ems_change_report.pcsReactPwrPercent 0.0
#    2025-03-04 21:36:20  data_ems_change_report.pcsReconnectGridDetectSwitch 1
#    2025-03-04 21:36:19  data_ems_change_report.pcsRelaySelfCheckSta 0
#    2025-03-04 21:36:19  data_ems_change_report.pcsRelayStateShow 13732943
#    2025-03-04 21:36:20  data_ems_change_report.pcsRunFsmState 2542168178
#    2025-03-04 21:36:21  data_ems_change_report.pcsRunSta RUNSTA_RUN
#    2025-03-04 21:36:20  data_ems_change_report.pcsSafetyCountryCodeSelection 4
#    2025-03-04 21:36:22  data_ems_change_report.pcsSendEnd 0
#    2025-03-04 21:36:21  data_ems_change_report.pcsUfpProtectCnt 0
#    2025-03-04 21:36:19  data_ems_change_report.pcsUfpProtectValue 0.0
#    2025-03-04 21:36:22  data_ems_change_report.pcsUnderFreqIncrementEnd 49.8
#    2025-03-04 21:36:20  data_ems_change_report.pcsUnderFreqIncrementEndDelay 0.0
#    2025-03-04 21:36:20  data_ems_change_report.pcsUnderFreqIncrementFrozeSwitch 0
#    2025-03-04 21:36:22  data_ems_change_report.pcsUnderFreqIncrementRecoverSlope 0.09
#    2025-03-04 21:36:22  data_ems_change_report.pcsUnderFreqIncrementRecoverSlopeSwitch 1
#    2025-03-04 21:36:19  data_ems_change_report.pcsUnderFreqIncrementSlope 0.4
#    2025-03-04 21:36:20  data_ems_change_report.pcsUnderFreqIncrementStart 49.8
#    2025-03-04 21:36:19  data_ems_change_report.pcsUnderFreqIncrementStartDelay 0.0
#    2025-03-04 21:36:22  data_ems_change_report.pcsUnderFreqIncrementSwitch 0
#    2025-03-04 21:36:19  data_ems_change_report.pcsUvp1ProtectCnt 0
#    2025-03-04 21:36:19  data_ems_change_report.pcsUvp1ProtectValue 0.0
#    2025-03-04 21:36:22  data_ems_change_report.pcsUvp2ProtectCnt 0
#    2025-03-04 21:36:20  data_ems_change_report.pcsUvp2ProtectValue 0.0
#    2025-03-04 21:36:20  data_ems_change_report.pcsVolRecoverTime 1000
#    2025-03-04 21:36:22  data_ems_change_report.rateCtrlSwtich false
#    2025-03-04 21:36:19  data_ems_change_report.relay14a 0
#    2025-03-04 21:36:21  data_ems_change_report.sys14aEnable false
#    2025-03-04 21:36:22  data_ems_change_report.sys14aType 1
#    2025-03-04 21:36:20  data_ems_change_report.sysBatDsgDownLimit 0
#    2025-03-04 21:36:22  data_ems_change_report.sysCalStat 0
#    2025-03-04 21:36:22  data_ems_change_report.sysGridSta 0
#    2025-03-04 21:36:22  data_ems_change_report.sysHeatStat 0
#    2025-03-04 21:36:20  data_ems_change_report.sysMeterCfg 0
#    2025-03-04 21:36:21  data_ems_change_report.sysMulPeakSwitch false
#    2025-03-04 21:36:21  data_ems_change_report.sysMulPeakTime 1200
#    2025-03-04 21:36:22  data_ems_change_report.sysOnOffMachineStat 0
#    2025-03-04 21:36:19  data_ems_change_report.sysRateCtrlTime 60
#    2025-03-04 21:36:20  data_ems_change_report.sysStateBit 0
#    2025-03-04 21:36:21  data_ems_change_report.sysTypeCfg 0
#    2025-03-07 11:51:35  data_ems_change_report.updateTime 2025-03-07 18:51:23
#    2025-03-04 21:36:20  data_ems_change_report.userRole 0
#    2025-03-04 21:36:19  data_ems_change_report.virtualHardEdition 1
#    2025-03-04 21:36:19  data_ems_change_report.wifiStaStat 10
#    2025-03-04 21:36:20  data_ems_eco_logy_dev.HPReport.online 0
#    2025-03-07 11:51:35  data_ems_eco_logy_dev.updateTime 2025-03-07 18:51:21
#    2025-03-04 21:36:21  data_ems_edev_sys.devFirstInfo 31
#    2025-03-04 21:36:20  data_ems_edev_sys.devLastInfo 31
#    2025-03-04 21:36:20  data_ems_edev_sys.devLastMinInfo 31
#    2025-03-07 11:20:02  data_ems_edev_sys.dispatchType 2
#    2025-03-04 21:36:21  data_ems_edev_sys.feedPwrCap 10000.0
#    2025-03-04 21:36:20  data_ems_edev_sys.freeNum 36
#    2025-03-07 11:53:29  data_ems_edev_sys.pclPwrBase 5257.5
#    2025-03-07 11:39:39  data_ems_edev_sys.socCur 100.0
#    2025-03-04 21:36:21  data_ems_edev_sys.socDev 90
#    2025-03-07 11:33:51  data_ems_edev_sys.solarFlag 9183
#    2025-03-04 21:36:22  data_ems_edev_sys.startState 0
#    2025-03-04 21:36:22  data_ems_edev_sys.stratType 0
#    2025-03-07 11:22:21  data_ems_edev_sys.sysFlag 71
#    2025-03-07 11:53:29  data_ems_edev_sys.updateTime 2025-03-07 18:53:27
#    2025-03-04 21:36:21  data_ems_edev_sys.usedNum 0
#    2025-03-07 02:54:42  data_ems_logy_dev.updateTime 2025-03-07 09:54:41
#    2025-03-04 21:36:20  data_ems_param_change_report.bpBurst false
#    2025-03-04 21:36:19  data_ems_param_change_report.breakerCapacityMax 32
#    2025-03-04 21:36:21  data_ems_param_change_report.breakerEnableState true
#    2025-03-04 21:36:20  data_ems_param_change_report.devSoc 90
#    2025-03-04 21:36:19  data_ems_param_change_report.energyEfficientEnable true
#    2025-03-04 21:36:20  data_ems_param_change_report.lowerPowerStat false
#    2025-03-04 21:36:21  data_ems_param_change_report.smartCtrl false
#    2025-03-04 21:36:21  data_ems_param_change_report.sysTimeTab 19662120
#    2025-03-04 21:36:22  data_ems_param_change_report.sysZone 4
#    2025-03-07 11:51:34  data_ems_param_change_report.updateTime 2025-03-07 18:51:21
#    2025-03-07 02:54:42  data_ems_priority.updateTime 2025-03-07 09:54:41
#    2025-03-07 02:54:43  data_ems_task.updateTime 2025-03-07 09:54:40
#    2025-03-04 21:36:20  data_error_code.bpErrCode_1_moduleSn SExxxxxxxxxxxxxx==
#    2025-03-04 21:36:21  data_error_code.bpErrCode_2_moduleSn Sxxxxxxxxxxxxxxxxxxxx=
#    2025-03-04 21:36:20  data_error_code.emsErrCode.moduleSn Sxxxxxxxxxxxxxxxxxxx
#    2025-03-04 21:36:19  data_error_code.pcsErrCode.moduleSn Sxxxxxxxxxxxxxxxxxxx==
#    2025-03-07 11:51:35  data_error_code.updateTime 2025-03-07 18:51:25
#    2025-03-04 21:36:20  data_error_code_mark_report.errorCode_1 0
#    2025-03-04 21:36:22  data_error_code_mark_report.errorCode_10 0
#    2025-03-04 21:36:22  data_error_code_mark_report.errorCode_11 0
#    2025-03-04 21:36:21  data_error_code_mark_report.errorCode_12 0
#    2025-03-04 21:36:22  data_error_code_mark_report.errorCode_13 0
#    2025-03-04 21:36:20  data_error_code_mark_report.errorCode_14 0
#    2025-03-04 21:36:20  data_error_code_mark_report.errorCode_15 0
#    2025-03-04 21:36:21  data_error_code_mark_report.errorCode_16 0
#    2025-03-04 21:36:22  data_error_code_mark_report.errorCode_17 0
#    2025-03-04 21:36:22  data_error_code_mark_report.errorCode_18 0
#    2025-03-04 21:36:20  data_error_code_mark_report.errorCode_19 0
#    2025-03-04 21:36:21  data_error_code_mark_report.errorCode_2 0
#    2025-03-04 21:36:19  data_error_code_mark_report.errorCode_20 0
#    2025-03-04 21:36:20  data_error_code_mark_report.errorCode_21 0
#    2025-03-04 21:36:20  data_error_code_mark_report.errorCode_22 0
#    2025-03-04 21:36:21  data_error_code_mark_report.errorCode_23 0
#    2025-03-04 21:36:22  data_error_code_mark_report.errorCode_24 0
#    2025-03-04 21:36:21  data_error_code_mark_report.errorCode_25 0
#    2025-03-04 21:36:20  data_error_code_mark_report.errorCode_26 0
#    2025-03-04 21:36:21  data_error_code_mark_report.errorCode_27 0
#    2025-03-04 21:36:19  data_error_code_mark_report.errorCode_28 0
#    2025-03-04 21:36:19  data_error_code_mark_report.errorCode_29 0
#    2025-03-04 21:36:19  data_error_code_mark_report.errorCode_3 0
#    2025-03-04 21:36:20  data_error_code_mark_report.errorCode_30 0
#    2025-03-04 21:36:19  data_error_code_mark_report.errorCode_31 0
#    2025-03-04 21:36:20  data_error_code_mark_report.errorCode_32 0
#    2025-03-04 21:36:20  data_error_code_mark_report.errorCode_4 0
#    2025-03-04 21:36:19  data_error_code_mark_report.errorCode_5 0
#    2025-03-04 21:36:21  data_error_code_mark_report.errorCode_6 0
#    2025-03-04 21:36:22  data_error_code_mark_report.errorCode_7 0
#    2025-03-04 21:36:21  data_error_code_mark_report.errorCode_8 0
#    2025-03-04 21:36:21  data_error_code_mark_report.errorCode_9 0
#    2025-03-07 02:54:42  data_error_code_mark_report.updateTime 2025-03-07 09:54:41
#    2025-03-07 11:53:30  data_mpptHeartBeat_1_mpptPv_1_amp 8.640048
#    2025-03-07 11:53:29  data_mpptHeartBeat_1_mpptPv_1_pwr 3046.899
#    2025-03-07 11:53:30  data_mpptHeartBeat_1_mpptPv_1_vol 352.64838
#    2025-03-07 11:53:29  data_mpptHeartBeat_1_mpptPv_2_amp 8.50316
#    2025-03-07 11:53:29  data_mpptHeartBeat_1_mpptPv_2_pwr 3267.882
#    2025-03-07 11:53:30  data_mpptHeartBeat_1_mpptPv_2_vol 384.3138
#    2025-03-07 11:53:42  data_mpptPwr    6350.0
#    2025-03-07 11:53:30  data_pcsAPhase.actPwr -1991.044
#    2025-03-07 11:53:29  data_pcsAPhase.amp 8.407616
#    2025-03-07 11:53:29  data_pcsAPhase.apparentPwr 1999.9281
#    2025-03-07 11:53:29  data_pcsAPhase.reactPwr 188.29897
#    2025-03-07 11:53:30  data_pcsAPhase.vol 237.87102
#    2025-03-07 11:53:29  data_pcsBPhase.actPwr -1964.698
#    2025-03-07 11:53:30  data_pcsBPhase.amp 8.298588
#    2025-03-07 11:53:29  data_pcsBPhase.apparentPwr 1973.1041
#    2025-03-07 11:53:30  data_pcsBPhase.reactPwr 181.93886
#    2025-03-07 11:53:29  data_pcsBPhase.vol 237.76384
#    2025-03-07 11:53:29  data_pcsCPhase.actPwr -1949.5348
#    2025-03-07 11:53:29  data_pcsCPhase.amp 8.258227
#    2025-03-07 11:53:30  data_pcsCPhase.apparentPwr 1961.4961
#    2025-03-07 11:53:30  data_pcsCPhase.reactPwr 216.28915
#    2025-03-07 11:53:29  data_pcsCPhase.vol 237.52023
#    2025-03-07 11:53:42  data_sysGridPwr -5280.0
#    2025-03-07 11:53:42  data_sysLoadPwr 1070.0
#    2025-03-07 11:53:42  eagleEyeTraceId ea1a2a5c32174134482xxxxxxxxxxxxxxx
#    2025-03-06 18:24:25  message        Success
#
setstate PO2 Solarertrag: 6350.0 W <br>Hausnetz: 1070.0 W <br> Batterie: 0.0 W <br>Ladestatus: 100 % <br>Netzeinspeisung: -5280.0 W <br>Letzte Meldung: 2025-03-07 11:53:42
setstate PO2 2025-03-06 18:24:25 code 0
setstate PO2 2025-03-07 11:39:52 data_bpPwr 0.0
setstate PO2 2025-03-07 11:39:51 data_bpSoc 100
setstate PO2 2025-03-07 11:52:38 data_bp_addr.HJ3xxxxxxxxxxxxxxxx {\
  "bpPwr": -0.64905936,\
  "bpSoc": 100,\
  "bpSoh": 100,\
  "bpTemp": [29.0, 31.0, 29.0, 30.0, 31.0, 28.0, 29.0, 29.0, 30.0],\
  "bpCellMaxVol": 3405.0,\
  "bpCellMinVol": 3355.0,\
  "bpRunSta": "RUNSTA_RUN",\
  "bpVol": 54.326,\
  "bpAmp": -0.01194749,\
  "bpBusVol": 832.07184,\
  "bpErrCode": 2,\
  "bpCellVol": [3395.0, 3399.0, 3398.0, 3395.0, 3399.0, 3404.0, 3401.0, 3404.0, 3355.0, 3402.0, 3405.0, 3402.0, 3401.0, 3401.0, 3397.0, 3403.0],\
  "bpDsrc": 1,\
  "bpSn": "SExxxxxxxxxxxxxxxxxxxxx=",\
  "bpCycles": 28,\
  "bpBalanceState": 21589,\
  "bpHvMosTemp": 40.0,\
  "bpLvMosTemp": 38.0,\
  "bpPtcTemp": 31.0,\
  "bpHtsTemp": 38.0,\
  "bpBusNegTemp": 36.0,\
  "bpBusPosTemp": 39.0,\
  "bpEnvTemp": 37.0,\
  "bpAccuChgCap": 2637324,\
  "bpAccuDsgCap": 2571636,\
  "bpDesignCap": 100000,\
  "bpFullCap": 100000,\
  "bpMaxCellTemp": 31.0,\
  "bpMinCellTemp": 28.0,\
  "bpMaxMosTemp": 40.0,\
  "bpMinMosTemp": 38.0,\
  "bpBmsFault": 0,\
  "bpEcloundSoc": 65535,\
  "bpHeartbeatVer": 33,\
  "bpTimestamp": 1741344751,\
  "bpRealSoc": 99.0,\
  "bpRealSoh": 104.86778,\
  "bpGlobalProtect": 32,\
  "bpDownLimitSoc": 5,\
  "bpUpLimitSoc": 100,\
  "bpActiveCalReqStat": 0,\
  "bpActiveCalRunStat": 0,\
  "moduleProductInfo": 21251,\
  "moduleProgramSta": 1,\
  "moduleAplSwVer": 67176967,\
  "moduleLoaderSwVer": 67174401,\
  "bmsRunSta": "PB_BMS_STATE_DISCHARGEABLE",\
  "bmsChgDsgSta": "PB_STANDBY_STATE",\
  "dabModSta": "PB_MOD_STA_WARNNING",\
  "bpChgSop": 0,\
  "bpDsgSop": 80,\
  "bpRemainWatth": 5120.0,\
  "bpTargetSoc": 99.9,\
  "bpDiffSoc": 2.734375,\
  "bpMaxSoc": 100.0,\
  "bpMinSoc": 97.26585,\
  "bpLimitSoc": 0.5,\
  "bpCalendarSoh": 99.84766,\
  "bpCycleSoh": 99.84766,\
  "bpAcRechargeFlag": false,\
  "bpPtcHeatFlag": false,\
  "bpPtcExitEvent": "PB_PTC_OT_STATE",\
  "bpAccuChgEnergy": 142158,\
  "bpAccuDsgEnergy": 133496,\
  "bpPtcTemp2": 30.0,\
  "bpSysState": "NORMAL_STATE",\
  "bpAuxCellVol01": 3394.0\
}
setstate PO2 2025-03-07 11:52:39 data_bp_addr.HJ3xxxxxxxxxxxxxx {\
  "bpPwr": -0.3821171,\
  "bpSoc": 100,\
  "bpSoh": 100,\
  "bpTemp": [28.0, 31.0, 29.0, 30.0, 30.0, 27.0, 28.0, 28.0, 29.0],\
  "bpCellMaxVol": 3386.0,\
  "bpCellMinVol": 3370.0,\
  "bpRunSta": "RUNSTA_RUN",\
  "bpVol": 54.006,\
  "bpAmp": -0.007075456,\
  "bpBusVol": 831.59674,\
  "bpErrCode": 2,\
  "bpCellVol": [3370.0, 3373.0, 3372.0, 3380.0, 3379.0, 3378.0, 3382.0, 3377.0, 3382.0, 3382.0, 3382.0, 3382.0, 3386.0, 3381.0, 3385.0, 3380.0],\
  "bpDsrc": 2,\
  "bpSn": "Sxxxxxxxxxxxxxxxxxxxxxx",\
  "bpCycles": 28,\
  "bpBalanceState": 0,\
  "bpHvMosTemp": 37.0,\
  "bpLvMosTemp": 35.0,\
  "bpPtcTemp": 29.0,\
  "bpHtsTemp": 35.0,\
  "bpBusNegTemp": 35.0,\
  "bpBusPosTemp": 36.0,\
  "bpEnvTemp": 34.0,\
  "bpAccuChgCap": 2663070,\
  "bpAccuDsgCap": 2595472,\
  "bpDesignCap": 100000,\
  "bpFullCap": 100000,\
  "bpMaxCellTemp": 31.0,\
  "bpMinCellTemp": 27.0,\
  "bpMaxMosTemp": 37.0,\
  "bpMinMosTemp": 35.0,\
  "bpBmsFault": 0,\
  "bpEcloundSoc": 65535,\
  "bpHeartbeatVer": 33,\
  "bpTimestamp": 1741344746,\
  "bpRealSoc": 100.0,\
  "bpRealSoh": 102.700005,\
  "bpGlobalProtect": 0,\
  "bpDownLimitSoc": 5,\
  "bpUpLimitSoc": 100,\
  "bpActiveCalReqStat": 0,\
  "bpActiveCalRunStat": 0,\
  "moduleProductInfo": 21251,\
  "moduleProgramSta": 1,\
  "moduleAplSwVer": 67176967,\
  "moduleLoaderSwVer": 67174401,\
  "bmsRunSta": "PB_BMS_STATE_DISCHARGEABLE",\
  "bmsChgDsgSta": "PB_STANDBY_STATE",\
  "dabModSta": "PB_MOD_STA_WARNNING",\
  "bpChgSop": 49,\
  "bpDsgSop": 80,\
  "bpRemainWatth": 5120.0,\
  "bpTargetSoc": 99.9,\
  "bpDiffSoc": 0.15625,\
  "bpMaxSoc": 100.0,\
  "bpMinSoc": 99.84404,\
  "bpLimitSoc": 0.5,\
  "bpCalendarSoh": 99.84766,\
  "bpCycleSoh": 99.84766,\
  "bpAcRechargeFlag": false,\
  "bpPtcHeatFlag": false,\
  "bpPtcExitEvent": "PB_PTC_OT_STATE",\
  "bpAccuChgEnergy": 143528,\
  "bpAccuDsgEnergy": 134706,\
  "bpPtcTemp2": 29.0,\
  "bpSysState": "NORMAL_STATE",\
  "bpAuxCellVol01": 3370.0\
}
setstate PO2 2025-03-07 11:52:39 data_bp_addr.updateTime 2025-03-07 18:52:35
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.afciEn 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.afciEnSet 0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.afciEnableCmdState 0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.afciFaultClearState 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.afciFaultCntCh1 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.afciFaultCntCh2 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.afciFaultFlagCh1 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.afciFaultFlagCh2 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.afciFaultMaxValueCh1 0.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.afciFaultMaxValueCh2 0.0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.afciFaultValueCh1 0.0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.afciFaultValueCh2 0.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.afciIsExist 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.afciProtectValueCh1 0.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.afciProtectValueCh2 0.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.afciSelfTestCmdState 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.afciSellfTestResult 0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.afciSwitchFreqCh1 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.afciSwitchFreqCh2 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.batRealyStatus 2
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.batRelayCloseFailFlag 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.batSoftRelayStatus 0
setstate PO2 2025-03-07 11:39:52 data_ems_change_report.bpChgDsgSta 2
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.bpLineOffFlag 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.bpOnlineSum 2
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.bpRestartFlag 1
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.bpReverseFlag 0
setstate PO2 2025-03-07 11:39:39 data_ems_change_report.bpSoc 100
setstate PO2 2025-03-07 11:51:34 data_ems_change_report.bpTotalChgEnergy 274940
setstate PO2 2025-03-07 09:51:32 data_ems_change_report.bpTotalDsgEnergy 258836
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.chgDsgMode 0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.chgDsgPwr 700.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.devMaxPower 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.duration 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.emsBackupEvent 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.emsCtrlLedBright 10
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.emsCtrlLedType 1
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.emsFeedMode 1
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.emsFeedPwr 10000
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.emsFeedRatio 100
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.emsSgReadyEn false
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.emsSgRunStat 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.emsStopAll 0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.emsWordMode WORKMODE_SELFUSE
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.emsWorkState 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.endTimestamp 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.ethWanStat 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.iot4gErr 7
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.iot4gOn 1
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.iot4gPdp -1
setstate PO2 2025-03-06 21:51:48 data_ems_change_report.iot4gSta 2
setstate PO2 2025-03-07 06:30:20 data_ems_change_report.mppt1FaultCode 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.mppt1WarningCode 0
setstate PO2 2025-03-07 06:29:55 data_ems_change_report.mppt2FaultCode 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.mppt2WarningCode 0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.parallelAllowState false
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.parallelType 0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.parallelTypeCur 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.parallelTypeSet 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcs10minOverVol 253.0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcs10minOverVolSwitch 1
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcs10minOverVolTime 100
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsAcErrCode 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsAcWarningCode 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsActivePowerDeratingPercent 1.0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsActivePowerDeratingSwitch 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsActivePowerGradient 0.0033
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsActivePowerNormalRampUpRate 60.0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsActivePowerSoftStartRate 0.1
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsActivePowerSoftstartSwitch 1
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsActivePowerSoftstartTime 666
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsAntiBackFlowSwitch 1
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsAutoTestFlag 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsAutoTestPercent 0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsAutoTestState 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsAvgOvpProtectCnt 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsAvgOvpProtectValue 0.0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsCospP1 0.1
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsCospP2 0.5
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsCospP3 1.0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsCospP4 0.0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsCospPf1 -1.0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsCospPf2 -1.0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsCospPf3 -0.9
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsCospPf4 0.0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsDcErrCode 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsFastCheck 0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsFaultRecoverHighFreqOnGrid 50.1
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsFaultRecoverHighVolOnGrid 253.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsFaultRecoverLowFreqOnGrid 47.53
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsFaultRecoverLowVolOnGrid 195.5
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsFaultRecoverOnGridWaitTime 60000
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsFreqExternalSignal 0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsFreqLocalCommand 1
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsFreqRecoverTime 1000
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsFunctionEnable 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsHighFreqOnGrid 50.1
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsHighVolOnGrid 253.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsHighVolRideThroughRecover 253.0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsHvrtLvrtSwitch 1
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsIslandDetectSwitch 1
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsLowFreq1 47.5
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsLowFreq2 47.5
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsLowFreqOnGrid 47.53
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsLowFreqRecover 47.53
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsLowFreqTime1 100
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsLowFreqTime2 100
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsLowVol1 184.0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsLowVol2 103.5
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsLowVol3 57.5
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsLowVolOnGrid 195.5
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsLowVolRecover 195.5
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsLowVolRideThroughProtectTime1 5200
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsLowVolRideThroughProtectTime2 3000
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsLowVolRideThroughProtectTime3 1000
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsLowVolRideThroughRecover 195.5
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsLowVolRideThroughStart1 184.0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsLowVolRideThroughStart2 103.5
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsLowVolRideThroughStart3 34.5
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsLowVolTime1 3000
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsLowVolTime2 300
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsLowVolTime3 240
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsOfpProtectCnt 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsOfpProtectValue 0.0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsOnGridWaitTime 60000
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsOngridReconnectFlag 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsOverFreq1 51.5
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsOverFreq2 51.5
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsOverFreqDeratingCutoffPower 0.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsOverFreqDeratingEnd 50.2
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsOverFreqDeratingEndDelay 0.0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsOverFreqDeratingFrozeSwitch 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsOverFreqDeratingPowerBased 2.0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsOverFreqDeratingRecoverSlope 0.09
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsOverFreqDeratingRecoverSlopeSwitch 1
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsOverFreqDeratingSlope 0.4
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsOverFreqDeratingStart 50.2
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsOverFreqDeratingStartDelay 0.0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsOverFreqDeratingSwitch 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsOverFreqRecover 50.1
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsOverFreqTime1 100
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsOverFreqTime2 100
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsOverVol1 287.5
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsOverVol2 287.5
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsOverVol3 0.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsOverVolDeratingDaleyTime 0.0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsOverVolDeratingEnd 257.6
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsOverVolDeratingEndPower 0.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsOverVolDeratingStart 253.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsOverVolDeratingStartingPower 1.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsOverVolDeratingSwitch 0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsOverVolDeratingTimeConst 10.0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsOverVolRecover 253.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsOverVolRideThroughProtectTime1 5500
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsOverVolRideThroughProtectTime2 1000
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsOverVolRideThroughStart1 265.65
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsOverVolRideThroughStart2 287.5
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsOverVolTime1 100
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsOverVolTime2 100
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsOverVolTime3 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsOvpProtectCnt 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsOvpProtectValue 0.0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsPfValue 1.0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsPowerDeratingFlag 5
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsPowerDeratingSet 200
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsQuLockinPower 0.0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsQuLockoutPower 0.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsQuMinimumCosphi 0.4
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsQuQ1 0.6
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsQuQ2 0.0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsQuQ3 0.0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsQuQ4 -0.6
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsQuTimeConst 10.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsQuV1 213.90001
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsQuV2 223.1
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsQuV3 236.9
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsQuV4 246.1
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsReactPwrCompensation 0.0062
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsReactPwrModeSelect 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsReactPwrPercent 0.0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsReconnectGridDetectSwitch 1
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsRelaySelfCheckSta 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsRelayStateShow 13732943
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsRunFsmState 2542168178
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsRunSta RUNSTA_RUN
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsSafetyCountryCodeSelection 4
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsSendEnd 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.pcsUfpProtectCnt 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsUfpProtectValue 0.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsUnderFreqIncrementEnd 49.8
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsUnderFreqIncrementEndDelay 0.0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsUnderFreqIncrementFrozeSwitch 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsUnderFreqIncrementRecoverSlope 0.09
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsUnderFreqIncrementRecoverSlopeSwitch 1
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsUnderFreqIncrementSlope 0.4
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsUnderFreqIncrementStart 49.8
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsUnderFreqIncrementStartDelay 0.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsUnderFreqIncrementSwitch 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsUvp1ProtectCnt 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.pcsUvp1ProtectValue 0.0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.pcsUvp2ProtectCnt 0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsUvp2ProtectValue 0.0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.pcsVolRecoverTime 1000
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.rateCtrlSwtich false
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.relay14a 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.sys14aEnable false
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.sys14aType 1
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.sysBatDsgDownLimit 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.sysCalStat 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.sysGridSta 0
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.sysHeatStat 0
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.sysMeterCfg 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.sysMulPeakSwitch false
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.sysMulPeakTime 1200
setstate PO2 2025-03-04 21:36:22 data_ems_change_report.sysOnOffMachineStat 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.sysRateCtrlTime 60
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.sysStateBit 0
setstate PO2 2025-03-04 21:36:21 data_ems_change_report.sysTypeCfg 0
setstate PO2 2025-03-07 11:51:35 data_ems_change_report.updateTime 2025-03-07 18:51:23
setstate PO2 2025-03-04 21:36:20 data_ems_change_report.userRole 0
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.virtualHardEdition 1
setstate PO2 2025-03-04 21:36:19 data_ems_change_report.wifiStaStat 10
setstate PO2 2025-03-04 21:36:20 data_ems_eco_logy_dev.HPReport.online 0
setstate PO2 2025-03-07 11:51:35 data_ems_eco_logy_dev.updateTime 2025-03-07 18:51:21
setstate PO2 2025-03-04 21:36:21 data_ems_edev_sys.devFirstInfo 31
setstate PO2 2025-03-04 21:36:20 data_ems_edev_sys.devLastInfo 31
setstate PO2 2025-03-04 21:36:20 data_ems_edev_sys.devL
# ... truncated to 50k, original length 56564

Grüße
Mathias
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: tschimi am 09 März 2025, 16:09:08
So, das wirft die Maschine aus:

2025.03.09 16:04:16 1: $url = /iot-open/sign/device/quota/all?sn=xxxx $query_str = accessKey=xxxx&nonce=457331×tamp=1741532656528
2025.03.09 16:04:16 1: $response = {"code":"8512","message":"no permission to do it","eagleEyeTraceId":"ea1a2xxxx","tid":""}

Und dann immer "No permission to do that". Kann es sein, das ich aus irgendeinem Grund das Password nicht setzen?? Zudem komisch, meine Fhemeinträge haben keine Kommandozeile für Set xxxx connect oder set xxx password. Ist das richtig so?? Vielleicht ist ja dass das Problem??
Lg, tschimi

P.S.: hab mal mit deinen Gets rumgespielt. Also alle Werte, die ich vom Device hole (password, access_key und serial_no) sind richtig definiert. Das "no permission to do it" kommt also irgendwo anders her... Muss ich an den Ecoflow Geräte noch irgendwas anpassen?
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 10 März 2025, 09:58:52
Zitat von: Fakenius am 08 März 2025, 16:39:33Eine Frage: ist es Absicht, dass in FhemWeb die Set- und Get-Befehle im DeviceOverview nicht sichtbar sind (also zum Anklicken und Auswählen)?
Nein, da hatte ich noch nicht ganz begriffen, wie das geht, hab ich jetzt eingebaut.
Zitat von: tschimi am 09 März 2025, 16:09:08So, das wirft die Maschine aus:

2025.03.09 16:04:16 1: $url = /iot-open/sign/device/quota/all?sn=xxxx $query_str = accessKey=xxxx&nonce=457331×tamp=1741532656528
2025.03.09 16:04:16 1: $response = {"code":"8512","message":"no permission to do it","eagleEyeTraceId":"ea1a2xxxx","tid":""}
P.S.: hab mal mit deinen Gets rumgespielt. Also alle Werte, die ich vom Device hole (password, access_key und serial_no) sind richtig definiert. Das "no permission to do it" kommt also irgendwo anders her... Muss ich an den Ecoflow Geräte noch irgendwas anpassen?
Hm, also den AccessKey und den SecretKey hast Du hier beantragt? https://developer-eu.ecoflow.com (https://developer-eu.ecoflow.com)
Ja, stimmt, hast Du oben geschrieben.

Was ist denn das für ein Ecoflow-Gerät? Und die Firmware des Geräts ist aktuell?
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 10 März 2025, 10:39:41
Neue Version:

kleines Update:
-Get- und Set-Listen jetzt auch in der UI.
-Ohne Password/SecretKey werden keine API-Calls mehr ausgeführt
-Hinweise, dass erst ein Password/SecretKey gesetzt werden soll
-Parameter "secret_key" eingeführt
-Parameter "password" wird in den nächsten Versionen verschwinden.

(Aktuellste Version immer im 1. Post dieses Threads!)
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 10 März 2025, 16:11:31
Zitat von: matsches am 07 März 2025, 12:06:30Ich hoffe ich habe alles sicherheitsrelevante ausgeixxt und die Vorgehensweise "Copy for forum.fhem.de" ist so korrekt.
Leider aktualisieren sich die Daten nur, wenn ich parallel die App oder das Webportal aufrufe. Ich meine das war bei der ersten Version deines Moduls nicht so.
attr PO2 ecInterval 10

Das sollte nicht so sein. ecInterval 10 ist auch recht kurz, damit fragst Du alle 10 Sekunden ab. Lade Dir mal die letzte Version (voriger Post) und mit "set <DeviceName> deleteReadings" lösch mal alle Readings. Die Werte sollten auch kommen, ohne daß die App läuft.
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: tschimi am 10 März 2025, 16:15:27
Ok, hab gerade deine neue Version gezogen. Ich mußte noch URL::Encode installieren ;-)

Ich hab 2 Ecoflow PowerStream(s) mit der neusten Firmware. Leider ist aber der Fehler "no permission to do it" immer noch da :-(

Lg, tschimi

P.S.: Kann es sein das dein Modul für die PowerStream(s) nicht geht??
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 10 März 2025, 16:21:29
Hab jetzt noch mal mit neuem Ubuntu 24.04 und nur dem fhem-6.3.pkg getestet:
Derzeit ist "apt install libwww-curl-perl libdatetime-hires-perl libdigest-sha-perl liburl-encode-perl" erforderlich, damit das Modul läuft.

Zitat von: tschimi am 10 März 2025, 16:15:27Ich hab 2 Ecoflow PowerStream(s) mit der neusten Firmware. Leider ist aber der Fehler "no permission to do it" immer noch da :-(
Komisch, ich hab zwar nur eine PowerStream, aber bei mir läuft das. Ich bau da mal eben was ein... Moment...
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 10 März 2025, 16:33:18
Update mal auf diese Version und dann führe mal "get <device> devices" aus. Da müssten dann all Deine registrierten Geräte mit Seriennummern gelistet werden.

Bei mir kommt das hier:
code=0
data_1_online=1
data_1_productName=PowerStream
data_1_sn=HW5XXXXXXXX
data_2_online=1
data_2_productName=DELTA 2 Max
data_2_sn=R3XXXXXXXXXX
eagleEyeTraceId=ea1XXXXXXXXXXXXXXXXXXXXX
message=Success
tid=

(Aktuellste Version immer im 1. Post dieses Threads!)
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: matsches am 10 März 2025, 22:02:31
Hi.

Habe nun deine aktuelle Version nach ein paar Hürden zum Laufen bekommen mit der PowerOcean.
(Problem waren die notwendigen libwww-curl-perl libdatetime-hires-perl libdigest-sha-perl liburl-encode-perl... und die Installation auf dem Raspi2 mit Rasberian Buster)
libdatetime-hires-perl konnte ich nicht installieren. Läuft aber anscheinend auch ohne.

Auf den ersten Blick läuft alles mit ecInterval 120

Grüße
Mathias




Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Stromzähler am 11 März 2025, 10:10:59
Hallo,

ich habe (privat!) die Version "0.0.1.0 - 21.02.2025" um eine "Sendefunktion" erweitert. Mit meinem PowerStream klappt das einwandfrei. Wenn der Autor Interesse hat, schicke ich im das per PM.

Mit meiner neuen Delta 3 klappt das offensichtlich nicht mehr. Da wird die Payload wohl über "Google Protocol Buffers" geschickt bzw. "gepackt"  :o

Ich arbeite dran ;D

Gruß
Joachim
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 11 März 2025, 10:21:25
Zitat von: Fakenius am 11 März 2025, 10:10:59ich habe (privat!) die Version "0.0.1.0 - 21.02.2025" um eine "Sendefunktion" erweitert. Mit meinem PowerStream klappt das einwandfrei. Wenn der Autor Interesse hat, schicke ich im das per PM.
na, immer her damit, interessiert mich natürlich! :)
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: tschimi am 11 März 2025, 13:20:45
Zitat von: Neolux am 10 März 2025, 16:33:18Update mal auf diese Version und dann führe mal "get <device> devices" aus. Da müssten dann all Deine registrierten Geräte mit Seriennummern gelistet werden.
Bin zu blöde. Hatte 2 verschiedene Emails für die APP und als Developer... Und siehe da, alles funktioniert ;-)

Dankeschön nochmal für deine Geduld....

Lg, tschimi
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: matsches am 11 März 2025, 14:43:46
Zitat von: tschimi am 11 März 2025, 13:20:45ABER, du schreibst "registrierte Geräte". Wo hast du deine den registriert??? Vielleicht ist dass das Problem?!

Hi.
Versuche es mal bei https://www.ecoflow.com/de/login

Für den PowerOcean gibt es dann das Webportal https://portal.ecoflow.com/user/eu/de/login
Für den Powerstream bin ich mir nicht sicher.

Grüße
Mathias
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 11 März 2025, 15:04:46
Zitat von: tschimi am 11 März 2025, 13:20:45Bin zu blöde. Hatte 2 verschiedene Emails für die APP und als Developer... Und siehe da, alles funktioniert ;-)

Dankeschön nochmal für deine Geduld....

Lg, tschimi


Den Verdacht hatte ich, daß Du für der Developer-Portal eine andere Mail-Adresse genommen hattest.  :)
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 12 März 2025, 17:04:24
So, es hat sich einiges getan.
Dank Joachim/Fakenius hab ich es nun auch hinbekommen, SET-Befehle per HTTP-REST erfolgreich abzusetzen. ich war da einem Fehler in der CURL-Doku aufgesessen, aber das nur am Rande.
Ich hab einiges überarbeitet.
"GET <device> password" und "GET <device> secret_key" habe ich entfernt, die werden nun nicht mehr unterstützt, da meine Programmierung für die Signierung des HTTP-Requests nun stimmt, und es besser ist, wenn man nicht einfach so den Secret Key auslesen kann.

GET- und SET-Befehle gehen nun komplett über die GUI (Mit Dropdowns).
Der PowerStream-Inverter wird nun vollständig unterstützt, es sollte erkannt werden, daß ein Powerstream-Device angesprochen wird und entsprechend die GET- und SET-Befehle um die Powerstream-Ansteuerung erweitert werden.

Entsprechend der ecoflow-API hab ich die Befehle angepasst, es heißt nun:
GET|SET <device> AccessKey <AccessKey>
SET <device> SecretKey <SecretKey>
GET|SET <device> SerialNo <SerialNo>

"get <device> devices" gibt eine Liste aus mit allen Devices, die ihr mit dem AccessKey auslesen und ansteuern könnt.
"set <device> connect" erzwingt einen direkten HTTP-API-REQUEST über das Gerät
"set <device> deleteReadings" löscht einmal alle Readings des Geräts, sinnvoll, wenn man noch eine uralte Version im Einsatz hat, und da noch alte Readings rumlungern.

Zum Powerstream:
"get <device> data_20_1.invBrightness" liest den Wert der LED-Helligkeit des Inverters aus. Wenn man's braucht. Wert liegt zwischen 0..1023
"set <device> data_20_1.invBrightness" set entsprechnend den Wert neu, ich hab's als slider implementiert.

"get <device> data_20_1.lowerLimit" liest das untere Limit aus, ab dem die Batterie nicht mehr entladen werden soll (0..30)%
"set <device> data_20_1.lowerLimit" setzt entsprechend das Limit

analog dazu:
"get <device> data_20_1.upperLimit" liest das ober Limit aus, ab dem die Batterie nicht mehr geladen werden soll (70..100)%
"set <device> data_20_1.upperLimit" setzt entsprechend das Limit

"data_20_1.permanentWatts" liest/setzt die Leistung in Watt, die an die Stromversorgung des Haushalts abgegeben werden soll. (0..600)W
"data_20_1.supplyPriority" liest/setzt die Priorität des Inverters: Stromversorgung oder Batterie laden.

"get <device> data_20_134.task(1..11)" liest die einzelnen Tasks des Inverters aus.

aber ACHTUNG!
"set <device> data_20_134.task (1..11)" LÖSCHT den jeweiligen Task des Inverters. Ob man Tasks auch über HTTP-REST programmieren kann, darüber schweigt sich die Doku aus.


(Aktuellste Version immer im 1. Post dieses Threads!)
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 19 März 2025, 14:20:55
UPDATE: Die "Delta 2 Max" ist nun auch mit Get/Set unterstützt.

Ich arbeite nun die Module Zug um Zug aus der Ecoflow API Dokumentation (https://developer-eu.ecoflow.com/us/document/) ab.

BTW: wie mache ich es hier denn so, daß der 1. Post des Threads immer die aktuellste Version enthält? Muss ich den einfach nur bearbeiten?


(Aktuellste Version immer im 1. Post dieses Threads!)
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Wolle02 am 19 März 2025, 16:58:42
Das ist ja mega, dass du hier ein Modul erstellst. Ich hab hier grade ein Angebot für eine Power Ocean Anlage liegen, das mir auch sehr gut gefällt. Nur das Problem mit der Anbindung an Fhem war für mich bislang der Wermutstropfen, der mich hat überlegen lassen, ob das wirklich das richtige System ist. Aber da dein Modul wohl auch die Power Ocean unterstützt, ist das richtig klasse. Vielen Dank schonmal.
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: tschimi am 19 März 2025, 19:08:22
Hi,
könntest du bitte mal schauen, ob Verbose richtig implementiert ist? Trotz Verbose=0 ist mein log voll...
Dankeschön, tschimi


P.S.: Das hier landet jetzt alle paar sec. im Log...
03-20 01:38:12","20_1.mqttErr":17,"20_1.supplyPriority":0,"20_1.wifiErr":6,"20_1.ratedPower":8000,"20_1.batInputCur":0,"20_1.pv1OpVolt":2919,"20_1.rstPanic":0,"20_1.wifiRssi":-75,"20_1.pvPowerLimitAcPower":6023,"20_1.installTown":0,"20_1.wifiFirmwareVersion":11505},"eagleEyeTraceId":"...","tid":""}
2025.03.19 19:05:08 1: $http_method = GET
2025.03.19 19:05:08 1: $host = https://api-e.ecoflow.com
2025.03.19 19:05:08 1: $url = /iot-open/sign/device/list
2025.03.19 19:05:08 1: $url = /iot-open/sign/device/list $query_str = accessKey=...&nonce=...×tamp=...
2025.03.19 19:05:08 1: $sign = ...
2025.03.19 19:05:08 1: $response = {"code":"0","message":"Success","data":[{"sn":"HW....","deviceName":"Terrasse","online":0,"productName":"PowerStream"},{"sn":"HW...","deviceName":"Balkon","online":0,"productName":"PowerStream"}],"eagleEyeTraceId":"ea...","tid":""}
2025.03.19 19:05:08 1: $http_method = GET
2025.03.19 19:05:08 1: $host = https://api-e.ecoflow.com
2025.03.19 19:05:08 1: $url = /iot-open/sign/device/quota/all?sn=HW51ZEH4SF6F1064
2025.03.19 19:05:08 1: $url = /iot-open/sign/device/quota/all?sn=HW51ZEH4SF6F1064 $query_str = accessKey=...&nonce=...×tamp=...
2025.03.19 19:05:08 1: $sign =...
2025.03.19 19:05:08 1: $response = {"code":"0","message":"Success","data":{"20_1.pv2Temp":210,"20_1.invOutputWatts":0,"20_1.pv2RelayStatus":0,"20_1.mqttTlsLastErr":32769,"20_1.batInputVolt":4,"20_1.invDemandWatts":8000,"20_1.wifiEncryptMode":3,"20_1.pv2OpVolt":0,"20_1.consNum":0,"20_1.invOnOff":1,"20_1.invOpVolt":2388,"20_1.installCountry":17477,"20_1.batErrorInvLoadLimit":8000,"20_1.acSetWatts":8000,"20_1.feedProtect":1,"20_1.rstSdio":0,"20_1.espTempsensor":27,"20_1.mqttSockErrno":2,"20_1.historyInvOutputWatts":0,"20_1.pvToInvWatts":0,"20_1.pv1ErrCode":256,"20_1.invLoadLimitFlag":8,"20_1.batLoadLimitFlag":0,"20_1.geneNum":2,"20_1.invToPlugWatts":0,"20_134.task10":{"taskIndex":9,"type":0,"timeRange":{"isConfig":false,"timeData":0,"timeMode":0,"startTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"stopTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"isEnable":false}},"20_1.eventInfo.cpu":160,"20_134.task11":{"taskIndex":10,"type":0,"timeRange":{"isConfig":false,"timeData":0,"timeMode":0,"startTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"stopTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"isEnable":false}},"20_1.meshId":42072836,"20_1.eventInfo.wifiSuccessCount":2747,"20_1.batOpVolt":279,"20_1.utcTime":1742404848,"20_1.permanentWatts":8000,"20_1.bpType":0,"20_1.llcWarningCode":0,"20_1.invOutputCur":27,"20_1.lowerLimit":0,"20_1.mqttTlsStackErr":0,"20_1.llcStatue":1,"20_1.pv1WarnCode":0,"20_1.batOutputLoadLimit":6000,"20_1.rstWdt":0,"20_1.batWarningCode":0,"20_1.acOffFlag":0,"20_1.mqttErrTime":1742399295,"20_1.eventInfo.communicationChannel":0,"20_1.batInputWatts":0,"20_1.eventInfo.bssidCount":0,"20_1.pv2Statue":1,"20_1.staIpAddr":1286777024,"20_1.uwlowLightFlag":0,"20_1.consWatt":0,"20_1.fisoRxyz":6046225.5,"20_1.eventInfo.bandwith":2,"20_1.batErrCode":64,"20_1.meshLayel":1,"20_1.dsgRemainTime":5999,"20_1.batSoc":0,"20_1.historyBatInputWatts":0,"20_1.invBrightness":203,"20_134.task7":{"taskIndex":6,"type":0,"timeRange":{"isConfig":false,"timeData":0,"timeMode":0,"startTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"stopTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"isEnable":false}},"20_1.pv2ErrCode":128,"20_1.invWarnCode":0,"20_134.task6":{"taskIndex":5,"type":0,"timeRange":{"isConfig":false,"timeData":0,"timeMode":0,"startTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"stopTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"isEnable":false}},"20_1.parentMac":3367824925,"20_134.task9":{"taskIndex":8,"type":0,"timeRange":{"isConfig":false,"timeData":0,"timeMode":0,"startTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"stopTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"isEnable":false}},"20_134.task8":{"taskIndex":7,"type":0,"timeRange":{"isConfig":false,"timeData":0,"timeMode":0,"startTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"stopTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"isEnable":false}},"20_1.eventInfo.mqttErrorCount":18589,"20_1.rstExt":0,"20_134.task3":{"taskIndex":2,"type":0,"timeRange":{"isConfig":false,"timeData":0,"timeMode":0,"startTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"stopTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"isEnable":false}},"20_134.task2":{"taskIndex":1,"type":0,"timeRange":{"isConfig":false,"timeData":0,"timeMode":0,"startTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"stopTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"isEnable":false}},"20_134.task5":{"taskIndex":4,"type":0,"timeRange":{"isConfig":false,"timeData":0,"timeMode":0,"startTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"stopTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"isEnable":false}},"20_134.task4":{"taskIndex":3,"type":0,"timeRange":{"isConfig":false,"timeData":0,"timeMode":0,"startTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"stopTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"isEnable":false}},"20_134.task1":{"taskIndex":0,"type":0,"timeRange":{"isConfig":false,"timeData":0,"timeMode":0,"startTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"stopTime":{"sec":0,"week":0,"min":0,"hour":0,"month":0,"year":0,"day":0},"isEnable":false}},"20_1.pv2CtrlMpptOffFlag":0,"20_1.uwloadLimitFlag":4,"20_1.floadLimitOut":500,"20_1.pv1Statue":7,"20_134.updateTime":"2025-03-19 23:48:45","20_1.pv1InputCur":0,"20_1.eventInfo.connectTime":3610,"20_1.rssiThreshold":-58,"20_1.wifiErrTime":1742399298,"20_1.pv2InputWatts":0,"20_1.historyInvToPlugWatts":0,"20_1.eventInfo.btState":0,"20_1.pv2WarningCode":0,"20_1.pv2InputVolt":0,"20_1.wifiConnectChannel":6,"20_1.rstDeepsleep":0,"20_1.batSystem":1,"20_1.wirelessWarnCode":0,"20_1.invErrCode":0,"20_1.dynamicWatts":0,"20_1.batStatue":1,"20_1.eventInfo.mqttSuccessCount":1054,"20_1.eventInfo.type":6,"20_1.heartbeatType2Frequency":10,"20_1.stackMinFree":38,"20_1.resetCount":4020,"20_1.mqttLastDisReason":0,"20_1.uwsocFlag":0,"20_1.llcOpVolt":7,"20_1.timeZone":3600,"20_1.batTemp":0,"20_1.upperLimit":100,"20_1.rstIntWdt":0,"20_1.rssiVariance":0,"20_1.gridOvpCnt":0,"20_1.historyGridConsWatts":0,"20_1.eventInfo.isHidden":1,"20_1.plugTotalWatts":0,"20_1.resetReason":1,"20_1.llcOffFlag":0,"20_1.invInputVolt":0,"20_1.stackFree":74,"20_1.pv1InputVolt":275,"20_1.eventInfo.wifiErrorCount":0,"20_1.invFreq":499,"20_1.invToOtherWatts":0,"20_1.heartbeatFrequency":2,"20_1.dstTime":0,"20_1.selfMac":871673204,"20_1.chgRemainTime":5999,"20_1.eventInfo.adjacentChannelCount":0,"20_1.llcTemp":220,"20_1.rstPoweron":3758,"20_1.pv1Temp":220,"20_1.pv2InputCur":0,"20_1.pv1InputWatts":0,"20_1.noiseFloor":0,"20_1.eventInfo.wifiStandard":7,"20_1.gridConsWatts":8000,"20_1.historyPlugTotalWatts":0,"20_1.geneWatt":8,"20_1.rstBrownout":0,"20_1.invTemp":0,"20_1.rstSw":2,"20_1.wirelessErrCode":0,"20_1.eventInfo.channelCount":0,"20_1.rstTaskWdt":0,"20_1.pv1RelayStatus":0,"20_1.bmsReqChgVol":0,"20_1.invOutputLoadLimit":5984,"20_1.interfaceConnFlag":1,"20_1.llcErrCode":0,"20_1.invStatue":2,"20_1.spaceDemandWatts":8000,"20_1.rstUnknow":0,"20_1.pv1CtrlMpptOffFlag":0,"20_1.historyPvToInvWatts":0,"20_1.bmsReqChgAmp":0,"20_1.invRelayStatus":16,"20_1.historyPermanentWatts":0,"20_1.antiBackFlowFlag":8000,"20_1.batOffFlag":0,"20_1.llcInputVolt":0,"20_1.updateTime":"2025-03-20 01:20:49","20_1.mqttErr":1,"20_1.supplyPriority":0,"20_1.wifiErr":8,"20_1.ratedPower":8000,"20_1.batInputCur":0,"20_1.pv1OpVolt":1436,"20_1.rstPanic":2,"20_1.wifiRssi":-58,"20_1.pvPowerLimitAcPower":5982,"20_1.installTown":0,"20_1.wifiFirmwareVersion":11505},"eagleEyeTraceId":"...","tid":""}
 
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 19 März 2025, 19:31:14
Zitat von: Wolle02 am 19 März 2025, 16:58:42Das ist ja mega, dass du hier ein Modul erstellst. Ich hab hier grade ein Angebot für eine Power Ocean Anlage liegen, das mir auch sehr gut gefällt. Nur das Problem mit der Anbindung an Fhem war für mich bislang der Wermutstropfen, der mich hat überlegen lassen, ob das wirklich das richtige System ist. Aber da dein Modul wohl auch die Power Ocean unterstützt, ist das richtig klasse. Vielen Dank schonmal.

Ich kann es nicht komplett versprechen, ich hab keine Power Ocean, aber ich werde es versuchen...  :)
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 19 März 2025, 19:38:59
Zitat von: tschimi am 19 März 2025, 19:08:22Hi,
könntest du bitte mal schauen, ob Verbose richtig implementiert ist? Trotz Verbose=0 ist mein log voll...
Dankeschön, tschimi
Ist das die neueste Version?
In den ersten Versionen war ich ein wenig nachlässig mit den LogLeveln, da hab ich mit "verbose 1" alles rausgehauen, weil ich sehen musste, was da eigentlich so alles in meiner Entwicklungsumgebung passiert. Im Moment sollte das Modul eigentlich nur noch was bei "verbose 5" ausgeben.


Ich hatte allerdings bis zu Version vom 12.3.25 das Logging nicht richtig verstanden, da fiel der Verbose-Level auf den eingestellten Verbose-Level bei "global" zurück.
Das habe ich eigentlich in den letzten Tagen extensiv getestet, daß das Logging jetzt so läuft, wie es soll.
In meinem "produktiven" FHEM hab ich meine Ecoflow-Komponenten auf "verbose 0" und global auf "verbose 1".
Da loggt bei mir nur, was soll.

Zitat2025.03.19 19:05:08 1: $response = {...
Hmm, ja, sieht mir nach einer alten Version aus, die noch nach der verbose-Einstellung durch global loggt. ;-) " 1:" ist Verbose-Level 1 durch global.
Nimm mal die neueste...
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: tschimi am 19 März 2025, 19:57:51
Hi, habs nochmal überprüft. Hatte wohl doch noch ne ältere Version am Start - jetzt läufts :-)

DANKE!!!!
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Wolle02 am 19 März 2025, 20:46:50
Zitat von: Neolux am 19 März 2025, 19:31:14Ich kann es nicht komplett versprechen, ich hab keine Power Ocean, aber ich werde es versuchen...  :)

Hallo Neolux, das ist ja klar, dass du das nicht versprechen kannst. Das erwartet ja auch keiner  :D  Ich find es aber schon toll, dass du dich der Sache annimmst und dass es auch noch zeitlich mit meiner geplanten Anschaffung zusammen passt.  ;D
Natürlich dauert es noch etwas bis die Anlage bei mir steht, aber sobald sie in Betrieb ist unterstütze ich dich sehr gerne mit Daten die hilfreich sein könnten.
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: matsches am 19 März 2025, 21:38:01
Hi.
Ich habe die PowerOcean und es läuft auch soweit ganz gut. Allerdings werden die Daten nur aktualisiert, wenn die App oder das Webportal parallel aktualisiert wird.
Das ist allerdings kein Problem des Moduls oder Fhem, sondern ein Problem der Ecoflow-Api.
Die Kollegen mit Homeassistant haben das gleiche Problem!
Ecoflow hat noch ein paar Dinge nachzuliefern die sie angekündigt haben. Es fehlen z.B. noch Funktionen für die Automatisierung etc. in der Ecoflow-App.
Die API-Dokumentation wird leider nicht gepflegt. Für die PowerOcean stimmen die Beispiele m.E nicht.

Grüße
Mathias





Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Wolle02 am 20 März 2025, 07:26:40
Oha, danke für die Info. Da muss ich doch nochmal überlegen ob Ecoflow die richtige Anlage ist. Der Solateur meinte ja, dass es möglich sein müsste die RS485 Schnittstelle am Wechselrichter zu verwenden. Laut Ecoflow-technik ist das aber wohl nicht möglich. Schade dass sich Ecoflow hier so kapselt.
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: matsches am 20 März 2025, 09:50:02
Zitat von: Wolle02 am 20 März 2025, 07:26:40Oha, danke für die Info. Da muss ich doch nochmal überlegen ob Ecoflow die richtige Anlage ist.

Nicht falsch verstehen. Die Anlage und das Konzept ist super und wird auch stetig verbessert. Updates kommen regelmäßig mit neuen Funktionen.
SG-Ready-Schnittstellen hat sie auch, aber da kann man nichts auslesen. Leider gibt es (noch) keine lokale Api.
Ich vermute mal, dass sie bei der Cloud auch irgendwie den Datenverkehr beschränken müssen. Bei Daikin ist das ähnlich. (Limitierte Abfragen und neu Authorisieren alle paar Wochen)
Das ist eben einer der Nachteile an diesen Cloudlösungen.
Die Qualität und das Konzept der PowerOcean überzeugen mich trotzdem.
Ich kann dir die Facebook-Gruppe "EcoFlow PowerOcean und DC Fit - offizieller Club (https://www.facebook.com/groups/1023505065537508) empfehlen.
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 20 März 2025, 11:32:10
Zitat von: Wolle02 am 20 März 2025, 07:26:40Oha, danke für die Info. Da muss ich doch nochmal überlegen ob Ecoflow die richtige Anlage ist. Der Solateur meinte ja, dass es möglich sein müsste die RS485 Schnittstelle am Wechselrichter zu verwenden. Laut Ecoflow-technik ist das aber wohl nicht möglich. Schade dass sich Ecoflow hier so kapselt.
Ich hab zwar "nur" ein Balkonkraftwerk mit Powerstream und Delta 2 Max, das war damals das einzig preislich sinnvolle mit einer brauchbaren Ausstattung. Damals.
Ich fand zwar die Power Ocean interessant, aber mittlerweile gibt es IMHO genügend andere Anbieter mit besseren Systemen, ich finde das Zendure Hyper 2000 (https://www.zendure.de/products/hyper-2000) sehr interessant, und kostet nur einen Bruchteil.

Was meiner Meinung nach gegen Ecoflow spricht (und das sind meine Erfahrungen mit meiner Anlage!):


Was ich gut finde:


Alles im Allen kommt Ecoflow als "Hochglanz-Produkt", ähnlich wie Apple daher, die Geräte sehen auch schick aus, aber unter der Haube klemmt es ziemlich, ich würde die heutzutage nicht nochmal kaufen.

Gruß
Knut
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Wolle02 am 20 März 2025, 12:07:47
Danke für Eure Zusammenfassungen. Unterm Strich schau ich mir doch nochmal mein Alternativangebot an; auch wenn es leider etwas teurer ist.  :-\
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 25 März 2025, 17:40:08
Zitat von: Fakenius am 22 März 2025, 16:45:36hat schon jemand Erfahrungen mit den Antwortzeiten dieses Moduls? Es wird ja m.W. ein Blocking-Request mit WWW::Curl::Easy gemacht.
Ja, WWW::Curl::Easy hab ich für den Anfang genommen, weil es mir erstmal um "GET","POST" und "PUT" ging und um einfach zu sehen, was ich zurückerhalte.

Lustigerweise hab ich mich am Wochenende hingesetzt, und auf HttpUtils umgestellt. Das Modul läuft jetzt non-blocking.

Hab einige interne Anpassungen vorgenommen, weiter am Logging verbessert.

Einige Werte beim Powerstream wurden noch falsch gesetzt, das hab ich korrigiert, bei meiner Delta 2 Max werden noch einige Werte falsch gesetzt, da muss ich mich noch weiter drum kümmern.

Anbei V 0.3.5.1, von heute. :)

(Aktuellste Version immer im 1. Post dieses Threads!)
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 26 März 2025, 17:33:25
Zitat von: Wolle02 am 19 März 2025, 20:46:50Hallo Neolux, das ist ja klar, dass du das nicht versprechen kannst. Das erwartet ja auch keiner  :D  Ich find es aber schon toll, dass du dich der Sache annimmst und dass es auch noch zeitlich mit meiner geplanten Anschaffung zusammen passt.  ;D
Natürlich dauert es noch etwas bis die Anlage bei mir steht, aber sobald sie in Betrieb ist unterstütze ich dich sehr gerne mit Daten die hilfreich sein könnten.

Also die Get-CMDs hab ich jetzt für die PowerOcean gemäß der Doku eingebaut. Müsstet ihr mal testen.

Es gibt ein Set-CMD, "JT303_Dashboard_Overview_Summary_Week", das die Statistik der letzten Woche ausgeben soll.

Testen könnt ihr es mit "set <DeviceName> JT303_Dashboard_Overview_Summary_Week YYYY-MM-DD hh:mm:ss YY-MM-DD hh:mm:ss"
Wenn das funktioniert, dann kann ich das so umbauen, daß immer die Statistik der letzten 7 Tage geholt wird, mehr geht sowieso nicht, laut Doku.

Ich hab hier gerade auch aufgeräumt, die aktuellste Version des Moduls ist nun immer im 1. Post des Threads (https://forum.fhem.de/index.php?msg=1334171).
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: matsches am 26 März 2025, 21:40:21
Hi Neolux,

die aktuelle Version wirft mir beim Reload des Moduls einen Error aus:
syntax error at ./FHEM/98_Ecoflow.pm line 611, near "else"
Missing right curly or square bracket at ./FHEM/98_Ecoflow.pm line 1014, at end of line

Grüße
Mathias

Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 26 März 2025, 21:55:13
Huch... hatte ich doch vorher getestet?!

Naja, ich hab's korrigiert.  :'(
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: matsches am 26 März 2025, 22:19:57
Hi. Danke für das schnelle korrigieren! Super.

Zitat von: Neolux am 26 März 2025, 17:33:25Testen könnt ihr es mit "set <DeviceName> JT303_Dashboard_Overview_Summary_Week YYYY-MM-DD hh:mm:ss YY-MM-DD hh:mm:ss"

Leider funktioniert das bei mir nicht.
Ecoflow: Set with unknown argument JT303_Dashboard_Overview_Summary_Week, choose one of deleteReadings SecretKey AccessKey SerialNo connect
EDIT: Gibt es eine neue oder andere Dokumentation?
Woher hast du das mit JT303_Dashboard....?
Ich kenne nur diese hier: https://developer-eu.ecoflow.com/us/document/powerocean
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 02 April 2025, 17:00:17
Seltsam, das hab ich aus der API unter "Historical Data".
ZitatHistorical data

Obtaining historical data (timespan not exceeding a week): POST: /iot-open/sign/device/quota/data
{
    "sn": "HJ31ZDH2ZF690025",
    "params": {
        "code": "JT303_Dashboard_Overview_Summary_Week",
        "beginTime": "2024-06-17 00:00:00",
        "endTime": "2024-06-23 23:59:59"
    }
}

Muss ich mir noch mal genauer ansehen. Die letze Woche hab ich nicht viel programmiert, da war ich auf dem Dach und hab Solar-Paneele dazugeschraubt, einen Zusatzakku zugesteckt und endlich den Shelly Pro 3 EM eingebaut. ;)

Jetzt geht's weiter, habe angefangen, die "Delta Pro"-Unterstützung einzubauen, die Delta 2 Max kann mit den Delta Pro-Befehlen bedient werden. Witzig.

Das mit der Statistik habe ich mir noch mal angesehen, im Prinzip sollte das funktionieren.
Wird das Device denn als "POWER OCEAN" erkannt?
Was steht bei "Internals" bei "Model"? "UNKOWN" oder "POWER OCEAN"? Oder was anderes?

Wenn ich meine Delta 2 Max als Power Ocean ausgebe, erhalten ich keine Fehlermeldung vom Server, aber auch keine Antwort (Mit verbose 5):
2025.04.02 14:51:38 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Set(): Delta2Max: $model = POWER OCEAN
2025.04.02 14:51:38 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Set(): $ef_arg = 1
2025.04.02 14:51:38 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Set(): $key = params.beginTime
2025.04.02 14:51:38 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Set(): $str_value = a[2] a[3]
2025.04.02 14:51:38 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Set(): $key = params.code
2025.04.02 14:51:38 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Set(): $str_value = JT303_Dashboard_Overview_Summary_Week
2025.04.02 14:51:38 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Set(): $key = params.endTime
2025.04.02 14:51:38 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Set(): $str_value = a[4] a[5]
2025.04.02 14:51:38 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Request(): Method = POST
2025.04.02 14:51:38 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Request(): $nonce=827171 $timestamp=1743605498981
2025.04.02 14:51:38 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Request(): $url = /iot-open/sign/device/quota/data $query_str = params.beginTime=2025-04-01+00%3A00%3A00&params.code=JT303_Dashboard_Overview_Summary_Week&params.endTime=2025-04-02+16%3A00%3A00&sn=R3XXXXXXXXXXXXXX&accessKey=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456&nonce=827171&timestamp=1743605498981
2025.04.02 14:51:38 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Request(): $sign = 76de068f5799a79f388d222ca93da14fcb18403023096182dbcf1a26ba7b02f9
2025.04.02 14:51:38 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Request(): $json = {"sn": "R3XXXXXXXXXXXXXX", "params": {"beginTime": "2025-04-01 00:00:00","code": "JT303_Dashboard_Overview_Summary_Week","endTime": "2025-04-02 16:00:00"}}
2025.04.02 14:51:39 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Set(): Delta2Max: $model = POWER OCEAN
2025.04.02 14:51:39 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Set(): $ef_arg =
2025.04.02 14:51:39 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Set(): Delta2Max: $model = POWER OCEAN
2025.04.02 14:51:39 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Set(): $ef_arg =
2025.04.02 14:51:39 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Get(): Delta2Max: $model = POWER OCEAN
2025.04.02 14:51:39 5: Delta2Max(Ecoflow 0.3.7.9): Ecoflow_Response(): $url = https://api-e.ecoflow.com/iot-open/sign/device/quota/data

Die akuellste Version gibt es immer hier (https://forum.fhem.de/index.php?msg=1334171)!
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: matsches am 02 April 2025, 20:42:27
Hi.

ZitatWird das Device denn als "POWER OCEAN" erkannt?
Was steht bei "Internals" bei "Model"? "UNKOWN" oder "POWER OCEAN"? Oder was anderes?

Ich denke daran liegt es. Ohne Leerzeichen!
Internals -> Model: POWEROCEAN

Edit: Mit der Version vom 02.04. kommt nun: "Ecoflow: Get with unknown argument JT303_Dashboard_Overview_Summary_Week, choose one of SerialNo devices AccessKey"
Also die "mögliche" Auswahl an Befehlen hat sich veringert.
Oder mache ich einen Fehler? Mein Aufruf lautet: "get PowerOcean JT303_Dashboard_Overview_Summary_Week 2025-03-19 00:00:00 2025-03-25 23:59:59"

Nochmal edit:
Sorry, habe get und Set verwechselt. Mit SET weiterhin: "Ecoflow: Set with unknown argument JT303_Dashboard_Overview_Summary_Week, choose one of SecretKey detectModel connect AccessKey SerialNo deleteReadings"

LG
Mathias
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 02 April 2025, 20:50:10
Okay, das ist ja ein Ding.  ;D

Dann nimm doch mal das neue Modul 0.3.8.0  8)

Dein Aufruf ist richtig, das Modul erkannte das Gerät nicht richtig und bot daher die Befehlssätze nicht an.
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: matsches am 02 April 2025, 23:06:48
Hi.

mit dem neuen Modul 0.3.8.0 bekomme ich keinerlei Rückmeldung! Immerhin keine Fehlermeldung! :)
Ich glaube PowerOcean und Ecoflow-Api ist irgendwie generell richtig zickig!
Werte aktualisieren sich weiterhin nur, wenn parallel das Webportal oder die App aktiv im Vordergrund laufen.
Diese verdammten Cloud-Apis....

Grüße
Mathias 
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: jop am 03 April 2025, 08:57:57
Hallo Knut,
vielen Dank für das Modul! Super, dass ich endlich meinen Powerstream und Delta Max einbinden kann!
Im Moment kämpfe ich noch damit, dass ich alle 5 Minuten einen Eintrag im FileLog haben möchte (unabhängig, ob sich der Wert ändert oder nicht). Ich habe schon Kombinationen aus event-on-update-reading, event-on-change-reading, event-min-interval probiert (entsprechend fhem Wiki) und event-min-interval gleich oder höher als das ecInterval gesetzt, aber ich erreiche nur, dass die Readings bei Änderung bzw. auch eher sporadisch geloggt werden. Hast Du eine Idee?
Danke schon Mal!
Grüße
Jörg
 
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 03 April 2025, 09:44:20
Moin Mathias,

Zitat von: matsches am 02 April 2025, 23:06:48mit dem neuen Modul 0.3.8.0 bekomme ich keinerlei Rückmeldung! Immerhin keine Fehlermeldung! :)
Ich glaube PowerOcean und Ecoflow-Api ist irgendwie generell richtig zickig!
Werte aktualisieren sich weiterhin nur, wenn parallel das Webportal oder die App aktiv im Vordergrund laufen.
Diese verdammten Cloud-Apis....

Ja, ich hab auch versucht, über meine Credentials und Seriennummern irgendwas von der PowerOcean-API zurückzubekommen, das scheint nichts zurückzukommen. Allerdings kommen Fehlermeldungen zurück, wenn ich diese provoziere. Das liegt wohl dann tatsächlich an Ecoflow, bzw der Cloud.

Ich sehe gerade, die API-Doku wurde aktualisiert, man soll nun nicht mehr "GET" sondern grundsätzlich "POST" verwenden. Ob das was ändert? Ich schau mal...
ZitatHTTP communication mode
Get Quota
Obtaining real-time data: POST: /iot-open/sign/device/quota
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 03 April 2025, 09:53:10
Moin Jörg,

Zitat von: jop am 03 April 2025, 08:57:57Hallo Knut,
vielen Dank für das Modul! Super, dass ich endlich meinen Powerstream und Delta Max einbinden kann!
Im Moment kämpfe ich noch damit, dass ich alle 5 Minuten einen Eintrag im FileLog haben möchte (unabhängig, ob sich der Wert ändert oder nicht). Ich habe schon Kombinationen aus event-on-update-reading, event-on-change-reading, event-min-interval probiert (entsprechend fhem Wiki) und event-min-interval gleich oder höher als das ecInterval gesetzt, aber ich erreiche nur, dass die Readings bei Änderung bzw. auch eher sporadisch geloggt werden. Hast Du eine Idee?

Ja, da habe ich eine Idee: Das hab ich noch nicht umgesetzt. :)
Im Moment werden nur die Readings aktualisiert, die sich geändert haben. Ich schau mir das mal an.
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 03 April 2025, 18:00:18
So, V 0.3.8.4 hab ich mal veröffentlicht.

Die "Delta Pro"-Unterstützung ist nun vollständig.
PowerOcean: Gemäß der aktualisierten Doku bei Ecoflow habe ich alle Gets von HTTP-GET auf HTTP-POST umgestellt. Wenn ich eine PowerOcean abfrage, erhalte ich zumindest einen leeren JSON "data":{} zurück. Vielleicht kommen bei einer echten PowerOcean nun Daten ohne daß die App läuft?!

Zu event-on-update-reading und event-on-change-reading: Eigentlich funktioniert das "von Haus aus". Ich hab mir jetzt Werte in eine Datei loggen lassen, die sich nie ändern. Das klappt insofern, daß immer nur der erste in der Liste angegebene Wert geloggt wird. die anderen nicht, auch wenn ich im Modul die im Attribut gelisteten Werte erzwinge. Verstehe ich nicht, muss ich noch tiefer einsteigen.

Ich habe meine Powerstream mit

attr Powerstream ecInterval 60
attr Powerstream event-min-interval data_20_1.batWarningCode:30, data_20_1.batErrorInvLoadLimit:30
attr Powerstream event-on-change-reading data_20_1.batErrorInvLoadLimit, data_20_1.batWarningCode
attr Powerstream event-on-change-reading data_20_1.batErrorInvLoadLimit, data_20_1.batWarningCode

laufen lassen und der data_20_1.batErrorInvLoadLimit wird schön jede Minute gelogged:

2025-04-03_15:32:46 Powerstream data_20_1.batErrorInvLoadLimit: 800
2025-04-03_15:33:46 Powerstream data_20_1.batErrorInvLoadLimit: 800
2025-04-03_15:34:46 Powerstream data_20_1.batErrorInvLoadLimit: 800
2025-04-03_15:35:43 Powerstream data_20_1.batErrorInvLoadLimit: 800
2025-04-03_15:36:43 Powerstream data_20_1.batErrorInvLoadLimit: 800
2025-04-03_15:37:43 Powerstream data_20_1.batErrorInvLoadLimit: 800
2025-04-03_15:38:43 Powerstream data_20_1.batErrorInvLoadLimit: 800
2025-04-03_15:39:43 Powerstream data_20_1.batErrorInvLoadLimit: 800
2025-04-03_15:40:43 Powerstream data_20_1.batErrorInvLoadLimit: 800
2025-04-03_15:41:43 Powerstream data_20_1.batErrorInvLoadLimit: 800
2025-04-03_15:42:43 Powerstream data_20_1.batErrorInvLoadLimit: 800
2025-04-03_15:43:43 Powerstream data_20_1.batErrorInvLoadLimit: 800

Wenn ich "data_20_1.batWarningCode" an 1. Stelle setze:

attr Powerstream event-on-change-reading data_20_1.batWarningCode, data_20_1.batErrorInvLoadLimit
attr Powerstream event-on-change-reading data_20_1.batWarningCode, data_20_1.batErrorInvLoadLimit

dann wird der Wert gelogged:
2025-04-03_14:45:06 Powerstream data_20_1.batWarningCode: 0
2025-04-03_14:46:06 Powerstream data_20_1.batWarningCode: 0
2025-04-03_14:47:06 Powerstream data_20_1.batWarningCode: 0
2025-04-03_14:48:06 Powerstream data_20_1.batWarningCode: 0
2025-04-03_14:49:06 Powerstream data_20_1.batWarningCode: 0

Warum nicht beide gelogged werden, weiß ich nicht.

Wenn Du alle 5 Minuten einen Wert haben willst, dann solltest Du

ecInterval 300
event-min-interval <reading>:150

setzen. So als Faustregel, den min-interval auf die Hälft von ecInterval, dann sollte zuverlässig mitgelogged werden.

Das hat damit zu tun, daß das Modul alle <ecInterval> Sekunden bei der ecoflow-Cloud per HTTP pollt. "Früher" per MQTT war das natürlich schöner, aber die Schnittstelle wurde anscheinend eingestellt, zumindest sendet die nichts mehr (bei mir).

Und Readings zwischendurch können sich somit nur durch einen SET-Befehl ändern, oder durch Eigenprogrammierung, z.B. eine Leistungsanpassung durch FHEM wo noch mal mit einen GET-Befehl Readings gezielt aktualisiert werden.

Dazu noch einen Hinweis: Bei den Tests während ich programmiere kam es auch häufig zu Fehlermeldungen aus der Cloud, die ich mir nicht erklären konnte. Mal lief die Anbindung fehlerfrei, dann wurden API-Requests mit "Parameter missing" und anderen Meldungen abgelehnt, dann ging es wieder, ohne daß ich was geändert hatte.

Ich kam dann drauf, daß bei zu vielen Abfragen pro Minute(!) die API einfach diese Fehler wirft. Ich hatte da mit meinem Shelly rumprobiert, und alle paar Sekunden die Leistungsabgabe des Powerstreams entsprechend des Pro3EM angepasst, das hat die API ziemlich schnell geblockt.

Ich empfehle da Pi mal Auge höchstens alle 10 Sekunden eine Abfrage zu machen, bei 5 Sekunden wird's schon kritisch.
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: jop am 04 April 2025, 13:57:42
Zitat von: Neolux am 03 April 2025, 18:00:18Wenn ich "data_20_1.batWarningCode" an 1. Stelle setze:

attr Powerstream event-on-change-reading data_20_1.batWarningCode, data_20_1.batErrorInvLoadLimit
attr Powerstream event-on-change-reading data_20_1.batWarningCode, data_20_1.batErrorInvLoadLimit

dann wird der Wert gelogged:
2025-04-03_14:45:06 Powerstream data_20_1.batWarningCode: 0
2025-04-03_14:46:06 Powerstream data_20_1.batWarningCode: 0
2025-04-03_14:47:06 Powerstream data_20_1.batWarningCode: 0
2025-04-03_14:48:06 Powerstream data_20_1.batWarningCode: 0
2025-04-03_14:49:06 Powerstream data_20_1.batWarningCode: 0

Warum nicht beide gelogged werden, weiß ich nicht.


Hallo Knut!
Danke für die schnelle Antwort und die neue Version!
Ich hatte auch schon beobachtet, dass immer nur das erste Reading geloggt wird und ohne Erfolg mit den Schreibweisen für die Readings gespielt (mit und ohne Leer mit | usw.). Ich habe das dann durch Verwendung von .* "gelöst".
Leider hat auch das Setzen von event-min-interval auf die Hälfte des ecIntervals und die Verwendung von event-on-change-reading bzw. event-on-update-reading nichts gebracht - z.B. data_20_1.batTemp wird nur geloggt, wenn sich die Temperatur ändert.
Grüße

Jörg
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 04 April 2025, 16:16:08
Zitat von: jop am 04 April 2025, 13:57:42Leider hat auch das Setzen von event-min-interval auf die Hälfte des ecIntervals und die Verwendung von event-on-change-reading bzw. event-on-update-reading nichts gebracht - z.B. data_20_1.batTemp wird nur geloggt, wenn sich die Temperatur ändert.
Hallo Jörg,

hm, das kann ich leider nicht bestätigen:
2025-04-04_13:56:19 Powerstream data_20_1.batTemp: 16
2025-04-04_13:57:19 Powerstream data_20_1.batTemp: 16
2025-04-04_13:58:19 Powerstream data_20_1.batTemp: 16
2025-04-04_13:59:19 Powerstream data_20_1.batTemp: 16
2025-04-04_14:00:20 Powerstream data_20_1.batTemp: 16
2025-04-04_14:01:20 Powerstream data_20_1.batTemp: 16

Und mit ".*" erhalte ich minütlich alle Readings im Log bei meinen Tests.
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: matsches am 05 April 2025, 13:05:18
Hi  Knut!

Zitat von: Neolux am 03 April 2025, 18:00:18So, V 0.3.8.4 hab ich mal veröffentlicht.

... PowerOcean: Gemäß der aktualisierten Doku bei Ecoflow habe ich alle Gets von HTTP-GET auf HTTP-POST umgestellt. Wenn ich eine PowerOcean abfrage, erhalte ich zumindest einen leeren JSON "data":{} zurück. Vielleicht kommen bei einer echten PowerOcean nun Daten ohne daß die App läuft?!

PowerOcean funktioniert nun ohne parallel laufendes Webportal oder App mit ecInterval 60.
Super!
Die Abfrage mit "get PowerOcean JT303_Dashboard_Overview_Summary_Week 2025-03-31 00:00:00 2025-04-04 23:59:59" liefert allerdings weiterhin weder Daten noch Fehler.

So habe ich die PO definiert. Vielleicht kann es jemand brauchen:
define PowerOcean Ecoflow xxxxxxxxxxxxxxxxxxxxxx HJ3xxxxxxxxxxxxx
attr PowerOcean ecInterval 60
attr PowerOcean event-on-change-reading data_sysLoadPwr,data_sysGridPwr,data_bpPwr,data_bpSoc,data_mpptPwr
attr PowerOcean group Energie
attr PowerOcean icon measure_photovoltaic_inst
attr PowerOcean room Energie
attr PowerOcean stateFormat Solarertrag: [$name:data_mpptPwr] W <br>Hausnetz: [$name:data_sysLoadPwr] W <br>Stromnetz: [$name:data_sysGridPwr] W <br> Batterie: [$name:data_bpPwr] W <br>Ladestatus: [$name:data_bpSoc] % <br>Letzte Meldung: [$name:data_sysLoadPwr:t]
attr PowerOcean verbose 0

Viele Grüße
Mathias

Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 08 April 2025, 13:45:43
Zitat von: matsches am 05 April 2025, 13:05:18Hi  Knut!

PowerOcean funktioniert nun ohne parallel laufendes Webportal oder App mit ecInterval 60.
Super!
Die Abfrage mit "get PowerOcean JT303_Dashboard_Overview_Summary_Week 2025-03-31 00:00:00 2025-04-04 23:59:59" liefert allerdings weiterhin weder Daten noch Fehler.

Das ist schon mal gut, daß die Daten jetzt so kommen. Tja, das mit der Wochenübersicht ist ärgerlich, dann nehm ich das raus. Wer braucht das schon, wenn er FHEM nutzt?  ;)

Da meine Anlage auch nur die aktuellen Daten liefern kann, hab ich mir ein kleines Hilfsmodul geschrieben, einen virtuellen Stromzähler.

define <NAME> VirtStromzaehler

definiert das Device

mit "set watch <devicename> <reading>" pollt das Modul regelmässig das Reading bei einem anderen Device, und summiert die Daten auf in:
Gesamterzeugung: "device_reading_total"
Stündlich: "device_reading_hourly"
Täglich: "device_reading_daily"
Monatlich: "device_reading_monthly"
Jährlich: "device_reading_yearly"

Hourly fliegt sehr wahrscheinlich wieder raus, das hab ich nur für Kontrollzwecke. ;)

mit "attr <devicename> Interval 5..600" wird das Poll-Intervall gesetzt. Macht in Verbindung mit Ecoflow-Devices natürlich keinen Sinn, öfter zu pollen als das eigentliche Device gepollt wird.

Für meinen Powerstream zähle ich den Strom, der ins Hausnetz gespeist wird:

define Stromzaehler VirtStromzaehler
attr Stromzaehler Interval 60
set Stromzaehler watch Powerstream data_20_1.permanentWatts

Wichtig: Die überwachten Readingswerte müssen Watt ausgeben, wenn die Kilowatt liefern, werden die in Megawatt umgerechnet (durch 1000 geteilt). :)
Es lassen sich beliebig viele Devices / Readings zählen.

Vielleicht nützt es jemanden.
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: macfly am 10 Juni 2025, 15:37:29
hi  Neolux,

Danke, dass du dich da ran traust!

Ich habe das Modul mal mit meiner Ecoflow Delta Pro getestet, PV-Module (1600W) hängen direkt am xt60i Anschluss.

erster Eindruck: sofort kommen Messwerte, well done!

zweiter Eindruck: ein bisschen fischig sind einige Daten, hier mal meine Vermutungen:

data_mppt.inAmp ist 325, müsste 3,25 sein
data_mppt.inVol ist 875, müsste 87,5 sein
data_mppt.inWatts ist 3050, müsste 305,0 sein  (ist gerade wolkig)
data_mppt.outAmp ist 585, müsste 5,85 ein
data_mppt.outVol ist 508, müsste 50,8 sein
data_mppt.outWatts ist 2978, müsste 297,8 sein

data_pd.wattsInSum ist korrekt
data_pd.wattsOutSum ist korrekt
data_ems.f32LcdShowSoc ist korrekt.


ich werde noch weiter rumspielen und weiter feedback geben.

Nochmal, *vielen Dank*, dass du das Modul gebaut hast.



Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: Neolux am 10 Juni 2025, 16:12:05
Zitat von: macfly am 10 Juni 2025, 15:37:29zweiter Eindruck: ein bisschen fischig sind einige Daten, hier mal meine Vermutungen:
data_mppt.inAmp ist 325, müsste 3,25 sein
data_mppt.inVol ist 875, müsste 87,5 sein
data_mppt.inWatts ist 3050, müsste 305,0 sein  (ist gerade wolkig)
data_mppt.outAmp ist 585, müsste 5,85 ein
data_mppt.outVol ist 508, müsste 50,8 sein
data_mppt.outWatts ist 2978, müsste 297,8 sein

Dann hab ich das mal angepasst.  ;D

Ich verstehe es aber nicht ganz...

Aus der Doku:
Zitatdata_mppt.inVol long "PV input voltage (mV)"
data_mppt.inAmp long "PV input current (mA)"
data_mppt.inWatts int "PV input power (W)"
data_mppt.outVol long "PV output voltage (mV)"
data_mppt.outAmp long "PV output current (mA)"
data_mppt.outWatts int "PV output power (W)"

data_mppt.inAmp sind demnach 325 mA, also 0,325 A?!
und
data_mppt.inVol sind demnach 875 mV, also 0,875 V?!

Naja, nehme ich dann mal so hin, hab ich ja mit dem PowerStream nicht anders erlebt. :)


Spannend wären dann noch mal folgende Werte:
data_mppt.dcdc12vVol
data_mppt.dcdc12vAmp
data_mppt.dcdc12vWatts
data_mppt.carOutVol
data_mppt.carOutAmp
data_mppt.carOutWatts



Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: KölnSolar am 10 Juni 2025, 21:26:49
ZitatWarum nicht beide gelogged werden, weiß ich nicht.
wenn das stimmt
Zitatattr Powerstream event-on-change-reading data_20_1.batErrorInvLoadLimit, data_20_1.batWarningCode
ist es klar. Ist nicht
Zitatevent-on-change-reading
The attribute takes a comma-separated list of readings.
;)
Grüße Markus
Titel: Aw: Modul für Ecoflow-Komponenten (über HTTP-REST)
Beitrag von: macfly am 12 Juni 2025, 10:47:17
Zitat von: Neolux am 10 Juni 2025, 16:12:05
Zitat von: macfly am 10 Juni 2025, 15:37:29zweiter Eindruck: ein bisschen fischig sind einige Daten, hier mal meine Vermutungen:
data_mppt.inAmp ist 325, müsste 3,25 sein
data_mppt.inVol ist 875, müsste 87,5 sein
data_mppt.inWatts ist 3050, müsste 305,0 sein  (ist gerade wolkig)
data_mppt.outAmp ist 585, müsste 5,85 ein
data_mppt.outVol ist 508, müsste 50,8 sein
data_mppt.outWatts ist 2978, müsste 297,8 sein

Dann hab ich das mal angepasst.  ;D

Ich verstehe es aber nicht ganz...

Aus der Doku:
Zitatdata_mppt.inVol long "PV input voltage (mV)"
data_mppt.inAmp long "PV input current (mA)"
data_mppt.inWatts int "PV input power (W)"
data_mppt.outVol long "PV output voltage (mV)"
data_mppt.outAmp long "PV output current (mA)"
data_mppt.outWatts int "PV output power (W)"

data_mppt.inAmp sind demnach 325 mA, also 0,325 A?!
und
data_mppt.inVol sind demnach 875 mV, also 0,875 V?!

Naja, nehme ich dann mal so hin, hab ich ja mit dem PowerStream nicht anders erlebt. :)


Spannend wären dann noch mal folgende Werte:
data_mppt.dcdc12vVol
data_mppt.dcdc12vAmp
data_mppt.dcdc12vWatts
data_mppt.carOutVol
data_mppt.carOutAmp
data_mppt.carOutWatts

Diese Werte habe ich nicht, aber folgende:

data_ems.paraVolMax 50118 50.118   
data_ems.paraVolMin 49528 49.528
data_ems.chgVol 52225 52.225
data_bmsMaster.amp 13301 13.301
data_bmsMaster.maxCellVol 3345 33.45
data_bmsMaster.minCellVol 3339 33.39
data_bmsMaster.vol 50251 50.251
data_ems.chgVol 52257 52.257
data_inv.cfgAcOutVoltage 230000 230.000

und für den Powerstream Wechselrichter:

data_20_1.bmsReqChgVol 541830 54.1830
data_20_1.bmsReqChgAmp 650000 6.50000
data_20_1.llcOpVolt 4106 41.06

(erste Zahl: Anzeige, zweite Zahl: meine Erwartung.