Seite 1 von 1

Mobile Alerts Daten einlesen

Verfasst: 11. Mär 2022 22:17
von Dieter Zimmermann
Hallo openHABforum,

nachdem ich schon einige Probleme in meinem openHAB System durch die Hilfe des Forums lösen konnte, möchte ich heute mal was zurückgeben.
Ich habe mir nach vielem Lesen und "zähem Ringen" :shock: eine einfache Lösung zum Einlesen von Mobile Alerts Werten erarbeitet.
Vielleicht hilft das dem einen oder anderen der vor dem gleichen Problem steht.

Meine Systemumgebung
Synology DS220+, Installierte DSM-Version 6.2.4-25556, Docker, Openhab:3.3.0.M2

1. Einlesen JSON String der Mobile Alerts Geräte

Thing mit exec-binding und curl-Befehl (http-binding funktioniert nicht) erstellen.
Damit das exec command ausgeführt wird, muss der genau gleiche Befehl in der "exec.whitelist" eingetragen werden. (liegt auf der Synology in folgendem Verzeichnis -->\Docker\openhab\conf\misc\exec.whitelist)

Befehl im Thing und exec.whithlist zum Einlesen des JSON-String:

curl -d deviceids=YYYYYYYYYYYY,ZZZZZZZZZZZZ -d phoneid=XXXXXXXXXXXX https://www.data199.com/api/pv1/device/lastmeasurement

YYYYYYYYYYYY,ZZZZZZZZZZZZ = ID der einzelnen Sensoren (mehrere möglich)
XXXXXXXXXXXX = phoneid
11.jpg
2. Anlegen von Number-Items zur Speicherung der vorhandenen Mobile Alerts Sensorwerte (Temperatur, Luftfeuchte, ...)

3. Erstellen einer Rule und Auslesen der einzelnen Gerätewerte aus dem JSON-String mit Blockly

Festlegen des Triggers
Dies sollte das Item des Rückgabewertes aus dem Thing mit der curl Abfrage sein.
In meinem Beispiel: Thing: Mobile Alerts, Channel: Rückgabewert, Item: Mobile_Alerts_json_string

Erstellen des scripts mit Blockly

1. Schritt
Einlesen und umwandeln des Items das den JSON-String enthält in einen Textstring und speichern in einer Variablen
In meinem Beispiel: "var_json_string"

Anm:
Variable unter dem Menüpunkt "Variables" erstellen,
"create text with" unter dem Menüpunkt "Text",
"get state of item" unter dem Menüpunkt "openHAB, Items&Things",

2. Schritt
Transformieren des eingelesenen Strings mit JSONPATH und speichern des Wertes in der Variablen für den Sensorwert.
In meinem Beispiel: "var_sensorwert"

Die einzelnen Mobile Alerts Werte folgendermaßen ausgelesen:

Beispiel für den ersten Temperaturwert im JSON-String

{
"devices": [
{
"deviceid": "XXXXXXXXXXXX",
"lastseen": 1647014099,
"lowbattery": false,
"measurement": {
"idx": 3141895,
"ts": 1647014094,
"c": 1647014099,
"lb": false,
"t1": 24.0, <---- $.devices.[0].measurement.t1 ([0] = erstes Arrayelement, t1 = erster Temperaturwert)
"t2": 14.2,
"h": 29.0,
"h2": 41.0
}
},
.
.

3. Schritt
Schreiben des ausgelesenen Wertes das gewünschte Item.

4. Schritt
Wiederholen von Schritt 2. und 3. für alle vorhandenen Sensoren mit Anpassung des JSONPATH Arguments.
12.jpg
Mit dieser Vorgehensweise konnte ich alle meine Mobile Alerts Werte in openHAB einlesen.

Re: Mobile Alerts Daten einlesen

Verfasst: 16. Dez 2022 10:02
von alADDIn811
Moin,
mein Anwendungsfall hat perfekt zu deiner Anleitung gepasst. Bei mir tritt nur folgendes Problem ein. Die Daten werden korrekt zurückgegeben und in den Rückgabewert gespeichert. Beim Parsen durch die JSONPATH Transformation passiert aber irgendwie nichts. Die Daten werden also unverändert in das Item weitergegeben, in dem nur der einzelne Wert stehen soll. Kannst du mir da weiterhefen? Grüße

Re: Mobile Alerts Daten einlesen

Verfasst: 16. Dez 2022 16:55
von udo1toni
Hast Du denn JSONPATH auch installiert?

Re: Mobile Alerts Daten einlesen

Verfasst: 16. Dez 2022 17:48
von udo1toni
Hast Du denn JSONPATH auch installiert? Wahlweise könnte es auch sein, dass Dein Path nicht zu 100% korrekt ist. Laut VSCode (mit JSON Path Status Bar Plugin) lautet der Pfad $.devices[0].measurement.c (also kein Punkt zwischen devices und [, würde ich auch so erwarten.

Re: Mobile Alerts Daten einlesen

Verfasst: 16. Dez 2022 19:00
von Harka
und JSONPATH muss zwingend groß geschrieben werden

Re: Mobile Alerts Daten einlesen

Verfasst: 18. Dez 2022 10:31
von alADDIn811
Danke für die Tipps, es war eine Kombination aus dem Pfad und der Großschreibung von JSONPATH. Jetzt funktioniert alles