Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [gelöst] Payload Daten in Objekte schreiben

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Payload Daten in Objekte schreiben

    This topic has been deleted. Only users with topic management privileges can see it.
    • GregorS
      GregorS last edited by GregorS

      Hallo,

      ich habe nun mein LoRaWan erfolgreich in Betrieb genommen.

      Folgendes Payload bekomme ich vom Gateway:

       ... /HandleUplink:01H5FA9TDQNKAJE50A140RA48P"],"received_at":"2023-07-16T12:20:13.367814098Z","uplink_message":{"session_key_id":"AYleIPJHcDVYfnq3XreUCg==","f_port":2,"f_cnt":144,"frm_payload":"NdgAAAAAAAA0/0E=","decoded_payload":{"ACI1_mA":0, "ACI2_mA":0, "AVI1_V":13.784, "AVI2_V":0, "DI1_status":"L", "DI2_status":"H", "DO1_status":"H", "DO2_status":"H", "Hardware_mode":"LT22222", "%(#ff0000)[RO1_status":"OFF", "RO2_status":"OFF]", "Work_mode":"2ACI+2AVI"},"rx_metadata":[{"gateway_ids":{"gateway_id":"eui-7076ff0056080b0f","eui":"7076FF0056080B0F"},"time":"2023-07-16T12:20:13.072Z","timestamp":3188114652,"rssi":cl: 
      ....
      

      Wie kann ich die Daten nach ACI1 ACI2 AVI1 AVI2 DI1 DI2 usw. in Blockly aufschlüsseln und in Variablen schreiben?
      Ausserdem benötige hierzu noch den Timestamp.
      JS kann ich leider nicht.

      Gruß
      Gregor

      Homoran paul53 2 Replies Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @GregorS last edited by

        @gregors sagte in Payload Daten in Objekte schreiben:

        Folgendes Payload bekomme ich vom Gateway:

        ist das vollständig?
        wo kommt das hin? Liegt es in einem Datenpunkt?

        GregorS Homoran 2 Replies Last reply Reply Quote 0
        • paul53
          paul53 @GregorS last edited by

          @gregors sagte: Wie kann ich die Daten nach ACI1 ACI2 AVI1 AVI2 DI1 DI2

          Schau mal hier.

          GregorS 1 Reply Last reply Reply Quote 0
          • GregorS
            GregorS @Homoran last edited by

            @homoran
            Nein, ist nicht vollständig. Habe nur die relevanten Infos rauskopiert.
            Sie liegt in einem JSON-File.

            1 Reply Last reply Reply Quote 0
            • GregorS
              GregorS @paul53 last edited by

              @paul53
              Schon gesehen, aber JS kann ich nicht.

              Homoran 1 Reply Last reply Reply Quote 0
              • Homoran
                Homoran Global Moderator Administrators @GregorS last edited by

                @gregors sagte in Payload Daten in Objekte schreiben:

                Sie liegt in einem JSON-File.

                und da kommt bei jedem Paket ein neues JSON, das ausgelesen werden soll?

                @gregors sagte in Payload Daten in Objekte schreiben:

                Habe nur die relevanten Infos rauskopiert.

                das nutzt nichts.
                Du musst ja beim Auseinandernehmen die gesamte JSON-Struktur berücksichtigen

                GregorS 1 Reply Last reply Reply Quote 0
                • GregorS
                  GregorS @Homoran last edited by

                  @homoran
                  Ok.
                  Hier das komplette JSON:

                  {"end_device_ids":{"device_id":"eui-xxxxxxxxxxxxxxxxxxx","application_ids":{"application_id":"gs-mg-dragino-01"},"dev_eui":"xxxxxxxxxxxxxxxxxxx","join_eui":"yyyyyyyyyyyyyyyyyyy","dev_addr":"zzzzzzzzz"},"correlation_ids":["as:up:01H5KSJPMRECPFW9X31X3RZVV2","gs:conn:01H4KAYPR4MRPH50CJE9DZ7YHC","gs:up:host:01H4KAYPRB2CYT22K4H1T83DQS","gs:uplink:01H5KSJPE94D98RBTM11WVQ1SY","ns:uplink:01H5KSJPEA3KC8FPJJSHNZ1QQX","rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01H5KSJPEAS7598TVH1ZPW5BJ8","rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01H5KSJPMQT2K85MP8BY0FY6SN"],"received_at":"2023-07-18T06:04:10.775410433Z","uplink_message":{"session_key_id":"AYleIPJHcDVYfnq3XreUCg==","f_port":2,"f_cnt":2648,"frm_payload":"NOwAAAAAAAA0/0E=","decoded_payload":{"ACI1_mA":0, "ACI2_mA":0, "AVI1_V":13.548, "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-7076ff0056080b0f","eui":"7076FF0056080B0F"},"time":"2023-07-18T06:04:10.444Z","timestamp":3101631076,"rssi":-116,"channel_rssi":-116,"snr":-9.5,"uplink_token":"CiIKIAoUZXVpLTcwNzZmZjAwNTYwODBiMGYSCHB2/wBWCAsPEOTE/MYLGgwI2tbYpQYQk7fJjwIgoK35vKLj9wEqDAja1tilBhCAztvTAQ==","channel_index":7,"gps_time":"2023-07-18T06:04:10.444Z","received_at":"2023-07-18T06:04:10.277432218Z"}],"settings":{"data_rate":{"lora":{"bandwidth":125000, "spreading_factor":12, "coding_rate":"4/5"}}, "frequency":"868500000", "timestamp":3101631076, "time":"2023-07-18T06:04:10.444Z"},"received_at":"2023-07-18T06:04:10.570656374Z","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"}}}
                  

                  Bei jeder neuen Meldung kommt ein neues JSON-File mit aktualisierten Daten.

                  Homoran 1 Reply Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators @GregorS last edited by

                    @gregors sagte in Payload Daten in Objekte schreiben:

                    Hier das komplette JSON:

                    und du willst immer
                    Screenshot_20230718-083410_Firefox.jpg
                    die decoded payload in einzelne Datepunkte schreiben?
                    es kommen auch immer nur diese Attribute an?

                    Marc Berg 1 Reply Last reply Reply Quote 0
                    • Marc Berg
                      Marc Berg Most Active @Homoran last edited by Marc Berg

                      @homoran @GregorS

                      Nur ein kleiner Hinweis, der LT22222 hat die unangenehme Eigenschaft, abhängig vom "work_mode" unterschiedliche Payloads bereitzustellen. Der mögliche Payload ist wesentlich größer, als der im Beispiel dargestellte!

                      Im "Exit Mode" ist es beispielweise dieser:

                            decode.Work_mode= "Exit mode"; 
                            decode.Mode_status= bytes[9] ? "True":"False";
                            decode.AV1L_flag= (bytes[0] &0x80)? "True":"False";
                            decode.AV1H_flag= (bytes[0] &0x40)? "True":"False";
                            decode.AV2L_flag= (bytes[0] &0x20)? "True":"False";
                            decode.AV2H_flag= (bytes[0] &0x10)? "True":"False";   
                            decode.AC1L_flag= (bytes[0] &0x08)? "True":"False";
                            decode.AC1H_flag= (bytes[0] &0x04)? "True":"False";
                            decode.AC2L_flag= (bytes[0] &0x02)? "True":"False";
                            decode.AC2H_flag= (bytes[0] &0x01)? "True":"False";   
                            decode.AV1L_status= (bytes[1] &0x80)? "True":"False";
                            decode.AV1H_status= (bytes[1] &0x40)? "True":"False";
                            decode.AV2L_status= (bytes[1] &0x20)? "True":"False";
                            decode.AV2H_status= (bytes[1] &0x10)? "True":"False";   
                            decode.AC1L_status= (bytes[1] &0x08)? "True":"False";
                            decode.AC1H_status= (bytes[1] &0x04)? "True":"False";
                            decode.AC2L_status= (bytes[1] &0x02)? "True":"False";
                            decode.AC2H_status= (bytes[1] &0x01)? "True":"False";   
                            decode.DI2_status= (bytes[2] &0x08)? "True":"False";
                            decode.DI2_flag= (bytes[2] &0x04)? "True":"False";
                            decode.DI1_status= (bytes[2] &0x02)? "True":"False";
                            decode.DI1_flag= (bytes[2] &0x01)? "True":"False";  
                      

                      paul53 Homoran 2 Replies Last reply Reply Quote 1
                      • Homoran
                        Homoran Global Moderator Administrators @Homoran last edited by Homoran

                        @homoran sagte in Payload Daten in Objekte schreiben:

                        Liegt es in einem Datenpunkt?

                        wenn ja, triggerst du auf diesen DP bei Änderung.
                        Zerlegst den Inhalt des DP mit Attribut von.. und dem "Pfad zum Wert", z.b. uplink_message.decoded_payload.ACI1_mA
                        das schreibst du dann in deinen selbst angelegten Datenpunkt.

                        Screenshot_20230718-090206_Firefox.jpg

                        ich habe hier das json als Text eingefügt und das Ergebnis als debug ausgegeben.
                        du müsstest mit dem Wert des JSON DP arbeiten und unten die ID des DP für di ACI1 einsetzen

                        1 Reply Last reply Reply Quote 1
                        • paul53
                          paul53 @Marc Berg last edited by

                          @marc-berg sagte: unterschiedliche Payloads

                          Dann sollte man prüfen.

                          Blockly_temp.JPG

                          Marc Berg 1 Reply Last reply Reply Quote 1
                          • Homoran
                            Homoran Global Moderator Administrators @Marc Berg last edited by

                            @marc-berg sorry, der cache hatte deine Antwort geschluckt. hab sie jetzt nur durch Pauls reponse gefunden.

                            1 Reply Last reply Reply Quote 0
                            • Marc Berg
                              Marc Berg Most Active @paul53 last edited by

                              @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.

                              GregorS 1 Reply Last reply Reply Quote 0
                              • GregorS
                                GregorS @Marc Berg last edited by

                                Danke.
                                Werde es mal die Tage probieren.

                                GregorS 1 Reply Last reply Reply Quote 0
                                • GregorS
                                  GregorS @GregorS last edited by

                                  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
                                  

                                  zzz_blockly.JPG

                                  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

                                  Homoran paul53 2 Replies Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators @GregorS last edited by

                                    @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.

                                    Blockly_temp.JPG

                                    GregorS 1 Reply Last reply Reply Quote 0
                                    • GregorS
                                      GregorS @Homoran last edited by GregorS

                                      @homoran

                                      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:
                                      zzz_struktur.JPG

                                      Ich sende keine Befehle, sondern empfange nur welche von LoRaWan.
                                      Muss ich trotzdem die Abfrage machen?
                                      Irgendwie bin ich dazu zu blöd.

                                      paul53 1 Reply Last reply Reply Quote 0
                                      • paul53
                                        paul53 @GregorS last edited by paul53

                                        @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:

                                        Blockly_temp.JPG

                                        Wert findet man unter "Trigger".

                                        1 Reply Last reply Reply Quote 0
                                        • paul53
                                          paul53 @GregorS last edited by paul53

                                          @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.

                                          1 Reply Last reply Reply Quote 0
                                          • GregorS
                                            GregorS last edited by

                                            @paul53

                                            Habe ich ausprobiert.
                                            Keine Fehler mehr, aber es wird nichts in die Objekte geschrieben.

                                            paul53 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            893
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            78
                                            3038
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo