ich habe mir ein BlocklyScript erstellt das mir die Laufzeit einer Waschmaschine hochzählt. Das funktioniert auch soweit. Evtl. kann man das auch schöner/besser umsetzten aber so läuft das gerade bei mir. Nun bin ich auf die Idee gekommen ob es evtl. möglich ist dieses Script in weiteren Rules zu verwenden. Gibt es irgendeine Möglichkeit ein Script zur selben Zeit mehrmals auszuführen und unterschiedliche Werte in Unterschiedlich Items zu schreiben. Also quasi, Geschirrspüler läuft bereits und später startet die Waschmaschine und ich möchte die Laufzeit sehen.
Das Script, hier habe ich bereits die Items durch verschiedene Variablen ersetzt. Die Timer starten auch, jedoch wenn Timer1 läuft und Timer2 startet wird Timer1 gestoppt. Liegt vermutlich an den Variablen der Zeitberechnung.
Code: Alles auswählen
var TriggerItem, ItemObjekt, tTimer, iTimer, iHour, iMinute, strState;
TriggerItem = ctx['TriggerItem'];
ItemObjekt = ctx['getItem'];
tTimer = ctx['tTimer'];
if (cache.private.exists(tTimer)) { cache.private.remove(tTimer).cancel(); };
if (TriggerItem == 'OFF') {
ItemObjekt.postUpdate('');
} else {
iTimer = 0;
if (cache.private.exists(tTimer) === false || cache.private.get(tTimer).hasTerminated()) {
cache.private.put(tTimer, actions.ScriptExecution.createTimer(tTimer, time.ZonedDateTime.now().plusMinutes(1), function (timer_context) {
iTimer = (typeof iTimer === 'number' ? iTimer : 0) + 1;
iHour = Math.floor((iTimer / 60));
iMinute = iTimer - iHour * 60;
strState = [iHour,':',iMinute < 10 ? '0' + String(iMinute) : iMinute].join('');
ItemObjekt.postUpdate(strState);
if (cache.private.exists(tTimer)) { cache.private.get(tTimer).reschedule(time.ZonedDateTime.now().plusMinutes(1)); };
}, ));
};
}
Code: Alles auswählen
var tTimer, Number2, ItemObject;
tTimer = ctx.ruleUID;
ItemObject = items.getItem('TestString');
rules.runRule('Script_Timer', {'TriggerItem': event.itemState?.toString(), 'getItem': ItemObject, 'tTimer': tTimer});
Danke
Gruß Lenschi