httpmod json parsing error. Problem mit JSONP?

Begonnen von FhemPiUser, 23 Februar 2017, 19:13:23

Vorheriges Thema - Nächstes Thema

JamesB

Hallo Stefan,

seit dem letzten Update funktioniert bei mit der JSON String nicht mehr:

{"datetime":"2018-02-05T18:42:39","energy_in":2244497,"energy_out":3851922,"energy_sf":410043,"power_io":259,"power_sf":0,"powers":[16,60,183],"voltages":[234,233,233],"currents":[0.18,0.34,0.98],"analog":[0],"mode":2,"output":100,"digital":["0","0","0","0"]}

Es kommt zu dieser Fehlermeldung:

error while parsing JSON data: JSON text must be an object or array (but found number, string, true, false or null, use allow_nonref to allow this) at (eval 669) line 1

Mache ich da etwas falsch? Mit der Version 15035 gab es noch keine Probleme.
ESXi - Debian / 2 x Raspberry PI 3 / CUNX / KS 300 / HM

StefanStrobel

Hallo,

ich habe Deinen JSON-String gerade mal mit der aktuellen Version getestet und bei mir funktioniert es problemlos.
ModuleVersion 3.4.1 - 18.1.2018

Hast Du eine andere Version?
Oder ist der JSON-String eventuell defekt wenn der Fehler kommt?

Gruss
   Stefan

JamesB

Servus Stefan,

ja ich verwende die selbe Version. Wenn ich FHEM neu starte, werden die Datein einmalig eingelesen, dann nicht mehr. Im Log finde ich auch diese Infos:

PERL WARNING: Use of uninitialized value $matchlist[0] in join or string at ./FHEM/98_HTTPMOD.pm line 1801.
2018.02.06 06:28:04 1: PERL WARNING: Use of uninitialized value $val in concatenation (.) or string at ./FHEM/98_HTTPMOD.pm line 1888.


Gruß Frank
ESXi - Debian / 2 x Raspberry PI 3 / CUNX / KS 300 / HM

StefanStrobel

Hallo Frank,

die Warnungen kommen von Zeilen, die Debug-Informationen ins Log schreiben. Ich würde das als Schönheitsfehler verbuchen. Die Warnungen kommen auch nur wenn beim Parsen vorher schon etwas nicht klappt und Variable deshalb uninitialisiert sind.

Ich gehe eigentlich stark davon aus, dass das letzte Update nichts mit Deinem Problem zu tun hat. Um der Sache weiter auf den Grund gehen zu können, bräuchte ich zusätzliche Informationen:
- Deine genaue Konfiguration (am besten als Auszug aus der fhem.cfg)
- Ein Auszug aus dem Log bei verbose 5, in dem man den kompletten Vorgang vom Lesen bis zum Parsen nachvollziehen kann.

Gruss
   Stefan

JamesB

#19
Servus Stefan,

du hattest mit deiner Einschätzung recht. Ich habe versucht das Thema weiter einzuschränken. Dabei ergab sich folgendes:

Wenn ich das Modul HMCCU mit diesen Attributen einbinde
attr d_ccu ccuflags extrpc
attr d_ccu rpcserver on


dann wird der JSON String zweimal eingelesen. Anschließend kommt es zu dem beschriebenen Fehler.
Mit der Einstellung attr d_ccu rpcserver off


funktioniert HTTMOD

Hier die Konfiguration:

define SmartFox HTTPMOD http://10.0.0.151/all 10
attr SmartFox userattr getData getHeader1 getHeader2 reading01JSON reading01Name reading02JSON reading02Name reading03JSON reading03Name reading04JSON reading04Name reading04RecombineExpr reading05JSON reading05Name reading06JSON reading06Name reading07JSON reading07Name
attr SmartFox enableControlSet 1
attr SmartFox event-min-interval .*:600
attr SmartFox event-on-change-reading .*
attr SmartFox getData {"get" :["power_sf"]}
attr SmartFox getHeader1 Content-Type: application/json
attr SmartFox getHeader2 Accept: */*
attr SmartFox group Umwelt
attr SmartFox reading01JSON power_io
attr SmartFox reading01Name LeistungAktuell
attr SmartFox reading02JSON energy_in
attr SmartFox reading02Name Energie_Gekauft
attr SmartFox reading03JSON energy_out
attr SmartFox reading03Name Energie_Verkauft
attr SmartFox reading04JSON digital
attr SmartFox reading04Name Relais_Ausgänge
attr SmartFox reading04RecombineExpr join ",", @matchlist
attr SmartFox reading05JSON digital
attr SmartFox reading05Name Relais
attr SmartFox reading06JSON analog
attr SmartFox reading06Name Buffer
attr SmartFox reading07JSON power_sf
attr SmartFox reading07Name LeistungEigenverbrauch
attr SmartFox room 1.3 Haus
attr SmartFox stateFormat {sprintf("Leitung %.1f W / Ausgänge %s / Buffer %s ", ReadingsVal($name,"Leistung",0), ReadingsVal($name,"Relais_Ausgänge","0"), ReadingsVal($name,"Buffer","0"))}
attr SmartFox verbose 5


Gruß Frank
ESXi - Debian / 2 x Raspberry PI 3 / CUNX / KS 300 / HM

StefanStrobel

Seltsame Sache.

Das gleiche Problem haben wohl viele Module.

https://forum.fhem.de/index.php?topic=71968.0

Irgendwie scheint aber immer HMCCU im Spiel zu sein.

Gruss
   Stefan

JamesB

Scheint wirklich so zu sein. Ich lagere seit Wochen ein Modul nach dem Anderen auf eine zweite Maschinen aus und verbinde sie mit FHEM2FHEM. Dies wurde notwendig da ich seit der Umstellung auf HMCCU Hänger hatte. Fhem blieb bis zu 2 Minuten stehen vor es weiter ging. Ich konnte jedoch im LOG nichts verdächtiges feststellen.

Heute habe ich nun alle HTTPMOD Devices ausgelagert.

Nun scheint das Problem behoben (oder besser) zu sein. Zumindest hängt momentan nichts. Ich muss das jedoch noch länger beobachten.

Gruß Frank
ESXi - Debian / 2 x Raspberry PI 3 / CUNX / KS 300 / HM

Rudibarani

Lieber Stefan,
ich habe heute früh ein FHEM-Update gemacht und das preProcessRegex scheint nicht mehr ausgeführt zu werden. Hat sich das was geändert?
Viele Grüße
Phillip

Zitat von: Rudibarani am 19 Januar 2018, 19:25:49

absolut spitze!!! Hab bei unserer Lupusec Alarmanlage nun folgendes eingetragen (vielleicht hilft das ja auch anderen hier, ihre Anlage in FHEM einzubinden)
attr Alarmanlage_SmartHome preProcessRegex s/\t//g
attr Alarmanlage_SmartHome extractAllJSON 1



StefanStrobel

Ja, da hat sich was geändert.
Wegen einem Memory-Leak in aktuellen Perl-Versionen habe ich HTTPMOD so geändert, dass es die Regexes vorcompiliert.
Leider ist das offenbar doch etwas kniffliger wenn s// etc. verwendet wird.
Ich habe diese Funktion für die preProcesRegex jetzt erst mal wieder entfernt und eine neue Version eingecheckt.
Könntest Du mal Deine preProcessRegex posten, damit ich bei Gelegenheit versuchen kann, das mit den compilierten Regexes auch hier noch zum Laufen zu bekommen?
(am besten in https://forum.fhem.de/index.php/topic,45176.645.html)

Gruss / Thanx
   Stefan

Rudibarani

Lieber Stefan,

ich hab die Sachen wie gewünscht in dem verlinkten Thread eingestellt. Wenn Du mehr oder andere Infos brauchst, meld Dich gerne.

Viele Grüße
Phillip

StefanStrobel

Hab's gesehen, vielen Dank!

Gruß
     Stefan