Hauptmenü

JSON an FHEM

Begonnen von wolwin, 25 September 2018, 16:02:12

Vorheriges Thema - Nächstes Thema

wolwin

Hallo zusammen,
ich bräuchte als Anfänger Euren Rat - ich möchte gerne JSON Datenpakete per IP und Port an FHEM senden und dort als Reading auswerten - so richtig gefunden habe ich nur:
https://forum.fhem.de/index.php?topic=47150.0
Vielleicht könnt Ihr mich ja auf die richtige Spur setzten - es müsste quasi ein 'lauschendes' HTTPMOD sein ...😀
Gruß
Wolfram

Beta-User

Hmm, hast du die Möglichkeit, den Sender als MQTT-Client zu konfigurieren?
Dann wäre vermutlich MQTT2 (Server+Device) eine Sache, die du dir ansehen könntest. Da werden JSON-Blobs auch automatisch ausgepackt, Aufwand zur Konfioguration ist minimal.

Ansonsten gibts da noch expandJSON, das setzt aber nach meinem Verständnis voraus, dass da schon ein Device:Reading als Ausgangspunkt besteht, das JSON ist; du müßtest also erst dahin kommen, dass der JSON in FHEM vorhanden ist.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

CoolTux

#2
HTTPSRV sollte Dir da helfen können.
https://wiki.fhem.de/wiki/HTTPSRV#Attribute
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

wolwin

Zitat von: Beta-User am 25 September 2018, 16:09:13
Hmm, hast du die Möglichkeit, den Sender als MQTT-Client zu konfigurieren?
Dann wäre vermutlich MQTT2 (Server+Device) eine Sache, die du dir ansehen könntest. Da werden JSON-Blobs auch automatisch ausgepackt, Aufwand zur Konfioguration ist minimal.
Ansonsten gibts da noch expandJSON, das setzt aber nach meinem Verständnis voraus, dass da schon ein Device:Reading als Ausgangspunkt besteht, das JSON ist; du müßtest also erst dahin kommen, dass der JSON in FHEM vorhanden ist.
Kann nur IP Adresse und Port angeben - MQTT fällt da leider raus ... mit HTTPMOD und expandJSON hab ich mir zwar auch eine Lösung gebaut, die aber eben alle 60s pollt - besser finde ich auf eine Nachricht vom Device zu warten, eben dann, wenn eine Zustandsänderung eingetreten ist - und die kommt nur als JSON Paket ...

wolwin

Zitat von: CoolTux am 25 September 2018, 16:25:45
HTTPSRV sollte Dir da helfen können.
https://wiki.fhem.de/wiki/HTTPSRV#Attribute
Wenn ich das richtig verstehe, können mit HTTPSRV auf einen Requests hin Daten ausgeliefert werden - ich möchte jedoch ein JSON Datenpaket entgegen nehmen?

Prof. Dr. Peter Henning

Über welche Datenmengen sprechen wir ?

LG

pah

wolwin

Zitat von: Prof. Dr. Peter Henning am 25 September 2018, 19:34:23
Über welche Datenmengen sprechen wir ?
Kann Dir momentan keine genaue Angabe machen - es werden wohl zwischen 2 bis 30 Werte je Push kommen ...

CoolTux

Ich mache mir wenn dann immer ein kleines Modul für sowas, aber ich denke mal das ist bestimmt bisschen viel des guten für Dich, oder?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

wolwin

Zitat von: CoolTux am 25 September 2018, 20:03:44
Ich mache mir wenn dann immer ein kleines Modul für sowas, aber ich denke mal das ist bestimmt bisschen viel des guten für Dich, oder?
Jein - ich war nur verwundert bei der Fülle von Modulen keine direkte JSON Push Funktionalität gefunden zu haben - daher meine Frage. Eigentlich müsste doch  eine mini Webserver Funktionalität (die FHEM ja eigentlich schon besitzt) mit Weiterleitung auf eine eigene JSON Dekodierfunktion das machen können. Allein mir fehlt der richtige Einstieg ....

CoolTux

Noch mal zu meinem HTTPSRV
http://hostname:8083/fhem/jsf?KindleBatt=43
Wenn du nun ein ?json machst

http://hostname:8083/fhem/jsf?json={...}

Sollte es doch gehen, oder?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

wolwin

Zitat von: CoolTux am 25 September 2018, 21:02:46
Sollte es doch gehen, oder?
Ich werde  Deinem Rat folgen und am Wochenende Mal damit testen ...😃

DS_Starter

Ich könnte noch das Modul Log2Syslog in den Ring werfen.
Vorrangig zwar für den Empfang und das Senden von Syslog-Messages gemacht, kann es im raw-Modus jeden beliebigen String empfangen oder senden.
Momentan ist nur UDP implementiert, aber ich bin kurz vor dem Abschluss die nächste Version zum Test anbieten zu können die auch TCP inklusive SSL verschlüsselter Übertragung supportet. Ich gebe die Info dann hier bekannt wenn es soweit ist:

https://forum.fhem.de/index.php/topic,75426.0.html

Im Modul können Readings mit dem empfangenen raw-String erzeugt werden, die als Grundlage für expandJSON  dienen könnten.

Wenn dieser Einsatzzweck eine Alternative bietet und evtl. auf weitere Interessenten trifft, könnte ich mir sogar vorstellen neben dem bisherigen BSD/IETF-Parsing auch ein natives JSON-Dekoding mit einzubauen.

Grüße
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

wolwin

Zitat von: DS_Starter am 25 September 2018, 22:04:50
Ich könnte noch das Modul Log2Syslog in den Ring werfen.
Vorrangig zwar für den Empfang und das Senden von Syslog-Messages gemacht, kann es im raw-Modus jeden beliebigen String empfangen oder senden.
Momentan ist nur UDP implementiert, aber ich bin kurz vor dem Abschluss die nächste Version zum Test anbieten zu können die auch TCP inklusive SSL verschlüsselter Übertragung supportet. Ich gebe die Info dann hier bekannt wenn es soweit ist:

https://forum.fhem.de/index.php/topic,75426.0.html

Im Modul können Readings mit dem empfangenen raw-String erzeugt werden, die als Grundlage für expandJSON  dienen könnten
Hallo Heiko - hört sich gut an!!!

CoolTux

Zitat von: wolwin am 25 September 2018, 21:12:30
Ich werde  Deinem Rat folgen und am Wochenende Mal damit testen ...😃

Habe es eben mal getestet. Es funktioniert. ABER! Leider werden die doppelten Hochkomma schon vom Browser her HTML decodiert.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

DS_Starter

#14
Bei mir hat es funktioniert.
Die parseFN könnt ihr ignorieren, die hatte ich nur zu diversen Test. Sie wird hier nicht gebraucht.
Das parseProfile = raw ist wichtig, dann wird der String im Reading "MSG_[Senderadresse]" erstellt.
Soviel ich gelesen habe, greift expandJSON ein solches Device:Reading direkt ab um es zu zerlegen.

(Es funktioniert schon mit TCP und SSL)
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter