JSON Multiple Dateien einlesen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Andrzej
Beiträge: 5
Registriert: 30. Apr 2019 09:23
Answers: 0

JSON Multiple Dateien einlesen

Beitrag 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

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: JSON Multiple Dateien einlesen

Beitrag 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
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

Andrzej
Beiträge: 5
Registriert: 30. Apr 2019 09:23
Answers: 0

Re: JSON Multiple Dateien einlesen

Beitrag von Andrzej »

Danke, das hilft mir aber leider nicht weiter.
Die Anleitung kenn ich schon, aber für meinen Fall leider nicht passend.

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: JSON Multiple Dateien einlesen

Beitrag 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...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Andrzej
Beiträge: 5
Registriert: 30. Apr 2019 09:23
Answers: 0

Re: JSON Multiple Dateien einlesen

Beitrag 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 :)

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: JSON Multiple Dateien einlesen

Beitrag 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:
  1. Du setzt in Deinem Netz einen MQTT Server auf. Das kann mosquitto sein oder auch der mit openHAB2.4 mitgelieferte embedded MQTT Broker.
  2. 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.
  3. 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

Code: Alles auswählen

sudo apt install mosquitto
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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Andrzej
Beiträge: 5
Registriert: 30. Apr 2019 09:23
Answers: 0

Re: JSON Multiple Dateien einlesen

Beitrag 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

Andrzej
Beiträge: 5
Registriert: 30. Apr 2019 09:23
Answers: 0

Re: JSON Multiple Dateien einlesen

Beitrag 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

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: JSON Multiple Dateien einlesen

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten