NEWS
[gelöst] Payload Daten in Objekte schreiben
-
Danke.
Werde es mal die Tage probieren. -
Leider hat es nicht funktioniert.
Beim Blockly kommen folgende Fehlermeldungen:
avascript.0 2023-07-20 18:55:46.674 error script.js.LoRaWAN_DEV_1: Cannot get AVI2_V of null javascript.0 2023-07-20 18:55:46.674 error script.js.LoRaWAN_DEV_1: Cannot get ACI1_mA of undefined javascript.0 2023-07-20 18:53:46.292 error script.js.LoRaWAN_DEV_1: Cannot get AVI2_V of null javascript.0 2023-07-20 18:53:46.292 error script.js.LoRaWAN_DEV_1: Cannot get ACI1_mA of null javascript.0 2023-07-20 18:52:46.262 error script.js.LoRaWAN_DEV_1: Cannot get AVI2_V of null javascript.0 2023-07-20 18:52:46.261 error script.js.LoRaWAN_DEV_1: Cannot get ACI1_mA of undefined
Habe es dann noch mit einem JS versucht (hier aus dem Forum).
Alles angepasst, aber dies hat auch nicht funktioniert.javascript.0 2023-07-20 18:57:52.096 error at Script.runInContext (node:vm:141:12) javascript.0 2023-07-20 18:57:52.096 error at script.js.LoRAWAN_DEV_1:127:3 javascript.0 2023-07-20 18:57:52.096 error at script.js.LoRAWAN_DEV_1:1:1 javascript.0 2023-07-20 18:57:52.095 error script.js.LoRAWAN_DEV_1: ReferenceError: ttn_decode is not defined
Wie deffiniere ich den TTN_decode?
ttn_decode //Device createState("0_userdata.0.LoRaWAN.eui-a840414601871305.ACI_1", false, { name: "Strom_1", read: true, write: false, desc: "", def: 0, unit: "mA", role: "", type: "number" }); createState("0_userdata.0.LoRaWAN.eui-a840414601871305.ACI_2", false, { name: "Strom_2", read: true, write: false, desc: "", def: 0, unit: "mA", role: "", type: "number" }); createState("0_userdata.0.LoRaWAN.eui-a840414601871305.AVI_1", false, { name: "Spannung_1", read: true, write: false, desc: "", def: 0, unit: "V", role: "", type: "number" }); createState("0_userdata.0.LoRaWAN.eui-a840414601871305.AVI_2", false, { name: "Spannung_2", read: true, write: false, desc: "", def: 0, unit: "V", role: "", type: "number" }); //const fs = require('fs'); on({id: 'v3/gs-mg-dragino-01@ttn/devices/eui-a840414601871305/up', change: "ne"}, function (obj) { obj = JSON.parse(getState("v3/gs-mg-dragino-01@ttn/devices/eui-a840414601871305/up").val); setState("0_userdata.0.LoRaWAN.eui-a840414601871305.ACI_1", parseFloat(obj["payload_fields"]["ACI1_mA"].toFixed(2)), true); setState("0_userdata.0.LoRaWAN.eui-a840414601871305.ACI_2", parseFloat(obj["payload_fields"]["ACI2_mA"].toFixed(2)), true); setState("0_userdata.0.LoRaWAN.eui-a840414601871305.AVI_1", parseFloat(obj["payload_fields"]["AVI1_V"].toFixed(2)), true); setState("0_userdata.0.LoRaWAN.eui-a840414601871305.AVI_2", parseFloat(obj["payload_fields"]["AVI2_V"].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("on({id: 'v3/gs-mg-dragino-01@ttn/devices/eui-a840414601871305/up', change: "ne"}, function (obj) { ").val + "\r\n"); */ });
Brauche da wohl ein bisschen Nachilfe.
Danke
-
@gregors sagte in Payload Daten in Objekte schreiben:
Beim Blockly kommen folgende Fehlermeldungen:
Hast du die Überprüfung, ob der Inhalt existiert nicht umgesetzt?
@marc-berg sagte in Payload Daten in Objekte schreiben:
@paul53 sagte in Payload Daten in Objekte schreiben:
Dann sollte man prüfen.
ja, genau. Wenn man zum Beispiel einen Schaltbefehl als Downlink absetzt, bekommt man immer zwei Uplinks zurück. Einen mit Work_mode "Exit mode" und einen mit Work_Mode "2ACI+2AVI". Das ist zunächst etwas verwirrend, aber sicher der vielfältigen Möglichkeiten geschuldet, die man mit diesem Gerät hat.
und hier die Lösung
@paul53 sagte in Payload Daten in Objekte schreiben:
@marc-berg sagte: unterschiedliche Payloads
Dann sollte man prüfen.
-
Komme mit mit Blockly nicht klar.
Muss ich die Variablen "payload","jason" vorher erstellen? Wo?
Muss ich im Attribut "uplink_message...." den Pfad zu meinem Objekt reinkopieren?
So sieht meine Struktur aus:
Ich sende keine Befehle, sondern empfange nur welche von LoRaWan.
Muss ich trotzdem die Abfrage machen?
Irgendwie bin ich dazu zu blöd. -
@gregors sagte: Muss ich die Variablen "payload","jason" vorher erstellen? Wo?
Die Variable
payload
muss unter "Variablen" erstellt werden.
Der Datenpunkt "up" dient als Trigger:Wert
findet man unter "Trigger". -
@gregors sagte: Brauche da wohl ein bisschen Nachilfe.
const idUp = 'mqtt.2.v3.gs-mg-dragino-01@ttn.devices.eui-a840414601871305.up'/*v3/gs-mg-dragino-01@ttn/devices/eui-a840414601871305/up*/; on(idUp, function (dp) { let payload = JSON.parse(dp.state.val).uplink_message.decoded_paylod; if(payload && payload.AVI1_V != undefined) { setState("0_userdata.0.LoRaWAN.eui-a840414601871305.ACI_1", Math.round(payload.ACI1_mA * 100) / 100, true); setState("0_userdata.0.LoRaWAN.eui-a840414601871305.ACI_2", Math.round(payload.ACI2_mA * 100) / 100, true); setState("0_userdata.0.LoRaWAN.eui-a840414601871305.AVI_1", Math.round(payload.AVI1_V * 100) / 100, true); setState("0_userdata.0.LoRaWAN.eui-a840414601871305.AVI_2", Math.round(payload.AVI2_V * 100) / 100, true); } });
Zum Triggern muss die DP-ID - nicht der DP-Name - verwendet werden.
-
Habe ich ausprobiert.
Keine Fehler mehr, aber es wird nichts in die Objekte geschrieben. -
@gregors sagte: es wird nichts in die Objekte geschrieben.
Es wird getriggert, d.h. die ID stimmt?
-
Kann ich nicht erkennen.
Zur Auswahl unter ID bekam ich nur das Objekt UP angeboten.'mqtt.2.v3.gs-mg-dragino-01@ttn.devices.eui-a840414601871305.up'/*v3/gs-mg-dragino-01@ttn/devices/eui-a840414601871305/up*/ on('mqtt.2.v3.gs-mg-dragino-01@ttn.devices.eui-a840414601871305.up', function (dp) { let payload = JSON.parse(dp.state.val).uplink_message.decoded_paylod; if(payload && payload.AVI1_V != undefined) { setState("0_userdata.0.LoRaWAN.eui-a840414601871305.ACI1_mA", Math.round(payload.ACI1_mA * 100) / 100, true); setState("0_userdata.0.LoRaWAN.eui-a840414601871305.ACI2_mA", Math.round(payload.ACI2_mA * 100) / 100, true); setState("0_userdata.0.LoRaWAN.eui-a840414601871305.AVI1_V", Math.round(payload.AVI1_V * 100) / 100, true); setState("0_userdata.0.LoRaWAN.eui-a840414601871305.AVI2_V", Math.round(payload.AVI2_V * 100) / 100, true); } });
Kann ich auch mit einem Schedule jede Minute triggern?
-
@gregors sagte: Objekt UP
Ändert sich der Inhalt? Es wird nur bei Wertänderung getriggert.
-
@paul53
Der Wert im Payload ändert sich.
Allerdings nur AVI1_V, da es zur Zeit der einzige angeschlossene Wert ist.Was bedeutet diese Zeile:
if(payload && payload.AVI1_V != undefined) {
Es gibt doch 4 Variablen mit Daten.
Der Wert von 0_userdata.0.LoRaWAN.eui-a840414601871305.AVI1_V bleibt "0"
Habe ihn händisch als Datenpunkt "Number" angelegt. -
@gregors sagte: Was bedeutet diese Zeile:
Es wird geprüft, ob das payload-Objekt vorhanden ist und ob es "AVI1_V" enthält.
@gregors sagte in Payload Daten in Objekte schreiben:
Es gibt doch 4 Variablen mit Daten.
Wenn "AVI1_V" enthalten ist, sind die anderen auch vorhanden.
Die Zeile 1 mit der ID ist hoffentlich als Kommentar gekennzeichnet?
-
Die Zeile 1 war natürlich nicht als Kommentar gekennzeichnet.
Habe ich aber nachgeholt.
Aber die Werte stehen immer noch auf 0
Fehler gibt es keine//'mqtt.2.v3.gs-mg-dragino-01@ttn.devices.eui-a840414601871305.up'/*v3/gs-mg-dragino-01@ttn/devices/eui-a840414601871305/up*/ on('mqtt.2.v3.gs-mg-dragino-01@ttn.devices.eui-a840414601871305.up', function (dp) { let payload = JSON.parse(dp.state.val).uplink_message.decoded_paylod; if(payload && payload.AVI1_V != undefined) { setState("0_userdata.0.LoRaWAN.eui-a840414601871305.ACI1_mA", Math.round(payload.ACI1_mA * 100) / 100, true); setState("0_userdata.0.LoRaWAN.eui-a840414601871305.ACI2_mA", Math.round(payload.ACI2_mA * 100) / 100, true); setState("0_userdata.0.LoRaWAN.eui-a840414601871305.AVI1_V", Math.round(payload.AVI1_V * 100) / 100, true); setState("0_userdata.0.LoRaWAN.eui-a840414601871305.AVI2_V", Math.round(payload.AVI2_V * 100) / 100, true); } });
-
@gregors bleibt noch die uralte Frage
@homoran sagte in Payload Daten in Objekte schreiben:
es kommen auch immer nur diese Attribute an?
bzw. nach dem Hinweis von
@marc-berg sagte in Payload Daten in Objekte schreiben:
Nur ein kleiner Hinweis, der LT22222 hat die unangenehme Eigenschaft, abhängig vom "work_mode" unterschiedliche Payloads bereitzustellen.
die Variante:
was kommt da zurück?
u d zwar bei dedem Abruf? -
Ist eingestellt auf Work-Mode.
{"end_device_ids":{"device_id":"eui-a840414601871305","application_ids":{"application_id":"gs-mg-dragino-01"},"dev_eui":"A840414601871305","join_eui":"A840410000000101","dev_addr":"260BE9CF"},"correlation_ids":["as:up:01H5YXJP5QRH1C5Q08ZD5DCSP3","gs:conn:01H5CGRTDQJ3EW5BPQ15D9SVP8","gs:up:host:01H5CGRTDY5KEGKQ0AQZ22XD9M","gs:uplink:01H5YXJNZ91PEK9H5YJ9MQ3KHY","ns:uplink:01H5YXJNZABG7H54KY0GZK1EHM","rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01H5YXJNZ9DDEYD157A8ZJ4MDJ","rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01H5YXJP5PHV0DBWATNA897E9W"],"received_at":"2023-07-22T13:45:43.350790106Z","uplink_message":{"session_key_id":"AYlu5XV3aMaeiMVAq8yISw==","f_port":2,"f_cnt":4181,"frm_payload":"NhMAAAAAAAA0/0E=","decoded_payload":{"ACI1_mA":0, "ACI2_mA":0, "%(#ff0000)[AVI1_V":13.843], "AVI2_V":0, "DI1_status":"L", "DI2_status":"H", "DO1_status":"H", "DO2_status":"H", "Hardware_mode":"LT22222", "RO1_status":"OFF", "RO2_status":"OFF", "Work_mode":"2ACI+2AVI"},"rx_metadata":[{"gateway_ids":{"gateway_id":"eui-503139534e7d4750","eui":"503139534E7D4750"},"time":"2023-07-22T13:45:35.699393Z","timestamp":518644732,"rssi":-104,"channel_rssi":-104,"snr":-16.75,"uplink_token":"CiIKIAoUZXVpLTUwMzEzOTUzNGU3ZDQ3NTASCFAxOVNOfUdQEPzHp/cBGgsIh7vvpQYQpY2KRSDgoIqNjN+MAQ==","channel_index":1,"received_at":"2023-07-22T13:45:43.144869029Z"}],"settings":{"data_rate":{"lora":{"bandwidth":125000, "spreading_factor":12, "coding_rate":"4/5"}}, "frequency":"868300000", "timestamp":518644732, "time":"2023-07-22T13:45:35.699393Z"},"received_at":"2023-07-22T13:45:43.146061623Z","consumed_airtime":"1.482752s","version_ids":{"brand_id":"dragino", "model_id":"lt22222-l", "hardware_version":"_unknown_hw_version_", "firmware_version":"1.5.6", "band_id":"EU_863_870"},"network_ids":{"net_id":"000013","tenant_id":"ttn","cluster_id":"eu1","cluster_address":"eu1.cloud.thethings.network"}}}
{"end_device_ids":{"device_id":"eui-a840414601871305","application_ids":{"application_id":"gs-mg-dragino-01"},"dev_eui":"A840414601871305","join_eui":"A840410000000101","dev_addr":"260BE9CF"},"correlation_ids":["as:up:01H5YXZGAF6GPBPJ5YGPPSXD5G","gs:conn:01H5CGRTDQJ3EW5BPQ15D9SVP8","gs:up:host:01H5CGRTDY5KEGKQ0AQZ22XD9M","gs:uplink:01H5YXZG3X91BKRBXDNHEJCVKW","ns:uplink:01H5YXZG3ZTVCN6ZG22DTRD5F6","rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01H5YXZG3YM34J05XBMH8KEXC7","rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01H5YXZGAE19SK5WXQGSAY4RX2"],"received_at":"2023-07-22T13:52:43.342421706Z","uplink_message":{"session_key_id":"AYlu5XV3aMaeiMVAq8yISw==","f_port":2,"f_cnt":4188,"frm_payload":"NjsAAAAAAAA0/0E=","decoded_payload":{"ACI1_mA":0, "ACI2_mA":0, "%(#ff0000)[%(#ff0000)[***AVI1_V":13.883***]], "AVI2_V":0, "DI1_status":"L", "DI2_status":"H", "DO1_status":"H", "DO2_status":"H", "Hardware_mode":"LT22222", "RO1_status":"OFF", "RO2_status":"OFF", "Work_mode":"2ACI+2AVI"},"rx_metadata":[{"gateway_ids":{"gateway_id":"eui-503139534e7d4750","eui":"503139534E7D4750"},"time":"2023-07-22T13:52:35.686763Z","timestamp":938637580,"rssi":-109,"channel_rssi":-109,"snr":-15,"uplink_token":"CiIKIAoUZXVpLTUwMzEzOTUzNGU3ZDQ3NTASCFAxOVNOfUdQEIzyyb8DGgsIq77vpQYQ7pDNPyDgraPZqOuMAQ==","channel_index":3,"received_at":"2023-07-22T13:52:43.133384302Z"},{"gateway_ids":{"gateway_id":"eui-7076ff0056080b0f","eui":"7076FF0056080B0F"},"time":"2023-07-22T13:52:43.065Z","timestamp":2744651724,"rssi":-112,"channel_rssi":-112,"snr":-9.5,"uplink_token":"CiIKIAoUZXVpLTcwNzZmZjAwNTYwODBiMGYSCHB2/wBWCAsPEMyf4JwKGgsIq77vpQYQrK2YTCDg6fbP8OMjKgsIq77vpQYQwKT/Hg==","gps_time":"2023-07-22T13:52:43.065Z","received_at":"2023-07-22T13:52:42.856942638Z"}],"settings":{"data_rate":{"lora":{"bandwidth":125000, "spreading_factor":12, "coding_rate":"4/5"}}, "frequency":"867100000", "timestamp":938637580, "time":"2023-07-22T13:52:35.686763Z"},"received_at":"2023-07-22T13:52:43.135020669Z","consumed_airtime":"1.482752s","version_ids":{"brand_id":"dragino", "model_id":"lt22222-l", "hardware_version":"_unknown_hw_version_", "firmware_version":"1.5.6", "band_id":"EU_863_870"},"network_ids":{"net_id":"000013","tenant_id":"ttn","cluster_id":"eu1","cluster_address":"eu1.cloud.thethings.network"}}}
Der Payload ist immer gleich.
-
@gregors sagte in Payload Daten in Objekte schreiben:
Aber die Werte stehen immer noch auf 0
alle?
avi2_v ist 0
aci1_mA ebenfallsavi1_v hat 3 Asterisk davor u d wird deswegen nicht erkannt
-
@gregors sagte: Der Payload ist immer gleich.
"%(#ff0000)[AVI1_V":13.843]
ist ungültig und kann deshalb nicht geparst werden. In der zweiten Ausgabe sieht es noch schlimmer aus.
"%(#ff0000)[%(#ff0000)[***AVI1_V":13.883***]]
-
Habe zur Zeit nur den AVI1_V angeschlossen und DI2 gebrückt.
Alle anderen Eingänge sind offen.
Ist erstmal ein Test.@paul53 said in Payload Daten in Objekte schreiben:
ist ungültig und kann deshalb nicht geparst werden. In der zweiten Ausgabe sieht es noch schlimmer aus.
Bedeutet, ich kann es vergessen.
-
-
@gregors sagte in Payload Daten in Objekte schreiben:
%(#ff0000)[%(#ff0000)
sowas hier:
%(#ff0000)[%(#ff0000)
darf nicht im Payload enthalten sein und es ist mir ein Rätsel, wie das da rein kommt. Schau dir nochmal deinen Payload Formatter im TTN an. Da muss ein Fehler drin sein.
Am besten den von hier nehmen:
https://github.com/dragino/dragino-end-node-decoder/tree/main/LT22222-L
Ggf. auch eine ältere Version.