[gelöst] MQTT2_Client/MQTT2_DEVICE: LoRaWAN TTN V3 Downlink Telegramme versenden

Begonnen von klaus.schauer, 24 Juli 2021, 21:33:25

Vorheriges Thema - Nächstes Thema

klaus.schauer

Meine LoRaWAN TTN V3 Applikation ist per MQTT2_CLIENT mit Fhem gekoppelt. Ein GPS Tracker ist als MQTT2_CLIENT angelegt. Die Uplink Telegramme des GPS Tracker werden einwandfrei im Fhem Device angezeigt. Auch werden die Protokolle von LoRaWAN Downlink Telegrammen angezeigt, die in der TTN Konsole selbst gesetzt werden. Die von Fhem gesendeten MQTT Topics werden aber im TTN-Server nicht verarbeitet. Ich bin mir nicht sicher, ob sie überhaupt (korrekt) von Fhem gesendet werden.

Lt. Handbuch https://www.thethingsindustries.com/docs/integrations/mqtt/ wird ein Topic der Form

v3/app1@tenant1/devices/dev1/down/push

erwartet.
Als Content ist ein JSON-Objekt der Form

{
  "downlinks": [{
    "f_port": 15,
    "frm_payload": "vu8=",
    "priority": "NORMAL"
  }]
}

erforderlich.
Topic und Content wird im MQTT2_DEVICE erzeugt durch:

attr GPS_Tracker_1 setList alarmOff:noArg {"MQTT_ttn:v3/<tenant-id>\x40ttn/devices/gps-tracker-1/down/push " . toJSON({"downlinks" => [{"f_port" => 2 , "cmd" => "alarmOff", "priority" => "NORMAL"}]})}

Im LOG des MQTT2_CLIENT sieht man

2021.07.24 20:11:27 5: MQTT_ttn: sending PUBLISH 0(146)(1)(0):MQTT_ttn:v3/<tenant-id>@ttn/devices/gps-tracker-1/down/push{"downlinks":[{"cmd":"alarmOff","f_port":2,"frm_payload":"AgE=","priority":"NORMAL"}]}

Sieht ja erst einmal gut aus, aber es fehlt ein Leerzeichen zwischen dem Topic und dem Content. Ist das nur ein Anzeigefehler im LOG oder ist die Formatierung der gesendeten Daten tatsächlich falsch? Wie kann ich mir die gesendeten Daten ansehen. Im LOG werden auch bei verbose 5 keine weiteren Ausgaben anzezeigt.

rudolfkoenig

Leerzeichen braucht man nicht: da man die komplette Laenge des Telegramms und die Laenge des Topics kennt, kann man die Laenge der Message ausrechnen. Weiterhin kann ein Topic auch Leerzeichen enthalten.
Ich wuerde die Daten mit mosquitto_sub in einem Terminal anzeigen.
Oder mit einem anderen Client, notfalls mit einer weiteren FHEM MQTT2_CLIENT Instanz und "attr m2c rawEvents 1"

klaus.schauer

Das Topic war falsch. Wenn man es richtig macht, geht es z. B. so:

attr <device> setList alarmOff:noArg {'v3/<tenant-id@ttn/devices/gps-tracker-1/down/push ' . toJSON({"downlinks" => [{"f_port" => 2 , "frm_payload" => encode_base64(pack("H*", "0201")), "priority" => "NORMAL"}]})}

rcmcronny

Hi klaus.schauer,

danke, das habe ich auch noch gesucht und mir mal vorgenommen. Scheinbar hast Du auch den LGT92 von Dragino :)

Ronny