[JsonMod] invalid server response bei EcoFlow API Abfrage

Begonnen von DS_Starter, 15 Mai 2022, 09:55:05

Vorheriges Thema - Nächstes Thema

DS_Starter

Guten Morgen,

ich habe mir ein JsonMod Device definiert um die EcoFlow API abzufragen.
Den im JsonMod Device verwendeten Aufruf kann ich im Browser erfogreich absetzen, d.h. ich bekomme das erwartetet Ergebnis.
Die URL ist:

   https://iot1.ecoflow.com/api/v1/devices/queryDeviceData?sn=<SN>&appkey=<API-Key>

Den Teil "sn=<SN>&appkey=<API-Key>" habe ich im JsonMod als secret KEY hinterlegt.

Im Gegensatz zur Ausführung im Browser antwortet die API dem JsonMod Device immer mit "HTTP/1.1 400 Bad Request".
Möglicherweise liegt es am verwendeten "User-Agent: fhem" im Header. Wie könnte man das Attribut HttpHeader verwenden um testweise den User-Agent zu ändern ?

list:

Internals:
   API_LAST_MSG invalid server response
   API_LAST_RES 1652601003.58177
   CFGFN     
   DEF        https://iot1.ecoflow.com/api/v1/devices/queryDeviceData?[KEY]
   FUUID      6280a19b-f33f-b178-86aa-78395c378729461d
   NAME       EcoFlow
   NEXT       2022-05-15 10:00:00
   NR         64753
   SECRETS    KEY
   SOURCE     https://iot1.ecoflow.com/api/v1/devices/queryDeviceData?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (400)
   STATE      ???
   SVN        24783 2021-07-21 22:37:12 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://iot1.ecoflow.com/api/v1/devices/queryDeviceData?[KEY]
     SECRET:
   Helper:
     DBLOG:
       state:
         LogDB1:
           TIME       1652600097.60198
           VALUE      reread
Attributes:
   readingList complete();
   room       Energie
   verbose    5


verbose5 Ausdruck (sensitive Daten als X dargestellt):

2022.05.15 09:34:57.600 5: HttpUtils url=<hidden> NonBlocking via https
2022.05.15 09:34:57.649 4: IP: iot1.ecoflow.com -> 163.171.128.249
2022.05.15 09:34:57.932 5: HttpUtils request header:
GET /api/v1/devices/queryDeviceData?sn=XXXXXXXX&appkey=XXXXXXXXX HTTP/1.0
Host: iot1.ecoflow.com
User-Agent: fhem
Accept-Encoding: gzip,deflate

Accept: application/json
Accept-Charset: utf-8, iso-8859-1

2022.05.15 09:34:58.143 4: <hidden>: HTTP response code 400
2022.05.15 09:34:58.144 5: HttpUtils <hidden>: Got data, length: 0
2022.05.15 09:34:58.145 5: HttpUtils response header:
HTTP/1.1 400 Bad Request
Connection: close
2022.05.15 09:34:58.146 4: [EcoFlow] api encoding is , designated encoder is utf-8-strict


Zum Vergleich die Response im Bowser (Firefox):

{"code":0,"message":"success","data":{"sn":"XXXXXXXXXX","data":{"remainTime":5999,"socSum":99}}}
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Update ... mit HTTPMOD konnte ich die Aufgabe problemlos lösen.
Hier das Device als Beispiel für Nachnutzer:


defmod EcoFlow HTTPMOD https://iot1.ecoflow.com/api/v1/devices/queryDeviceData?sn=XXXXXXXXX&appkey=XXXXXXXXXXXX
attr EcoFlow alias EcoFlow River Max
attr EcoFlow bodyDecode auto
attr EcoFlow extractAllJSON 1
attr EcoFlow readingMaxAge 300
attr EcoFlow readingMaxAgeReplacement outdated
attr EcoFlow readingMaxAgeReplacementMode text
attr EcoFlow room Energie
attr EcoFlow showError 1
attr EcoFlow stateFormat <b>letztes Update:</b> lastUpdate , <b>Status:</b> message , <b>Ladezustand:</b> data_data_socSum
attr EcoFlow timeout 15
attr EcoFlow userReadings lastUpdate:message.* {ReadingsTimestamp($name, 'message', '')}
attr EcoFlow verbose 3


VG
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Update ....

Im JsonMod klappt der Abruf nun auch wenn man das Attribut


httpHeader = User-Agent:


setzt.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Kaspi

#3
Hi,

habe einen DeltaPro


defmod EcoFlow HTTPMOD https://iot1.ecoflow.com/api/v1/devices/queryDeviceData?sn=XXXXXXXXX&appkey=XXXXXXXXXXXX
attr EcoFlow alias EcoFlow River Max
attr EcoFlow bodyDecode auto
attr EcoFlow extractAllJSON 1
attr EcoFlow readingMaxAge 300
attr EcoFlow readingMaxAgeReplacement outdated
attr EcoFlow readingMaxAgeReplacementMode text
attr EcoFlow room Energie
attr EcoFlow showError 1
attr EcoFlow stateFormat <b>letztes Update:</b> lastUpdate , <b>Status:</b> message , <b>Ladezustand:</b> data_data_socSum
attr EcoFlow timeout 15
attr EcoFlow userReadings lastUpdate:message.* {ReadingsTimestamp($name, 'message', '')}
attr EcoFlow verbose 3



bringt bei mir "code 401, Access denied"

Irgend einen Tip?

Frank  :)

DS_Starter

#4
Das riecht sehr danach dass der API-Key falsch ist. Hast du ihn beim Support angefordert ?

sn ist natürlich mit der gültigen Seriennummer zu ersetzen und appkey mir dem Key den man beim Support anfordern kann.

Abgesehen davon funktioniert die Abfrage momentan nicht. Kürzlich wurde der Server geändert und meine Nachfrage beim Support hat ergeben sich etwas zu gedulden.

Es kommen aber nur leere Daten und kein Access denied wie bei dir.

{"code":0,"message":"success","data":{"sn":"XXXXXXXXXX","data":{}}}
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

#5
Eine Idee hätte ich noch, achte darauf dass der appkey nicht inmitten des Strings umgebrochen wird. So klappt die DEF Edition:


https://iot1.ecoflow.com/api/v1/devices/queryDeviceData?sn=XXXXXXXXXXXX&appkey=f52a6c2122XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXa04b87f3
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Kaspi

Den Key bekomme ich erst wenn die neuen Server laufen.

JoeALLb

Hallo zusammen!

Dieses Gerät steht auf meiner Wunschliste,
da hat es mich gefreut, diesen Thread zu finden!

Mal eine naive frage: könnte es möglich sein, du er die API irgendwann auch die Ladeleistung AC des Geräts festzulegen?

Ich möchte meinen eigenverbrauch Photovoltaik optimieren,
Darum muss sich das Laden dieses Gerätes einreihen in die Prioritätenliste (nach dem Auto, vor der WaMa, am Vormittag nach dem Warmwasser, am Nachmittag davor ;-))

Habe leider noch keinen API Zugang!

S. G. Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

DS_Starter

#8
Hallo Joe,

wieder mal schön von dir zu lesen ... schon lange her.  ;)

Die Frage kann man seriös nicht beantworten. Es kommt ja darauf an ob/wann EcoFlow diese Möglichkeit implementiert.
Zur Zeit werden nur Daten zur Abfrage angeboten (wenn die API wieder funktioniert).

Zur Optimierung aller Verbraucher benutze ich mein Modul SolarForecast (https://forum.fhem.de/index.php/topic,117864.msg1222240.html#msg1222240), d.h. das funktioniert schon mit den vorhandenen Daten (siehe Screenshot).
Die Schaltzeiten der registrierten Verbraucher werden optimiert aufeinander abgestimmt. Das Modul übernimmt auch die Schaltung der Verbraucher wenn gewünscht.

Vielleicht hilft dir das bereits.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

JoeALLb

Hallo Heiko,

ja, sehr schön von Dir zu hören, und schön zu lesen, wie aktiv du hier bist!!
Leider hatte ich die letzten Jahre wenig mit FHEM zu tun (Hauskauf mit anderem System),
habe es jetzt aber wieder in Betrieb genommen!
Sehr übersichtliche Grafik, vielen Dank!

Genau so etwas habe ich auch im Einsatz, und versuche das noch weiter zu optimieren. Möglichkeiten gibt es ja viele,
doch für den WAF darf es nicht zu kompliziert werden. Alleine schon dass die WaMa in der Nacht nicht mehr startet,
brauchte bei mir einiges an Überzeugung!

Nun überlege ich aber eben, neben den anderen Dingen den EcoFlow mit zu integrieren. Und ich möchte diesen auch unterwegs im Wohnmobil nutzen. Da wäre es eben schön gewesen, wenn ich die Ladeleistung davon nach aktuellem Überschuss regeln kann. Da ich dies aber schon bei anderen Dingen (Wärmepumpe, Auto, Warmwasser) regeln kann, ist das eher "Nicetohave". Schade, dachte da man (angeblich) in der App die Ladegeschwindigkeit einstellen kann, ginge das eventuell auch per API.
Aber zumindest zwischen 2 Geschwindigkeiten solles einen Knopf am Gerät selbst geben... vielleicht kann ich dafür einen
"automatisierten Finger" nutzen, der den Knopf für mich drückt.

Ich müsste eben den Stromverbrauch und somit die Ladung zwischen PV-Speicher, Ecoflow, Auto und Warmwasser in eine vernünftige Priorisierung bringen, die sich nach
definierbaren Umständen ändert! (Nächster Tag Dienstreise -> Auto voll laden. Dringende Wäsche, WaMa vor Warmwasser Strom zuteilen, ...).
Wo ich jetzt Wohne wird für Einspeisung nichts bezahlt, es rechnet sich also nur der maximal mögliche Eigenverbrauch.

Habe den EcoFlow eben bestellt, aber die Lieferzeit wird mir nicht garantiert.

s.G. Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Kaspi

Hi,

Ich habe neue Zugagsdaten von Ecoflow erhalten.
Zitat
  https://api.ecoflow.com/iot-service/open/api/device/queryDeviceQuota?sn=xxxxxxxxxxxxx
  -H 'Content-Type: application/json'
  -H 'appKey: yyyyyyyyyyyyyyyyyyyyy'
  -H 'secrteKey: zzzzzzzzzzzzzzzzz'

Wie müßte nun der Zugang aussehen?

Kaspi 🙂

DS_Starter

Zitat
Ich habe neue Zugagsdaten von Ecoflow erhalten.
Oh, da muss ich gleich mal nachfragen.  :)
Wenn ich die auch habe, schaue ich es mir mal an.

LG
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Kaspi

sn, appKey, secretKey in secrets



defmod ECOFLOW_DeltaPro_JSONMOD JsonMod https://api.ecoflow.com/iot-service/open/api/device/queryDeviceQuota?
attr ECOFLOW_DeltaPro_JSONMOD httpHeader User-Agent:
attr ECOFLOW_DeltaPro_JSONMOD interval * * * * *
attr ECOFLOW_DeltaPro_JSONMOD room -USV-
attr ECOFLOW_DeltaPro_JSONMOD stateFormat <b>letztes Update:</b> lastUpdate , <b>Status:</b> message , <b>Ladezustand:</b> data_data_socSum
attr ECOFLOW_DeltaPro_JSONMOD userReadings lastUpdate:message.* {ReadingsTimestamp($name, 'message', '')}
attr ECOFLOW_DeltaPro_JSONMOD verbose 4

setstate ECOFLOW_DeltaPro_JSONMOD <b>letztes Update:</b> lastUpdate , <b>Status:</b> message , <b>Ladezustand:</b> data_data_socSum




ergibt im LOG:

Zitat
2022.06.22 09:36:00 4: [ECOFLOW_DeltaPro_JSONMOD] start request
2022.06.22 09:36:00 4: [ECOFLOW_DeltaPro_JSONMOD] next request: 2022.06.22 09:37:00
2022.06.22 09:36:00 4: IP: api.ecoflow.com -> 163.171.128.138
2022.06.22 09:36:00 4: [ECOFLOW_DeltaPro_JSONMOD] start request
2022.06.22 09:36:00 4: [ECOFLOW_DeltaPro_JSONMOD] next request: 2022.06.22 09:37:00
2022.06.22 09:36:04 4: https://api.ecoflow.com/iot-service/open/api/device/queryDeviceQuota?: HTTP response code 200
2022.06.22 09:36:04 4: [ECOFLOW_DeltaPro_JSONMOD] api encoding is UTF-8, designated encoder is utf-8-strict


DS_Starter

#13
Hallo,

nun habe ich auch meinen neuen Zugang erhalten und den Datenabruf mit HTTPMOD ! neu eingerichtet.
Im URL Aufruf kommt nun nur noch die sn hinein.
Die Keys Content-Type, appKey und secretKey werden in drei Attribute requestHeaderXX gebaut.

Hier wieder meine RAW Definition des Devices zur Nachnutzung. Läuft nun wieder :) und ich kann die solare Aufladung des Gerätes abhängig von seinem Ladezustand im Modul SolarForecast freigeben.


defmod EcoFlow HTTPMOD https://api.ecoflow.com/iot-service/open/api/device/queryDeviceQuota?sn=XXXXXXXX
attr EcoFlow alias EcoFlow River Max
attr EcoFlow bodyDecode auto
attr EcoFlow cmdIcon reread:rc_MINUS
attr EcoFlow extractAllJSON 1
attr EcoFlow group Ladestationen
attr EcoFlow icon it_ups
attr EcoFlow readingMaxAge 900
attr EcoFlow readingMaxAgeReplacement -10
attr EcoFlow readingMaxAgeReplacementMode text
attr EcoFlow requestHeader01 Content-Type: application/json
attr EcoFlow requestHeader02 appKey: XXXXXXXXXXXXXXXXXXXXX
attr EcoFlow requestHeader03 secretKey: XXXXXXXXXXXXXXXXXXXXXXXX
attr EcoFlow room Energie
attr EcoFlow showError 0
attr EcoFlow sortby 1
attr EcoFlow stateFormat <b>letzter Abruf:</b> lastUpdate | <b>Status:</b> message | <b>Ladezustand:</b> data_soc %
attr EcoFlow timeout 60
attr EcoFlow userReadings lastUpdate:message.* {ReadingsTimestamp($name, 'message', '')}
attr EcoFlow verbose 3
attr EcoFlow webCmd reread


LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Kaspi

und es kommt noch mehr  :)

Zitat
Readings
code
0
2022-06-22 12:30:53
data_remainTime       286           2022-06-22 12:30:53
data_soc                     50           2022-06-22 12:30:53
data_wattsInSum      907            2022-06-22 12:30:53
data_wattsOutSum    381            2022-06-22 12:30:53
lastUpdate 2022-06-22 12:26:31 2022-06-22 12:26:31
message Success 2022-06-22 12:30:53

Kaspi