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.
    • E
      ente34 @Kellerassel75 last edited by

      @kellerassel75
      Macht nichts, ich bin auch noch nicht lange dabei.

      Jeder Anruf einzeln, Du hast aber nur drei DP für einen Anruf.
      Hier mein Script, dass die verpassten Anrufe heute ausfiltert:

      'use strict';
      
      const id_telefon_missed = 'tr-064.0.calllists.missed.json';
      const id_telefon_today  = 'javascript.0.telefon.missed_today.json';
      
      function filterJsonByDate(state) {
          console.debug("filterJsonByDate");
          if (state && state.val) {
              const tab = state.val;
              console.debug(tab);
              try {
                  let obj = JSON.parse(tab);
                  let date = formatDate(new Date(), 'DD.MM.YY');
                  let result = [];
                  for (const el of obj) {
                      const el_date = el.date.toString().substring(0, 8);
                      console.debug(el_date + " === " + date + " ?");
                      if (el_date === date) {
                          console.debug(el);
                          result.push(el);
                      }
                  }
                  let json = JSON.stringify(result);
                  setState(id_telefon_today, json);
                  console.debug(json);
              } catch (e) {
                  console.error(e);
              }
          }
      }
      
      //Script Start
      if (!existsState(id_telefon_today)) {
          createState(id_telefon_today, JSON.stringify([]), () => {
              filterJsonByDate(getState(id_telefon_missed));
          });
      } else {
          filterJsonByDate(getState(id_telefon_missed));
      }
      
      
      on({ id: id_telefon_missed, change: "ne" }, function (obj) {
          console.warn(obj.state);
          filterJsonByDate(obj.state);
      });
      
      
      //00:00 Neuer Tag, Telefonliste updaten
      schedule("00 00 * * *", function () {
          filterJsonByDate(getState(id_telefon_missed));
      });
      

      Wenn Du willst, kann ich Dir das vis-Widget auch raussuchen.

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

        @kellerassel75
        Hier das widget
        JSON als Tabelle ist hier beschrieben

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

          @ente34
          Danke für die schnelle Antwort!

          Fehler:

          javascript.0	2021-01-31 14:45:21.675	warn	(27920) script.js.test: {'val':'[{\'id\':4097,\'type\':\'2\',\'caller\':\'****\',\'called\':\'SIP: ****\',\'callednumber\':\'****\',\'name\':\'\',\'numbertype\':\'sip\',\'device\':\'\',\'port\':\'-1\
          javascript.0	2021-01-31 14:43:58.384	error	(27920) script.js.test: Please disable that setting or use "getState" with a callback, e.g.: getState("tr-064.0.calllists.missed.json", (err, state) => { ... });
          javascript.0	2021-01-31 14:43:58.383	error	(27920) script.js.test: The "getState" method cannot be used synchronously, because the adapter setting "Do not subscribe to all states on start" is enabled.
          

          Und ich wollte richtige Datenpunte - Zahlen nicht JSON!

          Falko

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

            @kellerassel75
            Wo startest Du Dein Script?
            Was für eine Hardware verwendest Du? Version IoBroker?

            Bei mir kommt die Ausgabe unter dem javascript adapter:

            javascript.0	2021-01-31 15:05:09.774	info	(16568) script.js.Anruf: registered 1 subscription and 1 schedule
            javascript.0	2021-01-31 15:05:09.758	info	(16568) Start javascript script.js.Anruf```
            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @Kellerassel75 last edited by

              @kellerassel75 sagte: because the adapter setting "Do not subscribe to all states on start" is enabled.

              Haken in der Konfiguration der Javascript-Instanz entfernen!

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

                @paul53
                Danke!
                Was bewirkt der Haken?

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

                  @ente34 sagte: Was bewirkt der Haken?

                  Der Haken bewirkt, dass Zustände nicht in der JS-Instanz gepuffert werden, und deshalb die synchrone Version von

                  var state = getState(id); // synchrone Version ohne Callback
                  

                  nicht verwendet werden kann.

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

                    @paul53
                    Fast verstanden, wofür könnte das gut sein (Speicherplatz sparen?)

                    paul53 1 Reply Last reply Reply Quote 0
                    • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            806
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

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