Die Rule erstellt einen Timer und ist danach beendet. Die Rule führt den Code nicht aus!
Ich breche den Code zum besseren Verständnis mal auf:
Dieser Teil wird in der Rule tatsächlich ausgeführt:
Code: Alles auswählen
var Timer tMyTimer = null // globale Variable, zuoberst in der *.rules Datei anlegen
rule "timer starten"
when
//irgendein Trigger, z.B. Lagevorgang gestartet
then
if(tMyTimer === null) { // nur falls der Timer noch nicht existiert
tMyTimer = createTimer(now.plusSeconds(1), [])
}
end
Die Zuweisung
tMyTimer = createTimer(now.plusSeconds(1), []) legt im Scheduler einen Eintrag an. Der geplante Zeitpunkt ist "eine Sekunde von jetzt an". Der zu diesem Zeitpunkt auszuführende Codeblock steht als zweiter Parameter in den eckigen Klammern.
tMyTimer bekommt einen Zeiger auf den Scheduler Eintrag. Somit kann die Rule Engine gezielt auf diesen Scheduler Eintrag zugreifen.
Danach ist die Rule zuende.
Dieser Teil wird im Scheduler gespeichert:
Code: Alles auswählen
// die Berechnung, welche zyklisch erfolgen soll
if(Bedingung) { // Abbruchbedingung
tMyTimer = null
// und was sonst noch zu erledigen ist, z.B. Ladevorgang abbrechen
} else
tMyTimer.reschedule(now.plusMinutes(5)) // Timercode in 5 Minuten erneut ausführen
Dieser Code wird ausgeführt, wenn der Timer abläuft.
Beim ersten Mal läuft der Timer nach einer Sekunde ab (könnte man natürlich auch schon erst nach 5 Minuten machen... ganz nach Belieben).
Die Zeile
tMyTimer.reschedule(now.plusMinutes(5)) nutzt nun den Zeiger auf den Scheduler-Eintrag um den Eintrag erneut in der Zukunft einzuplanen, in diesem Fall halt nach 5 Minuten.
shuo hat geschrieben: ↑3. Dez 2021 21:35
Renault leider verweigert bei zuvielen Abfragen die Serverabfrage. Daher möchte ich die Serverabfragen auf ein Minimum beschränken. Sonst werde ich wieder gesperrt.
Was nur beweist, dass die Cloud böse ist.
Ladeüberwachung ist kein Missbrauch, und wenn Renault nicht in der Lage ist, die Datenanfragen zu bewältigen, sollten sie den Job denjenigen Leuten überlassen, die Ahnung davon haben.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet