Die Timervariable ist ja ein Handle für den Zugriff auf den Timer. Zu Beginn ist die Variable mit null gefüllt. Wenn der Timer erzeugt wird, liefert die Funktion createTimer() den Handle zurück, der daraufhin in der Variablen gespeichert wird. Soweit, so gut
Was kann man nun mit dem Handle anfangen?
Zunächst einmal kann man den Timer entfernen (myTimer.cancel). Der Timer wird umgehend aus dem Scheduler gelöscht.
Man kann den Timer erneut einplanen, bzw, die Startzeit ändern (myTimer.reschedule(dateTime)). Aber Obacht, das geht nur, solange der Timer noch läuft.
Man kann prüfen, ob der Timer beendet wurde (myTimer.hasTerminated) oder ob er gerade ausgeführt wird (myTimer.isRunning) Damit ist allerdings gemeint, dass der Code gerade ausgeführt wird, nicht, dass gerade auf die Ausführung gewartet wird. Im Zweifel ist diese Eigenschaft also nur wenige Millisekunden true.
Wenn der Timer gerade ausgeführt wird, kann man den Timer auch noch mit reschedule erneut planen. Ein cancel funktioniert aber nicht mehr, der Code läuft ja schon.
Wenn der Timer abgelaufen ist, verliert der Handle seine Gültigkeit. Allerdings könnte es ja sein, dass man nachschauen möchte, ob der Timer ausgeführt wurde (hasTerminated) weshalb der Handle nicht gelöscht wird.
Möchte man also in einer Rule einen Timer nur anlegen, wenn er noch nicht existiert, muss man nicht nur auf null prüfen, sondern im Timer selbst die Variable zum Abschluss auch wieder auf null setzen. Der Timer muss also so aussehen:
Code: Alles auswählen
var Timer t_FHZ_2 = null // Am Anfang der Datei erstellen
[...]
if((Komfortleistung.state as Number) >= 700) {
SRelais_B2_Relay2Output.sendCommand(ON)
if(t_FHZ_2 === null)
t_FHZ_2 = createTimer(now.plusSeconds(120), [ |
FHZ_2_Freigabe.postUpdate(ON)
t_FHZ_2 = null
] )
}
[...]
Mehr braucht es eigentlich nicht, um auf das Vorhandensein des Timers zu testen.
Der Befehl
ist gleichbedeutend mit der Zeile
Er ist also im Kontext (es ist sicher, dass FHZ_2 === null ist) sinnlos.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet