(gelöst) json überprüfen

Begonnen von igami, 09 Mai 2017, 10:21:15

Vorheriges Thema - Nächstes Thema

igami

In meinem Modul LuftdatenInfo bekomme ich ein JSON von einer HTTP abfrage zurück. Manchmal jedoch nicht und dann bleibt FHEM hängen weil ich das nicht überprüfe.

Wie könnte so eine Überprüfung aussehen ob "$data = decode_json($data);"  einen Fehler auswirft?
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

rudolfkoenig

Wieso bleibt FHEM haengen, wenn die Daten leer/kaputt sind?
Verwendest du HttpUtils_NonblockingGet?

justme1968

das JSON modul liefert leider keine fehler sondern beendet sich komplett wenn es fehler gibt.

deshalb sollte man das ganze immer nur mit einem eval aufrufen:my $obj = eval { decode_json($json) };und dananach $@ prüfen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

herrmannj

volle Zustimmung!

Ist sogar noch schlimmer, es gibt mittlerweile verschiedene perl JSON Modul (und versionen). Die behandeln dann auch UTF8 noch unterschiedlich. Wenn da was drin ist was die nicht wollen crashen die ohne jede Vorwarnung.

Abstrakt: JSON immer(!) im eval und mit allem rechnen.

vg
joerg

igami

Zitat von: rudolfkoenig am 09 Mai 2017, 10:23:56
Wieso bleibt FHEM haengen, wenn die Daten leer/kaputt sind?
Verwendest du HttpUtils_NonblockingGet?
Warum es das macht weiß ich nicht. HttpUtils_NonblockingGet wird verwendet.
Für den Fehler siehe:
Zitat von: Frank_Huber am 07 Mai 2017, 21:46:33
Nur der Vollständigkeit halber:

2017.05.07 18:20:46 2: LuftdatenInfo (Luftdaten_Wolfartsweiher) - error while request: read from http://api.luftdaten.info:80 timed out
malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "<!DOCTYPE HTML PUBLI...") at ./FHEM/59_LuftdatenInfo.pm line 265.


Bei 3 fhem crashes heute die letzte log Zeile.

Gesendet von meinem S3_32 mit Tapatalk

Zitat von: justme1968 am 09 Mai 2017, 10:43:20
das JSON modul liefert leider keine fehler sondern beendet sich komplett wenn es fehler gibt.

deshalb sollte man das ganze immer nur mit einem eval aufrufen:my $obj = eval { decode_json($json) };und dananach $@ prüfen.

gruss
  andre
Vielen dank, kann ich das dann wie folgt umsetzen?

$data = eval{decode_json($data)};

if($@){
  Log3($SELF, 2, "$TYPE ($SELF) - error while request: $@");
 
  readingsSingleUpdate($hash, "state", "error", 1);

  return;
}
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

ZitatBei 3 fhem crashes heute die letzte log Zeile.
Das klingt aber nicht nach "haengen". Die Unterschiedung ist mir wichtig, da ich mich fuer Haenger eher zustaendig fuehle, als fuer Crashes :)

igami

Zitat von: rudolfkoenig am 09 Mai 2017, 12:54:23
Das klingt aber nicht nach "haengen". Die Unterschiedung ist mir wichtig, da ich mich fuer Haenger eher zustaendig fuehle, als fuer Crashes :)
Okay, mein Fehler: FHEM stürzt ab und ist danach nicht mehr zu erreichen. Ob der FHEM Prozess beendet wurde habe ich nicht überprüft.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

igami

Zitat von: igami am 09 Mai 2017, 13:00:16
Okay, mein Fehler: FHEM stürzt ab und ist danach nicht mehr zu erreichen. Ob der FHEM Prozess beendet wurde habe ich nicht überprüft.
Habe grade von Frank die Nachricht bekommen, dass der Prozess beendet wurde.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

herrmannj

ja klar. json crashed im modul und reist fhem komplett mit.

Markus M.

Danke für das Beispiel, hab's in meinen Modulen gleich mal übernommen.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0