NEWS
[Vorlage] Betriebsstundenzähler & Verbrauchsrechner
-
Hallo Looxer,
also ich habs extra mal genau beobachtet, der gechaltene GPIO wandert nur einmal von true nach false wenn beim Gaszähler der magnet vorbeiwander und dann wieder auf true, ich werds aber umbauen. Wüsste nicht wo ich beim RPi im Iobroker da sonst was umstellen könnte ist ja wirklich onboard.
wegen den anderen Sachen konntest du kurz über die cfg drüberschaun ob das so passen würde und hast du eine idee wie ich den Gasverbrauch im Flot angeben könnte also den verbrauch von 0,1m³/Zeiteinheit zwischen zwei trigger. naja und das Summieren geht gar nicht irgendwie also auch wenn doppelt gezählt wird wird derzeit nichts summiert.
mfg Martin
-
Hallo Looxer.
Ersteinmal Danke und Lob für dein Script gen. BSZ. Mit meinen elektrischen Heizungen (IR) funktioniert das alles wunderbar.
Meine Frage nun. Wir bekommen zwar irgendwann demnächst smarte Stromzähler, aber ob die in den iobroker einbindbar sein werden, bleibt abzuwarten.
Ich habe bisher immer mtl. Wasser und Tag/Nachtstromzähler seit 2013 am Monatsende dokumentiert.
Bekomme ich irgendwie diese Daten in einen Zähler, der nach Eingabe des Ablesewerte die mtl. und jährlichen Verbräuche ausrechnet? Ich dachte, einen DP manuell anzulegen und hier am Monatsende den Zählerstand einzutragen, diesen DP durch dein Script beobachten zu lassen. Zweite Frage, die bisherigen Zählerstände - kann man die irgendwie nacherfassen?
Danke -
Hi Loxxer,
versuche zum 3. Mal das Skript ans Laufen zu bekommen. Außer zig Fehlermeldungen passiert haber nichts.
Ich nutze ein HM Türsensor um den Gasverbrauch zu messen.
Den Sensor habe ich wie folgt im Skript hinterlegt.Mehr Daten habe ich im Skript nicht geändert.
var Gruppen = []; // 1.Homematic ID, 2.Thema(no spaces) 3.History 4.DAY 5.Week 6.Month 7.Year 8.Switch 9 - 18 Status to log 19.stop 20.Loesch Gruppen[ 0] = ['hm-rpc.0.NEQ1678963' ,'HM_Gas_ping' ,true ,true ,true ,true ,true ,true ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // var logname = []; // Stat1 Stat2 Stat3 Stat4 Stat5 Stat6 Stat7 Stat8 Stat9 Stat10 logname[0] = ['Zaehler' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; 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' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' , '' ];
Ich bekomme folgende Fehlermeldung wenn ich das Skript starte:
18.3.2019, 08:19:59.930 [info ]: javascript.0 Stop script script.js.common.Testskripte.Betriebsstundenzähler 18.3.2019, 08:20:04.207 [info ]: javascript.0 Start javascript script.js.common.Testskripte.Betriebsstundenzähler 18.3.2019, 08:20:04.208 [error]: javascript.0 script.js.common.Testskripte.Betriebsstundenzähler compile failed: at script.js.common.Testskripte.Betriebsstundenzähler:293
Mein Log von ioBroker überschlägt sich dann
Kannst du mir weiterhelfen? Ich würde vermuten, es ist ne Kleinigkeit die ich hier falsch mache...ich komme nur leider nicht drauf.
Gruß
André -
@ahfreezer sagte in [Vorlage] Generischer Betriebsstundenzähler und Verbrauchsrechner - Script:
Hi Loxxer,
versuche zum 3. Mal das Skript ans Laufen zu bekommen. Außer zig Fehlermeldungen passiert haber nichts.
Ich nutze ein HM Türsensor um den Gasverbrauch zu messen.
Den Sensor habe ich wie folgt im Skript hinterlegt.Mehr Daten habe ich im Skript nicht geändert.
var Gruppen = []; // 1.Homematic ID, 2.Thema(no spaces) 3.History 4.DAY 5.Week 6.Month 7.Year 8.Switch 9 - 18 Status to log 19.stop 20.Loesch Gruppen[ 0] = ['hm-rpc.0.NEQ1678963' ,'HM_Gas_ping' ,true ,true ,true ,true ,true ,true ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // var logname = []; // Stat1 Stat2 Stat3 Stat4 Stat5 Stat6 Stat7 Stat8 Stat9 Stat10 logname[0] = ['Zaehler' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; 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' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' , '' ];
Ich bekomme folgende Fehlermeldung wenn ich das Skript starte:
18.3.2019, 08:19:59.930 [info ]: javascript.0 Stop script script.js.common.Testskripte.Betriebsstundenzähler 18.3.2019, 08:20:04.207 [info ]: javascript.0 Start javascript script.js.common.Testskripte.Betriebsstundenzähler 18.3.2019, 08:20:04.208 [error]: javascript.0 script.js.common.Testskripte.Betriebsstundenzähler compile failed: at script.js.common.Testskripte.Betriebsstundenzähler:293
Mein Log von ioBroker überschlägt sich dann
Kannst du mir weiterhelfen? Ich würde vermuten, es ist ne Kleinigkeit die ich hier falsch mache...ich komme nur leider nicht drauf.
Gruß
André@looxer01 : kleiner Ping hier im Thread. Vlt. eine Idee an welcher Stelle ich den Betriebsstundenzähler falsch konfiguriert habe?
VG
-
Hallo alle miteinander,
dieses Script ist genau das, was mir viele Aufgaben gleichzeitig abnimmt, super !!!
Ich möchte folgendes realisieren:
es werden s0-Impulse vom Strom-Verbrauchszähler (75 Imp./KWh), PV-Erzeugungszähler (600 Imp./KWh), Wasserverbrauchszähler (1 Imp./L) und vom Gasverbrauchszähler (100 Imp./qbm) von einer SPS erfasst und per Modbus-TCP an IOBroker übertragen.
Ich habe die Möglichkeit, jeden Impuls von jedem Zähler direkt zu übertragen oder die Umrechnung auf die jeweilige Wertigkeit direkt in der SPS zu machen.
Meine Frage ist: welche Methode ist die für das Script die bessere ? Und wie trage ich die Impulswertigkeit (bei Übertragung der Direktimpulse) in das Script ein ?
Ich hänge meine Eintragungen mal an:
var Gruppen = []; // 1.Homematic ID, 2.Feldname(no spaces) 3.History 4.DAY 5.Week 6.Month 7.Year 8.Switch 9 - 18 Status to log 19.stop 20.Loesch Gruppen[0] = ['modbus.6.holdingRegisters.40400_X11_1' ,'Strom-Bezug' ,true ,true ,true ,true ,true ,true ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Stromverbrauchserfassung Gruppen[1] = ['modbus.6.holdingRegisters.40401_X11_2' ,'Strom-Lieferung' ,true ,true ,true ,true ,true ,true ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Stromlieferungserfassung Gruppen[2] = ['modbus.6.holdingRegisters.40402_X11_3' ,'Wasser-Verbrauch' ,true ,true ,true ,true ,true ,true ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Wasserverbrauchserfassung Gruppen[3] = ['modbus.6.holdingRegisters.40403_X11_4' ,'Gas-Verbrauch' ,true ,true ,true ,true ,true ,true ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Gasverbrauchserfassung
var logname = []; // Stat1 Stat2 Stat3 Stat4 Stat5 Stat6 Stat7 Stat8 Stat9 Stat10 logname[0] = ['Stromverbrauch' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[1] = ['Stromlieferung' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[2] = ['Wasserverbrauch' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[3] = ['Gasverbrauch' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
var special = []; // 1.Round 2.add1 3.Faktor 4. Divisor 5.add2 6.Individuallogik 7: DELTA(M)Grenze 8.Frei 9.Durchschnitt - 10.Zaehlschwelle 11 Schedule 12. Min/MAX 13. MehrfachStatus 14. Selektives Logging special[0] = ['3' ,'' ,'75' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'true' ]; // Stromverbrauch in KWh special[1] = ['3' ,'' ,'600' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'true' ]; // Stromlieferung in KWh special[2] = ['3' ,'' ,'1000' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'true' ]; // Wasserverbrauch in L special[3] = ['3' ,'' ,'0.01' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'true' ]; // Gasverbrauch in QBM
Vielen Dank im voraus !
-
@steinkuhl HAllo alle miteinander,
ich habe es selber zum funktionieren gebracht, die Parameter der Zähler müssen bei Divisor hinein, nicht bei Faktor, jetzt läufts, super Sache.
Gruß Rainer
-
@ahfreezer Moin, hast du zu diesem Problem eine Lösung gefunden? Habe diese Fehlermeldung und sehr ähnliche Logeinträge seit gestern bei allen Scripten?
LG Marcel -
Ich denke ihr habt vergessen im Array "Gruppen" etwas für den Status zu setzten. Hier muss mindestens eines der Felder 9-18 befüllt sein. Im Biespiel von @ahfreezer müsste die Zeile so aussehen:
var Gruppen = []; // 1.Homematic ID, 2.Thema(no spaces) 3.History 4.DAY 5.Week 6.Month 7.Year 8.Switch 9 - 18 Status to log 19.stop 20.Loesch Gruppen[ 0] = ['hm-rpc.0.NEQ1678963' ,'HM_Gas_ping' ,true ,true ,true ,true ,true ,true ,'true' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
Wo bei das true natürlich passend ersetzt werden muss. (Siehe die Beschreibung des Punktes)
Gruß,
dsiggi -
@looxer01
Hallo,ich habe heute iobroker auf einem Raspberry Pi 4 neu installiert und bin verzweifelt auf der Suche wie ich die historischen Daten des BSZ übertragen kann.
Hat jemand eine Ahnung in welcher Datei diese Daten zu finden sind?Danke vorab!
-
Liebe Leute,
eine Frage hab ich zu dem Pfad der Daten. Die liegen ja unter javascript.0. und dann die Pfade die man ja eintragen kann.
Wie bekomm' ich meine Objekte in den Ordner "0_userdata.0."??
Dort liegen bei meiner neuen Installation alle selbst generierten Infos drinnen und da würde ich auch gerne die BSZ Daten drinnen haben, nur bekomm' ich den Pfad nicht von javascript.0. weg....
Liebe Grüße
Tom -
@etv
falls noch nicht bekannt: mit JS >=4.6.1 funktioniert es. Habe ich gerade getestet
var sysLocation = "0_userdata.0.BSZ.System"; -
@andi2055 , ja danke dir hab ich gelesen.
Ich hab mich in der Zwischenzeit daran "gewöhnt", dass diese Werte wo anders zu finden sind
Liebe Grüße
Tom -
Da es mit dem BSZ unteranderem das WEEK.BEFORE gibt, hab ich mal das Script mit der Anleitung umzusetzen versucht.
EDIT: Problem gelöst
-
Hallo
Seit dem Update auf Script-Engine 4.10.1 bekomme ich folgende Fehlermeldungen. Mit der vorigen Version lief alles noch.
-
@Kampfratte ja, das ist bei mir auch.
Hab zum Glück nur noch ein Datenpunkt drin, den ich mittlerweile anders auswerte... -
Kann ich bestätigen...... jemand eine Idee wie man es fixen kann?
-
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