Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JSON zu Objekte

    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 zu Objekte

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

      @ente34 sagte: wofür könnte das gut sein (Speicherplatz sparen?)

      Ja.
      Bisher ist mir hier im Forum noch kein Script aufgefallen, das die asynchrone Version von getstate(id, callback) verwendet.

      1 Reply Last reply Reply Quote 0
      • E
        ente34 @Kellerassel75 last edited by

        @kellerassel75
        In Zeile 19 hast Du das obj in der Hand:

        setState(Nummer,el.caller)
        ....
        setState(Name,el.name)
        

        kannst Du Dir einen Anruf ausfiltern

        1 Reply Last reply Reply Quote 0
        • K
          Kellerassel75 last edited by Kellerassel75

          @ente34
          Also Haken ist raus! Fehler ist behoben!
          Hardware ist Raspi4. Versin ioBroker.admin 4.1.11!
          Falko

          16:06:40.026	info	javascript.0 (12175) Start javascript script.js.test
          16:06:40.064	info	javascript.0 (12175) script.js.test: registered 1 subscription and 1 schedule
          

          Unter Objekt ist dann nur "[]"!

          E 1 Reply Last reply Reply Quote 0
          • E
            ente34 @Kellerassel75 last edited by

            @kellerassel75
            Na ja, hast Du verpasste Anrufe heute?
            Sonst Zeile 18:

            if (1 || el_date === date)
            
            K 1 Reply Last reply Reply Quote 0
            • K
              Kellerassel75 @ente34 last edited by Kellerassel75

              16:17:09.144 error javascript.0 (12519) script.js.test compile failed: at script.js.test:45

              Sorry mein Fehler { vergessen!

              Nun schreibt er mir die ganze Tabelle nach javascript.0.telefon.missed_today.json!

              Im Log steht:

              javascript.0	2021-01-31 16:17:09.150	error	(12519) at processTicksAndRejections (internal/process/task_queues.js:97:5)
              javascript.0	2021-01-31 16:17:09.150	error	(12519) at runMicrotasks (<anonymous>)
              javascript.0	2021-01-31 16:17:09.150	error	(12519) at /opt/iobroker/node_modules/standard-as-callback/built/index.js:19:49
              javascript.0	2021-01-31 16:17:09.149	error	(12519) at tryCatcher (/opt/iobroker/node_modules/standard-as-callback/built/utils.js:11:23)
              javascript.0	2021-01-31 16:17:09.149	error	(12519) at /opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:616:17
              javascript.0	2021-01-31 16:17:09.149	error	(12519) at /opt/iobroker/node_modules/iobroker.javascript/main.js:1140:17
              javascript.0	2021-01-31 16:17:09.149	error	(12519) at /opt/iobroker/node_modules/iobroker.javascript/main.js:1559:17
              javascript.0	2021-01-31 16:17:09.146	error	(12519) at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:1503:37)
              javascript.0	2021-01-31 16:17:09.146	error	(12519) at createVM (/opt/iobroker/node_modules/iobroker.javascript/main.js:1280:28)
              javascript.0	2021-01-31 16:17:09.146	error	(12519) at Object.createScript (vm.js:261:10)
              javascript.0	2021-01-31 16:17:09.146	error	(12519) at new Script (vm.js:88:7)
              javascript.0	2021-01-31 16:17:09.145	error	(12519) SyntaxError: Missing catch or finally after try
              javascript.0	2021-01-31 16:17:09.145	error	(12519) ^
              javascript.0	2021-01-31 16:17:09.145	error	(12519) }
              javascript.0	2021-01-31 16:17:09.144	error	at script.js.test:45
              javascript.0	2021-01-31 16:17:09.144	error	(12519) script.js.test compile failed: 
              
              E 1 Reply Last reply Reply Quote 0
              • E
                ente34 @Kellerassel75 last edited by

                @kellerassel75
                Schon klar, mein Script filtert ja die verpassten Anrufe heute aus. Mit der "1||" bekommst Du wieder alle, um zu kontrollieren, ob alles soweit funktioniert.
                Alternativ kannst Du Dich auch selbst anrufen (nicht abheben!).

                K 1 Reply Last reply Reply Quote 0
                • K
                  Kellerassel75 @ente34 last edited by

                  @ente34
                  Gut! Er schreibt nun die Anrufe von heute! Das funktioniert!

                  Aber ich wollte richtige Datenpunte - Zahlen nicht JSON!

                  Also:
                  Datenpunt letzter - caller
                  Datenpunt letzter - date
                  Datenpunt letzter - name

                  Datenpunt vorletzter- caller
                  Datenpunt vorletzter- date
                  Datenpunt vorletzter- name

                  Falko

                  E paul53 2 Replies Last reply Reply Quote 0
                  • E
                    ente34 @Kellerassel75 last edited by

                    @kellerassel75
                    wie bereits oben gesagt, in Zeile 19 hast Du das obj in der Hand ...

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

                      @kellerassel75 sagte: richtige Datenpunte - Zahlen nicht JSON!

                      Du meinst Zeichenketten?

                      @kellerassel75 sagte in JSON zu Objekte:

                      Datenpunt vorletzter- caller
                      Datenpunt vorletzter- date
                      Datenpunt vorletzter- name

                      Wieweit sollen sie zurück reichen?

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

                        @paul53
                        Ich denke 4 Anrufe sollte reichen!

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

                          @kellerassel75 sagte: Solange nur ein Anruf ist:

                          Ist es wirklich so, dass es dann nur ein Objekt ohne Array-Klammern ist ?

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

                            @paul53
                            Nein das habe ich so geändert!

                            E paul53 2 Replies Last reply Reply Quote 0
                            • E
                              ente34 @Kellerassel75 last edited by

                              @kellerassel75

                              Kannst Du es dann selber erweitern?

                              //Script zur Zerlegung der JSON Daten in einzelne Datenpunkte
                              //Idee: Chaot
                              // Umsetzung: paul53
                              
                              var json = "tr-064.0.calllists.missed.json";
                              var Nummer = "javascript.0.Nummer";
                              var Datum = "javascript.0.Datum";
                              var Name = "javascript.0.Name";
                              const MaxAnrufe = 4;
                              
                              on(json, function(dp) {
                                 var obj = JSON.parse(dp.state.val);
                                 const i_end = obj.length < MaxAnrufe ? obj.length : MaxAnrufe;
                                 for (let i=0; i<i_end; i++) {
                                     const o = obj[i];
                                     console.warn(o);
                                     const dp_nummer = Nummer+"_"+i;
                                     console.warn(dp_nummer);
                                     setState(dp_nummer,o.caller);
                                 }
                              //    setState(Nummer, parseFloat(obj.caller));
                              //    setState(Datum, parseFloat(obj.date)); 
                              //    setState(Name, parseFloat(obj.name));  
                              
                              });
                              
                              for (let i=0; i<MaxAnrufe; i++) {
                                  const dp_nummer = Nummer+"_"+i;
                                  createState(dp_nummer);
                              }
                              
                              K 1 Reply Last reply Reply Quote 0
                              • K
                                Kellerassel75 @ente34 last edited by

                                @ente34
                                Danke! Ich werde es Versuchen!

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

                                  @kellerassel75 sagte: 4 Anrufe sollte reichen!

                                  Vorschlag (nicht getestet):

                                  const idJson = "tr-064.0.calllists.missed.json";
                                  const path = "0_userdata.0.Telefon.verpasst-";
                                  
                                  if(!existsState(path + '0.Nummer')) {
                                      for(let i = 0; i < 4; i++) {
                                          createState(path + i + '.Nummer', '', {type: 'string', name: 'Nummer', role: 'info'});
                                          createState(path + i + '.Datum', '', {type: 'string', name: 'Datum, Uhrzeit', role: 'info'}); 
                                          createState(path + i + '.Name', '', {type: 'string', name: 'Name', role: 'info'});
                                      }
                                  }
                                   
                                  on(idJson, function(dp) {
                                      let arr = JSON.parse(dp.state.val);
                                      let anzahl = arr.length;
                                      if(anzahl > 4) anzahl = 4;
                                      for(let i = 0; i < anzahl; i++) {
                                          setState(path + i + '.Nummer', arr[i].caller, true);
                                          setState(path + i + '.Datum', arr[i].date, true); 
                                          setState(path + i + '.Name', arr[i].name, true);
                                      }
                                  });
                                  
                                  E K 2 Replies Last reply Reply Quote 0
                                  • E
                                    ente34 @paul53 last edited by

                                    @paul53
                                    Mir gefällt es ...

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

                                      @paul53
                                      Danke passt!

                                      Echt Super! Ich bin begeistert! Danke an alle!
                                      Ich hätte nicht gedacht das ich so schnell Hilfe bekomme!
                                      Ihr seid Super! Macht weiter so!

                                      👏

                                      Ich werde hier noch viel lernen hoffe ich!

                                      😀

                                      Falko

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      833
                                      Online

                                      31.8k
                                      Users

                                      80.0k
                                      Topics

                                      1.3m
                                      Posts

                                      3
                                      26
                                      855
                                      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