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

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

Vorheriges Thema - Nächstes Thema

MasterRay

Zitat von: xelawe am 10 August 2025, 10:48:29Hallo,

ich bekomme seit Anfang August von meine rRiver 2 Max keine Daten mehr ...

Habe ich bei meiner Delta 3 auch. Wie ich gelesen habe, ist das die EF-Antwort auf eine (noch) unveröffentliche API.

Alternativ ggf. MQTT verwenden.

KölnSolar

Hi Knut,
ich habe nun das Modul für meine powerstream u. delta2 im Einsatz. Funktioniert grundsätzlich. Danke.

Leider musste ich regelmäßige minimale freezes feststellen, was mir mit meinem freezemon das Log zuballert.
Bei der Suche bin ich im Code auf my @ev_on_change_reading=Ecoflow_CleanArray(split(",",AttrVal($name,"event-on-change-reading","")));
my @ev_on_update_reading=Ecoflow_CleanArray(split(",",AttrVal($name,"event-on-update-reading","")));
.
.
.
if((Ecoflow_StrInArr($vname,@ev_on_update_reading)) || (Ecoflow_StrInArr(".*",@ev_on_update_reading)) || (Ecoflow_StrInArr($vname,@ev_on_change_reading)) || (Ecoflow_StrInArr(".*",@ev_on_change_reading))){
Ecoflow_Log($param->{hash}, 5, "Ecoflow_Response(): Forced Update $vname");
readingsBulkUpdate($param->{hash},$vname,$v{$rname});
}
else
{
readingsBulkUpdateIfChanged($param->{hash},$vname,$v{$rname});
}
gestoßen. Eine etwas eigentümliche Implementierung der event-on-Attribute. Warum ?

Außerdem scheint die Schleife foreach my $key(sort keys %{$Ecoflow_Vars{$model}->{Adjustments}}){
Ecoflow_Log($param->{hash},6,"Ecoflow_Response(): \$key = $key | \$rname = $rname");
if($key eq $rname){
$v{$rname}=$v{$rname}/$Ecoflow_Vars{$model}->{Adjustments}->{$rname};
}
}
die freezes zu verursachen, da sie für jedes Feld aufgerufen wird. Warum nicht durch
$v{$rname}=$v{$rname}/$Ecoflow_Vars{$model}->{Adjustments}->{$rname} if($Ecoflow_Vars{$model}->{Adjustments}->{$rname});ersetzen ?

Für die Delta2 gibt es ja noch keine Adjustments. Welche Einheiten sollen denn ausgegeben werden ? V,A,W,Wh,h ? Dann kann ich mich an die Definition machen.

Grüße
Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

KölnSolar

...und wie wäre es mit einem Attribut no_data_20_134 ?

Die time-schedules braucht doch eigentlich niemand in FHEM. Frisst unnötig Leistung und macht ne Masse nichtssagender readings.
...
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Neolux

Moin zusammen,

sorry war den Sommer über mit anderen Sachen beschäftigt.

Also, zunächst mal:
[quote [quote
Zitat von: MasterRay am 27 August 2025, 11:09:35
Zitat von: xelawe am 10 August 2025, 10:48:29Hallo,

ich bekomme seit Anfang August von meine rRiver 2 Max keine Daten mehr ...

Habe ich bei meiner Delta 3 auch. Wie ich gelesen habe, ist das die EF-Antwort auf eine (noch) unveröffentliche API.

Alternativ ggf. MQTT verwenden.
Delta 3- und River-Geräte: Hierzu wurde seitens Ecoflow keine API veröffentlicht. Wie auch bei anderen neueren geräten von Ecoflow werden hier wohl "Google Protocol Buffers" benutzt, dazu wurde keine Schnittstelle bekanntgegeben, und aufgrund der Verschlüsselung kommt man da auch nicht so hemdsärmelig weiter.

Zitat von: KölnSolar am 09 September 2025, 21:57:30 foreach my $key(sort keys %{$Ecoflow_Vars{$model}->{Adjustments}}){
Ecoflow_Log($param->{hash},6,"Ecoflow_Response(): \$key = $key | \$rname = $rname");
if($key eq $rname){
$v{$rname}=$v{$rname}/$Ecoflow_Vars{$model}->{Adjustments}->{$rname};
}
}
Ja, ändere ich, kein Thema. Ich bin kein Perl-Profi, von daher bin ich mit diesem Modul von 0 auf 100 gegangen. Von daher bin ich für jede Optimierung dankbar.

Zitat von: KölnSolar am 09 September 2025, 22:31:39...und wie wäre es mit einem Attribut no_data_20_134 ?

Die time-schedules braucht doch eigentlich niemand in FHEM. Frisst unnötig Leistung und macht ne Masse nichtssagender readings.

Naja, die werden einfach über den HTTP-Request mit zurückgegeben. Ich bin mir nicht sicher, ob das die Leistung des Moduls verbessert, wenn ich die rausfiltere.
Gruß
Knut

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

KölnSolar

Hi Knut,
ZitatIch bin kein Perl-Profi, von daher bin ich mit diesem Modul von 0 auf 100 gegangen.
Frag mich, ich stehe mit Perl auch eher auf Kriegsfuß. Und manche Perl-Dinge in Deinem Modul verstehe ich mangels Wissen nicht.
ZitatIch bin mir nicht sicher, ob das die Leistung des Moduls verbessert, wenn ich die rausfiltere.
Die Schleife wird 70% performanter.  ;) Mir geht's es aber mehr um die Übersicht bei den readings. 125 sind schon unübersichtlich genug, aber 350.... :( 
Bei
Zitatevent-on-Attribute.
kann ich ja vielleicht weiterhelfen... :)
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Neolux

#80
Zitat von: KölnSolar am 09 September 2025, 21:57:30Für die Delta2 gibt es ja noch keine Adjustments. Welche Einheiten sollen denn ausgegeben werden ? V,A,W,Wh,h ? Dann kann ich mich an die Definition machen.
Richtig, ich hab die alle normiert auf V,A,W... etc.
Ecoflow hat da so lustige Ausgaben wie milliVolt, deziWatt, etc. Das will doch keiner Wissen. ;)

Nachtrag: Ich hab angefangen, die Schleifen zu optimieren. brauch aber wohl noch ein paar Tage bis zum Release.
Gruß
Knut

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

KölnSolar

#81
Schon einmal das, was ich im Augenblick liefern kann "DELTA 2" => {
"Adjustments" => {
"data_inv.acInAmp" => 1000,
"data_inv.acInVol" => 1000,
"data_inv.cfgAcOutVol" => 1000,
"data_mppt.outVol" => 1000,
"data_inv.invOutVol" => 1000,
"data_inv.invOutAmp" => 1000,
},
"Gets" => {},
"Sets" => {},
"SetCmdCodes" => {},
},
da meine delta2 im Augenblick zur Reparatur ist.
Es gibt noch 19 readings zu Zellspannungen(3-3,3V,differenz 0,001V). Aber da machen dann glaube ich die mV Sinn, oder ?
"data_bms_bmsStatus.cellVol_1 => 1000,
"data_bms_bmsStatus.cellVol_2 => 1000,
"data_bms_bmsStatus.cellVol_3 => 1000,
"data_bms_bmsStatus.cellVol_4 => 1000,
"data_bms_bmsStatus.cellVol_5 => 1000,
"data_bms_bmsStatus.cellVol_6 => 1000,
"data_bms_bmsStatus.cellVol_7 => 1000,
"data_bms_bmsStatus.cellVol_8 => 1000,
"data_bms_bmsStatus.cellVol_9 => 1000,
"data_bms_bmsStatus.cellVol_10 => 1000,
"data_bms_bmsStatus.cellVol_11 => 1000,
"data_bms_bmsStatus.cellVol_12 => 1000,
"data_bms_bmsStatus.cellVol_13 => 1000,
"data_bms_bmsStatus.cellVol_14 => 1000,
"data_bms_bmsStatus.cellVol_15 => 1000,
"data_bms_bmsStatus.cellVol_16 => 1000,
"data_bms_bmsStatus.maxCellVol => 1000,
"data_bms_bmsStatus.minCellVol => 1000,
"data_bms_bmsStatus.maxVolDiff => 1000,

Habe ich Deine gets richtig verstanden, dass Du nur das Reading ausliest und anzeigst ?
Das würde keinen Sinn machen. Ein get bezieht sich auf das physische Device(in dem Fall die Cloud), also z.B. get update/request, um sofort Daten vom device zu holen, weil man nicht auf den Ablauf des Intervalls warten möchte. Oder um Daten zu ermitteln, die nicht mit dem Standardzyklus übertragen werden.

Grüße Markus

edit:
Zitatbrauch aber wohl noch ein paar Tage bis zum Release
Nur kein Stress. Ist nur ein Hobby.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt