NEWS
[gelöst] JSON korrekt auslesen (AHOY Api)
-
@haselchen sagte in JSON korrekt auslesen (AHOY Api):
In der API ist er unter api/index.
bitte als code
EDIT: lass mal die Konvertierung nach objekt weg
nur attribut...von result
-
die Fehlermeldung bedeutet, das das Objekt null ist.
Daher es enthält kein Attribut namens inverter.
d.h. der Abruf hat nicht funktioniert. Evtl müsste man da nochmal vorher überprüfen ob das abgerufene Ergebnis überhaupt einen Inhalt hat (not null) -
@haselchen Vielleicht wird ist ja nicht jedes Mal das ganze Objekt vorhanden. Lass Dir doch per Debug das ganze Objekt ausgeben, vielleicht ist das nicht immer verfügbar?
-
Danke für euer Feedback.
Die API wird in der GUI alle 30sek aktualisiert.Dementsprechend ist der Wert aus der API IMMER vorhanden und aktualisiert.
-
@haselchen Wie gesagt lass Dir das mal im Debug Fenster ausgeben, nur so wirst Du letztlich Klarheit bekommen, was zu tun ist.
-
@haselchen sagte in JSON korrekt auslesen (AHOY Api):
Dementsprechend ist der Wert aus der API IMMER vorhanden und aktualisiert.
...wenn der Abruf fehlerfrei funktioniert hat!
@haselchen sagte in JSON korrekt auslesen (AHOY Api):
Mal klappt der Abruf im 2.Versuch,
und der andere ist defrkt.
also vor dem Auslesen erst prüfen, ob das Objekt auch drin steht
-
@haselchen sagte in JSON korrekt auslesen (AHOY Api):
Dementsprechend ist der Wert aus der API IMMER vorhanden und aktualisiert
Nicht ganz.
auch deine Gui schaut vorher ob das Objekt null ist, bevor es etwas macht.
https://github.com/lumapu/ahoy/blob/868c49fdf4ff9e0c657120f2f92c49ffff57db38/src/web/html/index.html#L197 -
-
du kannst auch über die gui im browser mal mit den developer tools schauen,
was da so ankommt. ob es wirklich immer gefüllt ist.Seite aufrufen.
Dann F12
Dann Tab Network
Dann F5
Dann nach den Einträgen zu api/index schauen -
Also wenn da kein Objekt zurückkommt, dann kannst auch kein Attribut auslesen. Dann musst halt erst mal mit Browser etc. versuchen zu schauen, was da zurückkommt.
Kann es ggf. sein, dass noch eine Anmeldung erforderlich ist?
-
@haselchen sagte in JSON korrekt auslesen (AHOY Api):
Wie bekomme ich das ganze JSON in einen Datenpunkt?
debug result
bringt es zum Anzeigenaktualisiere DP1 mit result
bringt es in einen Datenpunkt.
den kannst du sogar loggen -
script.js.Photovoltaikanlage.HM-600_Statistik: null
Das ist das Ergebnis.
Was ist nicht kapiere.
Exakt die gleichen Blocklys und Einstellungen funktionieren beim anderen Wechselrichter.Edit: nach dem 3.Abruf kommt das
script.js.Photovoltaikanlage.HM-600_Statistik: {"generic":{"wifi_rssi":-69,"ts_uptime":5777,"menu_prot":false,"menu_mask":61,"menu_protEn":false,"esp_type":"ESP8266"},"ts_now":1689944699,"ts_sunrise":1689909623,"ts_sunset":1689967802,"ts_offset":0,"disNightComm":true,"inverter":[{"enabled":true,"id":0,"name":"HM-600","version":"10010","is_avail":true,"is_producing":true,"ts_last_success":1689944693}],"warnings":[],"infos":["MQTT is connected, 5728 packets sent, 0 packets received"]}
-
@haselchen sagte in JSON korrekt auslesen (AHOY Api):
script.js.Photovoltaikanlage.HM-600_Statistik: null
Das ist das Ergebnis.
Was ist nicht kapiere.
Exakt die gleichen Blocklys und Einstellungen funktionieren beim anderen Wechselrichter.Edit: nach dem 3.Abruf kommt das
script.js.Photovoltaikanlage.HM-600_Statistik: {"generic":{"wifi_rssi":-69,"ts_uptime":5777,"menu_prot":false,"menu_mask":61,"menu_protEn":false,"esp_type":"ESP8266"},"ts_now":1689944699,"ts_sunrise":1689909623,"ts_sunset":1689967802,"ts_offset":0,"disNightComm":true,"inverter":[{"enabled":true,"id":0,"name":"HM-600","version":"10010","is_avail":true,"is_producing":true,"ts_last_success":1689944693}],"warnings":[],"infos":["MQTT is connected, 5728 packets sent, 0 packets received"]}
Na das ist doch das was ich gemeint habe. Vielleicht ist das Ding einfach nicht so schnell und gibt nicht immer was zurück mach einfach noch eine Abfrage rein, dass es nicht null sein darf.
Wenn das dann hinhaut, dann bist auf der sicheren Seite, dass dann nur dann was in den DP geschrieben wird, wenn der URL Aufruf ein Ergebnis liefert. Wäre im Prinzip halt generell eine grundsätzliche Möglichkeit um abzufangen, wenn mal nichts zurück kommt.
-
-
@haselchen Wenn was zurückkommt, dann passt Dein Aufruf jedenfalls:
-
ich glaube immer noch, dass man auf die Konvertierung verzichten können sollte.
-
@homoran Ja - kann schon sein. Wichtig ist aber doch in erster Linie abzufangen, wenn nichts zurück kommt.
-
@haselchen sagte: Das ist das Ergebnis.
Was wird in diesen Fällen in der Variablen
error
geliefert? -
@homoran sagte: ich glaube immer noch, dass man auf die Konvertierung verzichten können sollte.
Ja, getAttr() nimmt die Konvertierung selbst vor, wenn erforderlich.
-
javascript.0 2023-07-21 15:20:00.088 error script.js.Photovoltaikanlage.HM-600_Statistik: Cannot get inverter of null
Das kommt, wenn ich nach 1min "Last Success" aus der API lesen und schreiben möchte.
War die Frage , ob ich das richtig überhaupt ins Blockly gepackt hatte.