TTN und OH3

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
rekaboh
Beiträge: 8
Registriert: 24. Jul 2020 13:21
Answers: 0

TTN und OH3

Beitrag von rekaboh »

Ich habe ein paar Sensoren über LoraWAN angebunden. Die Werte können über TTN (TheThingsNetwork) per MQTT ausgelesen werden.
Mit MQTT-Lens erhalte ich entsprechende Ausgaben. Das Format ist JSON.

Ich richte also eine Bridge ein, sie ist auch Online:

Code: Alles auswählen

Bridge mqtt:broker:ttn "MQTT Broker TTN" [host="eu1.cloud.thethings.network", port="1883", secure=false, username="xxx@ttn", password="yyyy", clientID="oh3ttn", enableDiscovery=false]
Bei den Things gibt es das Problem, dass bereits "im Kopf" der stateTopic verlangt wird. Den setze ich sonst erst im Channel ein (s.u.). Wenn ich ihn dort nicht eintrage, erfolgt im Log ein entsprechender Fehler. Ich habe nun zwei Konfigurationen probiert, alles ist "grün", aber es werden keine Werte angezeigt:

Code: Alles auswählen

  
Bridge mqtt:broker:ttn ... {  
  Thing topic loraTemp "loraTemp" [ stateTopic="v3/xxx@ttn/devices/+/up", transformationPattern="JSONPATH:$.uplink_message.decoded_payload.temperature" ] 
  
  Thing topic lora "lora" [ stateTopic="v3/xxx@ttn/devices/+/up" ] {
  Channels:
    Type number : LORA_WAN_TMP "LORA-WAN-TEMP" [ transformationPattern="JSONPATH:$.uplink_message.decoded_payload.temperature" ]
    Type number : LORA_WAN_HUM "LORA-WAN-HUMI" [ transformationPattern="JSONPATH:$.uplink_message.decoded_payload.humidity" ]
  }
}

Items:  
String LW1Test "Inhalt [%s]" { channel="mqtt:topic:ttn:loraTemp" } // <- hier kommt normalerweise noch ein Wert hinten dran, welcher?
Number LW1Temp "LoraWan Temp. [%.1f °C]" { channel="mqtt:topic:ttn:lora:LORA_WAN_TMP" }
Number LW1Humi "LoraWan Feuchte [%.1f %%]" { channel="mqtt:topic:ttn:lora:LORA_WAN_HUM" }
Im Konfig-UI bekomme ich bei den Items noch die Meldung, dass der Link nicht korrekt sei. Klar ... Aber was mache ich falsch?


Funktionierender Rapsi-Broker:

Code: Alles auswählen

Bridge mqtt:broker:local [host="xxxx", port="zzzz", secure=false, username="", password="", clientID="mqopenhab31"] 
{
  Thing topic mq7thing "MQ7-Thing" {
  Channels:
    Type number : MQ7_PPM "MQ7-PPM" [ stateTopic="MQ7/PPM" ]
}

item: Number iMQ7_PPM "CO Gehalt MQ-7 [%.1f ppm]" <smoke> { channel="mqtt:topic:local:mqt7hing:MQ7_PPM" }

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

Re: TTN und OH3

Beitrag von udo1toni »

Nein, es gibt keinen Thing-Parameter stateTopic.

Code: Alles auswählen

Bridge mqtt:broker:ttn "MQTT Broker TTN" [
    host="eu1.cloud.thethings.network", 
    port="1883", 
    secure=false, 
    username="xxx@ttn", 
    password="yyyy", 
    clientID="oh3ttn", 
    enableDiscovery=false
] {
    Thing topic lora "lora" [] 
    {
    Channels:
        Type number : LORA_WAN_TMP "LORA-WAN-TEMP" [ stateTopic="v3/xxx@ttn/devices/+/up", transformationPattern="JSONPATH:$.uplink_message.decoded_payload.temperature" ]
        Type number : LORA_WAN_HUM "LORA-WAN-HUMI" [ stateTopic="v3/xxx@ttn/devices/+/up", transformationPattern="JSONPATH:$.uplink_message.decoded_payload.humidity" ]
  }
}
Alternativ kannst Du auch nur einen Channel definieren. Den definierst Du aber als String Channel (!) und speicherst darin das komplette JSON Objekt:

Code: Alles auswählen

Bridge mqtt:broker:ttn "MQTT Broker TTN" [
    host="eu1.cloud.thethings.network", 
    port="1883", 
    secure=false, 
    username="xxx@ttn", 
    password="yyyy", 
    clientID="oh3ttn", 
    enableDiscovery=false
] {
    Thing topic lora "lora" [] 
    {
    Channels:
        Type string : json "JSON" [ stateTopic="v3/xxx@ttn/devices/+/up" ]
  }
}
Nun kannst Du im Link zwischen dem Channel und den verschiedenen Items, welches Du alle mit dem selben Channel verlinkst, als Profile JSONPATH verwenden und dort den jeweiligen Path angeben.

Code: Alles auswählen

Number LW1Temp "LoraWan Temp. [%.1f °C]" { channel="mqtt:topic:ttn:lora:json" [profile="transform:JSONPATH", function="$.uplink_message.decoded_payload.temperature"]}
Number LW1Humi "LoraWan Feuchte [%.1f %%]" { channel="mqtt:topic:ttn:lora:json" [profile="transform:JSONPATH", function="$.uplink_message.decoded_payload.humidity"]}
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

rekaboh
Beiträge: 8
Registriert: 24. Jul 2020 13:21
Answers: 0

Re: TTN und OH3

Beitrag von rekaboh »

Darauf soll einer kommen :) ... Vielen Dank.
Damit funktioniert es.

Die JSON Variante lässt auch die anderen Daten einfach anzeigen ... dachte ich.

Code: Alles auswählen

Number LW1Rsi2 "LoraWan RSSI [%d]" { channel="mqtt:topic:ttn:lora:json" [profile="transform:JSONPATH", function="$.uplink_message.rx_metadata[0].gateway_ids.rssi"] }
bringt den Fehler:

Code: Alles auswählen

Could not transform state ... with function '$.uplink_message.rx_metadata[0].gateway_ids.rssi' and format '%s
Die Message dazu lautet:

Code: Alles auswählen

"uplink_message": {
    "decoded_payload": {
      "humidity": 53.1,
      "temperature": 18.8
    },
    "rx_metadata": [
      {
        "rssi": -113,
Da die Metadaten in einem Record stecken, hatte ich [0] eingetragen, es gibt aktuell nur diesen einen.

Gibt es auch dafür einen Tipp?

rekaboh
Beiträge: 8
Registriert: 24. Jul 2020 13:21
Answers: 0

Re: TTN und OH3

Beitrag von rekaboh »

sorry, da war ich zu schnell.
$.uplink_message.rx_metadata[0].gateway_ids.rssi
muss
$.uplink_message.rx_metadata[0].rssi
heißen.

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

Re: TTN und OH3

Beitrag von udo1toni »

Prima. Ansonsten hätte ic hdarauf hinweisen müssen, dass der zitierte Text nur ein Teil des JSON Objekts ist, was die Analyse schwierig macht. :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten