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
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
Das sollten wir hinbekommen... etwas debuggen, dann kommen auch von dem Daten. ;)
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!)
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
Okay. :)
(Aktuellste Version immer im 1. Post dieses Threads!)
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?
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
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
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
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. :'(
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
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.
Zu den Perl-Modulen: Ich mach das bei mir mit CPAN:
sudo cpan -i WWW::Curl::Easy Time::HiRes Digest::SHA
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
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?
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?
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!)
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.
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??
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...
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!)
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
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
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! :)
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
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
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. :)
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!)
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!)
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.
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":""}
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... :)
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...
Hi, habs nochmal überprüft. Hatte wohl doch noch ne ältere Version am Start - jetzt läufts :-)
DANKE!!!!
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.
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
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.
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.
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!):
- API wurde erst später freigegeben, zu Anfang ging nur die App, bzw. MQTT-Anbindungen über ein Reverse Engineering des App-Traffics. Da hatte ich eine gewagte FHEM-Anbindung mit einem Zusammengeschusterten MQTT-Modul, das ein Android-Telefon simulierte
- Keine Möglichkeit, die Anlage entfernt durchzustarten. Nach einem Firmware-Update stellte die Anlage meist die Stromproduktion ein. "Lösung" laut des Supports: Anlage abschalten und wieder einschalten. Anlage abschalten bedeutet aber: Alle Verbindungen physisch trennen, sonst geht nichts auszuschalten. Danach alles wieder anstecken und Anlage wieder einschalten. Und schon produziert sie wieder Strom.
- Support ist nicht gut. Aus der Zentrale in China kommen nur unqualifizierte Antworten, wenn denn überhaupt Antworten kommen, der Support in der Tschechien ist mit den meisten Fragen, die über den Ottonormalverbraucher hinausgehen, komplett überfordert. Im Zweifel empfehlen die nur einen Anlagen-Neustart.
- Nach Freigabe der API funktionierte die MQTT-Verbindung auf Anhieb, das fand ich ja gut, aber die Freude währte nur 1,3 Jahre. Seit Mitte Januar kommt bei mir kein MQTT mehr an (s.o.). Mal sehen, wie lange HTTP-Rest noch geht, oder ob ecoflow das wieder auf die App reduziert, die übrigens immer schlechter wird.
- Taskplanung und Shelly-Anbindung in der App funktioniert nur mässig. Ich hatte Tasks und Regelungen mangels FHEM-Unterstützung erstellt, aber ob die Anlage die ausführt, hing eher von der Windrichtung ab. Oder von Lust & Laune. Das funktioniert jetzt über FHEM zuverlässig.
Was ich gut finde:
- Hohe Belastbarkeit der Delta 2 Max, ich hab mein "Kraftwerk" in und auf meiner Garage(Werkstatt) und fürs Heimwerken nutze ich inzwischen ausschliesslich die Delta 2. Egal ob Rasenmäher, Tischkreissäge, Betonmischer oder Hilti, die steckt das weg.
- Einspeisung richtet sich bach dem eingestellten Wert, bzw über eine Verbrauchsmessung über Shelly/Smart Plug, da ist ohne großen Aufwand eine Nulleinspeisung möglich
- Die Möglichkeit, die Delta 2 Max über eigene Panels und Panels am Powerstream zu laden, bzw die Anlage zu betreiben.
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
Danke für Eure Zusammenfassungen. Unterm Strich schau ich mir doch nochmal mein Alternativangebot an; auch wenn es leider etwas teurer ist. :-\
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!)
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).
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
Huch... hatte ich doch vorher getestet?!
Naja, ich hab's korrigiert. :'(
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
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¶ms.code=JT303_Dashboard_Overview_Summary_Week¶ms.endTime=2025-04-02+16%3A00%3A00&sn=R3XXXXXXXXXXXXXX&accessKey=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456&nonce=827171×tamp=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)!
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
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.
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
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
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
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.
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.
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
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.
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
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.
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.
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
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
Zitat von: Neolux am 10 Juni 2025, 16:12:05Zitat 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.