Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Vorlage] Betriebsstundenzähler & Verbrauchsrechner

    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

    [Vorlage] Betriebsstundenzähler & Verbrauchsrechner

    This topic has been deleted. Only users with topic management privileges can see it.
    • etv
      etv last edited by

      Liebe Leute,

      eine Frage hab ich zu dem Pfad der Daten. Die liegen ja unter javascript.0. und dann die Pfade die man ja eintragen kann.

      Wie bekomm' ich meine Objekte in den Ordner "0_userdata.0."??

      Dort liegen bei meiner neuen Installation alle selbst generierten Infos drinnen und da würde ich auch gerne die BSZ Daten drinnen haben, nur bekomm' ich den Pfad nicht von javascript.0. weg....

      Liebe Grüße
      Tom

      A 1 Reply Last reply Reply Quote 0
      • A
        andi2055 @etv last edited by

        @etv
        falls noch nicht bekannt: mit JS >=4.6.1 funktioniert es. Habe ich gerade getestet
        var sysLocation = "0_userdata.0.BSZ.System";

        etv 1 Reply Last reply Reply Quote 1
        • etv
          etv @andi2055 last edited by

          @andi2055 , ja danke dir hab ich gelesen.

          Ich hab mich in der Zwischenzeit daran "gewöhnt", dass diese Werte wo anders zu finden sind 😊

          Liebe Grüße
          Tom

          1 Reply Last reply Reply Quote 0
          • Negalein
            Negalein Global Moderator last edited by Negalein

            Da es mit dem BSZ unteranderem das WEEK.BEFORE gibt, hab ich mal das Script mit der Anleitung umzusetzen versucht.

            EDIT: Problem gelöst 😊

            1 Reply Last reply Reply Quote 0
            • K
              Kampfratte last edited by

              Hallo

              Seit dem Update auf Script-Engine 4.10.1 bekomme ich folgende Fehlermeldungen. Mit der vorigen Version lief alles noch.

              Unbenannt.png

              ? 1 Reply Last reply Reply Quote 0
              • ?
                A Former User @Kampfratte last edited by

                @Kampfratte ja, das ist bei mir auch.
                Hab zum Glück nur noch ein Datenpunkt drin, den ich mittlerweile anders auswerte...

                K 1 Reply Last reply Reply Quote 0
                • K
                  knopers1 @Guest last edited by

                  @ilovegym

                  Kann ich bestätigen...... jemand eine Idee wie man es fixen kann?

                  K 1 Reply Last reply Reply Quote 0
                  • K
                    knopers1 @knopers1 last edited by

                    @looxer01

                    bekomme beim Update des JS-Adapters folgende Fehlermeldung!
                    Unter dem Namen "Gasrechner" im JS Adapter, läuft dein Betriebsstundenzähler. Hast Du eine Idee was da schief läuft?

                    2020-11-08 18:13:54.600 - error: javascript.0 (10717) script.js.common.Gasrechner: TypeError: Cannot set property '_ioBroker' of null
                    
                    2020-11-08 18:13:54.601 - error: javascript.0 (10717) at schedule (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1296:36)
                    
                    2020-11-08 18:13:54.602 - error: javascript.0 (10717) at script.js.common.Gasrechner:448:1
                    
                    2020-11-08 18:13:54.603 - error: javascript.0 (10717) at script.js.common.Gasrechner:2943:3
                    
                    2020-11-08 18:13:54.603 - error: javascript.0 (10717) at Script.runInContext (vm.js:130:18)
                    
                    L 1 Reply Last reply Reply Quote 0
                    • L
                      looxer01 @knopers1 last edited by

                      Hi,
                      wenn ihr die schedule funktion nicht nutzt, dann habe ich einen quick fix in dem ihr die Zeile "schedule...." wie unten auskommentiert.

                      vG Looxer

                      // Part 1.4 Definition der Trigger und schedule aufgrund der Einstellungstabellen
                      // ------------------------T R I G G E R -------------------------------------------------------
                      // achtung fehler im schedule
                      const ONSub = [];
                      for (let x = 0; x < Gruppen.length; x++) {
                      //  	const IDNR = OnIdTAB[x];
                        	const GRPNummer = x ;
                        	ONSub.push(on(OnIdTAB[x], (obj) => GeraetUpdate(GRPNummer)));
                          if (special[x][10] !== '' ) {
                              log( " special ") + (special[x][10] )
                      //        schedule(special[x][10], function(obj) { log("BSZ-Schedule aufgerufen","info"); GeraetUpdate(GRPNummer);              }); // end of schedule	
                          }
                      }
                      
                      
                      K 1 Reply Last reply Reply Quote 0
                      • K
                        knopers1 @looxer01 last edited by knopers1

                        @looxer01

                        Hi Looxer01, danke Dir!
                        Was macht genau die "schedule" Funktion?
                        Ich habe gesehen, dass sich bei mir der Tages-Stromverbrauch um 0:00 Uhr nicht auf null stellt. Hängt damit die "schedule" Funktion zusammen?

                        Part 1.4 sieht in meinem Script etwas anderes aus... Hab ich da noch eine alte Version?

                        // Part 1.4 Definition der Trigger und schedule aufgrund der Einstellungstabellen
                        // ------------------------T R I G G E R -------------------------------------------------------
                        
                        on({id:  OnIdTAB[0 ], valNe: 1000 }, function(obj)    { if(special[0][7] === true) {  if (obj.state.ack)  {   GeraetUpdate( 0 );  } } else {  if(obj.state.ack === false)  { GeraetUpdate( 0 ); } } });    // ende on id
                        on({id:  OnIdTAB[1 ], valNe: 1000 }, function(obj)    { if(special[1][7] === true) {  if (obj.state.ack)  {   GeraetUpdate( 1 );  } } else {  if(obj.state.ack === false)  { GeraetUpdate( 1 ); } } });    // ende on id
                        on({id:  OnIdTAB[2 ], valNe: 1000 }, function(obj)    { if(special[2][7] === true) {  if (obj.state.ack)  {   GeraetUpdate( 2 );  } } else {  if(obj.state.ack === false)  { GeraetUpdate( 2 ); } } });    // ende on id
                        on({id:  OnIdTAB[3 ], valNe: 1000 }, function(obj)    { if(special[3][7] === true) {  if (obj.state.ack)  {   GeraetUpdate( 3 );  } } else {  if(obj.state.ack === false)  { GeraetUpdate( 3 ); } } });    // ende on id
                        on({id:  OnIdTAB[4 ], valNe: 1000 }, function(obj)    { if(special[4][7] === true) {  if (obj.state.ack)  {   GeraetUpdate( 4 );  } } else {  if(obj.state.ack === false)  { GeraetUpdate( 4 ); } } });    // ende on id
                        on({id:  OnIdTAB[5 ], valNe: 1000 }, function(obj)    { if(special[5][7] === true) {  if (obj.state.ack)  {   GeraetUpdate( 5 );  } } else {  if(obj.state.ack === false)  { GeraetUpdate( 5 ); } } });    // ende on id
                        on({id:  OnIdTAB[6 ], valNe: 1000 }, function(obj)    { if(special[6][7] === true) {  if (obj.state.ack)  {   GeraetUpdate( 6 );  } } else {  if(obj.state.ack === false)  { GeraetUpdate( 6 ); } } });    // ende on id
                        on({id:  OnIdTAB[7 ], valNe: 1000 }, function(obj)    { if(special[7][7] === true) {  if (obj.state.ack)  {   GeraetUpdate( 7 );  } } else {  if(obj.state.ack === false)  { GeraetUpdate( 7 ); } } });    // ende on id
                        on({id:  OnIdTAB[8 ], valNe: 1000 }, function(obj)    { if(special[8][7] === true) {  if (obj.state.ack)  {   GeraetUpdate( 8 );  } } else {  if(obj.state.ack === false)  { GeraetUpdate( 8 ); } } });    // ende on id
                        on({id:  OnIdTAB[9 ], valNe: 1000 }, function(obj)    { if(special[9][7] === true) {  if (obj.state.ack)  {   GeraetUpdate( 9 );  } } else {  if(obj.state.ack === false)  { GeraetUpdate( 9 ); } } });    // ende on id
                        on({id:  OnIdTAB[10], valNe: 1000 }, function(obj)    { if(special[10][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(10);  }  }else {  if(obj.state.ack === false)  { GeraetUpdate(10); } } });    // ende on id
                        on({id:  OnIdTAB[11], valNe: 1000 }, function(obj)    { if(special[11][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(11);  }  }else {  if(obj.state.ack === false)  { GeraetUpdate(11); } } });    // ende on id
                        on({id:  OnIdTAB[12], valNe: 1000 }, function(obj)    { if(special[12][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(12);  }  }else {  if(obj.state.ack === false)  { GeraetUpdate(12); } } });    // ende on id
                        on({id:  OnIdTAB[13], valNe: 1000 }, function(obj)    { if(special[13][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(13);  }  }else {  if(obj.state.ack === false)  { GeraetUpdate(13); } } });    // ende on id
                        on({id:  OnIdTAB[14], valNe: 1000 }, function(obj)    { if(special[14][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(14);  }  }else {  if(obj.state.ack === false)  { GeraetUpdate(14); } } });    // ende on id
                        on({id:  OnIdTAB[15], valNe: 1000 }, function(obj)    { if(special[15][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(15);  }  }else {  if(obj.state.ack === false)  { GeraetUpdate(15); } } });    // ende on id
                        on({id:  OnIdTAB[16], valNe: 1000 }, function(obj)    { if(special[16][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(16);  }  }else {  if(obj.state.ack === false)  { GeraetUpdate(16); } } });    // ende on id
                        on({id:  OnIdTAB[17], valNe: 1000 }, function(obj)    { if(special[17][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(17);  } } else {  if(obj.state.ack === false)  { GeraetUpdate(17); } } });    // ende on id
                        on({id:  OnIdTAB[18], valNe: 1000 }, function(obj)    { if(special[18][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(18);  } } else {  if(obj.state.ack === false)  { GeraetUpdate(18); } } });    // ende on id
                        on({id:  OnIdTAB[19], valNe: 1000 }, function(obj)    { if(special[19][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(19);  } } else {  if(obj.state.ack === false)  { GeraetUpdate(19); } } });    // ende on id
                        on({id:  OnIdTAB[20], valNe: 1000 }, function(obj)    { if(special[20][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(20);  } } else {  if(obj.state.ack === false)  { GeraetUpdate(20); } } });    // ende on id
                        on({id:  OnIdTAB[21], valNe: 1000 }, function(obj)    { if(special[21][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(21);  } } else {  if(obj.state.ack === false)  { GeraetUpdate(21); } } });    // ende on id
                        on({id:  OnIdTAB[22], valNe: 1000 }, function(obj)    { if(special[22][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(22);  } } else {  if(obj.state.ack === false)  { GeraetUpdate(22); } } });    // ende on id
                        on({id:  OnIdTAB[23], valNe: 1000 }, function(obj)    { if(special[23][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(23);  } } else {  if(obj.state.ack === false)  { GeraetUpdate(23); } } });    // ende on id
                        on({id:  OnIdTAB[24], valNe: 1000 }, function(obj)    { if(special[24][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(24);  } } else {  if(obj.state.ack === false)  { GeraetUpdate(24); } } });    // ende on id
                        on({id:  OnIdTAB[25], valNe: 1000 }, function(obj)    { if(special[25][7] === true) {  if (obj.state.ack)  {   GeraetUpdate(25);  } } else {  if(obj.state.ack === false)  { GeraetUpdate(25); } } });    // ende on id
                        
                        
                        schedule(special[0][10], function() {   log("schedule 0 aufgerufen","info");GeraetUpdate(0);     }); // end of schedule                                
                        schedule(special[1][10], function() {   log("schedule 1 aufgerufen","info"); GeraetUpdate(1);     }); // end of schedule        
                        schedule(special[2][10], function() {   log("schedule 2 aufgerufen","info"); GeraetUpdate(2);     }); // end of schedule        
                        schedule(special[3][10], function() {   log("schedule 3 aufgerufen","info"); GeraetUpdate(3);     }); // end of schedule        
                        schedule(special[4][10], function() {   log("schedule 4 aufgerufen","info"); GeraetUpdate(4);     }); // end of schedule        
                        schedule(special[5][10], function() {   log("schedule 5 aufgerufen","info");GeraetUpdate(5);     }); // end of schedule        
                        schedule(special[6][10], function() {   log("schedule 6 aufgerufen","info");GeraetUpdate(6);     }); // end of schedule        
                        schedule(special[7][10], function() {   log("schedule 7 aufgerufen","info");GeraetUpdate(7);     }); // end of schedule        
                        schedule(special[8][10], function() {   log("schedule 8 aufgerufen","info");GeraetUpdate(8);     }); // end of schedule        
                        schedule(special[9][10], function() {   log("schedule 9 aufgerufen","info");GeraetUpdate(9);     }); // end of schedule        
                        schedule(special[10][10], function() {  log("schedule 10 aufgerufen","info"); GeraetUpdate(10);     }); // end of schedule        
                        schedule(special[11][10], function() {  log("schedule 11 aufgerufen","info"); GeraetUpdate(11);     }); // end of schedule        
                        schedule(special[12][10], function() {  log("schedule 12 aufgerufen","info"); GeraetUpdate(12);     }); // end of schedule        
                        schedule(special[13][10], function() {  log("schedule 13 aufgerufen","info"); GeraetUpdate(13);     }); // end of schedule        
                        schedule(special[14][10], function() {  log("schedule 14 aufgerufen","info"); GeraetUpdate(14);     }); // end of schedule        
                        schedule(special[15][10], function() {  log("schedule 15 aufgerufen","info");GeraetUpdate(15);     }); // end of schedule        
                        schedule(special[16][10], function() {  log("schedule 16 aufgerufen","info"); GeraetUpdate(16);     }); // end of schedule        
                        schedule(special[17][10], function() {  log("schedule 17 aufgerufen","info"); GeraetUpdate(17);     }); // end of schedule        
                        schedule(special[18][10], function() {  log("schedule 18 aufgerufen","info"); GeraetUpdate(18);     }); // end of schedule        
                        schedule(special[19][10], function() {  log("schedule 19 aufgerufen","info");GeraetUpdate(19);     }); // end of schedule        
                        schedule(special[20][10], function() {  log("schedule 20 aufgerufen","info");GeraetUpdate(20);     }); // end of schedule        
                        schedule(special[21][10], function() {  log("schedule 21 aufgerufen","info");GeraetUpdate(21);     }); // end of schedule        
                        schedule(special[22][10], function() {  log("schedule 22 aufgerufen","info");GeraetUpdate(22);     }); // end of schedule        
                        schedule(special[23][10], function() {  log("schedule 23 aufgerufen","info"); GeraetUpdate(23);     }); // end of schedule   
                        schedule(special[24][10], function() {  log("schedule 24 aufgerufen","info"); GeraetUpdate(24);     }); // end of schedule        
                        schedule(special[25][10], function() {  log("schedule 25 aufgerufen","info");GeraetUpdate(25);     }); // end of schedule        
                        
                        
                        
                        // Part 3 Taegliches Zuruecksetzen der Datenpunkte aufgrund von Periodenwechsel DAY,WEEK,MONTH,YEAR
                        // ------------------------Aenderung des Status des Geraetes------------------------------------
                        //-------------------------Beim Einschalten wird die Zeit festgehalten -------------------------
                        //-------------------------Beim Ausschalten wird die Zeitdifferenz berechnet und gespeichert----
                        schedule(cronjob, function() {   PeriodChange();   });  
                        
                        
                        
                        // ------------------------ F U N K T I O N E N -------------------------------------------------------
                        
                        // Part 1.4.1 Vorbereiten zum Anlegen/Löschen von Datenpunkten
                        //-----------------------------------------------------------------------------------------------------
                        // Funktion zum Anlegen der Variablen im System
                        //-----------------------------------------------------------------------------------------------------
                        function CreateDelStates(){
                            var zaehlerstatus = 0;
                            var method = "TIME";
                            for (var zaehler = 0,
                                zaehler_array = Gruppen.length;
                                zaehler < zaehler_array;
                                zaehler++) {
                                zaehler2 = addZero(zaehler).zero2;
                                if (Gruppen[zaehler][0] === "INITIAL") { continue; }                                                    // Check Gueltigkeit object
                        
                                for    ( zaehlerstatus = 8; zaehlerstatus < 18; zaehlerstatus++) {                                      // Spalte 8 - 18 fuer die Gruppentabelle entspriche logname -8
                        
                                    if (Gruppen[zaehler][zaehlerstatus] === '') {  continue; }                                          //Status is INITIAL     
                        
                                    if (method !== "TIME" && zaehlerstatus > 8)  {
                                        break;                                                                                          // Multiple Status werden nur gebraucht fuer TIME Objekte
                                    }
                                    method = "TIME";  
                                    if (Gruppen[zaehler][8] === 'DELTA') {       
                                        method = "DELTA";
                                    }
                                    if (Gruppen[zaehler][8] === 'DELTAM') {       
                                        method = "DELTAM";
                                    }
                                    if (Gruppen[zaehler][8] === 'CALC') {       
                                        method = "CALC";
                                    }
                        
                        
                        
                        // Status fuer die Methoden anlegen
                                    CreateDelStateSingle(zaehler,zaehlerstatus,method,"none","none");                                   // anlegen fuer alle methods (ausser hostory und switch ) bis zum statuslevel
                        
                        
                        // Status fuer die system struktur anlegen
                                    if (Gruppen[zaehler][3] === true) {                                                                 // soll eine DAY kumulations Variable angelegt werden ?
                                     CreateDelStateSingle(zaehler,zaehlerstatus,method,"SYSTEM","day");                                        // anlegen fuer die System Struktur Periode
                                    }      // endif Summierung soll angelegt werden
                                    if (Gruppen[zaehler][4] === true) {                                                                 // soll eine week kumulations Variable angelegt werden ?
                                     CreateDelStateSingle(zaehler,zaehlerstatus,method,"SYSTEM","week");                                        // anlegen fuer die System Struktur Periode
                                    }      // endif Summierung soll angelegt werden
                                    if (Gruppen[zaehler][5] === true) {                                                                 // soll eine month kumulations Variable angelegt werden ?
                                    CreateDelStateSingle(zaehler,zaehlerstatus,method,"SYSTEM","month");                                        // anlegen fuer die System Struktur Periode
                                    }      // endif Summierung soll angelegt werden
                                    if (Gruppen[zaehler][6] === true) {                                                                 // soll eine year kumulations Variable angelegt werden ?
                                     CreateDelStateSingle(zaehler,zaehlerstatus,method,"SYSTEM","year");                                        // anlegen fuer die System Struktur Periode
                                    }      // endif Summierung soll angelegt werden
                        
                        // Methoden Struktur (ausser history und Status anlegen / loeschen)
                         
                                   if (Gruppen[zaehler][3] === true) {                                                                 // soll eine DAY kumulations Variable angelegt werden ?
                                         CreateDelStateSingle(zaehler,zaehlerstatus,method,"none","day");
                                    }      // endif Summierung soll angelegt werde
                                    if (Gruppen[zaehler][4] === true) {                                                                 // soll eine week kumulations Variable angelegt werden ?
                                        CreateDelStateSingle(zaehler,zaehlerstatus,method,"none","week");
                                    }      // endif Summierung soll angelegt werde
                                    if (Gruppen[zaehler][5] === true) {                                                                 // soll eine month kumulations Variable angelegt werden ?
                                        CreateDelStateSingle(zaehler,zaehlerstatus,method,"none","month");
                                    }      // endif Summierung soll angelegt werde
                                   if (Gruppen[zaehler][6] === true) {                                                                 // soll eine year kumulations Variable angelegt werden ?
                                        CreateDelStateSingle(zaehler,zaehlerstatus,method,"none","year");
                                    }      // endif Summierung soll angelegt werde
                        
                         // Switch Stuktur anlengen / loeschen
                                    if (Gruppen[zaehler][7] === true ) {                                                                 // Soll auch eine Switch Variable angelegt werden
                                        CreateDelStateSingle(zaehler,zaehlerstatus,"none","SWITCH","none");
                                        if (Gruppen[zaehler][3] === true) {                                                               // soll eine DAY kumulations Variable angelegt werden ?               
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"none","SWITCH","day");                     
                                        }
                                        if (Gruppen[zaehler][4] === true) {                                                               // soll eine week kumulations Variable angelegt werden ?               
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"none","SWITCH","week");                     
                                        }
                                       if (Gruppen[zaehler][5] === true) {                                                               // soll eine month kumulations Variable angelegt werden ?               
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"none","SWITCH","month");                     
                                        }
                                       if (Gruppen[zaehler][6] === true) {                                                               // soll eine year kumulations Variable angelegt werden ?               
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"none","SWITCH","year");                     
                                        }
                                     } // endif Switch Variablen anzulegen ?
                                     
                                   
                        // Durchschnittsberechnung - Struktur anlegen
                                    if (special[zaehler][8] === true ) {                                                                    // Anlegen der Day Average 
                                        CreateDelStateSingle(zaehler,zaehlerstatus,"none","AVERAGE","none");        
                                        if (Gruppen[zaehler][3] === true) {                                                                 // Anlegen der Day Average 
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"none","AVERAGE","day");                   
                                        }
                                         if (Gruppen[zaehler][4] === true) {                                                                // Anlegen der Day Average 
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"none","AVERAGE","week");                   
                                        }           
                                        if (Gruppen[zaehler][5] === true) {                                                                 // Anlegen der Day Average 
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"none","AVERAGE","month");                   
                                        }
                                        if (Gruppen[zaehler][6] === true) {                                                                 // Anlegen der Day Average 
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"none","AVERAGE","year");                   
                                        }
                                    } // endif Durschnittsbewertung aktiv
                                    
                        // Min/MAX - Struktur anlegen
                                    if (special[zaehler][11] === true ) {                                                                    // Anlegen MINMAX 
                                        CreateDelStateSingle(zaehler,zaehlerstatus,"none","MINMAX","none");        
                                        if (Gruppen[zaehler][3] === true) {                                                                 // Anlegen der Day MINMAX 
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"none","MINMAX","day");                   
                                        }
                                         if (Gruppen[zaehler][4] === true) {                                                                // Anlegen der Week MINMAX 
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"none","MINMAX","week");                   
                                        }           
                                        if (Gruppen[zaehler][5] === true) {                                                                 // Anlegen der Month MINMAX 
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"none","MINMAX","month");                   
                                        }
                                        if (Gruppen[zaehler][6] === true) {                                                                 // Anlegen der Year MINMAX 
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"none","MINMAX","year");                   
                                        }
                                    } // endif MINMAX aktiv
                                    
                        
                        // History Struktur anlegen/ loeschen
                                    if (Gruppen[zaehler][2] === true && Gruppen[zaehler][5] === true) {                                 // Anlegen der Monats History Werte das laufende Jahr wenn Monatskumulation und Historie angeschaltet
                                        CreateDelStateSingle(zaehler,zaehlerstatus,method,"HISTORY","month");                           
                                        if(special[zaehler][8] === true) {                                                                // Durchschnittsfunktion ist aktiv   
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"AVERAGE","HISTORY","month");                             
                                        }
                                        if(special[zaehler][11] === true) {                                                                // MINMAX ist aktiv   
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"MINMAX","MINMAX","month");                             
                                        }
                                    }
                                    
                                    if (Gruppen[zaehler][2] === true && Gruppen[zaehler][6] === true) {                                 // Anlegen der Jahres  History Werte das laufende Jahr wenn Jahreskumulation und Historie angeschaltet          
                                        CreateDelStateSingle(zaehler,zaehlerstatus,method,"HISTORY","year");                   
                                        if(special[zaehler][8] === true) {                                                                // Durchschnittsfunktion ist aktiv   
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"AVERAGE","HISTORY","year");                             
                                        }
                                        if(special[zaehler][11] === true) {                                                                // MINMAX ist aktiv   
                                            CreateDelStateSingle(zaehler,zaehlerstatus,"AVERAGE","HISTORY","year");                             
                                        }
                                    }  
                         
                         
                         
                         
                                } // Ende FOR Statuszaheler
                            } // Ende FOR    Gruppenzaehler
                        
                        
                        }  // ende Funktion
                        
                        
                        
                        // Part 1.4.2 Ausführen Anlegen/Löschen von Datenpunkten
                        //-----------------------------------------------------------------------------------------------------
                        // Funktion zum Anlegen der Variablen im System - hier Statusinformationen
                        //-----------------------------------------------------------------------------------------------------
                        
                        function CreateDelStateSingle(zeile,spalte,method,funktion,periode) {
                        // Zeile = Zeile der Gruppentabelle 
                        // spalte = spalte der Gruppentabelle (status)
                        // method = alle Methoden
                        // funktion =  Funktionen Switch, Average, history
                        // periode = day week month year oder none
                            var actionDel = false;
                            if (Gruppen[zeile][19] === true && Gruppen[zeile][18] === true) {                                            // wenn actionDel = true dann soll geloescht werden
                                actionDel = true;
                            }
                            if (actionDel === false &&  Gruppen[zeile][18] === true) {                                                    // kein loeschen aber auch nicht anlegen da Refresh auf gestoppt gesetzt
                                return;
                            }                                   
                        
                            var statusname = Gruppen[zeile][spalte];
                            if (logname[zeile][spalte-8] !== '') {                                                                      // Gibt es einen Status in der logname tabelle  ? wenn ja merken mit vorrang
                                statusname = logname[zeile][spalte-8];
                            } 
                            if (statusname === '' ) { return; }
                        
                        
                            var pathCount   = countLocation + '.'       + Gruppen[zeile][1];                                            // BSZ.Counter.Thema
                            var pathSysM    = sysLocation   + '.Grp'    + addZero(zeile).zero2  + 'MSec.' + statusname;
                            var pathSysK    = sysLocation   + '.Grp'    + addZero(zeile).zero2  + 'Kum.'  +  statusname;
                            var pathCLevel3;                                                                                            //BSZ.Counter.Thema.Type.Status
                            var pathHistM;                                                                                              // BSZ.Counter.Thema.Status.History.Month
                            var pathHistY;                                                                                              // BSZ.Counter.Thema.Status.History.Year
                            var pathCLevel4; 
                            var pathCLevel4b;    
                            var pathsysaku;
                            var pathsysasw; 
                            var pathsysmin;                                                                                             // Minimum path
                            var pathsysmax;                                                                                             // Maximum path
                        
                        
                            var year =   new Date().getFullYear();
                            var month =  addZero(new Date().getMonth()+1).zero2;                                                        // aktueller Monat
                            var yearvor =new Date().getFullYear()-1;                                                                    // Jahr fuer die Historyfortschreibung - also Vorjahr
                        
                        
                        //  die Methodenstuktur und systemstruktur   anlegen
                            if(funktion === "none" && periode === "none" ) {                                                            // Hier werden nur die Status der types angelegt (ohne perioden)
                                pathCLevel3 = pathCount     + "."  + method  + "." + statusname;                                        //BSZ.Counter.Thema.Type.Status    
                                if (actionDel === false) { 
                                        createState(pathSysM    ,  0);                                                                  // Anlegen systemeintrag msec
                                        createState(pathSysK    ,  0);                                                                  // anlegen systemeintrag kum
                                        createState(pathCLevel3 ,  0);      
                                } else {
                                        ObjectExistsDelState(pathSysM   );                                                              // loeschen systemeintrag msec
                                        ObjectExistsDelState(pathSysK   );                                                              // loeschen systemeintrag kum
                                        ObjectExistsDelState(pathCLevel3);                                                              // loeschen counteintrag oberster level   
                                } // endif del
                            }
                            
                        // die perioden der methodenstruktur anlegen
                            if(periode === 'day' && funktion === "none") { 
                                pathCLevel4  = pathCount     + "." + method + "." + statusname + "."+PeriodeDay;                      //BSZ.Counter.Thema.Type.Status
                                pathCLevel4b = pathCount     + "." + method + "." + statusname + "."+PeriodeDay+".BEFORE";                        //BSZ.Counter.Thema.Type.Status
                                if (actionDel  === false) { 
                                    createState(pathCLevel4 ,   0);
                                    createState(pathCLevel4b,   0);
                                  } else {
                                    ObjectExistsDelState(pathCLevel4 );
                                    ObjectExistsDelState(pathCLevel4b);
                                } // endif del
                            }  // endif periode
                            
                            if(periode === 'week' && funktion === "none") { 
                                pathCLevel4  = pathCount     + "." + method + "." + statusname + "."+PeriodeWeek;                      //BSZ.Counter.Thema.Type.Status
                                pathCLevel4b = pathCount     + "." + method + "." + statusname + "."+PeriodeWeek+".BEFORE";                        //BSZ.Counter.Thema.Type.Status
                                if (actionDel  === false) { 
                                    createState(pathCLevel4 ,   0);
                                    createState(pathCLevel4b,   0);
                                  } else {
                                    ObjectExistsDelState(pathCLevel4);
                                    ObjectExistsDelState(pathCLevel4b);
                                 } // endif del
                            }  // endif periode 
                            
                            if(periode === 'month' && funktion === "none") { 
                                pathCLevel4  = pathCount     + "." + method + "." + statusname + "."+PeriodeMonth;                      //BSZ.Counter.Thema.Type.Status
                                pathCLevel4b = pathCount     + "." + method + "." + statusname + "."+PeriodeMonth+".BEFORE";                        //BSZ.Counter.Thema.Type.Status
                                 if (actionDel  === false) { 
                                    createState(pathCLevel4 ,   0);
                                    createState(pathCLevel4b,   0);
                                } else {
                                    ObjectExistsDelState(pathCLevel4 );
                                    ObjectExistsDelState(pathCLevel4b);
                                  } // endif del
                            }  // endif periode
                            
                            if(periode === 'year' && funktion === "none") { 
                                pathCLevel4  = pathCount     + "." + method + "." + statusname + "."+PeriodeYear;                      //BSZ.Counter.Thema.Type.Status
                                pathCLevel4b = pathCount     + "." + method + "." + statusname + "."+PeriodeYear+".BEFORE";                        //BSZ.Counter.Thema.Type.Status
                               if (actionDel  === false) {  
                                    createState(pathCLevel4 ,   0);
                                    createState(pathCLevel4b,   0);
                                } else {
                                ObjectExistsDelState(pathCLevel4 );
                                ObjectExistsDelState(pathCLevel4b);
                                } // endif del
                            }  // endif periode
                          
                          
                          
                          
                          // die perioden der systemstrktur anlegen
                            if(funktion === "SYSTEM" && periode === "day" ) {                                                           // Anlegen der Perioden fuer die Systemstruktur- hier day
                                 pathSysK = pathSysK + "."+PeriodeDay;    
                                 if (actionDel  === false) { 
                                    createState(pathSysK    ,   0);  
                                } else {
                                     ObjectExistsDelState(pathSysK    );              
                               } // endif del
                            }
                            if(funktion === "SYSTEM" && periode === "week" ) {
                                 pathSysK = pathSysK + "."+PeriodeWeek;    
                                 if (actionDel  === false) { 
                                    createState(pathSysK    ,   0);  
                                } else {
                                     ObjectExistsDelState(pathSysK    );              
                               } // endif del
                            }
                        
                            if(funktion === "SYSTEM" && periode === "month" ) {
                                 pathSysK = pathSysK + "."+PeriodeMonth;    
                                 if (actionDel  === false) { 
                                    createState(pathSysK    ,   0);  
                                } else {
                                     ObjectExistsDelState(pathSysK    );              
                               } // endif del
                            }
                            if(funktion === "SYSTEM" && periode === "year" ) {
                                 pathSysK = pathSysK + "."+PeriodeYear;    
                                 if (actionDel  === false) { 
                                    createState(pathSysK    ,   0);  
                                } else {
                                     ObjectExistsDelState(pathSysK    );              
                               } // endif del
                            }
                        
                        
                        
                        
                        
                        // Switch Struktur anlegen inkl Perioden
                            if(funktion === "SWITCH" && periode === "none") {
                                pathCLevel3 = pathCount + "." + "SWITCH" + "." + statusname;                                        //BSZ.Counter.Thema.Type.Status
                                if (actionDel === false) { 
                                    createState(pathCLevel3 ,  0);      
                                } else {
                                    ObjectExistsDelState(pathCLevel3);                                                              // loeschen counteintrag oberster level   
                                } // endif del    
                            }
                            if(funktion === "SWITCH" && periode === "day") {
                                pathCLevel4  = pathCount + "." +  "SWITCH" + "." + statusname + "."+PeriodeDay;                           //BSZ.Counter.Thema.Type.Status
                                pathCLevel4b = pathCount + "." +  "SWITCH" + "." + statusname + "."+PeriodeDay+".BEFORE";                 //BSZ.Counter.Thema.Type.Status
                                if (actionDel === false) { 
                                    createState(pathCLevel4 ,  0);      
                                    createState(pathCLevel4b,   0);
                                } else {
                                    ObjectExistsDelState(pathCLevel4);                                                              // loeschen counteintrag oberster level   
                                    ObjectExistsDelState(pathCLevel4b);
                                } // endif del    
                            }
                            if(funktion === "SWITCH" && periode === "week") {
                                pathCLevel4  = pathCount + "." + "SWITCH" + "." + statusname + "."+PeriodeWeek;                           //BSZ.Counter.Thema.Type.Status
                                pathCLevel4b = pathCount + "." + "SWITCH" + "." + statusname + "."+PeriodeWeek+".BEFORE";                 //BSZ.Counter.Thema.Type.Status
                                if (actionDel === false) { 
                                    createState(pathCLevel4 ,  0);  
                                    createState(pathCLevel4b,   0);
                                } else {
                                    ObjectExistsDelState(pathCLevel4);                                                              // loeschen counteintrag oberster level   
                                    ObjectExistsDelState(pathCLevel4b);
                                } // endif del    
                            }
                            if(funktion === "SWITCH" && periode === "month") {
                                pathCLevel4  = pathCount + "." + "SWITCH" + "." + statusname + "."+PeriodeMonth;                           //BSZ.Counter.Thema.Type.Status
                                pathCLevel4b = pathCount + "." + "SWITCH" + "." + statusname + "."+PeriodeMonth+".BEFORE";                 //BSZ.Counter.Thema.Type.Status
                                if (actionDel === false) { 
                                    createState(pathCLevel4 ,  0);      
                                    createState(pathCLevel4b,   0);
                                } else {
                                    ObjectExistsDelState(pathCLevel4);                                                              // loeschen counteintrag oberster level   
                                    ObjectExistsDelState(pathCLevel4b);
                                } // endif del    
                            }
                            if(funktion === "SWITCH" && periode === "year") {
                                pathCLevel4  = pathCount + "." + "SWITCH" + "." + statusname + "."+PeriodeYear;                           //BSZ.Counter.Thema.Type.Status
                                pathCLevel4b = pathCount + "." + "SWITCH" + "." + statusname + "."+PeriodeYear+".BEFORE";                 //BSZ.Counter.Thema.Type.Status
                                if (actionDel === false) { 
                                    createState(pathCLevel4 ,  0);     
                                    createState(pathCLevel4b,   0);
                                } else {
                                    ObjectExistsDelState(pathCLevel4);                                                              // loeschen counteintrag oberster level 
                                    ObjectExistsDelState(pathCLevel4b);
                                } // endif del    
                            }
                        
                        
                        // Anlegen der History Stuktur unterhalb der Methoden
                            if(funktion === "HISTORY") { 
                                pathHistM   = pathCount  + "."  + method + "." + statusname + ".HISTORY"+ "."+PeriodeMonth +".";                               // BSZ.Counter.Thema.Status.History.Month
                                pathHistY   = pathCount  + "."  + method + "." + statusname + ".HISTORY"+ "."+PeriodeYear  +".";                               // BSZ.Counter.Thema.Status.History.Month
                                if (periode === "month") {       
                                    for    (  i = 1; i <= 12; i++) {     
                                       month  = addZero(i).zero2;                                                                          // Monat mit führender null
                                       if (actionDel  === false) { 
                                            createState(pathHistM + year + month,  0);                                                     // alle Monate des jahres anlegen
                                       } else {
                                            ObjectExistsDelState(pathHistM + year + month);                                                // alle Monate des jahres loeschen           
                                       } // endif del
                                    } // endfor
                                    if (actionDel  === false) { 
                                        createState(pathHistM + yearvor + "12",   0);                                                       // letzten Monat vor Jahreswechsel anlegen               
                                     } else {     
                                        ObjectExistsDelState(pathHistM + yearvor + "12");                                                   //letzten Monat vor Jahreswechsel loeschen               
                                     }  // endif del
                                }  // endif month                               
                                if (periode === "year") {         
                                     if (actionDel  === false) { 
                                        createState(pathHistY + year,   0);                                                                 //Jahr anlegen       
                                        createState(pathHistY + yearvor,   0);                                                              //Vorjahr anlegen 
                                    } else {     
                                        ObjectExistsDelState(pathHistY + year);                                                             //Jahr loeschen       
                                        ObjectExistsDelState(pathHistY + yearvor);                                                          //Vorjahr loeschen 
                                    }  // endif del
                                }  // endif year    
                            } // endif history
                        
                        L 1 Reply Last reply Reply Quote 0
                        • L
                          looxer01 @knopers1 last edited by

                          Hi
                          stimmt, ich hatte die letzten Änderungen nicht mehr hochgeladen. Damit weichen die Versionen an der Stelle ab.
                          Korrektur in dieser Version ist alle schedules (codezeilen 32 ff) , die in Tabelle specials Spalte 11 sich befinden auszukommentieren.
                          Gilt also für alle Zeilen, die in Tabelle specials Spalte 11 keinen Eintrag bzw ein '' stehen haben.

                          Mit dieser Einstellung wird nicht auf einen Trigger reagiert sondern ein Schedule löst die Funktion aus. (haben wahrscheinlich eh nicht viele genutzt)

                          Das hat aber nichts mit der 0 Rückstellung zu tun. Schau ich mir an.

                          vG Looxer

                          K 1 Reply Last reply Reply Quote 0
                          • K
                            knopers1 @looxer01 last edited by

                            @looxer01
                            puhh,
                            ich kann Dir noch kaum folgen.... Die Tabelle mit "spezials" habe ich gefunden. (siehe unten)
                            In der Spalte 11 ist bei mir kein Eintrag. Wie kann ich es auskommentieren? Kannst Du da ein Beispiel zeigen?
                            Mit codenzeile 32ff kann ich leider nichts anfangen 😲

                            Kannst Du so nett sein und ein Beispiel zeigen?
                            Besten Dank für Deine Mühe!

                            var special = [];
                            //             1.Round 2.add1   3.Faktor                4. Divisor  5.add2  6.Individuallogik  7: DELTA(M)Grenze    8.Warten auf Bestaetigung  9.Durchschnitt - 10.Zaehlschwelle     11 Schedule    12. Min/MAX     13. MehrfachStatus  14. Selektives Logging
                            special[0]  =   ['2'    ,''     ,''                     ,''         ,''     ,''                 ,''                 ,'false'                    ,''             ,''             ,''                 ,''             ,''                 , ''     ]; 
                            special[1]  =   ['2'    ,''     ,'11.432'               ,''         ,''     ,''                 ,''                 ,'false'                    ,''             ,''             ,''                 ,''             ,''                 ,''      ]; 
                            special[2]  =   ['9'     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,'false'                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; 
                            special[3]  =   ['9'     ,''     ,'625'                     ,'1000'         ,''     ,''                 ,''                 ,'false'                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; 
                            special[4]  =   ['2'     ,''     ,'10.43'                     ,'1000'         ,''     ,''                 ,''                 ,'false'                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; 
                            special[5]  =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 , ''     ];
                            special[6]  =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; 
                            special[7]  =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; 
                            special[8]  =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                            special[9]  =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; 
                            special[10] =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; 
                            special[11] =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; 
                            special[12] =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ]; 
                            special[13] =   [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                            special[14]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                            special[15]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                            special[16]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                            special[17]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                            special[18]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                            special[19]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 , ''     ];
                            special[20]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                            special[21]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                            special[22]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                            special[23]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                            special[24]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                            special[25]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
                            
                            
                            L 1 Reply Last reply Reply Quote 0
                            • L
                              looxer01 @knopers1 last edited by

                              Hi
                              wenn du dort keinen Eintrag hast, dann ist es doch einfach, denn -wie gedacht- nutzt du die Schedule Funktion nicht
                              Kommentiere alle Zeilen von 32 bis 57 aus. Dann ist der Fehler weg.

                              vG Looxer

                              1 Reply Last reply Reply Quote 0
                              • sigi234
                                sigi234 Forum Testing Most Active @looxer01 last edited by sigi234

                                @looxer01

                                Wo ist das aktuelle Skript?

                                Das ?

                                Betriebszeitenscript Version 0.99 30.12.2017 :
                                
                                L 1 Reply Last reply Reply Quote 0
                                • L
                                  looxer01 @sigi234 last edited by

                                  @sigi234
                                  ja genau - jedenfalls das letzte veröffentlichte.

                                  K ? 2 Replies Last reply Reply Quote 0
                                  • K
                                    knopers1 @looxer01 last edited by

                                    @looxer01

                                    besten Dank, es läuft wieder alles wie gewohnt... 👍

                                    1 Reply Last reply Reply Quote 0
                                    • ?
                                      A Former User @looxer01 last edited by

                                      @looxer01 sagte in [Vorlage] Generischer Betriebsstundenzähler und Verbrauchsrechner - Script:

                                      @sigi234
                                      ja genau - jedenfalls das letzte veröffentlichte.

                                      erst mal danke für die Entwicklung deines Scripts 👏 , nutze es auch schon sehr lange.
                                      Aktualisierst du die Version weiter, bzw. lässt du uns an deinen letzten Änderungen teilhaben??

                                      Eigentlich funktioniert (noch) alles, deswegen nur mal so aus Neugier. 😉

                                      L 1 Reply Last reply Reply Quote 0
                                      • L
                                        looxer01 @Guest last edited by looxer01

                                        @telekom0815
                                        Hi,
                                        Dann scheint das Script ja hier und da noch im Einsatz zu sein.

                                        Also, was ich gemacht habe ist, die 25 Zeilen Begrenzung aufzuheben.
                                        Es geht also eine Kürzung auf die erforderliche Anzahl von Zeilen der 3 Tabellen.
                                        Genauso lassen sich mehr als 25 Zeilen einstellen.

                                        Ich schau mir das mal an und beseitige den Fehler bezüglicher der schedules (kam mit dem letzten JS update)
                                        und veröffentliche dann eine aktualisierte Version.
                                        Kann aber noch 1-2 Wochen dauern.

                                        Liebe Grüße
                                        Looxer

                                        K 1 Reply Last reply Reply Quote 0
                                        • K
                                          knopers1 @looxer01 last edited by

                                          @looxer01
                                          geil, ich freu mich drauf... ich nutze Dein Script auch schon eine halbe Ewigkeit!

                                          L 1 Reply Last reply Reply Quote 0
                                          • L
                                            looxer01 @knopers1 last edited by

                                            @knopers1
                                            Script Version 1.02. ist hochgeladen.

                                            sigi234 ? 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            476
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            51
                                            333
                                            79624
                                            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