Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Erster Versuch ein JSON zu erzeugen

    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

    Erster Versuch ein JSON zu erzeugen

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

      @chris76e sagte: ist geändert, aber macht immer noch nichts.

      @chris76e sagte in Erster Versuch ein JSON zu erzeugen:

      Hier der Eintrag aus dem Log

      Das ist wirklich der Wert des Trigger-Datenpunktes. Es sind zumindest zwei Log-Ausgaben. Logge mal nur den Trigger-Wert:

      on(idStatus, function(dp) {
          log(dp.state.val);
      

      Alle anderen Logs kommentiere aus.

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

        @paul53

        log sieht so aus

        23:48:20.661	info	javascript.0 (649) script.js.common.JSON.JASONTest: BSH.Common.EnumType.OperationState.Ready
        23:48:25.593	info	javascript.0 (649) script.js.common.JSON.JASONTest: BSH.Common.EnumType.OperationState.Run
        23:49:37.318	info	javascript.0 (649) script.js.common.JSON.JASONTest: BSH.Common.EnumType.OperationState.Aborting
        23:50:02.051	info	javascript.0 (649) script.js.common.JSON.JASONTest: BSH.Common.EnumType.OperationState.Ready
        

        Wird aber nichts geschrieben

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

          @chris76e
          Habe mich hier durch die weiteren Logs täuschen lassen, da sie nicht gekennzeichnet sind.
          Weshalb das Skript doppelte Einträge erzeugt, erschließt sich mir bisher nicht. Deshalb erzeuge bitte Logs mit Datenpunkt-Kennung:

          const idTable = '0_userdata.0.JSON.Spülmaschiene'; // ID JSON-Tabelle
          const idStatus = 'homeconnect.0.011040388898000963.status.BSH_Common_Status_OperationState';
          const idProg = 'homeconnect.0.011040388898000963.programs.selected.BSH_Common_Root_SelectedProgram';
          const idAktiv = 'homeconnect.0.011040388898000963.programs.active.BSH_Common_Root_ActiveProgram';
          
          var table = [];
          if(getState(idTable).val) table = JSON.parse(getState(idTable).val);
          var obj = {};
          
          on(idAktiv, function(dp) {
              log('Aktiv: ' + dp.state.val);
          });
          
          on(idStatus, function(dp) {
              log('gewählt: ' + getState(idProg).val);
              log('alter Status: ' + dp.oldState.val);
              log('neuer Status: ' + dp.state.val);
              
              if(dp.state.val == 'BSH.Common.EnumType.OperationState.Run') {
                  obj.Start = formatDate(new Date(), 'DD.MM.YY hh:mm'); 
                  obj.Programm = getObject(idProg).common.states[getState(idProg).val];
              } else if(dp.oldState.val == 'BSH.Common.EnumType.OperationState.Run') {
                  obj.Ende = formatDate(new Date(), 'DD.MM.YY hh:mm');
                  table.push(obj);
                  if(table.length > 10) table.shift();
                  setState(idTable, JSON.stringify(table), true);
              }
          });
          
          Chris76e 1 Reply Last reply Reply Quote 0
          • Chris76e
            Chris76e @paul53 last edited by

            @paul53

            Hier der log von 2 Abgebrochenen Durchgänge:

            08:58:09.745	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: gewählt: Dishcare.Dishwasher.Program.Eco50
            08:58:09.745	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: alter Status: BSH.Common.EnumType.OperationState.Ready
            08:58:09.746	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: neuer Status: BSH.Common.EnumType.OperationState.Run
            08:58:09.746	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: Dishcare.Dishwasher.Program.Eco50
            08:58:09.746	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: Eco 50°
            08:58:09.918	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: aktiv: Dishcare.Dishwasher.Program.Eco50
            09:00:36.446	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: aktiv: null
            09:00:36.847	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: gewählt: Dishcare.Dishwasher.Program.Eco50
            09:00:36.847	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: alter Status: BSH.Common.EnumType.OperationState.Run
            09:00:36.847	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: neuer Status: BSH.Common.EnumType.OperationState.Aborting
            09:01:03.132	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: gewählt: Dishcare.Dishwasher.Program.Eco50
            09:01:03.132	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: alter Status: BSH.Common.EnumType.OperationState.Aborting
            09:01:03.133	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: neuer Status: BSH.Common.EnumType.OperationState.Ready
            09:09:34.041	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: gewählt: Dishcare.Dishwasher.Program.Quick65
            09:09:34.042	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: alter Status: BSH.Common.EnumType.OperationState.Ready
            09:09:34.042	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: neuer Status: BSH.Common.EnumType.OperationState.Run
            09:09:34.042	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: Dishcare.Dishwasher.Program.Quick65
            09:09:34.042	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: Speed 65°
            09:09:34.107	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: aktiv: Dishcare.Dishwasher.Program.Quick65
            09:10:56.316	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: aktiv: null
            09:10:56.480	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: gewählt: Dishcare.Dishwasher.Program.Quick65
            09:10:56.480	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: alter Status: BSH.Common.EnumType.OperationState.Run
            09:10:56.480	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: neuer Status: BSH.Common.EnumType.OperationState.Aborting
            09:11:20.331	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: gewählt: Dishcare.Dishwasher.Program.Quick65
            09:11:20.332	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: alter Status: BSH.Common.EnumType.OperationState.Aborting
            09:11:20.332	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: neuer Status: BSH.Common.EnumType.OperationState.Ready
            
            

            So sieht die JSON nach dem 1. aus:

            [
              {
                "Start": "06.09.22 23:48",
                "Programm": "Intensiv 70°",
                "Ende": "06.09.22 23:49"
              },
              {
                "Start": "07.09.22 08:58",
                "Programm": "Eco 50°",
                "Ende": "07.09.22 09:00"
              }
            ]
            

            und so nach dem 2.

            [
              {
                "Start": "06.09.22 23:48",
                "Programm": "Intensiv 70°",
                "Ende": "06.09.22 23:49"
              },
              {
                "Start": "07.09.22 09:09",
                "Programm": "Speed 65°",
                "Ende": "07.09.22 09:10"
              },
              {
                "Start": "07.09.22 09:09",
                "Programm": "Speed 65°",
                "Ende": "07.09.22 09:10"
              }
            ]
            
            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @Chris76e last edited by paul53

              @chris76e
              Aus dem Log erkennt man, dass "ActiveProgram" zu Beginn und zu Ende triggert - am Ende mit Wert null. Damit kann man das Programm vereinfachen:

              const idTable = '0_userdata.0.JSON.Spülmaschiene'; // ID JSON-Tabelle
              // const idStatus = 'homeconnect.0.011040388898000963.status.BSH_Common_Status_OperationState';
              // const idProg = 'homeconnect.0.011040388898000963.programs.selected.BSH_Common_Root_SelectedProgram';
              const idAktiv = 'homeconnect.0.011040388898000963.programs.active.BSH_Common_Root_ActiveProgram';
              
              var table = [];
              if(getState(idTable).val) table = JSON.parse(getState(idTable).val);
              var obj = {};
              
              on(idAktiv, function(dp) {
                  if(dp.state.val) {
                      obj = {};
                      obj.Start = formatDate(new Date(), 'DD.MM.YY hh:mm'); 
                      obj.Programm = dp.common.states[dp.state.val];
                  } else {
                      obj.Ende = formatDate(new Date(), 'DD.MM.YY hh:mm');
              //        log(table);
                      table.push(obj);
                      if(table.length > 10) table.shift();
                      setState(idTable, JSON.stringify(table), true);
              //        log(table);
                  }
              });
              
              Chris76e 1 Reply Last reply Reply Quote 0
              • Chris76e
                Chris76e @paul53 last edited by

                @paul53

                Wird immer noch überschrieben....

                10:20:10.018	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: [{'Start':'06.09.22 23:48','Programm':'Intensiv 70°','Ende':'06.09.22 23:49'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'}]
                10:20:10.018	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: [{'Start':'06.09.22 23:48','Programm':'Intensiv 70°','Ende':'06.09.22 23:49'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'},{'Start':'07.09.22 10:16','Programm':'Eco 50°','Ende':'07.09.22 10:20'}]
                10:23:40.013	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: [{'Start':'06.09.22 23:48','Programm':'Intensiv 70°','Ende':'06.09.22 23:49'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'},{'Start':'07.09.22 10:21','Programm':'Eco 50°','Ende':'07.09.22 10:23'}]
                10:23:40.013	info	javascript.0 (3489476) script.js.common.JSON.JASONSP: [{'Start':'06.09.22 23:48','Programm':'Intensiv 70°','Ende':'06.09.22 23:49'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'},{'Start':'07.09.22 10:21','Programm':'Eco 50°','Ende':'07.09.22 10:23'},{'Start':'07.09.22 10:21','Programm':'Eco 50°','Ende':'07.09.22 10:23'}]
                
                paul53 2 Replies Last reply Reply Quote 0
                • paul53
                  paul53 @Chris76e last edited by paul53

                  @chris76e sagte: Wird immer noch überschrieben....

                  Muss ich noch mal schauen.

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

                    @paul53

                    Okay, kann ich aber erst heute Abend weiter testen, muss gleich zur Arbeit....

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

                      @chris76e sagte: Wird immer noch überschrieben....

                      Habe hier Zeile 12 eingefügt:

                              obj = {};
                      
                      Chris76e 2 Replies Last reply Reply Quote 0
                      • Chris76e
                        Chris76e @paul53 last edited by

                        @paul53

                        Vielen Dank, funktioniert jetzt.
                        Habe jetzt einiges lernen können hier.

                        👏 👏 👏 👍 👍 👍

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

                          @paul53

                          Brauche nochmal deine Hilfe. Möchte jetzt noch den Stromverbrauch anzeigen lassen. Habe den Wert bei Start und Ende. Wie kann ich jetzt damit rechnen?

                          const idTable = '0_userdata.0.JSON.Spülmaschiene'; // ID JSON-Tabelle
                          // const idStatus = 'homeconnect.0.011040388898000963.status.BSH_Common_Status_OperationState';
                          // const idProg = 'homeconnect.0.011040388898000963.programs.selected.BSH_Common_Root_SelectedProgram';
                          const idAktiv = 'homeconnect.0.011040388898000963.programs.active.BSH_Common_Root_ActiveProgram';
                          const idVerbrauch = 'sonoff.0.Spuehlmaschine.ENERGY_Total';
                          
                          var table = [];
                          if(getState(idTable).val) table = JSON.parse(getState(idTable).val);
                          var obj = {};
                          
                          on(idAktiv, function(dp) {
                              if(dp.state.val) {
                                  obj = {};
                                  obj.Start = formatDate(new Date(), 'MM.DD.YY hh:mm');
                                  obj.StartUhr = formatDate(new Date(), 'hh:mm'); 
                                  obj.Programm = dp.common.states[dp.state.val];
                                  obj.StartVerbrauch = getState(idVerbrauch).val;
                              } else {
                                  obj.Ende = formatDate(new Date(), 'MM.DD.YY hh:mm');
                                  obj.EndeUhr = formatDate(new Date(), 'hh:mm');
                                  obj.EndVerbrauch = getState(idVerbrauch).val;
                                  log(table);
                                  table.push(obj);
                                  if(table.length > 10) table.shift();
                                  setState(idTable, JSON.stringify(table), true);
                                  log(table);
                              }
                          });
                          
                           {
                              "Start": "10.12.22 20:00",
                              "StartUhr": "20:00",
                              "Programm": "Eco 50°",
                              "StartVerbrauch": 212.794,
                              "Ende": "10.12.22 20:08",
                              "EndeUhr": "20:08",
                              "EndVerbrauch": 212.796
                            }
                          
                          paul53 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @Chris76e last edited by paul53

                            @Chris76e

                            Du möchtest die Differenz Endverbrauch - Startverbrauch?

                            var obj = {};
                            var StartVerbrauch = getState(idVerbrauch).val;
                             
                            on(idAktiv, function(dp) {
                                if(dp.state.val) {
                                    obj = {};
                                    obj.Start = formatDate(new Date(), 'MM.DD.YY hh:mm');
                                    obj.StartUhr = formatDate(new Date(), 'hh:mm'); 
                                    obj.Programm = dp.common.states[dp.state.val];
                                    StartVerbrauch = getState(idVerbrauch).val;
                                } else {
                                    obj.Ende = formatDate(new Date(), 'MM.DD.YY hh:mm');
                                    obj.EndeUhr = formatDate(new Date(), 'hh:mm');
                                    obj.Verbrauch = getState(idVerbrauch).val - StartVerbrauch;
                                    log(table);
                                    table.push(obj);
                                    if(table.length > 10) table.shift();
                                    setState(idTable, JSON.stringify(table), true);
                                    log(table);
                                }
                            });
                            
                            Chris76e 1 Reply Last reply Reply Quote 0
                            • Chris76e
                              Chris76e @paul53 last edited by

                              @paul53

                              Ja, das klappt auch. Danke

                              Jetzt habe ich noch versucht die Dauer zu berrechnen, bekomme auch einen Wert in ms. Wie kann ich das in hh:mm:ss umschreiben?

                              const idTable = '0_userdata.0.JSON.Spülmaschiene'; // ID JSON-Tabelle
                              // const idStatus = 'homeconnect.0.011040388898000963.status.BSH_Common_Status_OperationState';
                              // const idProg = 'homeconnect.0.011040388898000963.programs.selected.BSH_Common_Root_SelectedProgram';
                              const idAktiv = 'homeconnect.0.011040388898000963.programs.active.BSH_Common_Root_ActiveProgram';
                              const idVerbrauch = 'sonoff.0.Spuehlmaschine.ENERGY_Total';
                              
                              var table = [];
                              if(getState(idTable).val) table = JSON.parse(getState(idTable).val);
                              var obj = {};
                              var StartVerbrauch = getState(idVerbrauch).val;
                              var startDate = new Date();
                              var endDate   = new Date();
                              
                              
                              on(idAktiv, function(dp) {
                                  if(dp.state.val) {
                                      obj = {};
                                      obj.Start = formatDate(new Date(), 'MM.DD.YY hh:mm');
                                      obj.StartUhr = formatDate(new Date(), 'hh:mm'); 
                                      obj.Programm = dp.common.states[dp.state.val];
                                      StartVerbrauch = getState(idVerbrauch).val;
                                      startDate = new Date();
                                      
                                  } else {
                                      obj.Ende = formatDate(new Date(), 'MM.DD.YY hh:mm');
                                      obj.EndeUhr = formatDate(new Date(), 'hh:mm');
                                      obj.Verbrauch = getState(idVerbrauch).val - StartVerbrauch;
                                      endDate   = new Date();
                                      obj.Dauer = endDate - startDate, 'hh:mm:ss';
                                      log(table);
                                      table.push(obj);
                                      if(table.length > 10) table.shift();
                                      setState(idTable, JSON.stringify(table), true);
                                      log(table);
                                  }
                              });
                              
                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              606
                              Online

                              31.8k
                              Users

                              80.0k
                              Topics

                              1.3m
                              Posts

                              2
                              35
                              1170
                              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