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.
    • Chris76e
      Chris76e @Chris76e last edited by Chris76e

      Habe vermutlich zuschnell das Programm am GS gestoppt.

      Habe es jetzt einwenig länger laufen lassen und dann wird richtig geschrieben.

        {
          "Start": "06.09.22 10:09",
          "Programm": "Auto 45-65°",
          "Ende": "06.09.22 10:11"
        },
        {
          "Start": "06.09.22 10:09",
          "Programm": "Auto 45-65°",
          "Ende": "06.09.22 10:11"
        },
        {
          "Start": "06.09.22 10:09",
          "Programm": "Auto 45-65°",
          "Ende": "06.09.22 10:11"
        },
        {
          "Start": "06.09.22 10:09",
          "Programm": "Auto 45-65°",
          "Ende": "06.09.22 10:11"
        },
        {
          "Start": "06.09.22 10:13",
          "Programm": "Eco 50°",
          "Ende": "06.09.22 10:20"
        }
      ]
      
      1 Reply Last reply Reply Quote 0
      • Chris76e
        Chris76e @paul53 last edited by

        @paul53

        Kannst du dir nochmal bitte die schleife anschauen? Irgendwas stimmt da doch nicht.

        Es werden weiter Dopelte Einträge gemacht, bzw. alte Einträge überschrieben.

        [
          {
            "Start": "06.09.22 09:28",
            "Ende": "06.09.22 09:28",
            "Programm": "Speed 45°"
          },
          {
            "Start": "06.09.22 09:28",
            "Ende": "06.09.22 09:28",
            "Programm": "Speed 45°"
          },
          {
            "Start": "06.09.22 09:49",
            "Programm": "Intensiv 70°",
            "Ende": "06.09.22 09:49"
          },
          {
            "Start": "06.09.22 09:49",
            "Programm": "Intensiv 70°",
            "Ende": "06.09.22 09:49"
          },
          {
            "Start": "06.09.22 10:09",
            "Programm": "Auto 45-65°",
            "Ende": "06.09.22 10:11"
          },
          {
            "Start": "06.09.22 10:09",
            "Programm": "Auto 45-65°",
            "Ende": "06.09.22 10:11"
          },
          {
            "Start": "06.09.22 10:09",
            "Programm": "Auto 45-65°",
            "Ende": "06.09.22 10:11"
          },
          {
            "Start": "06.09.22 10:09",
            "Programm": "Auto 45-65°",
            "Ende": "06.09.22 10:11"
          },
          {
            "Start": "06.09.22 10:31",
            "Programm": "Eco 50°",
            "Ende": "06.09.22 15:08"
          },
          {
            "Start": "06.09.22 10:31",
            "Programm": "Eco 50°",
            "Ende": "06.09.22 15:08"
          }
        ]
        
        paul53 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @Chris76e last edited by

          @chris76e sagte: Es werden weiter Dopelte Einträge gemacht

          Das kann nur am Verhalten des Datenpunktes "homeconnect.0.011040388898000963.status.BSH_Common_Status_OperationState" liegen". Logge mal den Wert bei jedem Trigger-Ereignis.

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

            @paul53

            Hier der Eintrag aus dem Log

            1. Start war noch ohne log vom Ende
            20:19:34.230	info	javascript.0 (649) script.js.common.JSON.JASONSP: BSH.Common.EnumType.OperationState.Run
            20:19:34.231	info	javascript.0 (649) script.js.common.JSON.JASONSP: Run
            20:19:34.231	info	javascript.0 (649) script.js.common.JSON.JASONSP: Dishcare.Dishwasher.Program.MachineCare
            20:19:34.231	info	javascript.0 (649) script.js.common.JSON.JASONSP: Maschinenpflege
            20:27:19.463	info	javascript.0 (649) Stop script script.js.common.JSON.JASONSP
            20:27:19.466	info	javascript.0 (649) Start javascript script.js.common.JSON.JASONSP
            20:27:19.479	info	javascript.0 (649) script.js.common.JSON.JASONSP: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
            20:28:02.079	info	javascript.0 (649) script.js.common.JSON.JASONSP: BSH.Common.EnumType.OperationState.Run
            20:28:02.081	info	javascript.0 (649) script.js.common.JSON.JASONSP: Run
            20:28:02.082	info	javascript.0 (649) script.js.common.JSON.JASONSP: Dishcare.Dishwasher.Program.Quick45
            20:28:02.082	info	javascript.0 (649) script.js.common.JSON.JASONSP: Speed 45°
            20:30:16.619	info	javascript.0 (649) script.js.common.JSON.JASONSP: BSH.Common.EnumType.OperationState.Aborting
            20:30:16.619	info	javascript.0 (649) script.js.common.JSON.JASONSP: Aborting
            20:32:02.233	info	javascript.0 (649) script.js.common.JSON.JASONSP: BSH.Common.EnumType.OperationState.Run
            20:32:02.234	info	javascript.0 (649) script.js.common.JSON.JASONSP: Run
            20:32:02.234	info	javascript.0 (649) script.js.common.JSON.JASONSP: Dishcare.Dishwasher.Program.MachineCare
            20:32:02.234	info	javascript.0 (649) script.js.common.JSON.JASONSP: Maschinenpflege
            20:33:17.902	info	javascript.0 (649) script.js.common.JSON.JASONSP: BSH.Common.EnumType.OperationState.Aborting
            20:33:17.902	info	javascript.0 (649) script.js.common.JSON.JASONSP: Aborting
            
            

            Und so sieht die JSON aus

             {
                "Start": "06.09.22 20:19",
                "Programm": "Maschinenpflege",
                "Ende": "06.09.22 20:25"
              },
              {
                "Start": "06.09.22 20:32",
                "Programm": "Maschinenpflege",
                "Ende": "06.09.22 20:33"
              },
              {
                "Start": "06.09.22 20:32",
                "Programm": "Maschinenpflege",
                "Ende": "06.09.22 20:33"
              }
            

            Hier stand auch mal zwischenzeitlich der Eintrag von 20:28 mit Speed 45°

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

              @chris76e
              Aus dem Log sehe ich, dass "Run" nur als kurzer Impuls gemeldet wird und danach das Programm, beendet durch "Aborting". Dann versuche es mal so:

              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.active.BSH_Common_Root_ActiveProgram';
               
              var table = [];
              if(getState(idTable).val) table = JSON.parse(getState(idTable).val);
              var obj = {};
               
              on(idStatus, function(dp) {
                  if(dp.oldState.val == 'BSH.Common.EnumType.OperationState.Run') {
                      obj.Start = formatDate(new Date(), 'DD.MM.YY hh:mm');
                      obj.Programm = dp.common.states[dp.state.val];
                  } else if (dp.state.val == 'BSH.Common.EnumType.OperationState.Aborting') {
                      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

                obj.Programm = dp.common.states[dp.state.val];
                

                Wo kommt jetzt der DP herr? Fehlt da nicht was?

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

                  @chris76e sagte: Wo kommt jetzt der DP herr?

                  Aus dem Trigger: Enthält den Zustand "laufendes Programm" nach "Run".

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

                    @paul53

                    Mit der Version wird nichts geschrieben, bekomme auch keine Fehlermeldung.

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

                      @chris76e sagte: Mit der Version wird nichts geschrieben

                      Wurde obj außerhalb des Triggers deklariert? Habe ich oben korrigiert.

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

                        @paul53
                        ist geändert, aber macht immer noch nichts.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            748
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

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