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

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

                                            @chris76e
                                            Habe mich hier durch die weiteren Logs täuschen lassen, da sie nicht gekennzeichnet sind.
                                            Weshalb das Skript doppelte Einträge erzeugt, erschließt sich mir bisher nicht. Deshalb erzeuge bitte Logs mit Datenpunkt-Kennung:

                                            const idTable = '0_userdata.0.JSON.Spülmaschiene'; // ID JSON-Tabelle
                                            const idStatus = 'homeconnect.0.011040388898000963.status.BSH_Common_Status_OperationState';
                                            const idProg = 'homeconnect.0.011040388898000963.programs.selected.BSH_Common_Root_SelectedProgram';
                                            const idAktiv = 'homeconnect.0.011040388898000963.programs.active.BSH_Common_Root_ActiveProgram';
                                            
                                            var table = [];
                                            if(getState(idTable).val) table = JSON.parse(getState(idTable).val);
                                            var obj = {};
                                            
                                            on(idAktiv, function(dp) {
                                                log('Aktiv: ' + dp.state.val);
                                            });
                                            
                                            on(idStatus, function(dp) {
                                                log('gewählt: ' + getState(idProg).val);
                                                log('alter Status: ' + dp.oldState.val);
                                                log('neuer Status: ' + dp.state.val);
                                                
                                                if(dp.state.val == 'BSH.Common.EnumType.OperationState.Run') {
                                                    obj.Start = formatDate(new Date(), 'DD.MM.YY hh:mm'); 
                                                    obj.Programm = getObject(idProg).common.states[getState(idProg).val];
                                                } else if(dp.oldState.val == 'BSH.Common.EnumType.OperationState.Run') {
                                                    obj.Ende = formatDate(new Date(), 'DD.MM.YY hh:mm');
                                                    table.push(obj);
                                                    if(table.length > 10) table.shift();
                                                    setState(idTable, JSON.stringify(table), true);
                                                }
                                            });
                                            
                                            Chris76e 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            386
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

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