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 paul53

      @chris76e sagte: JSON soll immer dann erstellt werden wenn der DP "homeconnect.0.011040388898000963.status.BSH_Common_Status_OperationState" auf Run steht.

      Nicht, wenn "Run" beendet wird?
      Vorschlag;

      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);
       
      on(idStatus, function(dp) {
          if(dp.state.val == 'BSH.Common.EnumType.OperationState.Run') {
              var obj = {};
              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 2 Replies Last reply Reply Quote 0
      • Chris76e
        Chris76e @paul53 last edited by

        @paul53

        Danke, werde ich testen.

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

          @paul53

          Script funktioniert leider nicht. Es wird kein JSON erzeugt.

          Programm ist gerade fertig und im Script fenster kommt folgende Meldung

          22:34:34.168	error	javascript.0 (649) at Object.<anonymous> (script.js.common.JSON.JASONSP:29:18)
          

          Und das im Javascript Log

          javascript.0
          	2022-09-05 23:17:09.968	error	at processImmediate (node:internal/timers:466:21)
          javascript.0
          	2022-09-05 23:17:09.967	error	at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5909:56)
          javascript.0
          	2022-09-05 23:17:09.967	error	at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:596:29)
          javascript.0
          	2022-09-05 23:17:09.967	error	at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1212:38)
          javascript.0
          	2022-09-05 23:17:09.967	error	at Object.<anonymous> (script.js.common.JSON.JASONSP:29:18)
          javascript.0
          	2022-09-05 23:17:09.967	error	Error in callback: TypeError: Cannot set properties of undefined (setting 'Ende')
          

          Im Javascript Log konnte ich sehen wie die Endzeit immer neu geschrieben wurden ist

          javascript.0
          	2022-09-05 22:30:23.361	info	script.js.common.EndzeitGeschirr: 1662410063361
          javascript.0
          	2022-09-05 22:29:23.365	info	script.js.common.EndzeitGeschirr: 1662410063365
          

          Wenn ich den Wert aus dem Im DP homeconnect.0.011040388898000963.status.BSH_Common_Status_OperationState herrauskopiere steht da nur "Run" als es lief und jetzt "Inactive"

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

            @chris76e sagte: Cannot set properties of undefined (setting 'Ende')

            Ist Zeile 14 in meinem Vorschlag jetzt Zeile 29?
            Schiebe mal die Deklaration von obj (Zeile 10) vor den Trigger.

            @chris76e sagte in Erster Versuch ein JSON zu erzeugen:

            wie die Endzeit immer neu geschrieben wurden ist

            Das ist ein anderes Skript.

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

              @paul53

              Habe das Script jetzt so geändert:

              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.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);
                  }
              });
              

              Dann wird das in JSON geschrieben, fehlt also noch das Programm

              [
                {
                  "Start": "05.09.22 23:37",
                  "Ende": "05.09.22 23:38"
                }
              ]
              
              
              

              Die Zeilen hatten sich beim Kopieren vom Script geändert, wurde immer eine leerzeile eingefügt, ist jetzt geändert.

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

                @chris76e sagte: fehlt also noch das Programm

                Ohne Error- oder Warn-Log?
                Füge mal Logs ein (hinter Zeile 11):

                        log(getState(idProg).val);
                        log(getObject(idProg).common.states[getState(idProg).val]);
                
                Chris76e 2 Replies Last reply Reply Quote 0
                • Chris76e
                  Chris76e @paul53 last edited by

                  @paul53

                  Wenn Spülmaschiene Startet kommt das im Log

                  00:23:34.096	info	javascript.0 (649) script.js.common.JSON.JASONSP: null
                  00:23:34.097	info	javascript.0 (649) script.js.common.JSON.JASONSP: undefined
                  
                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Chris76e last edited by

                    @chris76e sagte: kommt das im Log

                    Dann verschiebe mal Zeile 11 unter Zeile 12 (else if).

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

                      @paul53

                      Da ist das selbe....

                      00:43:45.727	info	javascript.0 (649) script.js.common.JSON.JASONSP: null
                      00:43:45.728	info	javascript.0 (649) script.js.common.JSON.JASONSP: undefined
                      
                      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.state.val == 'BSH.Common.EnumType.OperationState.Run') {
                              obj.Start = formatDate(new Date(), 'DD.MM.YY hh:mm');   
                          } else if(dp.oldState.val == 'BSH.Common.EnumType.OperationState.Run') {
                              obj.Programm = getObject(idProg).common.states[getState(idProg).val];
                              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);
                      
                              log(getState(idProg).val);
                              log(getObject(idProg).common.states[getState(idProg).val]);
                          }
                      });
                      
                      1 Reply Last reply Reply Quote 0
                      • Chris76e
                        Chris76e last edited by

                        Vieleicht hilft das dir noch weiter, die Objektdaten von

                        {
                          "type": "state",
                          "common": {
                            "name": "BSH_Common_Root_ActiveProgram",
                            "type": "string",
                            "role": "indicator",
                            "write": true,
                            "read": true,
                            "states": {
                              "Dishcare.Dishwasher.Program.Intensiv70": "Intensiv 70°",
                              "Dishcare.Dishwasher.Program.Auto2": "Auto 45-65°",
                              "Dishcare.Dishwasher.Program.Eco50": "Eco 50°",
                              "Dishcare.Dishwasher.Program.Quick45": "Speed 45°",
                              "Dishcare.Dishwasher.Program.PreRinse": "Vorspülen",
                              "Dishcare.Dishwasher.Program.Quick65": "Speed 65°",
                              "Dishcare.Dishwasher.Program.MachineCare": "Maschinenpflege"
                            },
                            "custom": {
                              "history.0": {
                                "enabled": true,
                                "aliasId": "",
                                "debounceTime": 0,
                                "blockTime": 0,
                                "changesOnly": false,
                                "changesRelogInterval": 0,
                                "changesMinDelta": 0,
                                "ignoreBelowNumber": "",
                                "disableSkippedValueLogging": false,
                                "retention": 31536000,
                                "customRetentionDuration": 365,
                                "maxLength": 10,
                                "enableDebugLogs": false,
                                "debounce": 0
                              }
                            }
                          },
                          "native": {},
                          "_id": "homeconnect.0.011040388898000963.programs.active.BSH_Common_Root_ActiveProgram",
                          "acl": {
                            "object": 1636,
                            "state": 1636,
                            "owner": "system.user.admin",
                            "ownerGroup": "system.group.administrator"
                          },
                          "from": "system.adapter.homeconnect.0",
                          "user": "system.user.admin",
                          "ts": 1662416101983
                        }
                        
                        1 Reply Last reply Reply Quote 0
                        • Chris76e
                          Chris76e @paul53 last edited by Chris76e

                          @paul53

                          Bin jetzt einwenig weiter gekommen, wenn ich den DP

                          homeconnect.0.011040388898000963.programs.selected.BSH_Common_Root_SelectedProgram
                          

                          nehme, dann wird der erkannt.

                          Aber mit der Schleife ist nochwas nicht richtig. Hier werden Daten überschrieben

                          [
                            {
                              "Start": "06.09.22 00:42",
                              "Ende": "06.09.22 00:43"
                            },
                            {
                              "Start": "06.09.22 09:25",
                              "Ende": "06.09.22 09:25",
                              "Programm": "Eco 50°"
                            },
                            {
                              "Start": "06.09.22 09:25",
                              "Ende": "06.09.22 09:25",
                              "Programm": "Eco 50°"
                            }
                          ]
                          
                          [
                              {
                              "Start": "06.09.22 00:42",
                              "Ende": "06.09.22 00:43"
                            },
                            {
                              "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:28",
                              "Ende": "06.09.22 09:28",
                              "Programm": "Speed 45°"
                            }
                          ]
                          
                          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';
                          
                          var table = [];
                          if(getState(idTable).val) table = JSON.parse(getState(idTable).val);
                          var obj = {};
                          on(idStatus, function(dp) {
                              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];
                               
                          
                                  log(getState(idProg).val);
                                  log(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 @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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            545
                                            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