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

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

Vorheriges Thema - Nächstes Thema

tschimi

#15
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?

Neolux

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
Ja, stimmt, hast Du oben geschrieben.

Was ist denn das für ein Ecoflow-Gerät? Und die Firmware des Geräts ist aktuell?

Neolux

#17
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!)

Neolux

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.

tschimi

#19
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??

Neolux

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...

Neolux

#21
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!)

matsches

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





Fakenius

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
FS20, Homematic (DebMatic), Zigbee (deCONZ), LaCrosse, selbstgebaute Sensoren und Aktoren via MQTT
 (CUL, HB-RF-USB-2, Jeelink, SIGNALDuino, ConBee III)

Neolux

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! :)

tschimi

#25
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

matsches

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

Neolux

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.  :)

Neolux

#28
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!)

Neolux

#29
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 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!)