From c42b439ce811a95770fa4f1bc7b331d2b0b04bd2 Mon Sep 17 00:00:00 2001 From: jpawlowski Date: Sun, 5 Apr 2015 08:16:51 +0000 Subject: [PATCH] RESIDENTStk wakeuptimer: correct watchdogs and add conditional enforced wakeup git-svn-id: https://svn.fhem.de/fhem/trunk@8377 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/RESIDENTStk.pm | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/fhem/FHEM/RESIDENTStk.pm b/fhem/FHEM/RESIDENTStk.pm index 5aa237450..95976aa7f 100644 --- a/fhem/FHEM/RESIDENTStk.pm +++ b/fhem/FHEM/RESIDENTStk.pm @@ -90,7 +90,7 @@ sub RESIDENTStk_wakeupSet($$) { # check for required userattr attribute my $userattributes = -"wakeupOffset:slider,0,1,120 wakeupDefaultTime:OFF,00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45 wakeupMacro wakeupUserdevice wakeupAtdevice wakeupResetSwitcher wakeupResetdays:multiple-strict,0,1,2,3,4,5,6 wakeupDays:multiple-strict,0,1,2,3,4,5,6 wakeupHolidays:andHoliday,orHoliday,andNoHoliday,orNoHoliday wakeupEnforced:0,1"; +"wakeupOffset:slider,0,1,120 wakeupDefaultTime:OFF,00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45 wakeupMacro wakeupUserdevice wakeupAtdevice wakeupResetSwitcher wakeupResetdays:multiple-strict,0,1,2,3,4,5,6 wakeupDays:multiple-strict,0,1,2,3,4,5,6 wakeupHolidays:andHoliday,orHoliday,andNoHoliday,orNoHoliday wakeupEnforced:0,1,2"; if ( !$userattr || $userattr ne $userattributes ) { Log3 $NAME, 4, "RESIDENTStk $NAME: adjusting dummy device for required attribute userattr"; @@ -308,7 +308,7 @@ if (\$EVTPART0 eq \"stop\") {\ Log3 $NAME, 3, "RESIDENTStk $NAME: new watchdog device $wdNameGotosleep created"; fhem -"define $wdNameGotosleep watchdog $wakeupUserdevice:gotosleep 00:00:04 $wakeupUserdevice:(home|absent|gone|none|asleep|awoken) trigger $macroNameGotosleep"; +"define $wdNameGotosleep watchdog $wakeupUserdevice:gotosleep 00:00:04 $wakeupUserdevice:(home|absent|gone|none|asleep|awoken) trigger $macroNameGotosleep; setstate defined $macroNameGotosleep"; fhem "attr $wdNameGotosleep comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state gotosleep"; fhem "attr $wdNameGotosleep room $room" @@ -379,7 +379,7 @@ if (\$EVTPART0 eq \"stop\") {\ Log3 $NAME, 3, "RESIDENTStk $NAME: new watchdog device $wdNameAsleep created"; fhem -"define $wdNameAsleep watchdog $wakeupUserdevice:asleep 00:00:04 $wakeupUserdevice:(home|absent|gone|none|gotosleep|awoken) trigger $macroNameAsleep"; +"define $wdNameAsleep watchdog $wakeupUserdevice:asleep 00:00:04 $wakeupUserdevice:(home|absent|gone|none|gotosleep|awoken) trigger $macroNameAsleep; setstate defined $macroNameAsleep"; fhem "attr $wdNameAsleep comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state asleep"; fhem "attr $wdNameAsleep room $room" @@ -445,7 +445,7 @@ if (\$EVTPART0 eq \"stop\") {\ Log3 $NAME, 3, "RESIDENTStk $NAME: new watchdog device $wdNameAwoken created"; fhem -"define $wdNameAwoken watchdog $wakeupUserdevice:awoken 00:00:04 $wakeupUserdevice:(home|absent|gone|none|gotosleep|asleep) trigger $macroNameAwoken"; +"define $wdNameAwoken watchdog $wakeupUserdevice:awoken 00:00:04 $wakeupUserdevice:(home|absent|gone|none|gotosleep|asleep) trigger $macroNameAwoken; setstate defined $macroNameAwoken"; fhem "attr $wdNameAwoken comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state awoken"; fhem "attr $wdNameAwoken room $room" @@ -528,7 +528,7 @@ if (\$EVTPART0 eq \"stop\") {\ Log3 $NAME, 3, "RESIDENTStk $NAME: new watchdog device $wdRNameGotosleep created"; fhem -"define $wdRNameGotosleep watchdog $deviceName:gotosleep 00:00:03 $deviceName:(home|absent|gone|none|asleep|awoken) trigger $macroRNameGotosleep"; +"define $wdRNameGotosleep watchdog $deviceName:gotosleep 00:00:03 $deviceName:(home|absent|gone|none|asleep|awoken) trigger $macroRNameGotosleep; setstate defined $macroRNameGotosleep"; fhem "attr $wdRNameGotosleep comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state gotosleep"; fhem "attr $wdRNameGotosleep room $room" @@ -585,7 +585,7 @@ if (\$EVTPART0 eq \"stop\") {\ Log3 $NAME, 3, "RESIDENTStk $NAME: new watchdog device $wdNameAsleep created"; fhem -"define $wdRNameAsleep watchdog $deviceName:asleep 00:00:03 $deviceName:(home|absent|gone|none|gotosleep|awoken) trigger $macroRNameAsleep"; +"define $wdRNameAsleep watchdog $deviceName:asleep 00:00:03 $deviceName:(home|absent|gone|none|gotosleep|awoken) trigger $macroRNameAsleep; setstate defined $macroRNameAsleep"; fhem "attr $wdRNameAsleep comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state asleep"; fhem "attr $wdRNameAsleep room $room" @@ -645,7 +645,7 @@ if (\$EVTPART0 eq \"stop\") {\ Log3 $NAME, 3, "RESIDENTStk $NAME: new watchdog device $wdNameAwoken created"; fhem -"define $wdRNameAwoken watchdog $deviceName:awoken 00:00:04 $deviceName:(home|absent|gone|none|gotosleep|asleep) trigger $macroRNameAwoken"; +"define $wdRNameAwoken watchdog $deviceName:awoken 00:00:04 $deviceName:(home|absent|gone|none|gotosleep|asleep) trigger $macroRNameAwoken; setstate defined $macroRNameAwoken"; fhem "attr $wdRNameAwoken comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state awoken"; fhem "attr $wdRNameAwoken room $room" @@ -715,6 +715,19 @@ if (\$EVTPART0 eq \"stop\") {\ "RESIDENTStk $NAME: device $wakeupMacro is not of type notify"; } else { + + # conditional enforced wake-up: + # only if actual wake-up time is not wakeupDefaultTime + if ( $wakeupEnforced == 2 + && $wakeupDefaultTime + && $wakeupDefaultTime ne $lastRun ) + { + $wakeupEnforced = 1; + } + elsif ( $wakeupEnforced == 2 ) { + $wakeupEnforced = 0; + } + if ( defined( $notify[1] ) ) { Log3 $NAME, 4, "RESIDENTStk $NAME: trigger $wakeupMacro stop $lastRun $wakeupOffset $wakeupEnforced $wakeupUserdevice"; @@ -1006,6 +1019,18 @@ sub RESIDENTStk_wakeupRun($;$) { "RESIDENTStk $NAME: Another wake-up program is already being executed for device $wakeupUserdevice, won't trigger $wakeupMacro"; } else { + # conditional enforced wake-up: + # only if actual wake-up time is not wakeupDefaultTime + if ( $wakeupEnforced == 2 + && $wakeupDefaultTime + && $wakeupDefaultTime ne $lastRun ) + { + $wakeupEnforced = 1; + } + elsif ( $wakeupEnforced == 2 ) { + $wakeupEnforced = 0; + } + Log3 $NAME, 4, "RESIDENTStk $NAME: trigger $wakeupMacro (running=1)"; fhem