NEWS
[Vorlage] Betriebsstundenzähler & Verbrauchsrechner
-
bekomme beim Update des JS-Adapters folgende Fehlermeldung!
Unter dem Namen "Gasrechner" im JS Adapter, läuft dein Betriebsstundenzähler. Hast Du eine Idee was da schief läuft?2020-11-08 18:13:54.600 - error: javascript.0 (10717) script.js.common.Gasrechner: TypeError: Cannot set property '_ioBroker' of null 2020-11-08 18:13:54.601 - error: javascript.0 (10717) at schedule (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1296:36) 2020-11-08 18:13:54.602 - error: javascript.0 (10717) at script.js.common.Gasrechner:448:1 2020-11-08 18:13:54.603 - error: javascript.0 (10717) at script.js.common.Gasrechner:2943:3 2020-11-08 18:13:54.603 - error: javascript.0 (10717) at Script.runInContext (vm.js:130:18)
-
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 } }
-
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
-
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
-
@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 anfangenKannst 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] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
-
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
-
-
@sigi234
ja genau - jedenfalls das letzte veröffentlichte. -
besten Dank, es läuft wieder alles wie gewohnt...
-
@looxer01 sagte in [Vorlage] Generischer Betriebsstundenzähler und Verbrauchsrechner - Script:
@sigi234
ja genau - jedenfalls das letzte veröffentlichte.erst mal danke für die Entwicklung deines Scripts , nutze es auch schon sehr lange.
Aktualisierst du die Version weiter, bzw. lässt du uns an deinen letzten Änderungen teilhaben??Eigentlich funktioniert (noch) alles, deswegen nur mal so aus Neugier.
-
@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 -
@looxer01
geil, ich freu mich drauf... ich nutze Dein Script auch schon eine halbe Ewigkeit! -
@knopers1
Script Version 1.02. ist hochgeladen. -
@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
-
@sigi234
erledigt -
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
-
@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 nichtlG Looxer
-
@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
-
@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
-
@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 nichtlG 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