Ziel: Ein Gerät soll nur eine Stunde am Tag laufen.
Besonderheit: Das Gerät wird bei Abwesenheit aktiviert und wird bei Anwesenheit wieder deaktiviert. Das Script funktioniert auch soweit. Aber wie merke ich mir global? dass die gewünschte Laufzeit bereits erreicht ist?
Welchen Ansatz soll man da verwenden?
PS: Hintergrund, es geht um einen Luftfilter der sonst bei Abwesenheit durchgehend laufen würde. Oder ein Luftentfeuchter. Und diese Solen auch eher 3 Std laufen, aber der Einfachheit halber, und eventuell fragen andere danach, habe ich eine Stunde im Titel geschrieben.
@dave83 vielleicht gibt das eine idee zu deinem thema
in testzahl ist der zeitstempel, wenn gerät auf true gegangen ist
in testzahl 2 sind die gesammelten minuten zwischen true und false vom gerät (testlogic)
Der Ansatz von @liv-in-sky ist gut. Leider Protokolliert der Ansatz die Laufzeit nur. Anbei ein Beispiel welches die Laufzeit protokolliert UND nach 1 Stunde abschaltet, und nur einen State (Die bisher vom Gerät verbrauchte Laufzeit) benötigt.
Im Spoiler findest du das auch als XML Import. Wichtig ist: Die Bausteine state value, state timestamp und previous timestamp sind identisch - der mit Objekt ID voreingestellte Baustein aus dem Triggerbereich, nur auf die jeweiligen Werte umgestellt.
Das Zurücksetzen via Zeitplan habe ich nicht nachgebaut - das brauchst du ggf. auch - zumindest zu anzeigezwecken oder in dem weiter unten beschriebenen Fall. Das Skript funktioniert aber auch ohne diesen Zeitplan.
Das Zurücksetzen der gespeicherten Laufzeit findet Statt sobald der Status des Gerätes sich das erste mal am "Folgetag" ändert.
Daraus folgt auch das
die Berechnete Laufzeit des Gerätes davon abhängt wie lange es am Einschalttag schon Gelaufen ist
die Laufzeit des Gerätes dem Ausschalttag zugeordnet wird.
Das ist interessant für Fälle wo das Gerät kurz vor Mitternacht eingeschaltet wird.
Nebenbei wird das Gerät auch direkt wieder ausgeschaltet sofern es irgendwie eingeschaltet wurde und die Laufzeit bereits erreicht war (extern)
Dadurch kann sich die Laufzeit um ein paar ms pro Versuch erhöhen. Wenn das Abschalten nicht gewünscht ist muss der else Zweig beim Vergleich von currentRunTime und MaxRunTime entfallen. In diesem Fall muss extern geprüft werden ob noch Laufzeit verfügbar ist bevor das Gerät eingeschaltet wird - Das erfordert dann wahrscheinlich das Rücksetzen der Laufzeit via Zeitplan um Mitternacht.