RAWS RandomAnWesenheitsSimulation
Verfasst: 04.09.2013, 09:36
RAWS - random Anwesenheits-Simulation
Da ich im Forum nichts passendes gefunden habe, baute ich mir diese Simulation zusammen. Sie verwendet CUxD system.exec Zufallsgeneratoren und CUxD - Timer und setzt deshalb die Installation von CUxD und Installation von CUxD System.Exec und CUxD System.Timer voraus (CUx Hardware wird aber nicht benötigt).
Achtung, ab CUxD version 0.58g ist die Random-Funktion im System.Timer eingebaut, System.Exec und die Scripte werden nicht mehr benötigt. Ich empfehle deshalb die Verwendung des Programms Version 2. Post 1 bleibt nur als Funktionsbeschreibung stehen.
Version 2: http://homematic-forum.de/forum/viewtop ... 27#p111460
Fix Trigger:http://homematic-forum.de/forum/viewtop ... 27#p252218
Der CUxD-Timer beinhaltet 16 Kanäle, man kann deshalb mit einem Timer 8 unabhängige Simulationen programmieren.
Pro Kanal (Leuchte) triggern sich 2 Timer gegenseitig über Kreuz, einer für die Einschaltzeit, einer für die Ausschaltzeit. Bei jedem Durchgang werden die Timer mit einer neuen Zufallszahl geladen, und zwar solange, wie die Nacht dauert (im einfachsten Fall kann die Astrofunktion dafür verwendet werden - mindestens ebensogut geht das Tageszeiten - Skript).
Bei Sonnenuntergang wird die Simulation gestartet (über den ODER-Abschnitt -Zeitsteuerung-Auslösen zu Zeitpunkten des HM-Programms), das Licht wird gelöscht, anschliessend wird im Script eine Zufallszahl generiert und in den Timer geladen, dabei wird dieser gestartet. Der Ablauf dieses Timers startet dann das 2. HM-Programm, welches die Abbruchbedingung testet, das Licht einschaltet, die Zufallszeit für die Einschaltdauer generiert und den 2. Timer startet. Der Ablauf dieses Timers startet dann wieder den 1. Timer usw.
Das Schöne dabei ist die Flexibilität, Intervalle, Minimumzeit und Zeitmultiplikator lassen sich für Ein- und Ausschaltzeit getrennt einstellen.
Damit nicht alle Leuchten gleichzeitig einschalten, beginne ich die Simulation mit der Ausschaltzeit.
In der vorgestellten Ausführung kann es vorkommen, dass die Einschaltzeit über den Zeitpunkt des Sonnenaufgangs hinaus besteht. In meinem Fall ist dies unerheblich, wenn dies stört, kann der Aktor bei Sonnenaufgang zusätzlich konventionell über Geräteauswahl sofort Schaltzustand:Aus ausgeschaltet werden.
Programm Off_Timer (1. Start über den ODER-Abschnitt -Zeitsteuerung Auslösen zu Zeitpunkten mit Astrofunktion nachts)
Programm On_Timer (Loop solange Bedingung: wenn Zeitsteuerung Astrofunktion nachts)
Beispiel Zufallssteuerung
Es lässt sich natürlich darüber diskutieren, welche Simulationsart abschreckender wirkt, die rein zufallsgesteuerte oder diejenige, die sich fix am Benutzerverhalten orientiert. Vermutlich ist eine Kombination optimal. Dazu könnte man z.B. die Zufallssimulation gezielt erst nach Mitternacht einsetzen, vorher feste Ein- und Auszeiten.
Korrektur 04.09.13 23:50 kleiner Fehler im Skript, richtig: var rand20=((RAND%11)+1)*600; ! 10-120 Min
Da ich im Forum nichts passendes gefunden habe, baute ich mir diese Simulation zusammen. Sie verwendet CUxD system.exec Zufallsgeneratoren und CUxD - Timer und setzt deshalb die Installation von CUxD und Installation von CUxD System.Exec und CUxD System.Timer voraus (CUx Hardware wird aber nicht benötigt).
Achtung, ab CUxD version 0.58g ist die Random-Funktion im System.Timer eingebaut, System.Exec und die Scripte werden nicht mehr benötigt. Ich empfehle deshalb die Verwendung des Programms Version 2. Post 1 bleibt nur als Funktionsbeschreibung stehen.
Version 2: http://homematic-forum.de/forum/viewtop ... 27#p111460
Fix Trigger:http://homematic-forum.de/forum/viewtop ... 27#p252218
Der CUxD-Timer beinhaltet 16 Kanäle, man kann deshalb mit einem Timer 8 unabhängige Simulationen programmieren.
Pro Kanal (Leuchte) triggern sich 2 Timer gegenseitig über Kreuz, einer für die Einschaltzeit, einer für die Ausschaltzeit. Bei jedem Durchgang werden die Timer mit einer neuen Zufallszahl geladen, und zwar solange, wie die Nacht dauert (im einfachsten Fall kann die Astrofunktion dafür verwendet werden - mindestens ebensogut geht das Tageszeiten - Skript).
Bei Sonnenuntergang wird die Simulation gestartet (über den ODER-Abschnitt -Zeitsteuerung-Auslösen zu Zeitpunkten des HM-Programms), das Licht wird gelöscht, anschliessend wird im Script eine Zufallszahl generiert und in den Timer geladen, dabei wird dieser gestartet. Der Ablauf dieses Timers startet dann das 2. HM-Programm, welches die Abbruchbedingung testet, das Licht einschaltet, die Zufallszeit für die Einschaltdauer generiert und den 2. Timer startet. Der Ablauf dieses Timers startet dann wieder den 1. Timer usw.
Das Schöne dabei ist die Flexibilität, Intervalle, Minimumzeit und Zeitmultiplikator lassen sich für Ein- und Ausschaltzeit getrennt einstellen.
Damit nicht alle Leuchten gleichzeitig einschalten, beginne ich die Simulation mit der Ausschaltzeit.
In der vorgestellten Ausführung kann es vorkommen, dass die Einschaltzeit über den Zeitpunkt des Sonnenaufgangs hinaus besteht. In meinem Fall ist dies unerheblich, wenn dies stört, kann der Aktor bei Sonnenaufgang zusätzlich konventionell über Geräteauswahl sofort Schaltzustand:Aus ausgeschaltet werden.
Programm Off_Timer (1. Start über den ODER-Abschnitt -Zeitsteuerung Auslösen zu Zeitpunkten mit Astrofunktion nachts)
Code: Alles auswählen
string tmpRand; ! Hilfsvariable für Zufallszahl
integer RAND; ! Zufallszahl
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("hexdump -d -n 2 /dev/urandom");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string tmpRand = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
RAND = (tmpRand.Substr(10)).ToInteger();
var rand20=((RAND%11)+1)*600; ! 10-120 Min
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State(rand20);
Programm On_Timer (Loop solange Bedingung: wenn Zeitsteuerung Astrofunktion nachts)
Code: Alles auswählen
string tmpRand;
integer RAND;
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("hexdump -d -n 2 /dev/urandom");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string tmpRand = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
RAND = (tmpRand.Substr(10)).ToInteger();
var rand20=((RAND%11)+1)*600; ! 10-120 Min
dom.GetObject("CUxD.CUX2800001:2.TIMER_SET").State(rand20);
Es lässt sich natürlich darüber diskutieren, welche Simulationsart abschreckender wirkt, die rein zufallsgesteuerte oder diejenige, die sich fix am Benutzerverhalten orientiert. Vermutlich ist eine Kombination optimal. Dazu könnte man z.B. die Zufallssimulation gezielt erst nach Mitternacht einsetzen, vorher feste Ein- und Auszeiten.
Korrektur 04.09.13 23:50 kleiner Fehler im Skript, richtig: var rand20=((RAND%11)+1)*600; ! 10-120 Min