Willkommen auf unserer neuen Forenplattform für das Bus-Profi Forum

Neue Felder für die persönlichen Daten
Man kann jetzt seine öffentlich einsehbare Daten genau bestimmen. Details findet ihr in in diesem Beitrag.

Durch die neue Forensoftware und die Portierung der Daten konnten die Passwörter aus dem alten Forum nicht übernommen werden, bitte lassen Sie sich ein neues Passwort über die Passwort vergessen Funktion zusenden. Sollte es zu Problemen kommen kontaktieren Sie das Bus-Profi Team per E-Mail.

Anwesenheitssimulation

OpenHAB
Antworten

Themenersteller
BBL
Schon länger hier...
Schon länger hier...
Beiträge: 99
Registriert: Mi 3. Dez 2014, 13:59
Status: Offline

#1 Anwesenheitssimulation

Beitrag von BBL »

Hallo,

ich habe für mein Haus eine Anwesenheitssimulation geschrieben, die ich gerne teilen möchte. Vielleicht hilft dem einen oder anderen dieses Beispiel bei einer ähnlichen Aufgabenstellung.

Im Vorfeld habe ich alle Items von Lampen, die ich simulieren möchte, zu einer Gruppe zusammengefasst.
Mit Rolläden kann man das genauso machen, in meinem Fall ging es aber nur um 3 Stück, die steuere ich einzeln an.

Hier ist das Regelwerk dazu, inline kommentiert:

Code: Alles auswählen

import org.openhab.core.library.types.*
import org.openhab.model.script.actions.Timer

// Regeln fuer die Anwesenheitssimulation

var int Presence_MinTime = 120  // Mindestleuchtdauer in Sek.
var int Presence_MaxTime = 1200 // Maximalleuchtdauer in Sek.

// Schalte die Lichter der Gruppe gPS zwischen 6 und 23 Uhr zufaellig
rule LightsPresenceSimulation
when
	Time cron "0 */10 6-22 * * ?"
then
	// nur, wenn es draussen dunkel ist
	var int lux = Integer::parseInt(Lux_Outside.state.toString)
	if ((Presence.state == ON) && (lux < 20)) {
		// nur in 50% der Faelle
		if ((new java.util.Random).nextInt(2) == 1) { 
		 	
		 	// waehle eine Dauer
			var int randomTime = (new java.util.Random).nextInt(Presence_MaxTime - Presence_MinTime) + Presence_MinTime
			// suche eine Lampe aus der Gruppe aus
			var int randLightIndex = (new java.util.Random).nextInt(gPS.members.size)
			logInfo("org.openhab","Switching light ON for " + randomTime + "s: " + gPS.members.get(randLightIndex).name
			sendCommand(gPS.members.get(randLightIndex), ON)
			// Timer zum wieder ausschalten
			createTimer(now.plusSeconds(randomTime)) [|
			 	logInfo("org.openhab","Switching light OFF: " + gPS.members.get(randLightIndex).name)
			 	sendCommand(gPS.members.get(randLightIndex), OFF)
		        ]
		}
	}
end

// Fahre die Rolladen im OG abends zu unterschiedlichen Zeiten nach 20 Uhr runter
rule Presence_RS_OG_Down
when
	Time cron "0 0 20 * * ?"
then
	if (Presence.state == ON) {
		// KiZi: in den naechsten 30min runter
		createTimer(now.plusMinutes( (new java.util.Random).nextInt(30) )) [|
			sendCommand(RS_OG_KZ, DOWN)
		]

		// SchlaZi: in den naechsten 90..120min runter
		createTimer(now.plusMinutes(90 + (new java.util.Random).nextInt(30) )) [|
			sendCommand(RS_OG_SZL, DOWN)
			sendCommand(RS_OG_SZR, DOWN)
		]
 
	}
end

// Fahre die Rolladen im OG morgens zu unterschiedlichen Zeiten ab 7 Uhr hoch
rule Presence_RS_OG_UP
when
	Time cron "0 0 7 * * ?"
then
	if (Presence.state == ON) {
		// KiZi: in den naechsten 30min hoch
		createTimer(now.plusMinutes( (new java.util.Random).nextInt(30) )) [|
			sendCommand(RS_OG_KZ, UP)
		]

		// SchlaZi: in den naechsten 60min hoch
		createTimer(now.plusMinutes( (new java.util.Random).nextInt(60) )) [|
			sendCommand(RS_OG_SZL, UP)
			sendCommand(RS_OG_SZR, UP)
		]
	}
end
Home Assistant Nutzer (vormals openHAB Nutzer)
Antworten