Seite 1 von 1

TTN und OH3

Verfasst: 26. Apr 2022 13:16
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" }

Re: TTN und OH3

Verfasst: 26. Apr 2022 13:28
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"]}

Re: TTN und OH3

Verfasst: 26. Apr 2022 18:47
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?

Re: TTN und OH3

Verfasst: 26. Apr 2022 18:51
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.

Re: TTN und OH3

Verfasst: 26. Apr 2022 20:49
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. :)