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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            808
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

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