Anwesenheitssimulation durch zufälliges Schalten der Lichter

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Anwesenheitssimulation durch zufälliges Schalten der Lichter

Beitrag von Cyrelian »

Hallo zusammen,

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 :D

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
Ich hoffe wie immer, dass hilft dem einen oder anderen von Euch weiter und freue mich schon auf Vorschläge zur Verbesserung/Optimierung :D

CYA
Cyrelian

Erhard Pech
Beiträge: 8
Registriert: 2. Jan 2018 15:18

Re: Anwesenheitssimulation durch zufälliges Schalten der Lichter

Beitrag von Erhard Pech »

Moin Cyrelian,
ich finde deine Idee und auch die Ausführung super, dafür vielen Dank.
Eins kann ich allerdings nicht erkennen wie lange werden die Lichter angeschaltet und kann ich die Dauer auch zufällig eingrenzen?
Als Beispiel jede Lampe mindesten 30 Minuten ?
Beste Grüße

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Anwesenheitssimulation durch zufälliges Schalten der Lichter

Beitrag von Cyrelian »

Hi Erhard,

dank Dir.

Es gibt zwei Parameter die die Zeit "begrenzen".

Code: Alles auswählen

Time cron "0 */12 7-23 * * ?"
alle 12 Minuten zwischen 7-23 Uhr.

Code: Alles auswählen

var int randomTime = random.nextInt(360) 
alle 6 Minuten

Die Dauer ist also immer min. 12Min und variiert zwischen 12Min. und 18Min. D.h. sie ist immer zufällig eingegrenzt.
Du kannst also diese beiden Parameter verändern, um die gewünschte min. und max. Einschaltzeit zu generieren.

CU
Cyrelian

Benutzeravatar
alkaline
Beiträge: 173
Registriert: 20. Apr 2017 13:25

Re: Anwesenheitssimulation durch zufälliges Schalten der Lichter

Beitrag von alkaline »

Danke @ Cyrelian für das Script, welches ich auch für meine Zwecke nun im Einsatz habe.

maxx92
Beiträge: 5
Registriert: 6. Jan 2019 16:22

Re: Anwesenheitssimulation durch zufälliges Schalten der Lichter

Beitrag von maxx92 »

Hallo alle. Ich bekomme einen Fehler: The constructor ThreadLocalRandom() is not visible
Da ich kein Vollblut-Programmierer bin, sagt mir das nicht viel. Hat sich im letzten Jahr ev. hier etwas bei den Grundlagen verändert?
Gruss. Marc

maxx92
Beiträge: 5
Registriert: 6. Jan 2019 16:22

Re: Anwesenheitssimulation durch zufälliges Schalten der Lichter

Beitrag von maxx92 »

Noch was: Wie werden die Lichter am Schluss ALLE ausgeschaltet sein? Es scheint, als ob da ein paar weiter brennen, bis zum nächsten Mal schalten (am nächsten Tag)? Oder läuft bei mir was falsch?

maxx92
Beiträge: 5
Registriert: 6. Jan 2019 16:22

Re: Anwesenheitssimulation durch zufälliges Schalten der Lichter

Beitrag von maxx92 »

Öhm. Ist aber nicht mehr so viel los hier?

Benutzeravatar
seppy
Beiträge: 738
Registriert: 24. Sep 2015 20:25
Answers: 4
Wohnort: Bonn

Re: Anwesenheitssimulation durch zufälliges Schalten der Lichter

Beitrag von seppy »

Hi Marc,
Cyrelian ist nicht mehr besonders aktiv. Wo stehst Du denn? Und der Fehler alleine reicht nicht. Ein paar Logzeilen wären hilfreich.
Grüße,
Seppy
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren

- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung

maxx92
Beiträge: 5
Registriert: 6. Jan 2019 16:22

Re: Anwesenheitssimulation durch zufälliges Schalten der Lichter

Beitrag von maxx92 »

Hi Seppy
Danke für Deine Antwort. Die Fehlermeldung kommt im Visual Code Studio. So wie ich das sehe, läuft das Skript schon normal. Ich verstehe nur gerne, warum der Editor das reklamiert.. Was allerdings merkwürdig ist, ist dass die Lichter am Ende nicht sauber ausgeschaltet werden. Es kann also sein, dass über Nacht (oder tagsüber) das eine oder andere vom Skript eingeschaltene Licht brennt. Ich sehe im Code auch nicht, wo der Ausschaltbefehl (nach einem Einschaltbefehl) ist. Müsste da nicht beim Einschalten ein Timer mitgegeben werden oder zumindest ein passender Ausschaltbefehl. So wie bei einer Linksklammer die rechte folgen muss?
Gruss. Marc

Benutzeravatar
seppy
Beiträge: 738
Registriert: 24. Sep 2015 20:25
Answers: 4
Wohnort: Bonn

Re: Anwesenheitssimulation durch zufälliges Schalten der Lichter

Beitrag von seppy »

Hi,
warum der Editor das anmeckert kann ich Dir nicht sagen. Da bin ich zu wenig drin, aber wenn es läuft ... wahrscheinlich kennt VSC die Klasse nicht?!
Zum Ausschalten muss ich mich mal rantasten. Zwingend muss es keinen Auschaltbefehl geben!

Scheinbar hat Cyrelian keinen abschließenden Ausschaltbefehl in dieser Rule vorgesehen, den müsstest Du noch einbauen. Du könntest einfach in einem Durchlauf prüfen ob now.getHourofDay() == 23 und dann gWohnungLicht auf OFF setzen.
Grüße,
Seppy
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren

- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung

Antworten