Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Json-String 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

    Json-String in Objekte schreiben

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      ChrisChros @paul53 last edited by

      @paul53 sagte in Json-String in Objekte schreiben:

      Hichi_Wifi_IR

      Super danke, wie sieht das dann bei z.B. der Seriennummer aus, die sowohl aus Zahlen und Buchstaben besteht?

      createState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', 0, {type: 'mixed', name: 'Seriennummer', read: true, write: false, role: 'state'})
      
      paul53 T 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @ChrisChros last edited by paul53

        @chrischros sagte: Seriennummer

        type: 'string'
        
        1 Reply Last reply Reply Quote 1
        • T
          ticaki Developer @ChrisChros last edited by

          @chrischros

          eine Zeichenkette die keine nummer ist ist ein string.

          1 Reply Last reply Reply Quote 1
          • C
            ChrisChros last edited by ChrisChros

            Vielen Dank für die Unterstützung.
            Habe das jetzt noch etwas angepasst, sieht nun so aus:

            createState('0_userdata.0.Hichi_Wifi_IR.Bezug', 0, {type: 'number', name: 'Bezug', unit: 'kWh', read: true, write: false, role: 'value.energy'})
            createState('0_userdata.0.Hichi_Wifi_IR.Export', 0, {type: 'number', name: 'Export', unit: 'kWh', read: true, write: false, role: 'value.energy'})
            createState('0_userdata.0.Hichi_Wifi_IR.Leistung_aktuell', 0, {type: 'number', name: 'Leistung_aktuell', unit: 'W', read: true, write: false, role: 'value.energy'})
            createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L1', 0, {type: 'number', name: 'Leistung_L1', unit: 'W', read: true, write: false, role: 'value.energy'})
            createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L2', 0, {type: 'number', name: 'Leistung_L2', unit: 'W', read: true, write: false, role: 'value.energy'})
            createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L3', 0, {type: 'number', name: 'Leistung_L3', unit: 'W', read: true, write: false, role: 'value.energy'})
            createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L1', 0, {type: 'number', name: 'Spannung_L1', unit: 'V', read: true, write: false, role: 'value.energy'})
            createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L2', 0, {type: 'number', name: 'Spannung_L2', unit: 'V', read: true, write: false, role: 'value.energy'})
            createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L3', 0, {type: 'number', name: 'Spannung_L3', unit: 'V', read: true, write: false, role: 'value.energy'})
            createState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', 0, {type: 'string', name: 'Seriennummer', read: true, write: false, role: 'state'})
            
            on('mqtt.0.tasmota/discovery/3494548E85FC/sensors', function (dp) {
                let obj = {};
                //der try ist wichtig das der adapter nicht abschmiert bei einem fehler, hiermit pasen wird die json in ein object
                try {obj = JSON.parse(dp.state.val).sn.SM;
                } catch (e) {
                   console.error('Cannot parse: ' + dp.state.val);
                   return;
                }
               
                setState('0_userdata.0.Hichi_Wifi_IR.Bezug', obj['1_8_0'], true);
                setState('0_userdata.0.Hichi_Wifi_IR.Export', obj['2_8_0'], true);
                setState('0_userdata.0.Hichi_Wifi_IR.Leistung_aktuell', obj['16_7_0'], true);
                setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L1', obj['36_7_0'], true);
                setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L2', obj['56_7_0'], true);
                setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L3', obj['76_7_0'], true);
                setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L1', obj['32_7_0'], true);
                setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L2', obj['52_7_0'], true);
                setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L3', obj['72_7_0'], true);
                setState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', obj['96_1_0'], true);
            });
            

            Würde das soweit passen oder gibt es noch Fehler darin?

            T paul53 2 Replies Last reply Reply Quote 0
            • T
              ticaki Developer @ChrisChros last edited by

              @chrischros

              ich weiß gerade nicht ob obj im Fehlerfall {} oder undefinied enthält. Das solltest du checken in dem du einen absichtlich Fehler erzeugst. Ansonsten siehts gut aus.

              Noch was kleinkarriertes, wenn du rolen benutzten willst, hier findest du die richtigen: https://github.com/ioBroker/ioBroker.docs/blob/master/docs/en/dev/stateroles.md

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

                @chrischros sagte: gibt es noch Fehler darin?

                Der Initialisierungswert für die Seriennummer sollte ein Leerstring sein - keine 0.
                Die Rollen passen nicht. Leistung: "value.power", Spannung: "value.voltage".

                1 Reply Last reply Reply Quote 0
                • C
                  ChrisChros last edited by

                  habe das Skript angepasst:

                  createState('0_userdata.0.Hichi_Wifi_IR.Bezug', 0, {type: 'number', name: 'Bezug', unit: 'kWh', read: true, write: false, role: 'value.energy'})
                  createState('0_userdata.0.Hichi_Wifi_IR.Export', 0, {type: 'number', name: 'Export', unit: 'kWh', read: true, write: false, role: 'value.energy'})
                  createState('0_userdata.0.Hichi_Wifi_IR.Leistung_aktuell', 0, {type: 'number', name: 'Leistung_aktuell', unit: 'W', read: true, write: false, role: 'value.power'})
                  createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L1', 0, {type: 'number', name: 'Leistung_L1', unit: 'W', read: true, write: false, role: 'value.power'})
                  createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L2', 0, {type: 'number', name: 'Leistung_L2', unit: 'W', read: true, write: false, role: 'value.power'})
                  createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L3', 0, {type: 'number', name: 'Leistung_L3', unit: 'W', read: true, write: false, role: 'value.power'})
                  createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L1', 0, {type: 'number', name: 'Spannung_L1', unit: 'V', read: true, write: false, role: 'value.voltage'})
                  createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L2', 0, {type: 'number', name: 'Spannung_L2', unit: 'V', read: true, write: false, role: 'value.voltage'})
                  createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L3', 0, {type: 'number', name: 'Spannung_L3', unit: 'V', read: true, write: false, role: 'value.voltage'})
                  createState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', ' ', {type: 'string', name: 'Seriennummer', read: true, write: false, role: 'state'})
                  
                  on('mqtt.0.tasmota/discovery/3494548E85FC/sensors', function (dp) {
                      let obj = {};
                      //der try ist wichtig das der adapter nicht abschmiert bei einem fehler, hiermit pasen wird die json in ein object
                      try {obj = JSON.parse(dp.state.val).sn.SM;
                      } catch (e) {
                         console.error('Cannot parse: ' + dp.state.val);
                         return;
                      }
                     
                      setState('0_userdata.0.Hichi_Wifi_IR.Bezug', obj['1_8_0'], true);
                      setState('0_userdata.0.Hichi_Wifi_IR.Export', obj['2_8_0'], true);
                      setState('0_userdata.0.Hichi_Wifi_IR.Leistung_aktuell', obj['16_7_0'], true);
                      setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L1', obj['36_7_0'], true);
                      setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L2', obj['56_7_0'], true);
                      setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L3', obj['76_7_0'], true);
                      setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L1', obj['32_7_0'], true);
                      setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L2', obj['52_7_0'], true);
                      setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L3', obj['72_7_0'], true);
                      setState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', obj['96_1_0'], true);
                  });
                  

                  Ist der Leerstring so richtig eingepflegt?

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

                    @chrischros sagte: Ist der Leerstring so richtig eingepflegt?

                    Das ist zwar ein String mit einem Leerzeichen, ist aber auch in Ordnung.

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

                      @ticaki sagte: ob obj im Fehlerfall {} oder undefinied enthält.

                      Das spielt keine Rolle, da obj im Fehlerfall nicht ausgewertet wird.

                      T 1 Reply Last reply Reply Quote 0
                      • T
                        ticaki Developer @paul53 last edited by

                        @paul53
                        Recht hast du, hab das return übersehen.

                        1 Reply Last reply Reply Quote 0
                        • C
                          ChrisChros last edited by

                          Habe nun das Skript mal aktiviert, die neuen Objekte werden erstellt aber es sind nur "0" Werte hinterlegt.

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

                            @chrischros sagte: es sind nur "0" Werte hinterlegt.

                            Nur bis zum ersten Trigger, wenn das JSON so stimmt, wie angegeben.

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

                              @paul53
                              ok, habe festgestellt, dass das Json nicht wirklich aktualisiert wird. Muss ich mal schauen woran das liegt.

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              840
                              Online

                              31.8k
                              Users

                              80.0k
                              Topics

                              1.3m
                              Posts

                              4
                              23
                              1949
                              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