[gelöst] HTTPMOD - JSON von extern einlesen

Begonnen von bismosa, 01 August 2018, 16:07:53

Vorheriges Thema - Nächstes Thema

bismosa

Hallo,

basierend auf der Idee von Mathze ( https://forum.fhem.de/index.php?topic=85941.0 ) die Blitzer auszulesen und als Nachricht auf das Handy zu verschicken, plane ich eine Anzeige der nächstegelgenden Blitzer der Umgebung.
Da ich auf dem Land wohne und die vorgegebenen Bereiche (Große Städte bzw. Bundesländer) nicht wirklich passen habe ich geschaut, wie die Abfrage für den angezeigten Kartenausschnitt auf der Webseite von www.verkehrslage.de ist.
Es wird glücklicherweise nur recht simpel eine php-Abfrage gemacht. Beispiel:
https://cdn2.atudo.net/api/1.0/vl.php?type=0,1,2,3,4,5,6&box=52.36176390234046,10.588760375976562,52.466468685912744,11.159706115722656

{"pois":[{"id":"2499125707","lat":"52.443832","lat_s":"52.4","lng":"11.000612","lng_s":"11.0","street":"B188","content":"4289928590","backend":"0-10254860","type":"1","vmax":"30","counter":"0","create_date":"2018-08-01 15:09:31","confirm_date":"0000-00-00 00:00:00","gps_status":"-","info":"{\"count_180d\":\"0\"}","polyline":""},{"id":"2499126078","lat":"52.413298","lat_s":"52.4","lng":"10.734787","lng_s":"10.7","street":"Erich-Netzeband-Stra\u00dfe","content":"4290007385","backend":"0-10255088","type":"1","vmax":"50","counter":"0","create_date":"2018-08-01 15:47:40","confirm_date":"0000-00-00 00:00:00","gps_status":"-","info":"{\"count_180d\":\"1\"}","polyline":""},{"id":"2499126104","lat":"52.258443","lat_s":"52.3","lng":"10.527235","lng_s":"10.5","street":"Auguststra\u00dfe","content":"4290010927","backend":"0-10255101","type":"1","vmax":"30","counter":"0","create_date":"2018-08-01 15:49:19","confirm_date":"0000-00-00 00:00:00","gps_status":"-","info":"{\"count_180d\":\"2\"}","polyline":""},{"id":"2499126207","lat":"52.339892","lat_s":"52.3","lng":"10.245203","lng_s":"10.2","street":"Wilhelm-Rausch-Stra\u00dfe","content":"4290021746","backend":"0-10255149","type":"2","vmax":"","counter":"0","create_date":"2018-08-01 15:55:47","confirm_date":"0000-00-00 00:00:00","gps_status":"-","info":"{\"count_180d\":\"0\"}","polyline":""}],"grid":[]}


Dies versuche ich nun mit HTTPMOD einzulesen. Leider bin ich nicht ganz fähig dazu.

Mit "extractAllJSON" bekomme ich im Event-Monitor eine Fehlermeldung:

2018.08.01 16:03:15 3 : blitzer3: 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 2105) line 1.
2018.08.01 16:03:15 3 : blitzer3: no parsed JSON structure available
2018.08.01 16:03:15 3 : blitzer3: Read response to update didn't match any Reading


Daher habe ich jetzt unterschiedliche Varianten probiert. Derzeit z.B. so:

defmod blitzer5 HTTPMOD https://cdn2.atudo.net/api/1.0/vl.php?type=0,1,2,3,4,5,6&box=52.36176390234046,10.588760375976562,52.466468685912744,11.159706115722656 0
attr blitzer5 userattr getData getHeader1 getHeader2 getURL reading01DeleteIfUnmatched reading01JSON reading01Name reading01Regex reading02Name reading02RegOpt reading02Regex reading03JSON reading03Name requestHeader1 requestHeader2 setParseResponse:0,1
attr blitzer5 enableControlSet 1
attr blitzer5 extractAllJSON 1
attr blitzer5 getData {"get" :["pois"]}
attr blitzer5 getHeader1 Content-Type: application/json
attr blitzer5 getHeader2 Accept: */*
attr blitzer5 getURL https://cdn2.atudo.net/api/1.0/vl.php?type=0,1,2,3,4,5,6&box=52.36176390234046,10.588760375976562,52.466468685912744,11.159706115722656
attr blitzer5 reading01Name ALL
attr blitzer5 reading01Regex (.*)
attr blitzer5 showError 1
attr blitzer5 showMatched 1
attr blitzer5 verbose 5

setstate blitzer5 2018-08-01 15:50:12 ALL HTTP/1.1 200 OK
setstate blitzer5 2018-08-01 15:50:12 LAST_REQUEST update
setstate blitzer5 2018-08-01 15:50:12 MATCHED_READINGS ALL
setstate blitzer5 2018-08-01 15:50:12 UNMATCHED_READINGS


Warum erhalte ich für reading01 nur "HTTP/1.1 200 OK" ?
Gibt es eine Möglichkeit zu sehen, was alles ankommt?

Ich hoffe ihr versteht, was ich meine...

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

Christoph Morrison

Zitat von: bismosa am 01 August 2018, 16:07:53
Warum erhalte ich für reading01 nur "HTTP/1.1 200 OK" ?
Gibt es eine Möglichkeit zu sehen, was alles ankommt?

Für was brauchst du reading01 überhaupt? extractAllJSON macht bei mir genau was es soll und ich bekomme ein mehr oder minder guten UTF-8-Output als Readings.

frank

erweitere die regex, dann ist nicht am zeilenende der ersten zeile schluss:
(?s)(.*)
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

bismosa

Hallo,

da bin ich wohl drauf reingefallen, das ich unterwegs auf dem Laptop ein mobiles FHEM unter Windows laufen habe. Auf meinem Raspberry funktioniert es ebenfalls problemlos mit extractAllJSON  :)

Danke! Das bringt mich ein stückchen weiter!

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

Christoph Morrison

Zitat von: bismosa am 01 August 2018, 19:10:01
da bin ich wohl drauf reingefallen, das ich unterwegs auf dem Laptop ein mobiles FHEM unter Windows laufen habe. Auf meinem Raspberry funktioniert es ebenfalls problemlos mit extractAllJSON  :)

Ich kann nur empfehlen sich Virtualbox + ein passendes Debian-Image zu installieren wenn man sowas testen will. Mein MacOS ist auch gelegentlich etwas eigen, insbesondere was CPAN angeht.

bismosa

Und genau da war ich zu geizig die Zeit zu investieren...
Vermutlich habe ich mehr Zeit mit der Fehlersuche verbracht als ich dafür benötigt hätte.

Danke!

Gruß
Bismsoa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...