- Smart Home mit FHEM: Intelligente Zeitschaltuhr
- FHEM: Schalten nach Wochentag (einfache if-Abfrage)
- FHEM: Günstiger Bewegungsmelder integriert
- Smart Home: Licht aus der Ferne einschalten und per App steuern
- Philips hue Bridge in FHEM anmelden
- FHEM if-Abfrage – Beispiel: Schalten nach Wochentag
- Screenshot mit Medion LifeTab (Android 4.4)
Smart-Home: Zufallszahlen in FHEM – Licht zufällig schalten
Mit dem FHEM Smart Home Server lassen sich zahlreiche Aktionen im “Smart Home” automatisieren – zum Beispiel das Einschalten der Gartenbeleuchtung bei Dunkelheit, das Hoch- und Herunterfahren der Rolläden zu bestimmten Zeiten oder eine intelligente Zeitschaltuhr, die nicht immer jeden Tag zur gleichen Zeit an- oder ausgeht, sondern einem zufälligen Rythmus folgt.
Das lässt sich zum Beispiel mit den Befehl sunrise und sunset abhängig von der Zeit des Sonnenaufgangs und Sonnenuntergangs abhängig schalten – oder einfach nach bestimmten Uhrzeiten oder Wochentagen.
▶ Wochentage in FHEM: Programmierung je nach Tag
▶ sunrise / sunset: Zeit-Programmierung nach Sonnenaufgang
Da der FHEM Server aber auf Perl basiert, lassen in FHEM auch Perl-Befehle und einfache Programmierungen nutzen – zum Beispiel, um Zufallszahlen zu erstellen und mit den Werten dieser Zufallsvariablen Ereignisse auszuführen: So lässt sich zum Beispiel die Schaltzeit in einem gewissen Zeitfenster variieren und das Licht nicht immer um genau 08:15 Uhr einschalten, sondern zum Beispiel jeden Tag zufällig zwischen 08:10 und 08:30 Uhr – und am Wochenende etwas später.
Zufallszahlen in FHEM: Zufälligen Wert in Variable speichern
Um mit FHEM einen Perl-Skript auszuführen, kann man es zum Beispiel in einen eigenen “define” Befehl setzen, der zu einer bestimmten Uhrzeit einmal am Tag gestartet wird, die Zufallszahlen erstellt und dann mit diesen Werten einen eigenen “define” mit den Schalt-Kommandos erzeugt – die dann zu der zufällig generierten Uhrzeit gestartet werden:
Rolladen in einem zufälligen 15 Minuten Zeitrahmen steuern:
Wie man Daten (z.B. ein neuer Define, Attribute oder Änderungen) in FHEM eingibt und was man beachten muss, zeigen wir in diesem Artikel!
define morgens_Schlafzimmer_Rollaeden at *08:00:00 {\ if (!$we) {\ my $Zufallszahl = int(rand(15) +1 );;\ my $Uhr = "08:".$Zufallszahl.":".$Zufallszahl;;\ fhem("define morgens_Schlafzimmer_Rollaeden_auf1 at *".$Uhr." { fhem('set SZ_ROLLADEN on') }");;\ }else{\ my $Zufallszahl = int(rand(15) +1 );;\ my $Uhr = "10:".$Zufallszahl.":".$Zufallszahl;;\ fhem("define morgens_Arbeitszimmer_Rollaeden_auf1 at *".$Uhr." { fhem('set SZ_ROLLADEN on') }");;\ }\ }
Achtung: Dieses Skript ist so angelegt, dass es direkt in die FHEM Konfigurationsdatei “fhem.cfg” kopiert werden kann – daher ist der “\” am Ende der Zeile und die doppelten “;;” wichtig. Kopiert man das Skript über die Web-Oberfläche in eine Definition, muss man den Backslash “\” weglassen und darf eine Zeile nur mit einem “;” abschließen.
Dieses Skript wird mit einem “define” Befehl jeden Morgen um 08:00 Uhr gestartet und erzeugt dann eine Zufallszahl zwischen 1 und 15. In der Woche werden die Rolläden dann zwischen 08:01:01 und 08:15:15 Uhr hochgefahren, am Wochenende erst zwischen 10:01:01 und 10:15:15 Uhr.
Zufällige Lampensteuerung in gewissen Zeitrahmen
Mit einer leicht abgewandelten Version des Skriptes lässt sich auch abends eine Lampe einschalten – dabei kann man mit dem FHEM-Befehl “on-for-timer” dafür sorgen, dass die Lampe nach einer gewählten Uhrzeit auch direkt wieder ausgeschaltet wird.
define abends_Stehlampe at *19:00:00 {\ my $Zufallszahl = int(rand(15) +11 );;\ my $Uhr = "19:".$Zufallszahl.":".$Zufallszahl;;\ fhem("define Stehlampe_Zufall at *".$Uhr." { fhem('set STEHLAMPE on-for-timer 3600') }");;\ }
Mit diesem Skript wird eine Stehlampe abends zwischen 19:01:01 und 19:15:15 Uhr angeschaltet und leuchtet dann für eine Stunde (3600 Minuten) – auf Wunsch kann auch wieder eine zusätzliche Regelung nach Wochentag oder Wochenende wie in dem Rolladen-Skript ergänzt werden:
define abends_Stehlampe at *19:00:00 {\ if (!$we) {\ my $Zufallszahl = int(rand(15) +11 );;\ my $Uhr = "18:".$Zufallszahl.":".$Zufallszahl;;\ fhem("define Stehlampe_Zufall at *".$Uhr." { fhem('set STEHLAMPE on-for-timer 3600') }");;\ }else{\ my $Zufallszahl = int(rand(15) +11 );;\ my $Uhr = "19:".$Zufallszahl.":".$Zufallszahl;;\ fhem("define Stehlampe_Zufall at *".$Uhr." { fhem('set STEHLAMPE on-for-timer 3600') }");;\ }\ }
Als weitere Ergänzung lässt sich dann auch die Zeit, die die Lampe eingeschaltet sein soll, noch mit einem Zufallswert setzen. Dazu ergänzt man das Skript noch um einen zweiten Zufallswert:
define abends_Stehlampe at *19:00:00 {\ if (!$we) {\ my $Zufallszahl = int(rand(15) +11 );;\ my $Uhr = "18:".$Zufallszahl.":".$Zufallszahl;;\ my $Zufallszahl2 = int(rand(3500) +11 );;\ my $Timer = (100 + $Zufallszahl2);;\ fhem("define Stehlampe_Zufall at *".$Uhr." { fhem('set STEHLAMPE on-for-timer ".$Timer."') }");;\ }else{\ my $Zufallszahl = int(rand(15) +11 );;\ my $Uhr = "19:".$Zufallszahl.":".$Zufallszahl;;\ my $Zufallszahl2 = int(rand(3500) +11 );;\ my $Timer = (100 + $Zufallszahl2);;\ fhem("define Stehlampe_Zufall at *".$Uhr." { fhem('set STEHLAMPE on-for-timer ".$Timer."') }");;\ }\ }
Zunächst wird eine zweite Zufallszahl zwischen 1 und 3500 erzeugt, was ca. 58,3 Minuten entspricht. Damit die Lampe nämlich bei einem sehr kleinen Zufallswert nicht nur wenige Sekunden anbleibt, addieren wir in der Zeile “my $Timer = (100 + $Zufallszahl2);;\” noch 100 Sekunden zu dem Zufallswert: Solange bleibt die Lampe auf jeden Fall angeschaltet. Wenn man eine Mindest-Schaltdauer vorgeben möchte, lässt sich hier dann auch ein größerer Wert wählen.
sunset + Zufall: Unauffällige Anwesenheitssimulation
Zusammen mit dem sunset / sunrise Befehl und per Zufall generiertem Start-Zeitpunkt kann man eine noch bessere Anwesenheitssimulation erstellen, als dies mit sunset allein möglich ist: Normalerweise werden mit dem Befehl sunset oder sunrise die Startzeitpunkte für das An- oder Ausschalten der Beleuchtung oder das Öffnen / Schließen von Rolladen gesteuert. So lässt sich damit automatisch das Licht bei eintretender Dunkelheit einschalten oder die Rolladen herunterfahren.
Der Zeitpunkt richtet sich dabei nach der Uhrzeit des Sonnenuntergangs und unterscheidet sich daher von Tag zu Tag nur geringfügig. Um dies noch realistischer zu gestalten, lässt sich sunrise und sunset aber so einstellen, dass es bei Sonnenuntergang in einem zufällig gewählten Zeitraum von zum Beispiel 15 Minuten Licht oder Rolläden schaltet. So ist die Uhrzeit von Tag zu Tag unterschiedlich, das Licht geht einmal kurz vor Sonnenuntergang schon an, am nächsten Tag etwas später.
Ein Schaltzeitpunkt mit zufälligen Werten behebt auch ein zweites Problem: Zwischen Sommer und Winter unterscheiden sich die Zeiten des Sonnenuntergangs sehr stark – ist es im Winter um 17:00 schon dunkel, ist es im Sommer auch nach 22:00 Uhr noch hell. Soll zum Beispiel ein Rolladen per sunset gesteuert werden, aber trotzdem um spätestens 22:00 Uhr herunterfahren, kann man diesen Wert als Maximalwert zum Schalten mit übergeben:
define Schlafzimmer_Rollo_Schliessen at *{sunset(0,"18:30","22:00")} set SZ_ROLLO off
FHEM würde so aber jeden Tag, an dem die Sonne noch nicht untergegangen ist, der späteste Schalt-Zeitpunkt (22:00 Uhr) aber erreicht ist, die Steuerung zur genau gleichen Uhrzeit vornehmen. Arbeitet man auch hier mit Zufallszahlen, steuert FHEM dann dass Rollo oder Licht in einem frei wählbaren Zeitraum von zum Beispiel 15 Minuten rund um den spätesten gewünschten Zeitpunkt.
define abends_Licht_an at *16:00:00 {\ my $ZufallszahlMin = int(rand(15) +1 );;\ my $ZufallszahlMax = int(rand(15) +1 );;\ my $SunsetStart1 = int(rand(3) + 0 );;\ my $SunsetStart2 = int(rand(5) + 2 );;\ my $start = "17:".($ZufallszahlMin + 10);;\ my $ende = "21:".($ZufallszahlMax + 44);;\ fhem("define abends_Licht_an at *{sunset('HORIZON=".$SunsetStart1.".".$SunsetStart2."',0,'".$start."','".$ende."')} { fhem('set LAMPE on-for-timer 3600') }");;\ }
Dieses Beispiel generiert verschiedene Zufallszahlen, anhand derer jeden Tag neu der “define” Befehl zum Anschalten des Lichtes gesetzt wird: Zunächst werden die beiden Zufallszahlen $ZufallszahlMin und $ZufallszahlMax erstellt, die für den frühesten und spätesten Zeitpunkt zum Schalten für den sunset Befehl genutzt werden: Die Lampe wird (falls der Sonnenuntergang außerhalb dieses Zeitrahmens liegt) an einem jeden Tag neu berechneten Startpunkt zwischen 17:11 und 17:25 Uhr angeschaltet und spätestens zwischen 21:45 und 21:59 Uhr ausgeschaltet.
Liegt der “sunset” Wert, also der Zeitpunkt des Sonnenuntergangs zwischen diesen Werten, schaltet FHEM die Lampe immer kurz vor Sonnenuntergang ein: Zwischen dem Wert “HORIZON=3.7” und “HORIZON=0.2” wird die Lampe dann in einem Zeitfenster von knapp 30 Minuten.
▶ Mehr zu den Offset-Befehlen: Zeitschaltuhr mit sunset / sunrise
- datenschutz (45x gelesen)
- windows-beschleunigen (40x gelesen)
- windows-schneller-starten-autostart-aufraeumen (36x gelesen)
- pc-einsteigerkurs (21x gelesen)
- pc-einsteigerkurs-1-2 (14x gelesen)
Mehr Tipps zu Smart-Home: Zufallszahlen in FHEM &#...
-
FHEM: JeeLink / LaCrosse Sensor: Batterie wechseln
Wer bei einem LaCrosse Temperatursensor die Batterien tauscht, muss eine Sache beachten - andernfalls wird die Hardware-ID zurückgesetzt und der Sensor wird unter einem neuen...
-
Mit Microsoft Office den Arbeitsalltag optimieren
In der heutigen digitalen Ära ist es unerlässlich, über die richtigen Tools zu verfügen, um den Arbeitsalltag effizient und produktiv zu gestalten. Microsoft Office hat...
-
Valentinstag-Emojis + Icons zum Download!
Valentinstags-Icons Passende Icons und Clipart Bilder zum Valentinstag als kostenloser Download: 100 verschiedene Herzen und Blumen als PNG Bild. Einfach herunterladen und in Dokumente,...
-
Instagram: Story Download – Bilder und Videos sichern
Instagram hat bekommt Tag Unmengen Fotos und Videos der zahlreichen Nutzer. Anders als die öffentlichen Foto-Alben sind Bilder und Videos in einer Instagram Story aber...
-
Raspberry Pi Warn-Hinweise ausschalten (under voltage & temperature)
Der Raspberry Pi zeigt oben in der rechten Ecke bei bestimmten Umständen einen Warn-Hinweis an: Zum Beispiel bei Überhitzung oder wenn die Stromversorgung zu niedrig...
-
Raspberry Pi Warn-Hinweise ausschalten (under voltage & temperature)
Der Raspberry Pi zeigt oben in der rechten Ecke bei bestimmten Umständen einen Warn-Hinweis an: Zum Beispiel bei Überhitzung oder wenn die Stromversorgung zu niedrig...
Smart-Home: Zufallszahlen in FHEM - Licht zufällig schalten