FHEM > Automatisierung

[JsonMod] invalid server response bei EcoFlow API Abfrage

(1/4) > >>

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:

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

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:

--- Code: ---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

--- Ende Code ---

verbose5 Ausdruck (sensitive Daten als X dargestellt):

--- Code: ---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

--- Ende Code ---

Zum Vergleich die Response im Bowser (Firefox):

--- Code: ---{"code":0,"message":"success","data":{"sn":"XXXXXXXXXX","data":{"remainTime":5999,"socSum":99}}}

--- Ende Code ---

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


--- Code: ---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

--- Ende Code ---

VG

DS_Starter:
Update ....

Im JsonMod klappt der Abruf nun auch wenn man das Attribut


--- Code: ---httpHeader = User-Agent:

--- Ende Code ---

setzt.

Kaspi:
Hi,

habe einen DeltaPro


--- Code: ---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


--- Ende Code ---

bringt bei mir "code 401, Access denied"

Irgend einen Tip?

Frank  :)

DS_Starter:
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":{}}}

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln