Autor Thema: (gelöst) json überprüfen  (Gelesen 3139 mal)

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2716
  • RTFM
    • commandref
(gelöst) json überprüfen
« am: 09 Mai 2017, 10:21:15 »
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?
« Letzte Änderung: 09 Mai 2017, 19:56:39 von igami »
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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22936
Antw:json überprüfen
« Antwort #1 am: 09 Mai 2017, 10:23:56 »
Wieso bleibt FHEM haengen, wenn die Daten leer/kaputt sind?
Verwendest du HttpUtils_NonblockingGet?

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 20405
Antw:json überprüfen
« Antwort #2 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
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5671
Antw:json überprüfen
« Antwort #3 am: 09 Mai 2017, 10:51:23 »
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
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2716
  • RTFM
    • commandref
Antw:json überprüfen
« Antwort #4 am: 09 Mai 2017, 12:03:52 »
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:
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

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

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 20405
Antw:json überprüfen
« Antwort #5 am: 09 Mai 2017, 12:06:42 »
ja. genau.
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22936
Antw:json überprüfen
« Antwort #6 am: 09 Mai 2017, 12:54:23 »
Zitat
Bei 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 :)

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2716
  • RTFM
    • commandref
Antw:json überprüfen
« Antwort #7 am: 09 Mai 2017, 13:00:16 »
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

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2716
  • RTFM
    • commandref
Antw:json überprüfen
« Antwort #8 am: 09 Mai 2017, 13:07:48 »
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

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5671
Antw:json überprüfen
« Antwort #9 am: 09 Mai 2017, 13:09:07 »
ja klar. json crashed im modul und reist fhem komplett mit.
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline Markus M.

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2917
Antw:(gelöst) json überprüfen
« Antwort #10 am: 16 Mai 2017, 13:01:02 »
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