JSON Multiple Dateien einlesen
-
- Beiträge: 5
- Registriert: 30. Apr 2019 09:23
JSON Multiple Dateien einlesen
Hallo,
ich habe folgendes Problem. Kurz vorweg, JSON ist für mich eine neue Welt.
Ich habe unter:
/etc/openhab2/transform
Zwei Dateien die täglich von einem anderen Host geliefert werden.
-Pflanze1.json
-Pflanze2.json
Der Inhalt sieht wie folgt aus:
{"val":23,"ack":true,"ts":1556515957138,"q":0,"from":"system.adapter.ble.0","lc":1556515957138}
Ich habe das JSONPATH Transformation Plugin im Openhab bereits installiert.
Ziel ist es dass von meinen Xiaomi Mi Flora Plant Sensoren, die Daten ausgelesen werden und ich damit eine zeitgesteuerte Regel bauen kann.
Sprich wenn der Messwert des Wasserverhältnisses unter einem bestimmten Wert ist soll eine Ausgabe per Google erfolgen.
Ich habe verstanden dass ich nun zwei neue Items benötige, richtig?
String PflanzeFlur_json "Wassergehalt [JSONPATH($.val):%s]"
String PflanzeWohn_json "Wassergehalt [JSONPATH($.val):%s]"
Mir ist jetzt nicht klar, ob hier das JSONPATH nur eine Variable ist oder ich hier den Pfad angeben muss?
Meine Frage ist nun wie ich dem ITEM das jeweilige JSON File zuordne. Ich konnte dazu nichts finden.
Meine Regel die noch in Arbeit ist sieht dann ungefähr so aus:
rule "Json Parse Pflanze"
when
Time cron "0 0 19 1/1 * ? *"
then
val String value = transform("JSONPATH", "$.val",PflanzeFlur_json)
if (value > 20) {
Thread::sleep(2500)
sendCommand(Esszimmer_Volume, 30)
say("Achtung Hinweis")
Thread::sleep(2500)
say("Die Pflanze im Flur benötigt Wasser")
}
end
ich habe folgendes Problem. Kurz vorweg, JSON ist für mich eine neue Welt.
Ich habe unter:
/etc/openhab2/transform
Zwei Dateien die täglich von einem anderen Host geliefert werden.
-Pflanze1.json
-Pflanze2.json
Der Inhalt sieht wie folgt aus:
{"val":23,"ack":true,"ts":1556515957138,"q":0,"from":"system.adapter.ble.0","lc":1556515957138}
Ich habe das JSONPATH Transformation Plugin im Openhab bereits installiert.
Ziel ist es dass von meinen Xiaomi Mi Flora Plant Sensoren, die Daten ausgelesen werden und ich damit eine zeitgesteuerte Regel bauen kann.
Sprich wenn der Messwert des Wasserverhältnisses unter einem bestimmten Wert ist soll eine Ausgabe per Google erfolgen.
Ich habe verstanden dass ich nun zwei neue Items benötige, richtig?
String PflanzeFlur_json "Wassergehalt [JSONPATH($.val):%s]"
String PflanzeWohn_json "Wassergehalt [JSONPATH($.val):%s]"
Mir ist jetzt nicht klar, ob hier das JSONPATH nur eine Variable ist oder ich hier den Pfad angeben muss?
Meine Frage ist nun wie ich dem ITEM das jeweilige JSON File zuordne. Ich konnte dazu nichts finden.
Meine Regel die noch in Arbeit ist sieht dann ungefähr so aus:
rule "Json Parse Pflanze"
when
Time cron "0 0 19 1/1 * ? *"
then
val String value = transform("JSONPATH", "$.val",PflanzeFlur_json)
if (value > 20) {
Thread::sleep(2500)
sendCommand(Esszimmer_Volume, 30)
say("Achtung Hinweis")
Thread::sleep(2500)
say("Die Pflanze im Flur benötigt Wasser")
}
end
- sihui
- Beiträge: 1827
- Registriert: 11. Apr 2018 19:03
Re: JSON Multiple Dateien einlesen
Ich habe zwar keine direkte Antwort auf deine Frage, aber falls du ein fertige Lösung dafür ausprobieren möchtest schau mal hier rein:
https://github.com/ThomDietrich/miflora-mqtt-daemon
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.
-
- Beiträge: 5
- Registriert: 30. Apr 2019 09:23
Re: JSON Multiple Dateien einlesen
Danke, das hilft mir aber leider nicht weiter.
Die Anleitung kenn ich schon, aber für meinen Fall leider nicht passend.
Die Anleitung kenn ich schon, aber für meinen Fall leider nicht passend.
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: JSON Multiple Dateien einlesen
Hallo,
erstmal gleich zu Anfang: Bitte niemals Dateien unterhalb /etc/openhab2/ ablegen, die nicht zur Konfiguration gehören (in diesem Fall also die Dateien Pflanze1.json und Pflanze2.json). In das Verzeichnis transform gehören ausschließlich maps und so weiter, keinesfalls Daten.
Weiterhin wäre es besser, Code als Code zu markieren (wenn Du den vollständigen Editor verwendest, werden die entsprechenden Tags mit dem Button </> eingefügt. Das gilt auch für Konfigurationen oder Logs, falls Du sowas mal posten willst.
Kennst Du diesen Thread im englischen Forum?
Da wird erklärt, wie man die Mi Flora über mqtt ins openHAB System bringt. Der Punkt bei openHAB ist ja, dass die Daten über die Addons direkt in den Items landen.
Du kannst das json direkt in ein String Item kippen, Du kannst aber auch beim Einlesen direkt aus dem json den Wert extrahieren, was meist sinnvoller ist.
Ansonsten rate ich dringend davon ab, Thread::sleep() mit Werten über 500 zu verwenden, obwohl es tatsächlich bei Deiner Rule keine Rolle spielt (die wird ja nur einmal täglich ausgelöst). Ansonsten muss man aber aufpassen, denn eine Rule kann grundsätzlich beliebig oft parallel ausgeführt werden, es stehen aber nur 5 + 2 Threads dafür zur Verfügung. Die Wahrscheinlichkeit dafür steigt natürlich, je länger eine Rule benötigt. 5 Sekunden sind für einen Computer eine Ewigkeit...
erstmal gleich zu Anfang: Bitte niemals Dateien unterhalb /etc/openhab2/ ablegen, die nicht zur Konfiguration gehören (in diesem Fall also die Dateien Pflanze1.json und Pflanze2.json). In das Verzeichnis transform gehören ausschließlich maps und so weiter, keinesfalls Daten.
Weiterhin wäre es besser, Code als Code zu markieren (wenn Du den vollständigen Editor verwendest, werden die entsprechenden Tags mit dem Button </> eingefügt. Das gilt auch für Konfigurationen oder Logs, falls Du sowas mal posten willst.
Kennst Du diesen Thread im englischen Forum?
Da wird erklärt, wie man die Mi Flora über mqtt ins openHAB System bringt. Der Punkt bei openHAB ist ja, dass die Daten über die Addons direkt in den Items landen.
Du kannst das json direkt in ein String Item kippen, Du kannst aber auch beim Einlesen direkt aus dem json den Wert extrahieren, was meist sinnvoller ist.
Ansonsten rate ich dringend davon ab, Thread::sleep() mit Werten über 500 zu verwenden, obwohl es tatsächlich bei Deiner Rule keine Rolle spielt (die wird ja nur einmal täglich ausgelöst). Ansonsten muss man aber aufpassen, denn eine Rule kann grundsätzlich beliebig oft parallel ausgeführt werden, es stehen aber nur 5 + 2 Threads dafür zur Verfügung. Die Wahrscheinlichkeit dafür steigt natürlich, je länger eine Rule benötigt. 5 Sekunden sind für einen Computer eine Ewigkeit...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 5
- Registriert: 30. Apr 2019 09:23
Re: JSON Multiple Dateien einlesen
Hallo,
danke für die Rückmeldung.
Ich habe folgendes Problem, ich habe ein Raspberry PI auf dem das Openhab und parallel auch meine PIVCUU läuft. Sprich ich habe hier das Bluetooth deaktiviert. Somit kommt dass MQTT Protokoll nicht in Frage....
Auf einem anderen PI läuft mein IoBroker, der die Werte in die JSON Files ablegt und per Cron Job auf dem anderen PI ablegt.
Ich verstehe nun folgendes nicht.
Wie muss ich in der Rule oder im Item festlegen wo dass JSON File liegt? Das muss doch irgendwie gehen?
Ich hab verstanden dass unter /etc/openhab2/transform das Standard Ablage Verzeichnis der JSON Files ist? Richtig? Oder habe ich mich da verlesen...
Aus welchem Verzeichnis holt sich Openhab bzw. JSONPATH die Werte sonst her?
Ansonsten Danke für die restlichen Hinweise, werde ich entsprechend umsetzen
danke für die Rückmeldung.
Ich habe folgendes Problem, ich habe ein Raspberry PI auf dem das Openhab und parallel auch meine PIVCUU läuft. Sprich ich habe hier das Bluetooth deaktiviert. Somit kommt dass MQTT Protokoll nicht in Frage....
Auf einem anderen PI läuft mein IoBroker, der die Werte in die JSON Files ablegt und per Cron Job auf dem anderen PI ablegt.
Ich verstehe nun folgendes nicht.
Wie muss ich in der Rule oder im Item festlegen wo dass JSON File liegt? Das muss doch irgendwie gehen?
Ich hab verstanden dass unter /etc/openhab2/transform das Standard Ablage Verzeichnis der JSON Files ist? Richtig? Oder habe ich mich da verlesen...
Aus welchem Verzeichnis holt sich Openhab bzw. JSONPATH die Werte sonst her?
Ansonsten Danke für die restlichen Hinweise, werde ich entsprechend umsetzen

- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: JSON Multiple Dateien einlesen
Wie kommst Du darauf, dass MQTT irgendwas mit Bluetooth zu tun hätte?
Letzteres, Du hast da etwas missverstanden. /etc/ ist der Zweig im Dateisystem, in dem das GNU/Linux System seine Einstellungen speichert. auch openHAB macht da keine Ausnahme, das heißt, unter /etc/openhab2/ befinden sich ausschließlich Konfigurationsdateien, sonst nichts. (Im Fall von /etc/openhab2/html/ legt man dort vielleicht noch Images ab, das ist aber als Teil der Konfiguration zu verstehen.)Ich hab verstanden dass unter /etc/openhab2/transform das Standard Ablage Verzeichnis der JSON Files ist? Richtig? Oder habe ich mich da verlesen...
JSONPATH bekommt das JSON übergeben. Das JSON muss sich also als Status in einem Item befinden. Du kannst mit dem exec Binding Dateiinhalte in ein Item schreiben, aber wie schon mehrfach erwähnt ist das nicht der Weg, den Du gehen solltest.Aus welchem Verzeichnis holt sich Openhab bzw. JSONPATH die Werte sonst her?
Nochmal: MQTT hat nichts mit Bluetooth zu tun.
Die nötigen Schritte:
- Du setzt in Deinem Netz einen MQTT Server auf. Das kann mosquitto sein oder auch der mit openHAB2.4 mitgelieferte embedded MQTT Broker.
- IOBroker unterstützt MQTT. Entsprechend konfigurierst Du IOBroker so, dass die Daten (das gelieferte JSON) nicht als Datei abgelegt werden, sondern an ein Topic publiziert werden. Als MQTT Broker trägst Du den Broker ein, den Du im 1. Schritt installiert hast.
- In openHAB installierst Du das MQTT Binding. Du stellst mit einer Bridge die Verbindung zum MQTT Broker her und legst mindestens ein Thing an (am besten ein Thing pro Gerät, welches über MQTT kommuniziert). Innerhalb des Thing konfigurierst Du pro ankommendem Topic mindestens einen Channel. Innerhalb des Channels hast Du die Wahl, ob Du einfach das JSON als String ablegst, oder JSONPATH einsetzt und den Channel den Wert direkt zur Verfügung stellen lässt. In letzterem Fall musst Du natürlich pro Wert einen Channel erstellen, die Channel unterscheiden sich dann nur durch das angegebene JSONPATH Statement.
mosquitto ist extrem einfach einzurichten, im Grunde reicht ein
Code: Alles auswählen
sudo apt install mosquitto
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 5
- Registriert: 30. Apr 2019 09:23
Re: JSON Multiple Dateien einlesen
Hallo,
ich glaube ich habe es endlich hinbekommen. Vielen Dank für deine wertvollen Infos.
Ich kann die Werte nun direkt abgreifen und Sie werden mir Openhab Paper UI auch live per MQTT (Mqtt Broker ist in dem Fall mein iObroker) dargestellt.
Ich habe mir nun auch Regeln gebaut. Ob diese greifen, wird sich dann zeigen wenn der Wassergehalt bei den Pflanzen unter einem Schwellwert ist.
Dann bin ich mal gespannt, wann die Pflanzen das nächste Mal Wasser brauchen und Google mich informiert
Bin nun aber guter Dinge.
Danke
ich glaube ich habe es endlich hinbekommen. Vielen Dank für deine wertvollen Infos.
Ich kann die Werte nun direkt abgreifen und Sie werden mir Openhab Paper UI auch live per MQTT (Mqtt Broker ist in dem Fall mein iObroker) dargestellt.
Ich habe mir nun auch Regeln gebaut. Ob diese greifen, wird sich dann zeigen wenn der Wassergehalt bei den Pflanzen unter einem Schwellwert ist.
Dann bin ich mal gespannt, wann die Pflanzen das nächste Mal Wasser brauchen und Google mich informiert

Bin nun aber guter Dinge.
Danke
-
- Beiträge: 5
- Registriert: 30. Apr 2019 09:23
Re: JSON Multiple Dateien einlesen
Abend,
ich habe dann doch noch eine Rückfrage. Also die Anbindung funktioniert und meine Regel tut auch dass was sie soll, alles gut.
Jetzt habe ich nur folgendes Problem. Die Werte scheinen sich im Openhab (Paper UI) nicht mehr zu aktualisieren. Gibt es eine Art Refresh Rate die man einstellen kann?
Habe zwar etwas gesucht, aber finde keine passende Möglichkeit.
Danke
ich habe dann doch noch eine Rückfrage. Also die Anbindung funktioniert und meine Regel tut auch dass was sie soll, alles gut.
Jetzt habe ich nur folgendes Problem. Die Werte scheinen sich im Openhab (Paper UI) nicht mehr zu aktualisieren. Gibt es eine Art Refresh Rate die man einstellen kann?
Habe zwar etwas gesucht, aber finde keine passende Möglichkeit.
Danke
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: JSON Multiple Dateien einlesen
Nein, die Werte sollte eigentlich immer aktuell angezeigt werden, evtl mal mit ein paar Sekunden Verzögerung.
Eventuell hilft ein Neustart von openHAB.
Allerdings möchte ich darauf hinweisen, dass PaperUI Control nicht als UI gedacht ist. Man kann die grundsätzliche Funktion prüfen, viel mehr aber auch nicht. In der nächsten Version von openHAB wird das Feature ziemlich sicher nicht mehr vorhanden sein.
Eventuell hilft ein Neustart von openHAB.
Allerdings möchte ich darauf hinweisen, dass PaperUI Control nicht als UI gedacht ist. Man kann die grundsätzliche Funktion prüfen, viel mehr aber auch nicht. In der nächsten Version von openHAB wird das Feature ziemlich sicher nicht mehr vorhanden sein.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet