FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: SpeedMaxX am 26 Dezember 2015, 21:00:08

Titel: gelöst - Urlaubssteuerung
Beitrag von: SpeedMaxX am 26 Dezember 2015, 21:00:08
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
Titel: Antw:Urlaubssteuerung
Beitrag von: SpeedMaxX am 26 Dezember 2015, 22:03:06
Klappt noch nicht wirklich. Auch wenn der Urlaubsschalter auf "on" steht. Hat jemand eine Idee, wo der Fehler liegt?
Titel: Antw:Urlaubssteuerung
Beitrag von: dominik am 26 Dezember 2015, 22:23:36
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.
Titel: Antw:Urlaubssteuerung
Beitrag von: SpeedMaxX am 29 Dezember 2015, 14:03:17
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