Hallo,
hab mit Hilfe von www.computerhilfen.de folgendes Script für meine Urlaubssteuerung entwickelt:
Würde mich über Feedback und ein kurzes Review freuen:
# Urlaubsschalter
define Urlaub dummy
attr Urlaub icon light_party
attr Urlaub room Zentrale,HomeKit
attr Urlaub setList state:on,off
attr Urlaub webCmd state
# Urlaub - Rollläden hoch
define Urlaub_Morgens_EG_Rolllaeden_Hoch at *08:00:00 {\
if ([Urlaub] eq "on") {\
if (!$we) {\
my $Zufallszahl = int(rand(15) +1 );;\
my $Uhr = "08:".$Zufallszahl.":".$Zufallszahl;;\
fhem("define Urlaub_Morgens_EG_Rolllaeden_Hoch1 at *".$Uhr." { fhem('set Rolllaeden_EG on') }");;\
} else {\
my $Zufallszahl = int(rand(15) +1 );;\
my $Uhr = "9:".$Zufallszahl.":".$Zufallszahl;;\
fhem("define Urlaub_Morgens_EG_Rolllaeden_Hoch1 at *".$Uhr." { fhem('set Rolllaeden_EG on') }");;\
}\
}\
}
# Urlaub - Rollläden runter
define Urlaub_Abends_EG_Rolllaeden_Runter at *20:00:00 {\
if ([Urlaub] eq "on") {\
if (!$we) {\
my $Zufallszahl = int(rand(15) +41 );;\
my $Uhr = "20:".$Zufallszahl.":".$Zufallszahl;;\
fhem("define Urlaub_Abends_EG_Rolllaeden_Runter1 at *".$Uhr." { fhem('set Rolllaeden_EG off') }");;\
} else {\
my $Zufallszahl = int(rand(15) );;\
my $Uhr = "21:".$Zufallszahl.":".$Zufallszahl;;\
fhem("define Urlaub_Abends_EG_Rolllaeden_Runter1 at *".$Uhr." { fhem('set Rolllaeden_EG off') }");;\
}\
}\
}
# Urlaub - Wohnzimmerlampen an
define abends_Stehlampe at *19:00:00 {\
if ([Urlaub] eq "on") {\
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 WZ_Licht on-for-timer ".$Timer."') }");;\
}else{\
my $Zufallszahl = int(rand(15) + 48 );;\
my $Uhr = "20:".$Zufallszahl.":".$Zufallszahl;;\
my $Zufallszahl2 = int(rand(3500) +11 );;\
my $Timer = (100 + $Zufallszahl2);;\
fhem("define Stehlampe_Zufall at *".$Uhr." { fhem('set WZ_Licht on-for-timer ".$Timer."') }");;\
}\
}\
}
Besten Dank und viele Grüße,
CG
Klappt noch nicht wirklich. Auch wenn der Urlaubsschalter auf "on" steht. Hat jemand eine Idee, wo der Fehler liegt?
Hi,
probier es mal mit DOIF zu lösen, ist um einiges einfacher...
Ungetesteter Code für die Rollo
define DI_urlaubssteuerung DOIF ([Urlaub] eq "on" and ([([09:00]+rand(900))|7]) or [([08:00]+rand(900))|8])
(set Rollaeden on)
DOELSEIF ([Urlaub] eq "on" and ([([20:00]+rand(900))|7] or [([20:41]+rand(900)|8])
(set Rollaeden off)
..die Unterscheidung $we findet hinter der Zeitangabe mit |7 oder |8 statt. Beispiel [08:00|7] => an Wochenenden um 8Uhr.
Commandref hilft auch weiter:
http://fhem.de/commandref_DE.html#DOIF
Seit DOIF habe ich so gut wie keinen Perl Code mehr, kann ich also echt empfehlen.
Hallo,
hab's jetzt mal so gelöst:
# Urlaubsschalter
define Urlaub dummy
attr Urlaub icon light_party
attr Urlaub room Zentrale,HomeKit
attr Urlaub setList state:on,off
attr Urlaub webCmd on:off
# Rollläden im Erdgeschoss
# [<time>|012345678] 0-8 entspricht: 0-Sonntag, 1-Montag, ... bis 6-Samstag sowie 7 für Wochenende und Feiertage (entspricht $we) und 8 für Arbeitstage (entspricht !$we)
define DI_urlaubssteuerung DOIF ([Urlaub] eq "on" and ([([09:00]+rand(900))|7] or [([08:00]+rand(900))|8])) (set Rolllaeden_EG on) DOELSEIF ([Urlaub] eq "on" and ([({sunset()}+3000+rand(900))|7] or ([({sunset()}+3000+rand(900))|8]))) (set Rolllaeden_EG off)
# Licht im Wohnzimmer
# Lampe wird nach Sonnenuntergang zwischen 900 und 1500 (900+600) Sekunden zufällig zeitverzögert eingeschaltet. Ausgeschaltet wird die Lampe nach 21:00 Uhr um bis zu 900 Sekunden zufällig verzögert:
define di_light DOIF ([Urlaub] eq "on" and ([({sunset()}+900+int(rand(600)))])) (set WZ_Licht_light on) DOELSEIF ([Urlaub] eq "on" and ([([21:00]+int(rand(900)))])) (set WZ_Licht_light off)
Viele Grüße - CG