OpenHAB ist eine Quellen offene Hausautomationssoftware. In diesem Artikel erkläre ich kurz, wie es möglich ist Aktionen mit einer zufälligen Verzögerung auszuführen. Dieses Konzept nennt man auch Jitter.

Ziel

Mein Ziel ist es, ein Gerät mit einer zufälligen Verzögerung einzuschalten und dabei OpenHAB-Regeln zu nutzen. Es war von Anfang an klar, dass man den GUI Regel Editor von OpenHAB dafür nicht nutzen kann.

Die Lösung

Mit ein wenig Java-Verständnis und ein wenig lesen, kam ich auf die folgende Lösung:

rule "LampeVerzoegertAn"
when
	Time cron "0 54 20 1/1 * ? *"
then
        var int randomTime = (new java.util.Random).nextInt(20,125)
	    logInfo("org.openhab","Setting random lights timer to " + randomTime + "seconds.")
	    tRandomLights = createTimer(now.plusSeconds(randomTime)) [|
                MeineLampe.sendCommand(ON)
            ]
end

Im when-Block besagt die Zeile Time cron "0 54 20 1/1 * ? *", dass es sich um eine Zeitbasierte Regel handelt, welche um 20:54 ausgeführt wird. Das heißt, dass das Gerät frühestens um 20:54 eingeschaltet wird. In der Zeile var int randomTime = (new java.util.Random).nextInt(20,125) definieren wir die Variable randomTime des Types int (also eine Ganzzahl). In den Klammern wird der kleinste mögliche Wert (in diesem Fall 20 Sekunden) und der größte (längste) Wert angegeben(in diesem Fall 125 Sekunden, etwa zwei Minuten). Als nächsten wird eine Logausgabe erzeugt. tRandomLights = createTimer(now.plusSeconds(randomTime)) [|, erzeugt einen neuen Timer mit der Verzögerung von randomTime. Nach dem Klammerblock [| wird der passende Code eingegeben. In diesem Fall Schalte ich das Item (Aufpassen, nicht das Gerät!) ein. MeineLampe muss natürlich angepasst werden. Zuletzt wird der Block mit einer weiteren eckigen Klammer geschlossen.

Mit diesem Code habe ich erfolgreich eine Leuchte zufällig angeschaltet.