From 0228f0cbb934fd87c4dada1ad7dc67dd0170df7f Mon Sep 17 00:00:00 2001 From: FlorianZ <> Date: Sun, 3 Jun 2018 10:55:33 +0000 Subject: [PATCH] 98_alarmclock: fix Calendar git-svn-id: https://svn.fhem.de/fhem/trunk@16811 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_alarmclock.pm | 438 ++++++++++++++++++------------------- 1 file changed, 219 insertions(+), 219 deletions(-) diff --git a/fhem/FHEM/98_alarmclock.pm b/fhem/FHEM/98_alarmclock.pm index ac94c84d0..450398e90 100644 --- a/fhem/FHEM/98_alarmclock.pm +++ b/fhem/FHEM/98_alarmclock.pm @@ -6,7 +6,7 @@ # # 2017 Florian Zetlmeisl # -# Parts of the holiday and vacation identification +# Parts of the holiday and vacation identification # are written by Prof. Dr. Peter A. Henning # # This programm is free software; you can redistribute it and/or modify @@ -36,13 +36,13 @@ use warnings; ######################################################################################## # -# Globale Variablen +# Globale Variablen # ######################################################################################## -my %alarmclock_sets = +my %alarmclock_sets = ( "AlarmTime1_Monday" => "09:00", "AlarmTime2_Tuesday" => "09:00", @@ -64,8 +64,8 @@ my %alarmclock_sets = ); -my %alarmday = -( +my %alarmday = +( "1" => "AlarmTime1_Monday", "2" => "AlarmTime2_Tuesday", "3" => "AlarmTime3_Wednesday", @@ -80,10 +80,10 @@ my %alarmday = my @mapping_attrs = -qw( +qw( AlarmRoutine:textField-long - AlarmRoutineOff:textField-long - PreAlarmRoutine:textField-long + AlarmRoutineOff:textField-long + PreAlarmRoutine:textField-long OffRoutine:textField-long HardAlarmRoutine:textField-long SnoozeRoutine:textField-long @@ -95,7 +95,7 @@ qw( ######################################################################################## # -# Alarmclock Initialize +# Alarmclock Initialize # ######################################################################################## @@ -157,7 +157,7 @@ sub alarmclock_Initialize($) ######################################################################################## # -# Alarmclock Define +# Alarmclock Define # ######################################################################################## @@ -167,24 +167,24 @@ sub alarmclock_Define($$) my ($hash, $def) = @_; my @a = split("[ \t][ \t]*", $def); my ($name, $type) = @a; - - + + return "Wrong syntax: use define alarmclock" if(int(@a) != 2); - + $hash->{helper}{Repeat1} = 0; $hash->{helper}{Repeat2} = 0; $hash->{helper}{Repeat3} = 0; $hash->{helper}{Today} = 0; $hash->{helper}{Tomorrow} = 0; - + return undef; - + } ######################################################################################## # -# Alarmclock Undefine +# Alarmclock Undefine # ######################################################################################## @@ -192,17 +192,17 @@ sub alarmclock_Undefine($$) { my ($hash,$arg) = @_; - + RemoveInternalTimer($hash); - + return undef; - + } ######################################################################################## # -# Alarmclock Set +# Alarmclock Set # ######################################################################################## @@ -215,7 +215,7 @@ sub alarmclock_Set($$) my $value = join("", @param); my $Weekprofile = AttrVal($hash->{NAME},"WeekprofileName","Weekprofile_1,Weekprofile_2,Weekprofile_3,Weekprofile_4,Weekprofile_5"); - + if(!defined($alarmclock_sets{$opt})) { my $list = " AlarmTime1_Monday" ." AlarmTime2_Tuesday" @@ -233,39 +233,39 @@ sub alarmclock_Set($$) ." skip:NextAlarm,None" ." save:$Weekprofile" ." load:$Weekprofile" - ." disable:1,0"; + ." disable:1,0"; return "Unknown argument $opt, choose one of $list"; } - - -### AlarmTime ### - + + +### AlarmTime ### + if ($opt =~ /^AlarmTime(1_Monday|2_Tuesday|3_Wednesday|4_Thursday|5_Friday|6_Saturday|7_Sunday|8_Holiday|9_Vacation)/) { if ($value =~ /^([0-9]|0[0-9]|1?[0-9]|2[0-3]):[0-5]?[0-9]$/) { - readingsSingleUpdate( $hash, $opt, $value, 1 ); - alarmclock_createtimer($hash); + readingsSingleUpdate( $hash, $opt, $value, 1 ); + alarmclock_createtimer($hash); } elsif (!($value =~ /^([0-9]|0[0-9]|1?[0-9]|2[0-3]):[0-5]?[0-9]$/)) { - return "Please Set $opt HH:MM" ; + return "Please Set $opt HH:MM" ; } - } - - + } + + ### AlarmOff ### - - if ($opt eq "AlarmOff") + + if ($opt eq "AlarmOff") { if ($value =~ /^(1_Monday|2_Tuesday|3_Wednesday|4_Thursday|5_Friday|6_Saturday|7_Sunday|8_Holiday|9_Vacation)$/) { readingsSingleUpdate( $hash, "AlarmTime$value", "off", 1 ); alarmclock_createtimer($hash); - } + } elsif ($value eq "Weekdays") { readingsBeginUpdate($hash); @@ -307,8 +307,8 @@ sub alarmclock_Set($$) } -### AlarmTime_Weekdays ### - +### AlarmTime_Weekdays ### + if ($opt eq "AlarmTime_Weekdays") { if ($value =~ /^([0-9]|0[0-9]|1?[0-9]|2[0-3]):[0-5]?[0-9]$/) @@ -320,17 +320,17 @@ sub alarmclock_Set($$) readingsBulkUpdate( $hash, "AlarmTime4_Thursday", $value); readingsBulkUpdate( $hash, "AlarmTime5_Friday", $value); readingsEndUpdate($hash,1); - alarmclock_createtimer($hash); + alarmclock_createtimer($hash); } elsif (!($value =~ /^([0-9]|0[0-9]|1?[0-9]|2[0-3]):[0-5]?[0-9]$/)) { - return "Please Set $opt HH:MM" ; + return "Please Set $opt HH:MM" ; } - } - -### AlarmTime_Weekend ### - - if ($opt eq "AlarmTime_Weekend") + } + +### AlarmTime_Weekend ### + + if ($opt eq "AlarmTime_Weekend") { if ($value =~ /^([0-9]|0[0-9]|1?[0-9]|2[0-3]):[0-5]?[0-9]$/) { @@ -338,15 +338,15 @@ sub alarmclock_Set($$) readingsBulkUpdate( $hash, "AlarmTime6_Saturday", $value); readingsBulkUpdate( $hash, "AlarmTime7_Sunday", $value); readingsEndUpdate($hash,1); - alarmclock_createtimer($hash); + alarmclock_createtimer($hash); } elsif (!($value =~ /^([0-9]|0[0-9]|1?[0-9]|2[0-3]):[0-5]?[0-9]$/)) { - return "Please Set $opt HH:MM" ; + return "Please Set $opt HH:MM" ; } } - -### stop Alarm ### + +### stop Alarm ### if ($opt eq "stop") { @@ -355,11 +355,11 @@ sub alarmclock_Set($$) alarmclock_alarmroutine_stop($hash); } } - - -### save Weekprofile ### - - if ($opt eq "save") + + +### save Weekprofile ### + + if ($opt eq "save") { my $time1 = ReadingsVal($hash->{NAME},"AlarmTime1_Monday","off"); my $time2 = ReadingsVal($hash->{NAME},"AlarmTime2_Tuesday","off"); @@ -368,15 +368,15 @@ sub alarmclock_Set($$) my $time5 = ReadingsVal($hash->{NAME},"AlarmTime5_Friday","off"); my $time6 = ReadingsVal($hash->{NAME},"AlarmTime6_Saturday","off"); my $time7 = ReadingsVal($hash->{NAME},"AlarmTime7_Sunday","off"); - readingsSingleUpdate( $hash, $value,"$time1,$time2,$time3,$time4,$time5,$time6,$time7", 1 ); + readingsSingleUpdate( $hash, $value,"$time1,$time2,$time3,$time4,$time5,$time6,$time7", 1 ); } - -### load Weekprofile ### - - if ($opt eq "load") + +### load Weekprofile ### + + if ($opt eq "load") { my @time = split(/,/, ReadingsVal($hash->{NAME}, $value,"")); - + readingsBeginUpdate($hash); readingsBulkUpdate( $hash, "AlarmTime1_Monday", $time[0]); readingsBulkUpdate( $hash, "AlarmTime2_Tuesday", $time[1]); @@ -387,11 +387,11 @@ sub alarmclock_Set($$) readingsBulkUpdate( $hash, "AlarmTime7_Sunday", $time[6]); readingsEndUpdate($hash,1); alarmclock_createtimer($hash); - } + } -### skip ### - - if ($opt eq "skip") +### skip ### + + if ($opt eq "skip") { if ($value eq "NextAlarm") { @@ -399,14 +399,14 @@ sub alarmclock_Set($$) readingsBulkUpdate( $hash, "state", "skip next Alarm"); readingsBulkUpdate( $hash, "skip", "next Alarm"); readingsEndUpdate($hash,1); - alarmclock_createtimer($hash); + alarmclock_createtimer($hash); } if ($value eq "None") { readingsSingleUpdate( $hash, "skip", "none", 1 ); - alarmclock_createtimer($hash); + alarmclock_createtimer($hash); } - } + } ### disable ### @@ -416,16 +416,16 @@ sub alarmclock_Set($$) { RemoveInternalTimer($hash); readingsSingleUpdate( $hash,"state", "deactivated", 1 ); - Log3 $hash->{NAME}, 3, "alarmclock: $hash->{NAME} - deactivated"; + Log3 $hash->{NAME}, 3, "alarmclock: $hash->{NAME} - deactivated"; } if ($value eq "0") { readingsSingleUpdate( $hash,"state", "activated", 1 ); alarmclock_createtimer($hash); - Log3 $hash->{NAME}, 3, "alarmclock: $hash->{NAME} - activated"; + Log3 $hash->{NAME}, 3, "alarmclock: $hash->{NAME} - activated"; } - } - + } + return undef; } @@ -433,30 +433,30 @@ sub alarmclock_Set($$) ######################################################################################## # -# Alarmclock Attr +# Alarmclock Attr # ######################################################################################## -sub alarmclock_Attr(@) +sub alarmclock_Attr(@) { my ($cmd,$name,$attr_name,$attrVal) = @_; my $hash = $defs{$name}; - - if(($attr_name eq "OffDefaultTime") + + if(($attr_name eq "OffDefaultTime") && ($attrVal =~ /^([0-9]|0[0-9]|1?[0-9]|2[0-3]):([0-5]?[0-9])$/)) { InternalTimer(gettimeofday()+1, "alarmclock_createtimer", $hash, 0); } - - if(($attr_name eq "PreAlarmTimeInSec") + + if(($attr_name eq "PreAlarmTimeInSec") && ($attrVal =~ /^([0-9]?[0-9]?[0-9]?[0-9])$/)) { InternalTimer(gettimeofday()+1, "alarmclock_createtimer", $hash, 0); } - -###disable### + +###disable### if($attr_name eq "disable") { @@ -478,27 +478,27 @@ sub alarmclock_Attr(@) { InternalTimer(gettimeofday()+1, "alarmclock_createtimer", $hash, 0); Log3 $hash->{NAME}, 3, "alarmclock: $hash->{NAME} - activated"; - } + } } - -###Holiday### + +###Holiday### if($attr_name eq "HolidayCheck") { RemoveInternalTimer($hash); InternalTimer(gettimeofday()+1, "alarmclock_createtimer", $hash, 0); - } + } -###Vacation### +###Vacation### if($attr_name eq "VacationCheck") { RemoveInternalTimer($hash); InternalTimer(gettimeofday()+1, "alarmclock_createtimer", $hash, 0); - } + } return undef; -} +} ######################################################################################## @@ -511,11 +511,11 @@ sub alarmclock_createtimer($) { my ($hash) = @_; - + my ($SecNow, $MinNow, $HourNow, $DayNow, $MonthNow, $YearNow, $WDayNow, $YDNow, $SumTimeNow) = localtime(time); - + $hash->{helper}{Today} = $WDayNow; - + if ($WDayNow =~ /^(0|1|2|3|4|5)/) { $hash->{helper}{Tomorrow} = $WDayNow + 1; @@ -523,28 +523,28 @@ sub alarmclock_createtimer($) else { $hash->{helper}{Tomorrow} = 0; - } - + } + my $HourinSec = $HourNow * 3600; my $MininSec = $MinNow * 60; my $NowinSec = $HourinSec + $MininSec + $SecNow; - - + + if ((AttrVal($hash->{NAME}, "disable", 0 ) ne "1" ) && (ReadingsVal($hash->{NAME},"state","activated") ne "deactivated")) { -### Vacation ### +### Vacation ### alarmclock_vacation_check($hash); - -### Holiday ### + +### Holiday ### alarmclock_holiday_check($hash); - + my $alarmtimetoday = $alarmday{$hash->{helper}{Today}}; my $alarmtimetomorrow = $alarmday{$hash->{helper}{Tomorrow}}; - - + + if ((ReadingsVal($hash->{NAME},$alarmtimetoday,"NONE")) =~ /^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$/) { ReadingsVal($hash->{NAME},$alarmtimetoday,"NONE") =~ /^([0-9]|0[0-9]|1?[0-9]|2[0-3]):([0-5]?[0-9])$/; @@ -557,7 +557,7 @@ if ((AttrVal($hash->{NAME}, "disable", 0 ) ne "1" ) && (ReadingsVal($hash->{NAME my $AlarminSec = $AlarmHourinSec + $AlarmMininSec; - + if(($NowinSec < $AlarminSec) && (ReadingsVal($hash->{NAME},"skip","none") eq "none")) { my $AlarmIn = $AlarminSec - $NowinSec; @@ -568,17 +568,17 @@ if ((AttrVal($hash->{NAME}, "disable", 0 ) ne "1" ) && (ReadingsVal($hash->{NAME ### PreAlarm ### - + if((AttrVal($hash->{NAME},"PreAlarmTimeInSec","NONE")) =~ /^([0-9]?[0-9]?[0-9]?[0-9])$/) { my $PreAlarmTime = AttrVal($hash->{NAME},"PreAlarmTimeInSec","NONE"); - + if($NowinSec < $AlarminSec - $PreAlarmTime) { my $PreAlarmIn = $AlarmIn - $PreAlarmTime; InternalTimer(gettimeofday()+$PreAlarmIn, "alarmclock_prealarmroutine_start", $hash, 0); Log3 $hash->{NAME}, 5, "alarmclock: $hash->{NAME} - pre-alarm timer created with $PreAlarmIn sec"; - } + } else { Log3 $hash->{NAME}, 3, "alarmclock: $hash->{NAME} - pre-alarm time has been in the past"; @@ -587,33 +587,33 @@ if ((AttrVal($hash->{NAME}, "disable", 0 ) ne "1" ) && (ReadingsVal($hash->{NAME else { Log3 $hash->{NAME}, 4, "alarmclock: $hash->{NAME} - no PreAlarmTimeInSec is set"; - } - + } + ### End PreAlarm ### - + } ### skip next Alarmtime ### - + elsif(($NowinSec < $AlarminSec) && (ReadingsVal($hash->{NAME},"skip","none") ne "none")) { my $AlarmIn2 = $AlarminSec - $NowinSec; RemoveInternalTimer($hash); InternalTimer(gettimeofday()+$AlarmIn2, "alarmclock_skip", $hash, 0); Log3 $hash->{NAME}, 3, "alarmclock: $hash->{NAME} - skip next Alarm"; - } -### End skip next Alarmtime ### - + } +### End skip next Alarmtime ### + else { alarmclock_midnight_timer($hash); Log3 $hash->{NAME}, 5, "alarmclock: $hash->{NAME} - alarm time today has been in the past => midnight-timer started."; } } - - -### OffDefaultTime ### - + + +### OffDefaultTime ### + elsif((ReadingsVal($hash->{NAME},$alarmtimetoday,"NONE")) eq "off") { if((AttrVal($hash->{NAME},"OffDefaultTime","NONE")) =~ /^([0-9]|0[0-9]|1?[0-9]|2[0-3]):([0-5]?[0-9])$/) @@ -625,7 +625,7 @@ if ((AttrVal($hash->{NAME}, "disable", 0 ) ne "1" ) && (ReadingsVal($hash->{NAME my $OffDefaultTimeHourinSec = $OffDefaultTimeHour * 3600; my $OffDefaultTimeMininSec = $OffDefaultTimeMin * 60; my $OffDefaultTimeinSec = $OffDefaultTimeHourinSec + $OffDefaultTimeMininSec; - + if($NowinSec < $OffDefaultTimeinSec) { my $OffDefaultTimeIn = $OffDefaultTimeinSec - $NowinSec; @@ -644,12 +644,12 @@ if ((AttrVal($hash->{NAME}, "disable", 0 ) ne "1" ) && (ReadingsVal($hash->{NAME { alarmclock_midnight_timer($hash); Log3 $hash->{NAME}, 4, "alarmclock: $hash->{NAME} - no OffDefaultTime is set"; - } + } } -### End OffDefaultTime ### - - else +### End OffDefaultTime ### + + else { alarmclock_midnight_timer($hash); Log3 $hash->{NAME}, 5, "alarmclock: $hash->{NAME} - no alarm today => midnight-timer started"; @@ -663,15 +663,15 @@ if ((AttrVal($hash->{NAME}, "disable", 0 ) ne "1" ) && (ReadingsVal($hash->{NAME readingsBulkUpdate( $hash, "AlarmToday", $AlarmToday); readingsBulkUpdate( $hash, "AlarmTomorrow", $AlarmTomorrow); readingsEndUpdate($hash,1); - + } - + } ######################################################################################## # -# Midnight-timer + 5 seconds +# Midnight-timer + 5 seconds # ######################################################################################## @@ -698,13 +698,13 @@ if ((AttrVal($hash->{NAME}, "disable", 0 ) ne "1" ) && (ReadingsVal($hash->{NAME readingsSingleUpdate( $hash,"state", "OK", 1 ); } } - + } ######################################################################################## # -# Alarm-Routine start +# Alarm-Routine start # ######################################################################################## @@ -713,10 +713,10 @@ sub alarmclock_alarmroutine_start($) my ($hash) = @_; my $Mode = "Alarm"; - + if (alarmclock_presence_check($hash)) { - fhem("".AttrVal($hash->{NAME},"AlarmRoutine","")); + fhem("".AttrVal($hash->{NAME},"AlarmRoutine","")); readingsSingleUpdate( $hash,"state", "Alarm is running", 1 ); alarmclock_hardalarm_timer($hash); alarmclock_maxalarmduration_timer($hash); @@ -741,7 +741,7 @@ sub alarmclock_alarmroutine_stop($) my ($hash) = @_; - fhem("".AttrVal($hash->{NAME},"AlarmRoutineOff","")); + fhem("".AttrVal($hash->{NAME},"AlarmRoutineOff","")); readingsSingleUpdate( $hash,"state", "Alarm stopped", 1 ); Log3 $hash->{NAME}, 3, "alarmclock: $hash->{NAME} - alarmroutine stopped."; RemoveInternalTimer($hash, "alarmclock_hardalarmroutine_start"); @@ -753,7 +753,7 @@ sub alarmclock_alarmroutine_stop($) ######################################################################################## # -# Pre-Alarm-Routine start +# Pre-Alarm-Routine start # ######################################################################################## @@ -764,18 +764,18 @@ sub alarmclock_prealarmroutine_start($) my $Mode = "PreAlarm"; if (alarmclock_presence_check($hash)) - { + { fhem("".AttrVal($hash->{NAME},"PreAlarmRoutine","")); readingsSingleUpdate( $hash,"state", "PreAlarm is running", 1 ); alarmclock_reproutine($hash, $Mode); Log3 $hash->{NAME}, 3, "alarmclock: $hash->{NAME} - PreAlarmRoutine started."; - } + } } ######################################################################################## # -# Alarm Snooze +# Alarm Snooze # ######################################################################################## @@ -784,7 +784,7 @@ sub alarmclock_snooze_start($) my ($hash) = @_; my $Mode = "Snooze"; - + if((AttrVal($hash->{NAME},"SnoozeTimeInSec","NONE")) =~ /^([0-9]?[0-9]?[0-9]?[0-9])$/) { my $SnoozeTime = AttrVal($hash->{NAME},"SnoozeTimeInSec",""); @@ -800,14 +800,14 @@ sub alarmclock_snooze_start($) else { Log3 $hash->{NAME}, 3, "alarmclock: $hash->{NAME} - no SnoozeTimeInSec is set."; - } + } } ######################################################################################## # -# Alarm OffRoutine +# Alarm OffRoutine # ######################################################################################## @@ -816,18 +816,18 @@ sub alarmclock_offroutine_start($) my ($hash) = @_; - + fhem("".AttrVal($hash->{NAME},"OffRoutine","")); readingsSingleUpdate( $hash,"state", "OffRoutine is running", 1 ); alarmclock_createtimer($hash); - Log3 $hash->{NAME}, 3, "alarmclock: $hash->{NAME} - OffRoutine started."; + Log3 $hash->{NAME}, 3, "alarmclock: $hash->{NAME} - OffRoutine started."; } ######################################################################################## # -# HardAlarm Timer +# HardAlarm Timer # ######################################################################################## @@ -852,7 +852,7 @@ sub alarmclock_hardalarm_timer($) ######################################################################################## # -# MaxAlarmDuration +# MaxAlarmDuration # ######################################################################################## @@ -898,29 +898,29 @@ sub alarmclock_reproutine($$) my ($hash, $Mode) = @_; - if(((AttrVal($hash->{NAME},"RepRoutine1","NONE")) ne "NONE") && + if(((AttrVal($hash->{NAME},"RepRoutine1","NONE")) ne "NONE") && (AttrVal($hash->{NAME},"RepRoutine1Mode","off")) eq $Mode) { $hash->{helper}{Repeat1} = 0; my $WaitTime1 = AttrVal($hash->{NAME},"RepRoutine1WaitInSec","10"); InternalTimer(gettimeofday()+$WaitTime1, "alarmclock_reproutine1_start", $hash, 0); - } - if(((AttrVal($hash->{NAME},"RepRoutine2","NONE")) ne "NONE") && + } + if(((AttrVal($hash->{NAME},"RepRoutine2","NONE")) ne "NONE") && (AttrVal($hash->{NAME},"RepRoutine2Mode","off")) eq $Mode) { $hash->{helper}{Repeat2} = 0; my $WaitTime2 = AttrVal($hash->{NAME},"RepRoutine2WaitInSec","10"); InternalTimer(gettimeofday()+$WaitTime2, "alarmclock_reproutine2_start", $hash, 0); } - if(((AttrVal($hash->{NAME},"RepRoutine3","NONE")) ne "NONE") && + if(((AttrVal($hash->{NAME},"RepRoutine3","NONE")) ne "NONE") && (AttrVal($hash->{NAME},"RepRoutine3Mode","off")) eq $Mode) { $hash->{helper}{Repeat3} = 0; my $WaitTime3 = AttrVal($hash->{NAME},"RepRoutine3WaitInSec","10"); InternalTimer(gettimeofday()+$WaitTime3, "alarmclock_reproutine3_start", $hash, 0); } - -} + +} ######################################################################################## @@ -937,17 +937,17 @@ sub alarmclock_reproutine_stop($$) if((AttrVal($hash->{NAME},"RepRoutine1Stop","Snooze")) eq $Mode) { RemoveInternalTimer($hash, "alarmclock_reproutine1_start"); - } + } if((AttrVal($hash->{NAME},"RepRoutine2Stop","Snooze")) eq $Mode) { RemoveInternalTimer($hash, "alarmclock_reproutine2_start"); - } + } if((AttrVal($hash->{NAME},"RepRoutine3Stop","Snooze")) eq $Mode) { RemoveInternalTimer($hash, "alarmclock_reproutine3_start"); } - -} + +} ######################################################################################## @@ -964,15 +964,15 @@ sub alarmclock_reproutine1_start($) my $WaitTime = AttrVal($hash->{NAME},"RepRoutine1WaitInSec","10"); my $Repeats = AttrVal($hash->{NAME},"RepRoutine1Repeats","2"); my $RNow = $hash->{helper}{Repeat1}; - - if ($Repeats > $RNow) + + if ($Repeats > $RNow) { my $RNext = $RNow + 1; $hash->{helper}{Repeat1} = $RNext; fhem("".AttrVal($hash->{NAME},"RepRoutine1","")); InternalTimer(gettimeofday()+$WaitTime, "alarmclock_reproutine1_start", $hash, 0); } - + } @@ -990,15 +990,15 @@ sub alarmclock_reproutine2_start($) my $WaitTime = AttrVal($hash->{NAME},"RepRoutine2WaitInSec","10"); my $Repeats = AttrVal($hash->{NAME},"RepRoutine2Repeats","2"); my $RNow = $hash->{helper}{Repeat2}; - - if ($Repeats > $RNow) + + if ($Repeats > $RNow) { my $RNext = $RNow + 1; $hash->{helper}{Repeat2} = $RNext; fhem("".AttrVal($hash->{NAME},"RepRoutine2","")); InternalTimer(gettimeofday()+$WaitTime, "alarmclock_reproutine2_start", $hash, 0); } - + } @@ -1016,15 +1016,15 @@ sub alarmclock_reproutine3_start($) my $WaitTime = AttrVal($hash->{NAME},"RepRoutine3WaitInSec","10"); my $Repeats = AttrVal($hash->{NAME},"RepRoutine3Repeats","2"); my $RNow = $hash->{helper}{Repeat3}; - - if ($Repeats > $RNow) + + if ($Repeats > $RNow) { my $RNext = $RNow + 1; $hash->{helper}{Repeat3} = $RNext; fhem("".AttrVal($hash->{NAME},"RepRoutine3","")); InternalTimer(gettimeofday()+$WaitTime, "alarmclock_reproutine3_start", $hash, 0); } - + } ######################################################################################## @@ -1041,13 +1041,13 @@ sub alarmclock_presence_check($) if ((AttrVal($hash->{NAME}, "PresenceDevice", "NONE" ) ne "NONE" ) && (AttrVal($hash->{NAME}, "PresenceCheck", "1" ) ne "0" )) { my @Presence = split(/\|/, AttrVal($hash->{NAME},"PresenceDevice","")); - + my $a = 0; my $b = scalar(@Presence); - + while ($a < $b) { - + my @PresenceDevice = split(/:/,$Presence[$a]); if (scalar(@PresenceDevice) eq "1") @@ -1057,17 +1057,17 @@ sub alarmclock_presence_check($) Log3 $hash->{NAME}, 1, "alarmclock: $hash->{NAME} - absent"; return 0; } - } - elsif (scalar(@PresenceDevice) eq "2") - { + } + elsif (scalar(@PresenceDevice) eq "2") + { if (ReadingsVal($PresenceDevice[0],"state","NONE") eq $PresenceDevice[1]) { Log3 $hash->{NAME}, 1, "alarmclock: $hash->{NAME} - absent"; return 0; } - } + } elsif (scalar(@PresenceDevice) eq "3") - { + { my $PresenceEvent = $PresenceDevice[2]; $PresenceEvent =~ s/ //g; if (ReadingsVal($PresenceDevice[0],$PresenceDevice[1],"NONE") eq $PresenceEvent) @@ -1076,13 +1076,13 @@ sub alarmclock_presence_check($) return 0; } } - + $a ++; - + } } return 1; - + } @@ -1102,8 +1102,8 @@ sub alarmclock_holiday_check($) if ($WDayToday == 0) { $WDayToday = 7; - } - + } + if ((AttrVal($hash->{NAME}, "HolidayDevice", "NONE" ) ne "NONE" ) && (AttrVal($hash->{NAME}, "HolidayCheck", "1" ) ne "0" )) { my @HolidayDays = split(/\|/, AttrVal($hash->{NAME},"HolidayDays","1|2|3|4|5|6|7")); @@ -1112,7 +1112,7 @@ sub alarmclock_holiday_check($) my @Holiday = split(/\|/, AttrVal($hash->{NAME},"HolidayDevice","")); my $a = 0; my $b = scalar(@Holiday); - + while ($a < $b) { my @HolidayDevice = split(/:/,$Holiday[$a]); @@ -1137,9 +1137,9 @@ sub alarmclock_holiday_check($) } elsif( IsDevice($HolidayDevice[0], "Calendar" )) { - my $stoday = strftime("%2d.%2m.%2y", localtime(time)); - my $stomorrow = strftime("%2d.%2m.%2y", localtime(time+86400)); - my $line = Calendar_Get($defs{$HolidayDevice[0]},"get","text","mode=alarm|start|upcoming"); + my $stoday = strftime("%2d.%2m.20%2y", localtime(time)); + my $stomorrow = strftime("%2d.%2m.20%2y", localtime(time+86400)); + my $line = Calendar_Get($defs{$HolidayDevice[0]},"get","events","format:text"); if ($line) { chomp($line); @@ -1147,7 +1147,7 @@ sub alarmclock_holiday_check($) foreach $line (@lines) { chomp($line); - my $date = substr($line,0,8); + my $date = substr($line,0,10); if (($date eq $stoday) && ($DayToday == 1)) { my $todaydesc = substr($line,15); @@ -1161,17 +1161,17 @@ sub alarmclock_holiday_check($) } } } - } - elsif (scalar(@HolidayDevice) eq "2") - { + } + elsif (scalar(@HolidayDevice) eq "2") + { if ((ReadingsVal($HolidayDevice[0],"state","NONE") eq $HolidayDevice[1]) && ($DayToday == 1)) { Log3 $hash->{NAME}, 1, "alarmclock: $hash->{NAME} - holiday => $HolidayDevice[0] - $HolidayDevice[1]"; $hash->{helper}{Today} = 8; } - } + } elsif (scalar(@HolidayDevice) eq "3") - { + { my $HolidayEvent = $HolidayDevice[2]; $HolidayEvent =~ s/ //g; if ((ReadingsVal($HolidayDevice[0],$HolidayDevice[1],"NONE") eq $HolidayEvent) && ($DayToday == 1)) @@ -1184,7 +1184,7 @@ sub alarmclock_holiday_check($) } } } - + ######################################################################################## # @@ -1202,18 +1202,18 @@ sub alarmclock_vacation_check($) if ($WDayToday == 0) { $WDayToday = 7; - } + } if ((AttrVal($hash->{NAME}, "VacationDevice", "NONE" ) ne "NONE" ) && (AttrVal($hash->{NAME}, "VacationCheck", "1" ) ne "0" )) { - + my @VacationDays = split(/\|/, AttrVal($hash->{NAME},"VacationDays","1|2|3|4|5|6|7")); my $DayToday = grep {$_==$WDayToday;} @VacationDays; my $DayTomorrow = grep {$_==$WDayTomorrow;} @VacationDays; my @Vacation = split(/\|/, AttrVal($hash->{NAME},"VacationDevice","")); my $a = 0; my $b = scalar(@Vacation); - + while ($a < $b) { my @VacationDevice = split(/:/,$Vacation[$a]); @@ -1242,14 +1242,14 @@ sub alarmclock_vacation_check($) my $stomorrow = strftime("%2d.%2m.%2y", localtime(time+86400)); my @tday = split('\.',$stoday); my @tmor = split('\.',$stomorrow); - my $fline = Calendar_Get($defs{$VacationDevice[0]},"get","full","mode=alarm|start|upcoming"); + my $fline = Calendar_Get($defs{$VacationDevice[0]},"get","events","format:full"); my @lines = split('\n',$fline); foreach $fline (@lines) { chomp($fline); my @chunks = split(' ',$fline); my @sday = split('\.',$chunks[2]); - my @eday = split('\.',substr($chunks[3],9,10)); + my @eday = split('\.',substr($chunks[3],6,10)); my $rets = ($sday[2]-$tday[2]-2000)*365+($sday[1]-$tday[1])*31+($sday[0]-$tday[0]); my $rete = ($eday[2]-$tday[2]-2000)*365+($eday[1]-$tday[1])*31+($eday[0]-$tday[0]); if (($rete>=0) && ($rets<=0) && ($DayToday == 1)) @@ -1266,17 +1266,17 @@ sub alarmclock_vacation_check($) } } } - } - elsif (scalar(@VacationDevice) eq "2") - { + } + elsif (scalar(@VacationDevice) eq "2") + { if ((ReadingsVal($VacationDevice[0],"state","NONE") eq $VacationDevice[1]) && ($DayToday == 1)) { Log3 $hash->{NAME}, 1, "alarmclock: $hash->{NAME} - vacation => $VacationDevice[0] - $VacationDevice[1]"; $hash->{helper}{Today} = 9; } - } + } elsif (scalar(@VacationDevice) eq "3") - { + { my $VacationEvent = $VacationDevice[2]; $VacationEvent =~ s/ //g; if ((ReadingsVal($VacationDevice[0],$VacationDevice[1],"NONE") eq $VacationEvent)&& ($DayToday == 1)) @@ -1287,7 +1287,7 @@ sub alarmclock_vacation_check($) } $a ++; } - } + } } @@ -1304,7 +1304,7 @@ sub alarmclock_skip($) readingsSingleUpdate( $hash, "skip", "none", 1 ); alarmclock_createtimer($hash); - + } ######################################################################################## @@ -1316,58 +1316,58 @@ sub alarmclock_skip($) sub alarmclock_Notify($$) { my ($hash, $devhash) = @_; - + return "" if(IsDisabled($hash->{NAME})); # Return without any further action if the module is disabled - + my $devName = $devhash->{NAME}; # Device that created the events - + my $events = deviceEvents($devhash,0); return if( !$events ); - - + + ### alarmclock_createtimer wird nach dem start von fhem aufgerufen ### - + if($devName eq "global" && grep(m/^INITIALIZED|REREADCFG$/, @{$events})) { alarmclock_createtimer($hash); - } - - -### Notify Alarm off ### - + } + + +### Notify Alarm off ### + if((ReadingsVal($hash->{NAME},"state",0)) =~ /^(Alarm is running|Snooze for.*)/) { if(my @AlarmOffDevice = split(/\|/, AttrVal($hash->{NAME},"EventForAlarmOff",""))) { foreach my $AlarmOffDevice(@AlarmOffDevice) { - my @AlarmOffDevicePart = split(/:/, $AlarmOffDevice,2); + my @AlarmOffDevicePart = split(/:/, $AlarmOffDevice,2); if(($devName eq $AlarmOffDevicePart[0]) && (grep { $AlarmOffDevicePart[1] eq $_ } @{$events})) { alarmclock_alarmroutine_stop($hash); } - } + } } } - - -### Notify Snooze ### - + + +### Notify Snooze ### + if((ReadingsVal($hash->{NAME},"state",0)) eq "Alarm is running") { if(my @SnoozeDevice = split(/\|/, AttrVal($hash->{NAME},"EventForSnooze",""))) { foreach my $SnoozeDevice(@SnoozeDevice) { - my @SnoozeDevicePart = split(/:/, $SnoozeDevice,2); + my @SnoozeDevicePart = split(/:/, $SnoozeDevice,2); if(($devName eq $SnoozeDevicePart[0]) && (grep { $SnoozeDevicePart[1] eq $_ } @{$events})) { alarmclock_snooze_start($hash); } - } + } } - } - + } + } 1; @@ -1376,7 +1376,7 @@ sub alarmclock_Notify($$) =pod =item helper =item summary Fhem Modul to set up a Alarmclock -=item summary_DE Fhem Weckermodul +=item summary_DE Fhem Weckermodul =begin html @@ -1393,7 +1393,7 @@ sub alarmclock_Notify($$)

- + Set


- + Attributes