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 @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
                                        • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            934
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

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