FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: wolwin am 25 September 2018, 16:02:12

Titel: JSON an FHEM
Beitrag von: wolwin am 25 September 2018, 16:02:12
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
Titel: Antw:JSON an FHEM
Beitrag 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.
Titel: Antw:JSON an FHEM
Beitrag von: CoolTux am 25 September 2018, 16:25:45
HTTPSRV sollte Dir da helfen können.
https://wiki.fhem.de/wiki/HTTPSRV#Attribute
Titel: Antw:JSON an FHEM
Beitrag von: wolwin am 25 September 2018, 18:32:24
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 ...
Titel: Antw:JSON an FHEM
Beitrag von: wolwin am 25 September 2018, 18:50:49
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?
Titel: Antw:JSON an FHEM
Beitrag von: Prof. Dr. Peter Henning am 25 September 2018, 19:34:23
Über welche Datenmengen sprechen wir ?

LG

pah
Titel: Antw:JSON an FHEM
Beitrag von: wolwin am 25 September 2018, 19:56:46
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 ...
Titel: Antw:JSON an FHEM
Beitrag 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?
Titel: Antw:JSON an FHEM
Beitrag von: wolwin am 25 September 2018, 20:34:39
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 ....
Titel: Antw:JSON an FHEM
Beitrag von: CoolTux am 25 September 2018, 21:02:46
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?
Titel: Antw:JSON an FHEM
Beitrag von: wolwin am 25 September 2018, 21:12:30
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 ...😃
Titel: Antw:JSON an FHEM
Beitrag 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.

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
Titel: Antw:JSON an FHEM
Beitrag von: wolwin am 25 September 2018, 22:23:42
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!!!
Titel: Antw:JSON an FHEM
Beitrag von: CoolTux am 25 September 2018, 23:34:55
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.
Titel: Antw:JSON an FHEM
Beitrag von: DS_Starter am 26 September 2018, 00:51:38
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)
Titel: Antw:JSON an FHEM
Beitrag von: DS_Starter am 26 September 2018, 17:48:42
Das weiterentwickelte Modul steht zum Test bereit.
Infos:

https://forum.fhem.de/index.php/topic,75426.msg839923.html#msg839923

LG,
Heiko
Titel: Antw:JSON an FHEM
Beitrag von: DS_Starter am 27 September 2018, 21:30:29
Hallo zusammen,

habe die JSON Zerlegung auf meinem Testsystem erfolgreich testen können.
Dazu habe ich auf meinem Prod.System ein Log2Syslog-Device im Maintenance-Mode als Sender angelegt und auf meinem Testsystem einen Collector.

Die RAW-Definition des Collectors:


defmod SyslogServer_BSD Log2Syslog
attr SyslogServer_BSD TLS 0
attr SyslogServer_BSD disable 0
attr SyslogServer_BSD makeEvent reading
attr SyslogServer_BSD parseProfile raw
attr SyslogServer_BSD port 7514
attr SyslogServer_BSD protocol TCP
attr SyslogServer_BSD rateCalcRerun 80
attr SyslogServer_BSD room DbLog
attr SyslogServer_BSD stateFormat state : Transfered_logs_per_minute
attr SyslogServer_BSD verbose 3


Dann habe ich noch ein expandJSON-Device angelegt mit dieser RAW-Definition:


defmod ej expandJSON .*SyslogServer_BSD.*:.*MSG_.*:.\{.*}
attr ej room DbLog


Mit dem Profil "parseProfile = raw" im Log2Syslog-Device wird der empfangene String im Reading "MSG_<Host>" angelegt. Der Regex im expandJSON-Device matcht auf dieses Reading.

Zum Test habe ich diesen Test-String über TCP an der Collector gesendet:


{   "markers": [     {       "name": "Rixos The Palm Dubai",       "position": [25.1212, 55.1535]    },     {       "name": "Shangri-La Hotel",       "location": [25.2084, 55.2719]     },     {       "name": "Grand Hyatt",       "location": [25.2285, 55.3273]     }   ] }


Das erfolgreich zerlegte JSON wird in einzelnen Readings im Ursprungsdevice (SyslogServer_BSD) abgelegt wie im anghängten Screenshot zu sehen. Klappt prima.

Grüße,
Heiko
Titel: Antw:JSON an FHEM
Beitrag von: wolwin am 30 September 2018, 21:13:18
Zitat von: DS_Starter am 27 September 2018, 21:30:29
Hallo zusammen,
habe die JSON Zerlegung auf meinem Testsystem erfolgreich testen können.
Hallo Heiko,
habe Deine Konfiguration übernommen (beim TSL Parameter kam ein Fehler) - mit http://<IP>:<Port>?<JSON> oder http://<IP>:<Port>/fhem?<JSON> war ich nicht erfolgreich - was mache ich falsch?
Gruss
Wolfram
Titel: Antw:JSON an FHEM
Beitrag von: DS_Starter am 30 September 2018, 21:38:49
Hallo Wolfram,

Mit Http(s) wird es wahrscheinlich auch nicht so einfach funktionieren.
In dem Fall brauchst du als Empfänger auch einen Webserver, mein Modul arbeitet direkt mit dem TCP/UDP-Stack.  Ich war der Hoffnung du könntest einfach tcp oder udp angeben um einen String zu senden, so wie es viele Netzwerkgeräte für Syslog-Ziele anbieten.
Wenn das ginge könntest du es so machen wie ich es beschrieben habe.

LG,
Heiko



Titel: Antw:JSON an FHEM
Beitrag von: wolwin am 30 September 2018, 22:11:28
Zitat von: DS_Starter am 30 September 2018, 21:38:49
Mit Http(s) wird es wahrscheinlich auch nicht so einfach funktionieren.
Hallo Heiko,
geht dann leider nicht so einfach - trotzdem Danke für die Unterstützung!!
Gruß
Wolfram
Titel: Antw:JSON an FHEM
Beitrag von: DS_Starter am 30 September 2018, 22:21:45
Ja, schade. Aber du könntest nochmal die Idee mit HTTPSRV aufgreifen, die Cooltux weiter vorn erwähnt hatte. Vllt. dann der Ansatz den du weiter verfolgen könntest.

Grüße
Heiko
Titel: Antw:JSON an FHEM
Beitrag von: Tsturm am 14 Juli 2019, 11:16:12
Hallo Wolfgang,
Hast Du mittlerweile eine stabile Lösung gefunden? Würde auch gerne den push vom Weatherman nutzen... Listing wäre klasse. Leider kann der WM kein MQTT direkt machen...
Viele Grüße - Timmo
Titel: Antw:JSON an FHEM
Beitrag von: Tsturm am 21 Juli 2019, 13:43:10
Kurzes Update - Heiko hat sein Modul log2syslog so modifiziert, dass auch schlechte TCP Verbindungen abgefangen werden.

Mit Log2Syslog kann man dann im Raw-Modus die JSON-Message empfangen, dann über expandJSON oder Regex das Telegramm auswerten und weitermachen. Log2Syslog von Heiko (im Footer) nutzen, die Version (5.8.0), mit der das klappt, ist noch im Beta.

https://forum.fhem.de/index.php/topic,75426.msg959652.html#msg959652 (https://forum.fhem.de/index.php/topic,75426.msg959652.html#msg959652)

VG Timmo