NEWS
[gelöst] Payload Daten in Objekte schreiben
-
-
@marc-berg sorry, der cache hatte deine Antwort geschluckt. hab sie jetzt nur durch Pauls reponse gefunden.
-
@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.
-
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***]]