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

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

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

                                            paul53 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            472
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

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