Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Vorlage] Betriebsstundenzähler & Verbrauchsrechner

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    482

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.6k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.6k

[Vorlage] Betriebsstundenzähler & Verbrauchsrechner

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascript
333 Beiträge 51 Kommentatoren 93.6k Aufrufe 26 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • L looxer01

    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 Offline
    K Offline
    knopers1
    schrieb am zuletzt editiert von knopers1
    #309

    @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
    

    HP Microserver Gen8, RPI-4, IoBroker,

    L 1 Antwort Letzte Antwort
    0
    • K 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 Offline
      L Offline
      looxer01
      schrieb am zuletzt editiert von
      #310

      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 Antwort Letzte Antwort
      0
      • L looxer01

        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 Offline
        K Offline
        knopers1
        schrieb am zuletzt editiert von
        #311

        @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 :astonished:

        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]  =  [''     ,''     ,''                     ,''         ,''     ,''                 ,''                 ,''                         ,''             ,''             ,''                 ,''             ,''                 ,''      ];
        
        

        HP Microserver Gen8, RPI-4, IoBroker,

        L 1 Antwort Letzte Antwort
        0
        • K knopers1

          @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 :astonished:

          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 Offline
          L Offline
          looxer01
          schrieb am zuletzt editiert von
          #312

          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 Antwort Letzte Antwort
          0
          • L looxer01

            Hi,

            Der Betriebstundenzahler hat sich vom einfachen Zaehler zu einem allgemein Counter mit Verbrauchs-Berechnungsfunktionen weiterentwickelt.
            Was macht er ?

            • Zeigt Zustände von verschiedenen Status von allen Geräten oder Datenpunkten an und brechnet die Zeitdifferenzen dieser Zustände (Status) was einem Betriebstundenzaehler entspricht
            • Berechnet Ölverbräuche/Pelletverbräuche/Stromverbräuche/Gas-und Wasserverbräuche in den jeweilgen Einheiten (z.B. KG, kwH, m3, EURO etc. Umrechnungen sind möglich
            • Zeigt Werte kumuliert nach GESAMTWERT, TAG,Woche,MONAT,JAHR an
            • Speichert Werte in Monats/Jahreshistorie
            • Ermittelt Durchschnittswerte wie Durchschnittstemperaturen oder Durchschnittliche Einschaltzeiten
            • hält erreichte Minimum und Maximum Werte fest
            • Erzeugt Excel Dateien mit Änderungen von Datenpunkten
            • Bietet alternativ zu Trigger auch eine schedule Funktion für Temperaturermittlugnen, Energieverbrauchsrechnungen etc.

            und noch vieles mehr.

            Da es so umfassend ist habe ich eine mehr oder weniger ausführliche Dokumentation als pdf format beigesteuert.

            Betriebszeitenscript Version 1.02 22.11.2020 :
            Betriebsstundenzaehler_102_published.txt

            Hinweis zur Version 1.02

            • Fehler bei Verwendung von Schedules behoben - Eine harte Scriptfehlermeldung wurde angezeit. JS version 4.10.4
            • Die Version erlaubt beliebig viele Zeilen (bisher max 25) und auch weniger Zeilen. Die 3 Tabellen müssen immer die gleichen Anzahl von Zeilen haben

            Die Datei sollte mit Notepad++ geoeffnet werden (freeware) und Zeilenumbrüche ausgeschaltet werden (Ansicht/automatischer Zeilenumbruch )sonst kann es unerwünschte Zeilenumbrüche geben

            Dokumentation:
            305_betriebszeitenerfassung3.pdf

            vG Looxer

            ScreenPrint Beispiele

            hier der Stromverbrauch in Euro in kWh Heizung
            305_bszoekofen.jpg

            hier Durschnittstemperaturen Aussen ganztägig gemessen bzw. auch einmal am Tag
            305_bsztemperaturen.jpg

            hier mal eben zum Test des Harmony Adapters, um Disconnects zu zaehlen und auch die Zeit zu messen

            Ergebnis der Messung eines Nachmittags. Der BSZ eignet sich also auch um Datenpunkte zu tracen:
            305_bszharmony.jpg

            sigi234S Online
            sigi234S Online
            sigi234
            Forum Testing Most Active
            schrieb am zuletzt editiert von sigi234
            #313

            @looxer01

            Wo ist das aktuelle Skript?

            Das ?

            Betriebszeitenscript Version 0.99 30.12.2017 :
            

            Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
            Immer Daten sichern!

            L 1 Antwort Letzte Antwort
            0
            • sigi234S sigi234

              @looxer01

              Wo ist das aktuelle Skript?

              Das ?

              Betriebszeitenscript Version 0.99 30.12.2017 :
              
              L Offline
              L Offline
              looxer01
              schrieb am zuletzt editiert von
              #314

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

              K ? 2 Antworten Letzte Antwort
              0
              • L looxer01

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

                K Offline
                K Offline
                knopers1
                schrieb am zuletzt editiert von
                #315

                @looxer01

                besten Dank, es läuft wieder alles wie gewohnt... :+1:

                HP Microserver Gen8, RPI-4, IoBroker,

                1 Antwort Letzte Antwort
                0
                • L looxer01

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

                  ? Offline
                  ? Offline
                  Ein ehemaliger Benutzer
                  schrieb am zuletzt editiert von
                  #316

                  @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 :clap: , 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. :wink:

                  L 1 Antwort Letzte Antwort
                  0
                  • ? Ein ehemaliger Benutzer

                    @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 :clap: , 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. :wink:

                    L Offline
                    L Offline
                    looxer01
                    schrieb am zuletzt editiert von looxer01
                    #317

                    @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 Antwort Letzte Antwort
                    0
                    • L 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 Offline
                      K Offline
                      knopers1
                      schrieb am zuletzt editiert von
                      #318

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

                      HP Microserver Gen8, RPI-4, IoBroker,

                      L 1 Antwort Letzte Antwort
                      0
                      • K knopers1

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

                        L Offline
                        L Offline
                        looxer01
                        schrieb am zuletzt editiert von
                        #319

                        @knopers1
                        Script Version 1.02. ist hochgeladen.

                        sigi234S ? 2 Antworten Letzte Antwort
                        0
                        • L looxer01

                          @knopers1
                          Script Version 1.02. ist hochgeladen.

                          sigi234S Online
                          sigi234S Online
                          sigi234
                          Forum Testing Most Active
                          schrieb am zuletzt editiert von
                          #320

                          @looxer01 sagte in [Vorlage] Betriebsstundenzähler & Verbrauchsrechner:

                          @knopers1
                          Script Version 1.02. ist hochgeladen.

                          Kannst du das anpassen , verwirrt mich immer.

                          /*..........Betriebsstundenzaehler BSZ Extended Version 0.99
                          ............Datum: 04.02.2016
                          ............Autor: Looxer01
                          ............Forum ioBroker
                          

                          Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                          Immer Daten sichern!

                          L 1 Antwort Letzte Antwort
                          0
                          • sigi234S sigi234

                            @looxer01 sagte in [Vorlage] Betriebsstundenzähler & Verbrauchsrechner:

                            @knopers1
                            Script Version 1.02. ist hochgeladen.

                            Kannst du das anpassen , verwirrt mich immer.

                            /*..........Betriebsstundenzaehler BSZ Extended Version 0.99
                            ............Datum: 04.02.2016
                            ............Autor: Looxer01
                            ............Forum ioBroker
                            
                            L Offline
                            L Offline
                            looxer01
                            schrieb am zuletzt editiert von
                            #321

                            @sigi234
                            erledigt

                            1 Antwort Letzte Antwort
                            1
                            • K Offline
                              K Offline
                              Kampfratte
                              schrieb am zuletzt editiert von
                              #322

                              Habe das Update gerade eingepflegt. Bis jetzt keine Auffälligkeiten festgestellt.

                              Hätte aber mal eine Frage an @looxer01
                              Das Script zählt ja, wenn ein Gerät an ist, auch über Nacht. Also wenn ein Gerät um 22 Uhr abends eingeschalten wird und morgens dann um 4 Uhr wieder aus. Da schreibt das Script dann für heute 6 Std. Laufzeit rein. Ich hätte es aber lieber, wenn das Script in so einem Falle dann 2 Std. gestern und 4 Std. heute notiert. Also, dass das Script nachts um 0 Uhr die Geräte, die an sind, die Laufzeit des gestrigen Tages bis 0 Uhr auch nach gestern schreibt und dann um 0 Uhr neu anfängt zu zählen. Habe mich daran schon selbst versucht, bin aber bisher kläglich gescheitert.

                              Lg Uwe

                              L 1 Antwort Letzte Antwort
                              0
                              • K Kampfratte

                                Habe das Update gerade eingepflegt. Bis jetzt keine Auffälligkeiten festgestellt.

                                Hätte aber mal eine Frage an @looxer01
                                Das Script zählt ja, wenn ein Gerät an ist, auch über Nacht. Also wenn ein Gerät um 22 Uhr abends eingeschalten wird und morgens dann um 4 Uhr wieder aus. Da schreibt das Script dann für heute 6 Std. Laufzeit rein. Ich hätte es aber lieber, wenn das Script in so einem Falle dann 2 Std. gestern und 4 Std. heute notiert. Also, dass das Script nachts um 0 Uhr die Geräte, die an sind, die Laufzeit des gestrigen Tages bis 0 Uhr auch nach gestern schreibt und dann um 0 Uhr neu anfängt zu zählen. Habe mich daran schon selbst versucht, bin aber bisher kläglich gescheitert.

                                Lg Uwe

                                L Offline
                                L Offline
                                looxer01
                                schrieb am zuletzt editiert von looxer01
                                #323

                                @Kampfratte sagte in [Vorlage] Betriebsstundenzähler & Verbrauchsrechner:

                                Das Script zählt ja, wenn ein Gerät an ist, auch über Nacht. Also wenn ein Gerät um 22 Uhr abends eingeschalten wird und morgens dann um 4 Uhr wieder aus. Da schreibt das Script dann für heute 6 Std. Laufzeit rein.

                                Da hast du recht so ist es programmiert. Ich hatte nie darüber nachgedacht, dass das störend sein könnte.
                                Ein Einbau wäre aufwändig aber möglich. Dazu müßte beim Tageswechsel ermittelt werden welche Zählungen aktuell laufen. Laufende Zählungen müssen dann im Tag/woche/Jahr abgespeichert werden und der Stand für den neuen Tag weiterlaufen.
                                Allerdings schaffe ich das zeitlich einfach nicht :(

                                lG Looxer

                                K 1 Antwort Letzte Antwort
                                0
                                • L looxer01

                                  @knopers1
                                  Script Version 1.02. ist hochgeladen.

                                  ? Offline
                                  ? Offline
                                  Ein ehemaliger Benutzer
                                  schrieb am zuletzt editiert von
                                  #324

                                  @looxer01 sagte in [Vorlage] Betriebsstundenzähler & Verbrauchsrechner:

                                  @knopers1
                                  Script Version 1.02. ist hochgeladen.

                                  Hallo,
                                  muss ich eigentlich alles neu eingeben, oder reicht es, wenn ich ab Zeile xxx alles aktualisiere. Wenn dem so sein sollte, ab welcher Zeile muss ich es erneuern.

                                  Danke

                                  L 1 Antwort Letzte Antwort
                                  0
                                  • ? Ein ehemaliger Benutzer

                                    @looxer01 sagte in [Vorlage] Betriebsstundenzähler & Verbrauchsrechner:

                                    @knopers1
                                    Script Version 1.02. ist hochgeladen.

                                    Hallo,
                                    muss ich eigentlich alles neu eingeben, oder reicht es, wenn ich ab Zeile xxx alles aktualisiere. Wenn dem so sein sollte, ab welcher Zeile muss ich es erneuern.

                                    Danke

                                    L Offline
                                    L Offline
                                    looxer01
                                    schrieb am zuletzt editiert von
                                    #325

                                    @telekom0815 sagte in [Vorlage] Betriebsstundenzähler & Verbrauchsrechner:

                                    muss ich eigentlich alles neu eingeben, oder reicht es, wenn ich ab Zeile xxx alles aktualisiere. Wenn dem so sein sollte, ab welcher Zeile muss ich es erneuern.

                                    Ich gehe davon aus, dass du Version >= 0.99 nutzt.
                                    Dann sollte es reichen wenn du den Coding Teil ersetzt.
                                    Die Zeilennummer kann ich dir nicht genau sagen aber der Orientierungspunkt ist diese Stelle

                                    /* Ende Experten-Einstellungen .......................................................................................................
                                    --------------------------------------------------------------------------------------------------------------------------------------*/

                                    Darüberhinaus kanns du die Anzahl der Tabellenzeilen auf die notwendigen Zeilen begrenzen.
                                    Alle 3 Tabellen müssen aber die gleichen Anzahl von Zeilen haben.
                                    Tabelle Gruppen, logname und specials müssen also die gleiche Zeilenanzahl haben.

                                    vG Looxer

                                    1 Antwort Letzte Antwort
                                    0
                                    • L looxer01

                                      @Kampfratte sagte in [Vorlage] Betriebsstundenzähler & Verbrauchsrechner:

                                      Das Script zählt ja, wenn ein Gerät an ist, auch über Nacht. Also wenn ein Gerät um 22 Uhr abends eingeschalten wird und morgens dann um 4 Uhr wieder aus. Da schreibt das Script dann für heute 6 Std. Laufzeit rein.

                                      Da hast du recht so ist es programmiert. Ich hatte nie darüber nachgedacht, dass das störend sein könnte.
                                      Ein Einbau wäre aufwändig aber möglich. Dazu müßte beim Tageswechsel ermittelt werden welche Zählungen aktuell laufen. Laufende Zählungen müssen dann im Tag/woche/Jahr abgespeichert werden und der Stand für den neuen Tag weiterlaufen.
                                      Allerdings schaffe ich das zeitlich einfach nicht :(

                                      lG Looxer

                                      K Offline
                                      K Offline
                                      Kampfratte
                                      schrieb am zuletzt editiert von
                                      #326

                                      @looxer01 sagte in [Vorlage] Betriebsstundenzähler & Verbrauchsrechner:

                                      @Kampfratte sagte in [Vorlage] Betriebsstundenzähler & Verbrauchsrechner:

                                      Das Script zählt ja, wenn ein Gerät an ist, auch über Nacht. Also wenn ein Gerät um 22 Uhr abends eingeschalten wird und morgens dann um 4 Uhr wieder aus. Da schreibt das Script dann für heute 6 Std. Laufzeit rein.

                                      Da hast du recht so ist es programmiert. Ich hatte nie darüber nachgedacht, dass das störend sein könnte.
                                      Ein Einbau wäre aufwändig aber möglich. Dazu müßte beim Tageswechsel ermittelt werden welche Zählungen aktuell laufen. Laufende Zählungen müssen dann im Tag/woche/Jahr abgespeichert werden und der Stand für den neuen Tag weiterlaufen.
                                      Allerdings schaffe ich das zeitlich einfach nicht :(

                                      lG Looxer

                                      Nabend Looser,

                                      habe es nun geschafft, das Script ein wenig um zu bauen, so dass die Schaltzeiten Nachts um 0 Uhr auf 0 zurück gesetzt werden indem ich eine neue Funktion geschrieben habe und diese Function dann gleich zu beginn deiner Funktion PeriodChange aufrufen lasse. Es wird also überprüft, welcher Status des Gerätes auf "true" ist, also an ist, dann wird die Laufzeit incl. der bereits gespeicherten Zeit in Tag, Woche, Monat und Jahr geschrieben. Erst danach wird der aktuelle Tag dann genullt und ins BEVORE geschrieben. Wie dann auch bei Monat am 01. oder Jahr beim Jahreswechsel und die Woche am Montag.

                                      Lg Uwe

                                      ? 1 Antwort Letzte Antwort
                                      0
                                      • K Kampfratte

                                        @looxer01 sagte in [Vorlage] Betriebsstundenzähler & Verbrauchsrechner:

                                        @Kampfratte sagte in [Vorlage] Betriebsstundenzähler & Verbrauchsrechner:

                                        Das Script zählt ja, wenn ein Gerät an ist, auch über Nacht. Also wenn ein Gerät um 22 Uhr abends eingeschalten wird und morgens dann um 4 Uhr wieder aus. Da schreibt das Script dann für heute 6 Std. Laufzeit rein.

                                        Da hast du recht so ist es programmiert. Ich hatte nie darüber nachgedacht, dass das störend sein könnte.
                                        Ein Einbau wäre aufwändig aber möglich. Dazu müßte beim Tageswechsel ermittelt werden welche Zählungen aktuell laufen. Laufende Zählungen müssen dann im Tag/woche/Jahr abgespeichert werden und der Stand für den neuen Tag weiterlaufen.
                                        Allerdings schaffe ich das zeitlich einfach nicht :(

                                        lG Looxer

                                        Nabend Looser,

                                        habe es nun geschafft, das Script ein wenig um zu bauen, so dass die Schaltzeiten Nachts um 0 Uhr auf 0 zurück gesetzt werden indem ich eine neue Funktion geschrieben habe und diese Function dann gleich zu beginn deiner Funktion PeriodChange aufrufen lasse. Es wird also überprüft, welcher Status des Gerätes auf "true" ist, also an ist, dann wird die Laufzeit incl. der bereits gespeicherten Zeit in Tag, Woche, Monat und Jahr geschrieben. Erst danach wird der aktuelle Tag dann genullt und ins BEVORE geschrieben. Wie dann auch bei Monat am 01. oder Jahr beim Jahreswechsel und die Woche am Montag.

                                        Lg Uwe

                                        ? Offline
                                        ? Offline
                                        Ein ehemaliger Benutzer
                                        schrieb am zuletzt editiert von
                                        #327

                                        @Kampfratte Hi, bist du so nett, und stellst das Script hier rein? Genau diese Änderung von dir macht es interessant.. :-)

                                        etvE 1 Antwort Letzte Antwort
                                        0
                                        • ? Ein ehemaliger Benutzer

                                          @Kampfratte Hi, bist du so nett, und stellst das Script hier rein? Genau diese Änderung von dir macht es interessant.. :-)

                                          etvE Offline
                                          etvE Offline
                                          etv
                                          schrieb am zuletzt editiert von
                                          #328

                                          Servus @looxer01,

                                          ich hab dein Script nun schon viele Jahre am Laufen und gleich mal danke für das tolle Programm!!

                                          Drei Fragen hab ich an dich....

                                          1. Problem bei sich auf Null stellenden Zählern
                                            Ich verwende ein paar Shelly Plugs die den Verbrauch loggen und hab die in dein Programm eingebunden. Die werden aber ab und an abgesteckt und wieder angesteckt und resetten somit ihren Verbrauchszähler und fangen wieder bei Null an.
                                            Wie kann ich das im Programm "abfangen" dass hier nun ein negativer Verbrauch angezeigt wird, also wie sag ich dem Programm, dass er einfach "weiterzählen" soll?

                                          2. Mitternachtswechsel day/before, week/before
                                            Mir kommt gelegentlich der eine oder andere Wert unter, der zwar auf "before" geschoben wird, aber nicht auf Null gestellt wird.
                                            Ich beobachte das z.B. bei meinem Kühlschrank der dann am Vortag 700 Wh verbraucht hat, nun um 8:00 Uhr aber schon 920 Wh....also eindeutig der Wert von gestern + etwa ein Drittel des normalen Tagesverbrauchs.

                                          Wo kann ich da zu suchen beginnen um den Fehler zu finden? In welchem Teil des Programms kann ich mir Log-Einträge erzeugen lassen um das zu untersuchen?

                                          1. Durchschnitt
                                            Im Programm steht unter den Kommentaren bei dieser Position (9), dass dies noch nicht integriert ist. Ist das schon in Planung oder Arbeit, oder dauert das noch ein Zeitchen?
                                            Ist eine reine Infofrage - also kein Stress!!

                                          Liebe Grüße
                                          tom

                                          …ist schon sehr lange begeisterter ioBroker Nutzer! 1x zu Hause und 1x auf der Alm. ioBroker ist das 'Hirn' des Smarthome und steuert HomeMatic und Shellys, loggt was so passiert, zeigt es auf Tabletts schön an und ermöglicht mir via Cloud Adapter den Fernzugriff...

                                          L K 2 Antworten Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          472

                                          Online

                                          32.5k

                                          Benutzer

                                          81.8k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe