Seite 1 von 1
JSON Multiple Dateien einlesen
Verfasst: 30. Apr 2019 10:37
von Andrzej
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
Re: JSON Multiple Dateien einlesen
Verfasst: 30. Apr 2019 13:08
von sihui
Andrzej hat geschrieben: ↑30. Apr 2019 10:37
JSON ist für mich eine neue Welt.
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
Re: JSON Multiple Dateien einlesen
Verfasst: 30. Apr 2019 13:16
von Andrzej
Danke, das hilft mir aber leider nicht weiter.
Die Anleitung kenn ich schon, aber für meinen Fall leider nicht passend.
Re: JSON Multiple Dateien einlesen
Verfasst: 30. Apr 2019 13:43
von udo1toni
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...
Re: JSON Multiple Dateien einlesen
Verfasst: 30. Apr 2019 14:55
von Andrzej
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

Re: JSON Multiple Dateien einlesen
Verfasst: 1. Mai 2019 11:37
von udo1toni
Andrzej hat geschrieben: ↑30. Apr 2019 14:55
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....
Wie kommst Du darauf, dass MQTT irgendwas mit Bluetooth zu tun hätte?
Ich hab verstanden dass unter /etc/openhab2/transform das Standard Ablage Verzeichnis der JSON Files ist? Richtig? Oder habe ich mich da verlesen...
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.)
Aus welchem Verzeichnis holt sich Openhab bzw. JSONPATH die Werte sonst her?
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.
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.
Du kannst den MQTT Broker auf irgendeinem Rechner im Netz einrichten, also z.B. auch auf dem Pi, auf dem schon IOBroker läuft. Wichtig ist nur, dass alle beteiligten Systeme per IP miteinander kommunizieren können.
mosquitto ist extrem einfach einzurichten, im Grunde reicht ein
aus, und schon läuft das Ding. Schau einfach mal in die Doku von IOBroker und openHAB, an beiden Stellen ist recht genau erklärt, wie das entsprechende System zu konfigurieren ist.
Re: JSON Multiple Dateien einlesen
Verfasst: 10. Mai 2019 10:59
von Andrzej
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
Re: JSON Multiple Dateien einlesen
Verfasst: 14. Mai 2019 20:51
von Andrzej
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
Re: JSON Multiple Dateien einlesen
Verfasst: 17. Mai 2019 12:45
von udo1toni
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.