da es schon ein paar Wochen her ist, dass ich hier was zum besten gegeben habe, wollte ich Euch meine neue "Rule" zur Anwesenheitssimulation nicht vorenthalten.
Mein Ziel war es, die Lichter im Haus wirklich "zufällig" ein bzw. auszuschalten. Anfangs hatte ich das mit fixen Cronjobs gelöst, die aber ja immer zu gleichen Zeit laufen, also sehr vorhersehbar waren. Ich bin dann auf eine Rule von anordvall aus der community.openhab.org gestoßen und hab mich ein paar Abende damit beschäftigt diese zu erweitern, bzw. sie zu optimieren. Rausgekommen ist das, und sie ist auch schon bei einem Arbeitskollegen und mir produktiv im Einsatz
Code: Alles auswählen
val String filename = "dev.rules"
var Timer RandomLightsTimer = null
val java.util.concurrent.ThreadLocalRandom random = (new java.util.concurrent.ThreadLocalRandom)
rule "Urlaubsmodus / Licht zufällig einschalten"
when
Time cron "0 */12 7-23 * * ?"
then
if ((AutoHoliday_Light.state == ON) && (now.isBefore((Sonnenaufgang_Time.state as DateTimeType).calendar.timeInMillis) || now.isAfter((Sonnenuntergang_Time.state as DateTimeType).calendar.timeInMillis))) {
// Licht zufällig einschalten 50/50
if ((new java.util.Random()).nextInt(2) == 1) {
// Timer erstellen mit einem zufälligen Wert in Sekunden
var int randomTime = random.nextInt(360)
logInfo(filename,"Neuer Wert Zufallstimer: " + randomTime + " Sekunden.")
RandomLightsTimer = createTimer(now.plusSeconds(randomTime)) [|
var randomLights = random.nextInt(gWohnungLicht.allMembers.size)
var randomLightCurrentState = gWohnungLicht.allMembers.get(randomLights).state
// ersetzen der Dimmer-Werte von "0" auf "OFF"
if (randomLightCurrentState == 0) {
(randomLightCurrentState = OFF)
}
// alle Dimmer-Werte von 1-100 werden als ON gewertet
var randomLightNewState = if (randomLightCurrentState != OFF) OFF else ON
logInfo(filename, "Schalte Licht " + gWohnungLicht.allMembers.get(randomLights).name + " von " + randomLightCurrentState + " zu " + randomLightNewState)
//sendCommand(gErdgeschossLicht.allMembers.get(randomLights), randomLightNewState)
gWohnungLicht.allMembers.get(randomLights).sendCommand(randomLightNewState)
]
}
}
end
CYA
Cyrelian