NEWS
mqtt Payload von TNN zu IOBroker decoden
-
Hallo,
ich bin neu hier und hoffe auf einen Tipp für mein kleines Problem mit dem Decodieren von MQTT Payloads. Ich bekomme es nicht so recht hin, die Daten im IO Broker anzulegen. Viele meiner anderen Fragen konnte ich bereits im Forum nachlesen, wirklich sehr sehr hilfreich, danke dafür!
Sobald ich einen neuen Fenstersensor in TNN integriere, wird dieser automatisch als Objekt im IOBroker angelegt, soweit so gut.
Im Feld Wert wird folgender Wert eingespeichert:
{"end_device_ids":{"device_id":"05-kg-kueche-hintertuer","application_ids":{"application_id":"fenstersensoren"},"dev_eui":"A84041926183EDDA","join_eui":"A840410000000107","dev_addr":"260B2243"},"correlation_ids":["as🆙01FV3D09B9V3ETAP1BZAEFMT3Z","gs:conn:01FTS84B358ED261TB5RY6N9F8","gs🆙host:01FTS84B3D4E5BA1AV56C125R0","gs:uplink:01FV3D09454QG2TJ9JXPXXANB7","ns:uplink:01FV3D094NQ8537EYWK2E7YP4Y","rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01FV3D094NZXAX2WHYX625J3HD","rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01FV3D09B8KF91AYJSJBBJVXQK"],"received_at":"2022-02-04T22:17:16.906561406Z","uplink_message":{"session_key_id":"AX6WxzPUM62CROAz2oRFeA==","f_port":10,"f_cnt":104,"frm_payload":"DFoBAAA3AAAAAA==","decoded_payload":{"ALARM":0,"BAT_V":3.162,"DOOR_OPEN_STATUS":0,"DOOR_OPEN_TIMES":55,"LAST_DOOR_OPEN_DURATION":0,"MOD":1},"rx_metadata":[{"gateway_ids":{"gateway_id":"05-andreasberg","eui":"A84041211B2C4150"},"time":"2022-02-04T22:17:16.657852Z","timestamp":4174745691,"rssi":-91,"channel_rssi":-91,"snr":8.2,"location":{"latitude":52.3220922480177,"longitude":10.401136254215945,"source":"SOURCE_REGISTRY"},"uplink_token":"ChwKGgoOMDUtYW5kcmVhc2JlcmcSCKhAQSEbLEFQENug1sYPGgwI7Mv2jwYQhbaSwwIg+MbvkcCzQSoMCOzL9o8GEOCM2LkC"}],"settings":{"data_rate":{"lora":{"bandwidth":125000,"spreading_factor":7}},"coding_rate":"4/5","frequency":"868100000","timestamp":4174745691,"time":"2022-02-04T22:17:16.657852Z"},"received_at":"2022-02-04T22:17:16.693896219Z","consumed_airtime":"0.061696s","version_ids":{"brand_id":"dragino","model_id":"lds01","hardware_version":"unknown_hw_version","firmware_version":"1.3.0","band_id":"EU_863_870"},"network_ids":{"net_id":"000013","tenant_id":"ttn","cluster_id":"ttn-eu1"}}}
Ich würde gern den Payload auslesen und als einzelne Werte im Fenstersensor anzeigen lassen
decoded_payload":{"ALARM":0,"BAT_V":3.162,"DOOR_OPEN_STATUS":0,"DOOR_OPEN_TIMES":55,"LAST_DOOR_OPEN_DURATION":0,"MOD":1}
Folgendes Script habe ich gefunden, welches in einem ähnlichem Fall die Werte ausliest und in IOBROKER abspeichert.
Die Umsetzung in ioBroker-Variablen erfolgt über ein JavaScript-Script. Dieses konvertiert die Werte passend zum ioBroker. Auskommentiert ist noch eine Möglichkeit die rohen JSON-Pakete vom TTN zum entsprechenden Sensor mitzuloggen.
ttn_decode //Temperatursensor 1 createState("custom.ttn.temp_sensor01.temperature", false, { name: "Temperature", read: true, write: false, desc: "", def: 0, unit: "°C", role: "value.temperature", type: "number" }); createState("custom.ttn.temp_sensor01.humidity", false, { name: "Humidity", read: true, write: false, desc: "", def: 0, unit: "%", role: "value.humidity", type: "number" }); createState("custom.ttn.temp_sensor01.pressure", false, { name: "Pressure", read: true, write: false, desc: "", def: 0, unit: "hPa", role: "value.pressure", type: "number" }); createState("custom.ttn.temp_sensor01.battery", false, { name: "Battery", read: true, write: false, desc: "", def: 0, unit: "V", role: "", type: "number" }); //const fs = require('fs'); on({id: 'mqtt.1.mh-sensornetwork.devices.temp_sensor01.up', change: "ne"}, function (obj) { obj = JSON.parse(getState("mqtt.1.mh-sensornetwork.devices.temp_sensor01.up").val); setState("custom.ttn.temp_sensor01.temperature", parseFloat(obj["payload_fields"]["temperature"].toFixed(2)), true); setState("custom.ttn.temp_sensor01.humidity", parseFloat(obj["payload_fields"]["humidity"].toFixed(2)), true); setState("custom.ttn.temp_sensor01.pressure", parseFloat((obj["payload_fields"]["pressure"]/100.0).toFixed(2)), true); setState("custom.ttn.temp_sensor01.battery", parseFloat(((3.3/1024.0)*parseFloat(obj["payload_fields"]["battery"])*2.0).toFixed(2)), true); /* var file = "/opt/iobroker/ttn_log.csv"; if(!fs.existsSync(file)) { fs.writeFileSync(file, "Time\tData\r\n"); } fs.appendFileSync(file, (new Date()).toISOString() + "\t" + getState("mqtt.1.mh-sensornetwork.devices.temp_sensor01.up").val + "\r\n"); */ });
- Meine Frage wäre nun, wo muss ich das Script einfügen, damit es auf die neuen automatisch hinzugefügten Geräte reagiert? Mache ich das über Node Red oder Blockly? und wie triggere ich das Script?
Danke vielmals
Grüße Fabian
-
@flehmann1234 jetzt habe ich was gefunden...
https://forum.iobroker.net/topic/46100/mqtt-parsen-mit-blockly?_=1644016678753
könnte das so funktioieren?
-
@flehmann1234 Ich habe Dir mal geschrieben.
-
@j_paul danke für deine Hilfe, hast mir sehr weiter geholfen.
Jetzt kann ich endlich loslegen... Grüße
-
@j_paul sagte in mqtt Payload von TNN zu IOBroker decoden:
@flehmann1234 Ich habe Dir mal geschrieben.
das ist genau was ich suche - gibts dazu auch noch ein script?
-
@flehmann1234 Wenn Du es über Node-Red machen möchtest, habe ich bereits eine fertige Node, die Dir alle Datenpunkte anlegt und befüllt.
Da musst Du quasi nichts mehr programmieren:
https://forum.iobroker.net/topic/43856/json-oder-javascript-objekt-in-iobroker-datenpunkte-zerlegen
Ich habe eigentlich alles erklärt. Falls Du noch Fragen hast, dann melde Dich einfach.
-
@mickym danke für den Hinweis, schaue ich mir mal in Ruhe an.
Derzeit habe ich mich mit einem Blockly Sript beholfen.
Hier hat mir @hafenmeister sehr geholfen.
-
@flehmann1234 sagte in mqtt Payload von TNN zu IOBroker decoden:
@mickym danke für den Hinweis, schaue ich mir mal in Ruhe an.
Kein Problem - kam durch Dich auf die Idee - meine Node noch zu erweitern, damit ist sie noch universeller nutzbar und man kann damit automatisiert ganze Objektbäume erstellen.
Und wenn Du mit Deiner Lösung zufrieden bist, dann ist ja alles gut.