Sensordaten von TTN mit JSONPATH nutzen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
pauliv_de
Beiträge: 31
Registriert: 31. Jan 2019 23:59
Answers: 0
Wohnort: Gütersloh

Sensordaten von TTN mit JSONPATH nutzen

Beitrag von pauliv_de »

Ein Loris Modul von ELV liefert periodisch Temperatur und Feuchtigkeitsdaten an thethingsnetwork (LORAWAN).
Über die Main-UI habe ich das MQTT-Binding installiert und bekomme auch Daten in ein String-Item, allerdings in der Form eines JSON-Strings.

Code: Alles auswählen

{"end_device_ids":{"device_id":"eui-7066e1fffe001018","application_ids":{"application_id":"pvloris01"},"dev_eui":"7066E1FFFE0010...

Mit dem JSONPATH-Transform müsste ich die einzelnen Werte heraus lesen, denke ich.
Aber wie muss ich mit der Main-UI umgehen um den Transform zu bewerkstelligen ?

Danke für jeden Tipp.
Paul

openHAB 3.4.1
Raspberry Pi 3 Model B Rev 1.2, piVCCU version: 3.73.9-87, openHAB version: 4.1.0 Release Build

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

Re: Daten von TTN und JSONPATH

Beitrag von udo1toni »

Leider hast Du das JSON Objekt nur unvollständig gepostet.
Je nach Art der Daten gibt es mehrere Wege, wie Du die Daten verarbeiten kannst. Grundsätzlich kannst Du einen String Channel definieren und diesem mit mehreren Items verlinken. Innerhalb der Links kannst Du dann als Profile JSONPATH auswählen und den passenden Path als Parameter eintragen.
Vorteil: Du brauchst nur einen Channel.
Nachteile: Du kannst nur nackte Werte übernehmen, UoM steht nicht zur Verfügung. Wird das JSON Dynamisch erstellt (wobei abgefragte Werte nur in einem Teil der Payloads überhaupt vorkommen) bekommst Du Warnmeldungen im Log.

Der "bessere" Weg führt über einzelne Channel pro Datenpunkt. Nehmen wir an, Du hast eine Temperatur und eine Luftfeuchte als Datenpunkt, dann legst Du (gerne parallel zum bereits vorhandenen String Channel) zwei Number Channel an.
Als stateTopic gibst Du das identische Topic vom String Channel an.
Den Parameter unit (den gibt es bei Number Channels) setzt Du für die Luftfeuchte auf % und für die Temperatur (mutmaßlich) auf °C (gegeben, dass die Temperatur als Wert, z.B. 23.4 angeliefert wird).
Unter Incoming Value Transformations (Show Advanced anhaken) trägst Du nun JSONPATH:$.pfad.zu.dem.wert ein.
Zum Beispiel Dein Schnipsel (so ergänzt, dass es ein gültiges JSON Objekt ist):

Code: Alles auswählen

{
	"end_device_ids": {
		"device_id": "eui-7066e1fffe001018",
		"application_ids": {
			"application_id": "pvloris01"
		},
		"dev_eui":"7066E1FFFE001018"
	}
}
Du möchtest die Application ID haben: JSONPATH:$.end_device_ids.application_ids.application_id (was dann pvloris01 als Ausgabe liefert)
Ich nutze VS Code mit installiertem Plugin JSON Path Status Bar, zum einen kann VS Code gültiges JSON automatisch lesefreundlich formatieren (siehe Beispiel), zum anderen reicht dann ein Klick auf den konkreten Wert, um in der Fußzeile von VS Code den JSON Pfad angezeigt zu bekommen, den man anschließend per Klick auf den Pfad auch direkt in die Zwischenablage übernehmen kann.

Die beiden Items definierst Du dann als Number:Temperature und Number:Dimensionless. Bist Du mit OH4 unterwegs, setzt Du in den beiden Items das Feld unit passend (d.h. eine für den QuantityType passende Einheit, welche konkret ist aber egal, z.B. könntest Du K für Kelvin eintragen :) dann wird der Wert intern in Kelvin gespeichert. Die Anzeige des Wertes stellst Du über die Metadaten des Items ein (State Description -> pattern), dort kannst Du dann z.B. %.0f°F eintragen, wenn Du den Wert in Grad Fahrenheit ausgegeben bekommen möchtest, oder Du trägst dort %.0f d°C ein, weil Du die Temperatur in deziGrad Celsius haben möchtest ;) Oder Du schreibst einfach %.1f °C um GRad Celsius (mit einer Nachkommastelle) angezeigt zu bekommen...

Unter OH3 gibt es das Feld unit nicht (im Number:QuantityType Item), der im Item gehaltene Wert wird ausschließlich über das Pattern gesteuert (was dazu führt, dass Du Wertesprünge hast, wenn Du das Pattern anpasst - das kann man dann z.B. in Charts sehen)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

pauliv_de
Beiträge: 31
Registriert: 31. Jan 2019 23:59
Answers: 0
Wohnort: Gütersloh

Re: Sensordaten von TTN mit JSONPATH nutzen

Beitrag von pauliv_de »

Danke Udo, für die detaillierte Erklärung, jetzt arbeite ich mich Schritt für Schritt dadurch.
Raspberry Pi 3 Model B Rev 1.2, piVCCU version: 3.73.9-87, openHAB version: 4.1.0 Release Build

Antworten