diff --git a/fhem/CHANGED b/fhem/CHANGED
index 1037fc50c..ac752684f 100644
--- a/fhem/CHANGED
+++ b/fhem/CHANGED
@@ -1,5 +1,8 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it.
+ - feature: RESIDENTStk wakeuptimer: wakeupEnforced may be 3 to only enforce
+ wake-up when wake-up time is set earlier than
+ default wake-up time
- new: 10_pilight_ctrl: support temperature protocols bmp085 and bmp180
- new: 10_pilight_ctrl: support contact sensor GW-iwds07
- new: 59_LuftdatenInfo: introducing new module to fetch PM, temperature
diff --git a/fhem/FHEM/10_RESIDENTS.pm b/fhem/FHEM/10_RESIDENTS.pm
index 97c35e40e..1766a8aae 100644
--- a/fhem/FHEM/10_RESIDENTS.pm
+++ b/fhem/FHEM/10_RESIDENTS.pm
@@ -1953,7 +1953,7 @@ sub RESIDENTS_StopInternalTimers($) {
wakeupDefaultTime - after triggering macro reset the wake-up time to this default value (optional)
- wakeupEnforced - Enforce wake-up (optional; 0=no, 1=yes, 2=if wake-up time is not wakeupDefaultTime)
+ wakeupEnforced - Enforce wake-up (optional; 0=no, 1=yes, 2=if wake-up time is not wakeupDefaultTime, 3=if wake-up time is earlier than wakeupDefaultTime)
wakeupHolidays - May trigger macro on holidays or non-holidays (optional; andHoliday=on holidays also considering wakeupDays, orHoliday=on holidays independently of wakeupDays, andNoHoliday=on non-holidays also considering wakeupDays, orNoHoliday=on non-holidays independently of wakeupDays)
@@ -2328,7 +2328,7 @@ sub RESIDENTS_StopInternalTimers($) {
wakeupDefaultTime - Stellt die Weckzeit nach dem auslösen zurück auf diesen Standardwert (optional)
- wakeupEnforced - Forciertes wecken (optional; 0=nein, 1=ja, 2=wenn Weckzeit ungleich wakeupDefaultTime)
+ wakeupEnforced - Forciertes wecken (optional; 0=nein, 1=ja, 2=wenn Weckzeit ungleich wakeupDefaultTime, 3=wenn Weckzeit früher ist als wakeupDefaultTime)
wakeupHolidays - Makro u.U. an Feiertagen oder Nicht-Feiertagen ausführen (optional; andHoliday=an Feiertagen ggf. zusammen mit wakeupDays, orHoliday=an Feiertagen unabhängig von wakeupDays, andNoHoliday=an Nicht-Feiertagen ggf. zusammen mit wakeupDays, orNoHoliday=an Nicht-Feiertagen unabhängig von wakeupDays)
diff --git a/fhem/FHEM/RESIDENTStk.pm b/fhem/FHEM/RESIDENTStk.pm
index 73813bb49..999d311b5 100644
--- a/fhem/FHEM/RESIDENTStk.pm
+++ b/fhem/FHEM/RESIDENTStk.pm
@@ -45,8 +45,9 @@ sub RESIDENTStk_wakeupSet($$) {
m/^(off|nextrun|trigger|start|stop|end|reset|auto|[\+\-][1-9]*[0-9]*|[\+\-]?[0-9]{2}:[0-9]{2})$/i
)
{
- Log3 $NAME, 5,
- "RESIDENTStk $NAME: received unspecified notify '"
+ Log3 $NAME, 6,
+ "RESIDENTStk $NAME: "
+ . "received unspecified notify '"
. $notify[0]
. "' - nothing to do";
return;
@@ -110,31 +111,36 @@ m/^(off|nextrun|trigger|start|stop|end|reset|auto|[\+\-][1-9]*[0-9]*|[\+\-]?[0-9
# 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,2 wakeupWaitPeriod:slider,0,1,360";
+"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,3 wakeupWaitPeriod:slider,0,1,360";
if ( !$userattr || $userattr ne $userattributes ) {
Log3 $NAME, 4,
-"RESIDENTStk $NAME: adjusting dummy device for required attribute userattr";
+ "RESIDENTStk $NAME: "
+ . "adjusting dummy device for required attribute userattr";
fhem "attr $NAME userattr $userattributes";
}
# check for required userdevice attribute
if ( !$wakeupUserdevice ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: WARNING - set attribute wakeupUserdevice before running wakeup function!";
+ "RESIDENTStk $NAME: "
+ . "WARNING - set attribute wakeupUserdevice before running wakeup function!";
}
elsif ( !IsDevice($wakeupUserdevice) ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: WARNING - user device $wakeupUserdevice does not exist!";
+ "RESIDENTStk $NAME: "
+ . "WARNING - user device $wakeupUserdevice does not exist!";
}
elsif ( !IsDevice( $wakeupUserdevice, "RESIDENTS|ROOMMATE|GUEST" ) ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: WARNING - defined user device '$wakeupUserdevice' is not a RESIDENTS, ROOMMATE or GUEST device!";
+ "RESIDENTStk $NAME: "
+ . "WARNING - defined user device '$wakeupUserdevice' is not a RESIDENTS, ROOMMATE or GUEST device!";
}
# check for required wakeupMacro attribute
if ( !$wakeupMacro ) {
Log3 $NAME, 4,
-"RESIDENTStk $NAME: adjusting dummy device for required attribute wakeupMacro";
+ "RESIDENTStk $NAME: "
+ . "adjusting dummy device for required attribute wakeupMacro";
fhem "attr $NAME wakeupMacro $macroName";
$wakeupMacro = $macroName;
}
@@ -164,11 +170,7 @@ m/^(off|nextrun|trigger|start|stop|end|reset|auto|[\+\-][1-9]*[0-9]*|[\+\-]?[0-9
## Executed for start to cleanup in case this wake-up automation is re-started.\
## Executed for stop to cleanup in case the user ends this automation earlier.\
##\
-for (my \$i=1;; \$i <= 10;; \$i++) {\
- if (defined(\$defs{\"atTmp_\".\$i.\"_\".\$NAME})) {\
- fhem \"delete atTmp_\".\$i.\"_\".\$NAME;;\
- }\
-}\
+fhem \"delete atTmp_.*_\".\$NAME;;\
\
##-----------------------------------------------------------------------------\
## BEGIN WAKE-UP PROGRAM\
@@ -185,7 +187,7 @@ if (\$EVTPART0 eq \"start\") {\
\
# if wake-up should be enforced\
if (\$EVTPART3) {\
- Log (4, \"\$NAME: planning enforced wake-up\");;\
+ Log3 \$NAME, 3, \"\$NAME: planning enforced wake-up\";;\
# fhem \"define atTmp_3_\$NAME at +00:25:00 set Sonos_Bedroom:FILTER=Volume>4 Volume 4;;;; sleep 0.5;;;; set Sonos_Bedroom:FILTER=Shuffle=0 Shuffle 1;;;; sleep 0.5;;;; set Sonos_Bedroom StartFavourite Morning%20Sounds\";;\
# fhem \"define atTmp_4_\$NAME at +00:26:00 set Sonos_Bedroom:FILTER=Volume<5 Volume 5\";;\
# fhem \"define atTmp_5_\$NAME at +00:27:00 set Sonos_Bedroom:FILTER=Volume<6 Volume 6\";;\
@@ -223,32 +225,35 @@ if (\$EVTPART0 eq \"stop\") {\
";
Log3 $NAME, 3,
- "RESIDENTStk $NAME: new notify macro device $wakeupMacro created";
+ "RESIDENTStk $NAME: "
+ . "new notify macro device $wakeupMacro created";
fhem "define $wakeupMacro notify $wakeupMacro $wakeUpMacroTemplate";
fhem
"attr $wakeupMacro comment Macro auto-created by RESIDENTS Toolkit";
fhem "attr $wakeupMacro room $room"
if ($room);
}
- elsif ( GetType($wakeupMacro) ne "notify" ) {
+ elsif ( !IsDevice( $wakeupMacro, "notify" ) ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: WARNING - defined macro device '$wakeupMacro' is not a notify device!";
+ "RESIDENTStk $NAME: "
+ . "WARNING - defined macro device '$wakeupMacro' is not a notify device!";
}
# check for required wakeupAtdevice attribute
if ( !$wakeupAtdevice ) {
Log3 $NAME, 4,
-"RESIDENTStk $NAME: adjusting dummy device for required attribute wakeupAtdevice";
+ "RESIDENTStk $NAME: "
+ . "adjusting dummy device for required attribute wakeupAtdevice";
fhem "attr $NAME wakeupAtdevice $atName";
$wakeupAtdevice = $atName;
}
if ( !IsDevice($wakeupAtdevice) ) {
Log3 $NAME, 3,
- "RESIDENTStk $NAME: new at-device $wakeupAtdevice created";
- fhem
-"define $wakeupAtdevice at *{RESIDENTStk_wakeupGetBegin(\"$NAME\",\"$wakeupAtdevice\")} set $NAME trigger";
- fhem
-"attr $wakeupAtdevice comment Auto-created by RESIDENTS Toolkit: trigger wake-up timer at specific time";
+ "RESIDENTStk $NAME: " . "new at-device $wakeupAtdevice created";
+ fhem "define $wakeupAtdevice "
+ . "at *{RESIDENTStk_wakeupGetBegin(\"$NAME\",\"$wakeupAtdevice\")} set $NAME trigger";
+ fhem "attr $wakeupAtdevice "
+ . "comment Auto-created by RESIDENTS Toolkit: trigger wake-up timer at specific time";
fhem "attr $wakeupAtdevice computeAfterInit 1";
fhem "attr $wakeupAtdevice room $room"
if ($room);
@@ -258,7 +263,7 @@ if (\$EVTPART0 eq \"stop\") {\
# for ROOMMATE or GUEST devices
# macro: gotosleep
- if ( GetType($wakeupUserdevice) ne "RESIDENTS"
+ if ( !IsDevice( $wakeupUserdevice, "RESIDENTS" )
&& !IsDevice($macroNameGotosleep) )
{
my $templateGotosleep = "{\
@@ -314,11 +319,12 @@ return;;\
}";
Log3 $NAME, 3,
-"RESIDENTStk $NAME: new notify macro device $macroNameGotosleep created";
- fhem
-"define $macroNameGotosleep notify $macroNameGotosleep $templateGotosleep";
- fhem
-"attr $macroNameGotosleep comment Auto-created by RESIDENTS Toolkit: FHEM commands to run when gettin' ready for bed";
+ "RESIDENTStk $NAME: "
+ . "new notify macro device $macroNameGotosleep created";
+ fhem "define $macroNameGotosleep "
+ . "notify $macroNameGotosleep $templateGotosleep";
+ fhem "attr $macroNameGotosleep "
+ . "comment Auto-created by RESIDENTS Toolkit: FHEM commands to run when gettin' ready for bed";
fhem "attr $macroNameGotosleep room $room"
if ($room);
}
@@ -326,18 +332,19 @@ return;;\
# wd: gotosleep
if ( !IsDevice($wdNameGotosleep) ) {
Log3 $NAME, 3,
- "RESIDENTStk $NAME: new watchdog device $wdNameGotosleep created";
- fhem
-"define $wdNameGotosleep watchdog $wakeupUserdevice:(gotosleep|bettfertig) 00:00:04 $wakeupUserdevice:(home|anwesend|zuhause|absent|abwesend|gone|verreist|asleep|schlaeft|schläft|awoken|aufgestanden) trigger $macroNameGotosleep";
+ "RESIDENTStk $NAME: "
+ . "new watchdog device $wdNameGotosleep created";
+ fhem "define $wdNameGotosleep "
+ . "watchdog $wakeupUserdevice:(gotosleep|bettfertig) 00:00:04 $wakeupUserdevice:(home|anwesend|zuhause|absent|abwesend|gone|verreist|asleep|schlaeft|schläft|awoken|aufgestanden) trigger $macroNameGotosleep";
fhem "attr $wdNameGotosleep autoRestart 1";
- fhem
-"attr $wdNameGotosleep comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state gotosleep";
+ fhem "attr $wdNameGotosleep "
+ . "comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state gotosleep";
fhem "attr $wdNameGotosleep room $room"
if ($room);
}
# macro: asleep
- if ( GetType($wakeupUserdevice) ne "RESIDENTS"
+ if ( !IsDevice( $wakeupUserdevice, "RESIDENTS" )
&& !IsDevice($macroNameAsleep) )
{
my $templateAsleep = "{\
@@ -389,11 +396,12 @@ return;;\
}";
Log3 $NAME, 3,
-"RESIDENTStk $NAME: new notify macro device $macroNameAsleep created";
+ "RESIDENTStk $NAME: "
+ . "new notify macro device $macroNameAsleep created";
fhem
"define $macroNameAsleep notify $macroNameAsleep $templateAsleep";
- fhem
-"attr $macroNameAsleep comment Auto-created by RESIDENTS Toolkit: FHEM commands to run when jumpin' into bed and start to sleep";
+ fhem "attr $macroNameAsleep "
+ . "comment Auto-created by RESIDENTS Toolkit: FHEM commands to run when jumpin' into bed and start to sleep";
fhem "attr $macroNameAsleep room $room"
if ($room);
}
@@ -401,18 +409,19 @@ return;;\
# wd: asleep
if ( !IsDevice($wdNameAsleep) ) {
Log3 $NAME, 3,
- "RESIDENTStk $NAME: new watchdog device $wdNameAsleep created";
- fhem
-"define $wdNameAsleep watchdog $wakeupUserdevice:(asleep|schlaeft|schläft) 00:00:04 $wakeupUserdevice:(home|anwesend|zuhause|absent|abwesend|gone|verreist|gotosleep|bettfertig|awoken|aufgestanden) trigger $macroNameAsleep";
+ "RESIDENTStk $NAME: "
+ . "new watchdog device $wdNameAsleep created";
+ fhem "define $wdNameAsleep "
+ . "watchdog $wakeupUserdevice:(asleep|schlaeft|schläft) 00:00:04 $wakeupUserdevice:(home|anwesend|zuhause|absent|abwesend|gone|verreist|gotosleep|bettfertig|awoken|aufgestanden) trigger $macroNameAsleep";
fhem "attr $wdNameAsleep autoRestart 1";
- fhem
-"attr $wdNameAsleep comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state asleep";
+ fhem "attr $wdNameAsleep "
+ . "comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state asleep";
fhem "attr $wdNameAsleep room $room"
if ($room);
}
# macro: awoken
- if ( GetType($wakeupUserdevice) ne "RESIDENTS"
+ if ( !IsDevice( $wakeupUserdevice, "RESIDENTS" )
&& !IsDevice($macroNameAwoken) )
{
my $templateAwoken = "{\
@@ -460,11 +469,12 @@ return;;\
}";
Log3 $NAME, 3,
-"RESIDENTStk $NAME: new notify macro device $macroNameAwoken created";
+ "RESIDENTStk $NAME: "
+ . "new notify macro device $macroNameAwoken created";
fhem
"define $macroNameAwoken notify $macroNameAwoken $templateAwoken";
- fhem
-"attr $macroNameAwoken comment Auto-created by RESIDENTS Toolkit: FHEM commands to run after confirming to be awake";
+ fhem "attr $macroNameAwoken "
+ . "comment Auto-created by RESIDENTS Toolkit: FHEM commands to run after confirming to be awake";
fhem "attr $macroNameAwoken room $room"
if ($room);
}
@@ -472,12 +482,13 @@ return;;\
# wd: awoken
if ( !IsDevice($wdNameAwoken) ) {
Log3 $NAME, 3,
- "RESIDENTStk $NAME: new watchdog device $wdNameAwoken created";
- fhem
-"define $wdNameAwoken watchdog $wakeupUserdevice:(awoken|aufgestanden) 00:00:04 $wakeupUserdevice:(home|anwesend|zuhause|absent|abwesend|gone|verreist|gotosleep|bettfertig|asleep|schlaeft|schläft) trigger $macroNameAwoken";
+ "RESIDENTStk $NAME: "
+ . "new watchdog device $wdNameAwoken created";
+ fhem "define $wdNameAwoken "
+ . "watchdog $wakeupUserdevice:(awoken|aufgestanden) 00:00:04 $wakeupUserdevice:(home|anwesend|zuhause|absent|abwesend|gone|verreist|gotosleep|bettfertig|asleep|schlaeft|schläft) trigger $macroNameAwoken";
fhem "attr $wdNameAwoken autoRestart 1";
- fhem
-"attr $wdNameAwoken comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state awoken";
+ fhem "attr $wdNameAwoken "
+ . "comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state awoken";
fhem "attr $wdNameAwoken room $room"
if ($room);
}
@@ -542,7 +553,8 @@ return;;\
}";
Log3 $NAME, 3,
-"RESIDENTStk $NAME: new notify macro device $macroRNameGotosleep created";
+ "RESIDENTStk $NAME: "
+ . "new notify macro device $macroRNameGotosleep created";
fhem
"define $macroRNameGotosleep notify $macroRNameGotosleep $templateGotosleep";
fhem
@@ -554,12 +566,13 @@ return;;\
# wd: gotosleep
if ( !IsDevice($wdRNameGotosleep) ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: new watchdog device $wdRNameGotosleep created";
- fhem
-"define $wdRNameGotosleep watchdog $deviceName:(gotosleep|bettfertig) 00:00:03 $deviceName:(home|anwesend|zuhause|absent|abwesend|gone|verreist|asleep|schlaeft|schläft|awoken|aufgestanden) trigger $macroRNameGotosleep";
+ "RESIDENTStk $NAME: "
+ . "new watchdog device $wdRNameGotosleep created";
+ fhem "define $wdRNameGotosleep "
+ . "watchdog $deviceName:(gotosleep|bettfertig) 00:00:03 $deviceName:(home|anwesend|zuhause|absent|abwesend|gone|verreist|asleep|schlaeft|schläft|awoken|aufgestanden) trigger $macroRNameGotosleep";
fhem "attr $wdRNameGotosleep autoRestart 1";
- fhem
-"attr $wdRNameGotosleep comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state gotosleep";
+ fhem "attr $wdRNameGotosleep "
+ . "comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state gotosleep";
fhem "attr $wdRNameGotosleep room $room"
if ($room);
}
@@ -601,11 +614,12 @@ return;;\
}";
Log3 $NAME, 3,
-"RESIDENTStk $NAME: new notify macro device $macroRNameAsleep created";
- fhem
-"define $macroRNameAsleep notify $macroRNameAsleep $templateAsleep";
- fhem
-"attr $macroRNameAsleep comment Auto-created by RESIDENTS Toolkit: FHEM commands to run when all residents are in their beds";
+ "RESIDENTStk $NAME: "
+ . "new notify macro device $macroRNameAsleep created";
+ fhem "define $macroRNameAsleep "
+ . "notify $macroRNameAsleep $templateAsleep";
+ fhem "attr $macroRNameAsleep "
+ . "comment Auto-created by RESIDENTS Toolkit: FHEM commands to run when all residents are in their beds";
fhem "attr $macroRNameAsleep room $room"
if ($room);
}
@@ -613,12 +627,13 @@ return;;\
# wd: asleep
if ( !IsDevice($wdRNameAsleep) ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: new watchdog device $wdNameAsleep created";
- fhem
-"define $wdRNameAsleep watchdog $deviceName:(asleep|schlaeft|schläft) 00:00:03 $deviceName:(home|anwesend|zuhause|absent|abwesend|gone|verreist|gotosleep|bettfertig|awoken|aufgestanden) trigger $macroRNameAsleep";
+ "RESIDENTStk $NAME: "
+ . "new watchdog device $wdNameAsleep created";
+ fhem "define $wdRNameAsleep "
+ . "watchdog $deviceName:(asleep|schlaeft|schläft) 00:00:03 $deviceName:(home|anwesend|zuhause|absent|abwesend|gone|verreist|gotosleep|bettfertig|awoken|aufgestanden) trigger $macroRNameAsleep";
fhem "attr $wdRNameAsleep autoRestart 1";
- fhem
-"attr $wdRNameAsleep comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state asleep";
+ fhem "attr $wdRNameAsleep "
+ . "comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state asleep";
fhem "attr $wdRNameAsleep room $room"
if ($room);
}
@@ -663,11 +678,12 @@ return;;\
}";
Log3 $NAME, 3,
-"RESIDENTStk $NAME: new notify macro device $macroRNameAwoken created";
- fhem
-"define $macroRNameAwoken notify $macroRNameAwoken $templateAwoken";
- fhem
-"attr $macroRNameAwoken comment Auto-created by RESIDENTS Toolkit: FHEM commands to run after first resident confirmed to be awake";
+ "RESIDENTStk $NAME: "
+ . "new notify macro device $macroRNameAwoken created";
+ fhem "define $macroRNameAwoken "
+ . "notify $macroRNameAwoken $templateAwoken";
+ fhem "attr $macroRNameAwoken "
+ . "comment Auto-created by RESIDENTS Toolkit: FHEM commands to run after first resident confirmed to be awake";
fhem "attr $macroRNameAwoken room $room"
if ($room);
}
@@ -675,12 +691,13 @@ return;;\
# wd: awoken
if ( !IsDevice($wdRNameAwoken) ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: new watchdog device $wdNameAwoken created";
- fhem
-"define $wdRNameAwoken watchdog $deviceName:(awoken|aufgestanden) 00:00:04 $deviceName:(home|anwesend|zuhause|absent|abwesend|gone|verreist|gotosleep|bettfertig|asleep|schlaeft|schläft) trigger $macroRNameAwoken";
+ "RESIDENTStk $NAME: "
+ . "new watchdog device $wdNameAwoken created";
+ fhem "define $wdRNameAwoken "
+ . "watchdog $deviceName:(awoken|aufgestanden) 00:00:04 $deviceName:(home|anwesend|zuhause|absent|abwesend|gone|verreist|gotosleep|bettfertig|asleep|schlaeft|schläft) trigger $macroRNameAwoken";
fhem "attr $wdRNameAwoken autoRestart 1";
- fhem
-"attr $wdRNameAwoken comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state awoken";
+ fhem "attr $wdRNameAwoken "
+ . "comment Auto-created by RESIDENTS Toolkit: trigger macro after going to state awoken";
fhem "attr $wdRNameAwoken room $room"
if ($room);
}
@@ -688,13 +705,15 @@ return;;\
}
}
- elsif ( GetType($wakeupAtdevice) ne "at" ) {
+ elsif ( !IsDevice( $wakeupAtdevice, "at" ) ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: WARNING - defined at-device '$wakeupAtdevice' is not an at-device!";
+ "RESIDENTStk $NAME: "
+ . "WARNING - defined at-device '$wakeupAtdevice' is not an at-device!";
}
elsif ( AttrVal( $wakeupAtdevice, "computeAfterInit", 0 ) ne "1" ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: Correcting '$wakeupAtdevice' attribute computeAfterInit required for correct recalculation after reboot";
+ "RESIDENTStk $NAME: "
+ . "Correcting '$wakeupAtdevice' attribute computeAfterInit required for correct recalculation after reboot";
fhem "attr $wakeupAtdevice computeAfterInit 1";
}
@@ -702,21 +721,24 @@ return;;\
if ($wakeupHolidays) {
if ( !$holidayDevice ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: ERROR - wakeupHolidays set in this alarm clock but global attribute holiday2we not set!";
- return
-"ERROR: wakeupHolidays set in this alarm clock but global attribute holiday2we not set!";
+ "RESIDENTStk $NAME: "
+ . "ERROR - wakeupHolidays set in this alarm clock but global attribute holiday2we not set!";
+ return "ERROR: "
+ . "wakeupHolidays set in this alarm clock but global attribute holiday2we not set!";
}
elsif ( !IsDevice($holidayDevice) ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: ERROR - global attribute holiday2we has reference to non-existing device $holidayDevice";
- return
-"ERROR: global attribute holiday2we has reference to non-existing device $holidayDevice";
+ "RESIDENTStk $NAME: "
+ . "ERROR - global attribute holiday2we has reference to non-existing device $holidayDevice";
+ return "ERROR: "
+ . "global attribute holiday2we has reference to non-existing device $holidayDevice";
}
- elsif ( GetType($holidayDevice) ne "holiday" ) {
+ elsif ( !IsDevice( $holidayDevice, "holiday" ) ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: ERROR - global attribute holiday2we seems to have invalid device reference - $holidayDevice is not of type 'holiday'";
- return
-"ERROR: global attribute holiday2we seems to have invalid device reference - $holidayDevice is not of type 'holiday'";
+ "RESIDENTStk $NAME: "
+ . "ERROR - global attribute holiday2we seems to have invalid device reference - $holidayDevice is not of type 'holiday'";
+ return "ERROR: "
+ . "global attribute holiday2we seems to have invalid device reference - $holidayDevice is not of type 'holiday'";
}
}
@@ -735,22 +757,25 @@ return;;\
# stop | end
#
elsif ( ( $VALUE eq "stop" || $VALUE eq "end" ) && $running ) {
- Log3 $NAME, 4, "RESIDENTStk $NAME: stopping wake-up program";
+ Log3 $NAME, 4, "RESIDENTStk $NAME: " . "stopping wake-up program";
fhem "setreading $NAME running 0";
fhem "set $NAME nextRun $nextRun";
# trigger macro again so it may clean up it's stuff.
# use $EVTPART1 to check
if ( !$wakeupMacro ) {
- Log3 $NAME, 2, "RESIDENTStk $NAME: missing attribute wakeupMacro";
+ Log3 $NAME, 2,
+ "RESIDENTStk $NAME: " . "missing attribute wakeupMacro";
}
elsif ( !IsDevice($wakeupMacro) ) {
Log3 $NAME, 2,
-"RESIDENTStk $NAME: notify macro $wakeupMacro not found - no wakeup actions defined!";
+ "RESIDENTStk $NAME: "
+ . "notify macro $wakeupMacro not found - no wakeup actions defined!";
}
- elsif ( GetType($wakeupMacro) ne "notify" ) {
+ elsif ( !IsDevice( $wakeupMacro, "notify" ) ) {
Log3 $NAME, 2,
- "RESIDENTStk $NAME: device $wakeupMacro is not of type notify";
+ "RESIDENTStk $NAME: "
+ . "device $wakeupMacro is not of type notify";
}
else {
@@ -768,15 +793,17 @@ return;;\
if ( defined( $notify[1] ) || $VALUE eq "end" ) {
Log3 $NAME, 4,
-"RESIDENTStk $NAME: trigger $wakeupMacro stop $lastRun $wakeupOffset $wakeupEnforced $wakeupUserdevice $wakeupUserdeviceState";
- fhem
-"trigger $wakeupMacro stop $lastRun $wakeupOffset $wakeupEnforced $wakeupUserdevice $wakeupUserdeviceState";
+ "RESIDENTStk $NAME: "
+ . "trigger $wakeupMacro stop $lastRun $wakeupOffset $wakeupEnforced $wakeupUserdevice $wakeupUserdeviceState";
+ fhem "trigger $wakeupMacro "
+ . "stop $lastRun $wakeupOffset $wakeupEnforced $wakeupUserdevice $wakeupUserdeviceState";
}
else {
Log3 $NAME, 4,
-"RESIDENTStk $NAME: trigger $wakeupMacro forced-stop $lastRun $wakeupOffset $wakeupEnforced $wakeupUserdevice $wakeupUserdeviceState";
- fhem
-"trigger $wakeupMacro forced-stop $lastRun $wakeupOffset $wakeupEnforced $wakeupUserdevice $wakeupUserdeviceState";
+ "RESIDENTStk $NAME: "
+ . "trigger $wakeupMacro forced-stop $lastRun $wakeupOffset $wakeupEnforced $wakeupUserdevice $wakeupUserdeviceState";
+ fhem "trigger $wakeupMacro "
+ . "forced-stop $lastRun $wakeupOffset $wakeupEnforced $wakeupUserdevice $wakeupUserdeviceState";
fhem "set $wakeupUserdevice:FILTER=state=asleep awoken";
}
@@ -810,7 +837,8 @@ return;;\
}
elsif ( $VALUE eq "reset" ) {
Log3 $NAME, 4,
-"RESIDENTStk $NAME: no default value specified in attribute wakeupDefaultTime, just keeping setting OFF";
+ "RESIDENTStk $NAME: "
+ . "no default value specified in attribute wakeupDefaultTime, just keeping setting OFF";
fhem "set $NAME:FILTER=state!=OFF nextRun OFF";
}
@@ -824,7 +852,7 @@ return;;\
|| $VALUE =~ /^[\+\-][1-9]*[0-9]*$/
|| $VALUE =~ /^[\+\-]?([0-9]{2}):([0-9]{2})$/
)
- && GetType($wakeupAtdevice) eq "at"
+ && IsDevice( $wakeupAtdevice, "at" )
)
{
@@ -837,12 +865,12 @@ return;;\
#
readingsBeginUpdate( $defs{$NAME} );
if ( ReadingsVal( $NAME, "nextRun", 0 ) ne $VALUE ) {
- Log3 $NAME, 4, "RESIDENTStk $NAME: New wake-up time: $VALUE";
+ Log3 $NAME, 4, "RESIDENTStk $NAME: " . "New wake-up time: $VALUE";
readingsBulkUpdate( $defs{$NAME}, "nextRun", $VALUE );
# Update at-device
- fhem
-"set $wakeupAtdevice modifyTimeSpec {RESIDENTStk_wakeupGetBegin(\"$NAME\",\"$wakeupAtdevice\")}";
+ fhem "set $wakeupAtdevice "
+ . "modifyTimeSpec {RESIDENTStk_wakeupGetBegin(\"$NAME\",\"$wakeupAtdevice\")}";
}
if ( ReadingsVal( $NAME, "state", 0 ) ne $VALUE
&& !$running )
@@ -893,7 +921,8 @@ sub RESIDENTStk_wakeupGetBegin($;$) {
if ($wakeupAtdevice) {
Log3 $NAME, 4,
-"RESIDENTStk $NAME: Wakeuptime recalculation triggered by at-device $wakeupAtdevice";
+ "RESIDENTStk $NAME: "
+ . "Wakeuptime recalculation triggered by at-device $wakeupAtdevice";
}
# just give any valuable return to at-device
@@ -901,21 +930,25 @@ sub RESIDENTStk_wakeupGetBegin($;$) {
# and run self-destruction to clean up
if ( !IsDevice($NAME) ) {
Log3 $NAME, 3,
- "RESIDENTStk $NAME: this wake-up timer device does not exist anymore";
+ "RESIDENTStk $NAME: "
+ . "this wake-up timer device does not exist anymore";
my $atName = "at_" . $NAME;
- if ( GetType($wakeupAtdevice) eq "at" ) {
+ if ( IsDevice( $wakeupAtdevice, "at" ) ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: Cleaning up at-device $wakeupAtdevice (self-destruction)";
+ "RESIDENTStk $NAME: "
+ . "Cleaning up at-device $wakeupAtdevice (self-destruction)";
fhem "sleep 1; delete $wakeupAtdevice";
}
- elsif ( GetType($atName) eq "at" ) {
- Log3 $NAME, 3, "RESIDENTStk $NAME: Cleaning up at-device $atName";
+ elsif ( IsDevice( $atName, "at" ) ) {
+ Log3 $NAME, 3,
+ "RESIDENTStk $NAME: " . "Cleaning up at-device $atName";
fhem "sleep 1; delete $atName";
}
else {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: Could not automatically clean up at-device, please perform manual cleanup.";
+ "RESIDENTStk $NAME: "
+ . "Could not automatically clean up at-device, please perform manual cleanup.";
}
return $wakeupInitTime;
@@ -924,7 +957,7 @@ sub RESIDENTStk_wakeupGetBegin($;$) {
# use nextRun value if not OFF
if ( $nextRun && lc($nextRun) ne "off" ) {
$wakeupTime = $nextRun;
- Log3 $NAME, 4, "RESIDENTStk $NAME: wakeupGetBegin source: nextRun";
+ Log3 $NAME, 4, "RESIDENTStk $NAME: " . "wakeupGetBegin source: nextRun";
}
# use wakeupDefaultTime if present and not OFF
@@ -933,13 +966,14 @@ sub RESIDENTStk_wakeupGetBegin($;$) {
{
$wakeupTime = $wakeupDefaultTime;
Log3 $NAME, 4,
- "RESIDENTStk $NAME: wakeupGetBegin source: wakeupDefaultTime";
+ "RESIDENTStk $NAME: " . "wakeupGetBegin source: wakeupDefaultTime";
}
# Use a default value to ensure auto-reset at least once a day
else {
$wakeupTime = $wakeupInitTime;
- Log3 $NAME, 4, "RESIDENTStk $NAME: wakeupGetBegin source: defaultValue";
+ Log3 $NAME, 4,
+ "RESIDENTStk $NAME: " . "wakeupGetBegin source: defaultValue";
}
# Recalculate new wake-up value
@@ -947,7 +981,8 @@ sub RESIDENTStk_wakeupGetBegin($;$) {
if ( $seconds < 0 ) { $seconds = 86400 + $seconds }
Log3 $NAME, 4,
-"RESIDENTStk $NAME: wakeupGetBegin result: $wakeupTime = $seconds s - $wakeupOffset m = "
+ "RESIDENTStk $NAME: "
+ . "wakeupGetBegin result: $wakeupTime = $seconds s - $wakeupOffset m = "
. RESIDENTStk_sec2time($seconds);
return RESIDENTStk_sec2time($seconds);
@@ -981,7 +1016,7 @@ sub RESIDENTStk_wakeupRun($;$) {
my $holidayToday = "";
if ( $wakeupHolidays
- && GetType($holidayDevice) eq "holiday" )
+ && IsDevice( $holidayDevice, "holiday" ) )
{
my $hdayTod = ReadingsVal( $holidayDevice, "state", "" );
@@ -1016,11 +1051,11 @@ sub RESIDENTStk_wakeupRun($;$) {
if ( $nextRun ne $nowRun ) {
$lastRun = $nowRun;
- Log3 $NAME, 4, "RESIDENTStk $NAME: lastRun != nextRun = $lastRun";
+ Log3 $NAME, 4, "RESIDENTStk $NAME: " . "lastRun != nextRun = $lastRun";
}
else {
$lastRun = $nextRun;
- Log3 $NAME, 4, "RESIDENTStk $NAME: lastRun = nextRun = $lastRun";
+ Log3 $NAME, 4, "RESIDENTStk $NAME: " . "lastRun = nextRun = $lastRun";
}
my @days = ($today);
@@ -1038,11 +1073,13 @@ sub RESIDENTStk_wakeupRun($;$) {
}
elsif ( IsDisabled($wakeupDevice) ) {
Log3 $name, 4,
- "RESIDENTStk $NAME: device disabled - not triggering wake-up program";
+ "RESIDENTStk $NAME: "
+ . "device disabled - not triggering wake-up program";
}
elsif ( lc($nextRun) eq "off" && !$forceRun ) {
Log3 $NAME, 4,
-"RESIDENTStk $NAME: alarm set to OFF - not triggering wake-up program";
+ "RESIDENTStk $NAME: "
+ . "alarm set to OFF - not triggering wake-up program";
}
elsif ( !$wakeupUserdevice ) {
return "$NAME: missing attribute wakeupUserdevice";
@@ -1051,20 +1088,22 @@ sub RESIDENTStk_wakeupRun($;$) {
return "$NAME: Non existing wakeupUserdevice $wakeupUserdevice";
}
elsif ( !IsDevice( $wakeupUserdevice, "RESIDENTS|ROOMMATE|GUEST" ) ) {
- return
-"$NAME: device $wakeupUserdevice is not of type RESIDENTS, ROOMMATE or GUEST";
+ return "$NAME: "
+ . "device $wakeupUserdevice is not of type RESIDENTS, ROOMMATE or GUEST";
}
- elsif ( GetType($wakeupUserdevice) eq "GUEST"
+ elsif ( IsDevice( $wakeupUserdevice, "GUEST" )
&& $wakeupUserdeviceState eq "none" )
{
Log3 $NAME, 4,
-"RESIDENTStk $NAME: GUEST device $wakeupUserdevice has status value 'none' so let's disable this alarm timer";
+ "RESIDENTStk $NAME: "
+ . "GUEST device $wakeupUserdevice has status value 'none' so let's disable this alarm timer";
fhem "set $NAME nextRun OFF";
return;
}
elsif ( !$wakeupHolidays && !$days{$today} && !$forceRun ) {
Log3 $NAME, 4,
-"RESIDENTStk $NAME: weekday restriction in use - not triggering wake-up program this time";
+ "RESIDENTStk $NAME: "
+ . "weekday restriction in use - not triggering wake-up program this time";
}
elsif (
$wakeupHolidays
@@ -1082,7 +1121,8 @@ sub RESIDENTStk_wakeupRun($;$) {
)
{
Log3 $NAME, 4,
-"RESIDENTStk $NAME: neither weekday nor holiday restriction matched - not triggering wake-up program this time";
+ "RESIDENTStk $NAME: "
+ . "neither weekday nor holiday restriction matched - not triggering wake-up program this time";
}
elsif (
$wakeupHolidays
@@ -1100,7 +1140,8 @@ sub RESIDENTStk_wakeupRun($;$) {
)
{
Log3 $NAME, 4,
-"RESIDENTStk $NAME: weekday restriction in conjunction with $wakeupHolidays in use - not triggering wake-up program this time";
+ "RESIDENTStk $NAME: "
+ . "weekday restriction in conjunction with $wakeupHolidays in use - not triggering wake-up program this time";
}
elsif ($wakeupUserdeviceState eq "absent"
|| $wakeupUserdeviceState eq "gone"
@@ -1108,7 +1149,8 @@ sub RESIDENTStk_wakeupRun($;$) {
|| $wakeupUserdeviceState eq "awoken" )
{
Log3 $NAME, 4,
-"RESIDENTStk $NAME: we should not start any wake-up program for resident device $wakeupUserdevice being in state '"
+ "RESIDENTStk $NAME: "
+ . "we should not start any wake-up program for resident device $wakeupUserdevice being in state '"
. $wakeupUserdeviceState
. "' - not triggering wake-up program this time";
}
@@ -1135,31 +1177,51 @@ sub RESIDENTStk_wakeupRun($;$) {
return "$NAME: missing attribute wakeupMacro";
}
elsif ( !IsDevice($wakeupMacro) ) {
- return
-"$NAME: notify macro $wakeupMacro not found - no wakeup actions defined!";
+ return "$NAME: "
+ . "notify macro $wakeupMacro not found - no wakeup actions defined!";
}
- elsif ( GetType($wakeupMacro) ne "notify" ) {
+ elsif ( !IsDevice( $wakeupMacro, "notify" ) ) {
return "$NAME: device $wakeupMacro is not of type notify";
}
elsif ($wakeupUserdeviceWakeup) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: Another wake-up program is already being executed for device $wakeupUserdevice, won't trigger $wakeupMacro";
+ "RESIDENTStk $NAME: "
+ . "Another wake-up program is already being executed for device $wakeupUserdevice, won't trigger $wakeupMacro";
}
elsif ( $expLastWakeup > $nowRunSec && !$forceRun ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: won't trigger wake-up program due to non-expired wakeupWaitPeriod threshold since lastWakeup (expLastWakeup=$expLastWakeup > nowRunSec=$nowRunSec)";
+ "RESIDENTStk $NAME: "
+ . "won't trigger wake-up program due to non-expired wakeupWaitPeriod threshold since lastWakeup (expLastWakeup=$expLastWakeup > nowRunSec=$nowRunSec)";
}
elsif ( $expLastAwake > $nowRunSec && !$forceRun ) {
Log3 $NAME, 3,
-"RESIDENTStk $NAME: won't trigger wake-up program due to non-expired wakeupWaitPeriod threshold since lastAwake (expLastAwake=$expLastAwake > nowRunSec=$nowRunSec)";
+ "RESIDENTStk $NAME: "
+ . "won't trigger wake-up program due to non-expired wakeupWaitPeriod threshold since lastAwake (expLastAwake=$expLastAwake > nowRunSec=$nowRunSec)";
}
else {
+ # conditional enforced wake-up:
+ # only if actual wake-up time is
+ # earlier than wakeupDefaultTime
+ if ( $wakeupEnforced == 3
+ && $wakeupDefaultTime
+ && RESIDENTStk_time2sec($wakeupDefaultTime) >
+ RESIDENTStk_time2sec($lastRun) )
+ {
+ Log3 $NAME, 4,
+ "RESIDENTStk $NAME: "
+ . "Enforcing wake-up because wake-up time is earlier than normal (wakeupDefaultTime=$wakeupDefaultTime > lastRun=$lastRun)";
+ $wakeupEnforced = 1;
+ }
+
# conditional enforced wake-up:
# only if actual wake-up time is not wakeupDefaultTime
- if ( $wakeupEnforced == 2
+ elsif ($wakeupEnforced == 2
&& $wakeupDefaultTime
&& $wakeupDefaultTime ne $lastRun )
{
+ Log3 $NAME, 4,
+ "RESIDENTStk $NAME: "
+ . "Enforcing wake-up because wake-up is different from normal (wakeupDefaultTime=$wakeupDefaultTime =! lastRun=$lastRun)";
$wakeupEnforced = 1;
}
elsif ( $wakeupEnforced == 2 ) {
@@ -1167,9 +1229,9 @@ sub RESIDENTStk_wakeupRun($;$) {
}
Log3 $NAME, 4,
- "RESIDENTStk $NAME: trigger $wakeupMacro (running=1)";
- fhem
-"trigger $wakeupMacro start $lastRun $wakeupOffset $wakeupEnforced $wakeupUserdevice $wakeupUserdeviceState";
+ "RESIDENTStk $NAME: " . "trigger $wakeupMacro (running=1)";
+ fhem "trigger $wakeupMacro "
+ . "start $lastRun $wakeupOffset $wakeupEnforced $wakeupUserdevice $wakeupUserdeviceState";
# Update user device with last wakeup details
#
@@ -1194,12 +1256,13 @@ sub RESIDENTStk_wakeupRun($;$) {
}
Log3 $NAME, 4,
-"RESIDENTStk $NAME: created at-device $wakeupStopAtdevice to stop wake-up program in $wakeupOffset minutes";
+ "RESIDENTStk $NAME: "
+ . "created at-device $wakeupStopAtdevice to stop wake-up program in $wakeupOffset minutes";
fhem "define $wakeupStopAtdevice at +"
. RESIDENTStk_sec2time( $wakeupOffset * 60 + 1 )
. " set $NAME:FILTER=running=1 stop triggerpost";
- fhem
-"attr $wakeupStopAtdevice comment Auto-created by RESIDENTS Toolkit: temp. at-device to stop wake-up program of timer $NAME when wake-up time is reached";
+ fhem "attr $wakeupStopAtdevice "
+ . "comment Auto-created by RESIDENTS Toolkit: temp. at-device to stop wake-up program of timer $NAME when wake-up time is reached";
$running = 1;
}
@@ -1230,8 +1293,7 @@ sub RESIDENTStk_wakeupRun($;$) {
readingsEndUpdate( $defs{$wakeupUserdevice}, 1 );
my $doReset = 1;
- if ( $wakeupResetSwitcher
- && GetType($wakeupResetSwitcher) eq "dummy"
+ if ( IsDevice( $wakeupResetSwitcher, "dummy" )
&& ReadingsVal( $wakeupResetSwitcher, "state", 0 ) eq "off" )
{
$doReset = 0;
@@ -1239,9 +1301,9 @@ sub RESIDENTStk_wakeupRun($;$) {
if ( $wakeupDefaultTime && $rdays{$today} && $doReset ) {
Log3 $NAME, 4,
- "RESIDENTStk $NAME: Resetting based on wakeupDefaultTime";
- fhem
-"set $NAME:FILTER=state!=$wakeupDefaultTime nextRun $wakeupDefaultTime";
+ "RESIDENTStk $NAME: " . "Resetting based on wakeupDefaultTime";
+ fhem "set $NAME:FILTER=state!=$wakeupDefaultTime "
+ . "nextRun $wakeupDefaultTime";
}
elsif ( !$running ) {
fhem "setreading $NAME:FILTER=state!=$nextRun state $nextRun";
@@ -1272,16 +1334,16 @@ sub RESIDENTStk_AttrFnDummy(@) {
my $room = AttrVal( $name, "room", 0 );
fhem "define $aVal dummy";
- fhem
-"attr $aVal comment Auto-created by RESIDENTS Toolkit: easy between on/off for auto time reset of wake-up timer $NAME";
+ fhem "attr $aVal "
+ . "comment Auto-created by RESIDENTS Toolkit: easy between on/off for auto time reset of wake-up timer $NAME";
if ($alias) {
fhem "attr $aVal alias $alias Reset";
}
else {
fhem "attr $aVal alias Wake-up Timer Reset";
}
- fhem
-"attr $aVal devStateIcon auto:time_automatic:off off:time_manual_mode:auto";
+ fhem "attr $aVal "
+ . "devStateIcon auto:time_automatic:off off:time_manual_mode:auto";
fhem "attr $aVal group $group"
if ($group);
fhem "attr $aVal icon refresh";
@@ -1294,9 +1356,10 @@ sub RESIDENTStk_AttrFnDummy(@) {
Log3 $name, 3,
"RESIDENTStk $name: new slave dummy device $aVal created";
}
- elsif ( GetType($aVal) ne "dummy" ) {
+ elsif ( !IsDevice( $aVal, "dummy" ) ) {
Log3 $name, 3,
-"RESIDENTStk $name: Defined device name in attr $aName is not a dummy device";
+ "RESIDENTStk $name: "
+ . "Defined device name in attr $aName is not a dummy device";
return "Existing device $aVal is not a dummy!";
}
}
@@ -1351,7 +1414,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
if ( !IsDevice($wakeupDevice) ) {
Log3 $name, 4,
-"RESIDENTStk $name: 00 - ignoring reference to non-existing wakeupDevice $wakeupDevice";
+ "RESIDENTStk $name: "
+ . "00 - ignoring reference to non-existing wakeupDevice $wakeupDevice";
my $wakeupDeviceListNew = $wakeupDeviceList;
$wakeupDeviceListNew =~ s/,$wakeupDevice,/,/g;
@@ -1360,7 +1424,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
if ( $wakeupDeviceListNew ne $wakeupDeviceList ) {
Log3 $name, 3,
-"RESIDENTStk $name: reference to non-existing wakeupDevice '$wakeupDevice' was removed";
+ "RESIDENTStk $name: "
+ . "reference to non-existing wakeupDevice '$wakeupDevice' was removed";
fhem "attr $name $wakeupDeviceAttrName $wakeupDeviceListNew";
}
@@ -1368,12 +1433,14 @@ sub RESIDENTStk_wakeupGetNext($;$) {
}
elsif ( IsDisabled($wakeupDevice) ) {
Log3 $name, 4,
-"RESIDENTStk $name: 00 - ignoring disabled wakeupDevice $wakeupDevice";
+ "RESIDENTStk $name: "
+ . "00 - ignoring disabled wakeupDevice $wakeupDevice";
next;
}
Log3 $name, 4,
-"RESIDENTStk $name: 00 - checking for next wake-up candidate $wakeupDevice";
+ "RESIDENTStk $name: "
+ . "00 - checking for next wake-up candidate $wakeupDevice";
my $nextRun = ReadingsVal( $wakeupDevice, "nextRun", 0 );
my $wakeupAtdevice = AttrVal( $wakeupDevice, "wakeupAtdevice", 0 );
@@ -1391,9 +1458,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
my $nextRunSrc;
# get holiday status for today and tomorrow
- if ( $wakeupHolidays
- && $holidayDevice
- && GetType($holidayDevice) eq "holiday" )
+ if ( $wakeupHolidays
+ && IsDevice( $holidayDevice, "holiday" ) )
{
if ( $hdayTod ne "none" && $hdayTod ne "" ) {
$holidayToday = 1;
@@ -1403,7 +1469,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
}
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 01 - Holidays to be considered - today=$holidayToday tomorrow=$holidayTomorrow";
+ "RESIDENTStk $wakeupDevice: "
+ . "01 - Holidays to be considered - today=$holidayToday tomorrow=$holidayTomorrow";
}
else {
Log3 $name, 4,
@@ -1426,13 +1493,14 @@ sub RESIDENTStk_wakeupGetNext($;$) {
|| $nextRun !~ /^([0-9]{2}:[0-9]{2})$/ )
{
Log3 $name, 4,
- "RESIDENTStk $wakeupDevice: 02 - set to OFF so no candidate";
+ "RESIDENTStk $wakeupDevice: " . "02 - set to OFF so no candidate";
next;
}
else {
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 02 - possible candidate found - weekdayToday=$ltoday weekdayTomorrow=$ltomorrow";
+ "RESIDENTStk $wakeupDevice: "
+ . "02 - possible candidate found - weekdayToday=$ltoday weekdayTomorrow=$ltomorrow";
my $nextRunSec;
my $nextRunSecTarget;
@@ -1458,7 +1526,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
}
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 03 - considering at-device value wakeupAtNTM=$wakeupAtNTM wakeupOffset=$wakeupOffset nextRunSec=$nextRunSec nextRunSecTarget=$nextRunSecTarget";
+ "RESIDENTStk $wakeupDevice: "
+ . "03 - considering at-device value wakeupAtNTM=$wakeupAtNTM wakeupOffset=$wakeupOffset nextRunSec=$nextRunSec nextRunSecTarget=$nextRunSecTarget";
}
else {
$nextRunSrc = "dummy";
@@ -1478,13 +1547,15 @@ sub RESIDENTStk_wakeupGetNext($;$) {
}
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 03 - considering dummy-device value nextRun=$nextRun wakeupOffset=$wakeupOffset nextRunSec=$nextRunSec nextRunSecTarget=$nextRunSecTarget (wakeupAtNTM=$wakeupAtNTM)";
+ "RESIDENTStk $wakeupDevice: "
+ . "03 - considering dummy-device value nextRun=$nextRun wakeupOffset=$wakeupOffset nextRunSec=$nextRunSec nextRunSecTarget=$nextRunSecTarget (wakeupAtNTM=$wakeupAtNTM)";
}
# still running today
if ( $nextRunSec > $secNow ) {
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 04 - this is a candidate for today - weekdayToday=$ltoday";
+ "RESIDENTStk $wakeupDevice: "
+ . "04 - this is a candidate for today - weekdayToday=$ltoday";
# if today is in scope
if ( $days{$ltoday} ) {
@@ -1498,7 +1569,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
)
{
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 05 - no run today due to holiday based on combined weekday and holiday decision";
+ "RESIDENTStk $wakeupDevice: "
+ . "05 - no run today due to holiday based on combined weekday and holiday decision";
next;
}
@@ -1507,7 +1579,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
|| $nextRunSec < $definitiveNextToday )
{
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 05 - until now, will be NEXT WAKE-UP RUN today based on weekday decision";
+ "RESIDENTStk $wakeupDevice: "
+ . "05 - until now, will be NEXT WAKE-UP RUN today based on weekday decision";
$definitiveNextToday = $nextRunSec;
$definitiveNextTodayDev = $wakeupDevice;
}
@@ -1515,7 +1588,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
}
else {
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 05 - won't be running today anymore based on weekday decision";
+ "RESIDENTStk $wakeupDevice: "
+ . "05 - won't be running today anymore based on weekday decision";
next;
}
@@ -1531,7 +1605,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
{
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 06 - won't be running today based on holiday decision";
+ "RESIDENTStk $wakeupDevice: "
+ . "06 - won't be running today based on holiday decision";
next;
}
@@ -1540,7 +1615,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
|| $nextRunSec < $definitiveNextToday )
{
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 06 - until now, will be NEXT WAKE-UP RUN today based on holiday decision";
+ "RESIDENTStk $wakeupDevice: "
+ . "06 - until now, will be NEXT WAKE-UP RUN today based on holiday decision";
$definitiveNextToday = $nextRunSec;
$definitiveNextTodayDev = $wakeupDevice;
}
@@ -1550,7 +1626,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
# running later
else {
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 04 - this is a candidate for tomorrow or later - weekdayTomorrow=$ltomorrow";
+ "RESIDENTStk $wakeupDevice: "
+ . "04 - this is a candidate for tomorrow or later - weekdayTomorrow=$ltomorrow";
# if tomorrow is in scope
if ( $daysTomorrow{$ltomorrow} ) {
@@ -1564,7 +1641,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
)
{
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 05 - no run tomorrow due to holiday based on combined weekday and holiday decision";
+ "RESIDENTStk $wakeupDevice: "
+ . "05 - no run tomorrow due to holiday based on combined weekday and holiday decision";
next;
}
@@ -1573,7 +1651,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
|| $nextRunSec < $definitiveNextTomorrow )
{
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 05 - until now, will be NEXT WAKE-UP RUN tomorrow based on weekday decision";
+ "RESIDENTStk $wakeupDevice: "
+ . "05 - until now, will be NEXT WAKE-UP RUN tomorrow based on weekday decision";
$definitiveNextTomorrow = $nextRunSec;
$definitiveNextTomorrowDev = $wakeupDevice;
}
@@ -1581,7 +1660,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
}
else {
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 05 - won't be running tomorrow based on weekday decision";
+ "RESIDENTStk $wakeupDevice: "
+ . "05 - won't be running tomorrow based on weekday decision";
next;
}
@@ -1596,7 +1676,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
)
{
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 06 - won't be running tomorrow based on holiday decision";
+ "RESIDENTStk $wakeupDevice: "
+ . "06 - won't be running tomorrow based on holiday decision";
next;
}
@@ -1604,7 +1685,8 @@ sub RESIDENTStk_wakeupGetNext($;$) {
|| $nextRunSec < $definitiveNextTomorrow )
{
Log3 $name, 4,
-"RESIDENTStk $wakeupDevice: 06 - until now, will be NEXT WAKE-UP RUN tomorrow based on holiday decision";
+ "RESIDENTStk $wakeupDevice: "
+ . "06 - until now, will be NEXT WAKE-UP RUN tomorrow based on holiday decision";
$definitiveNextTomorrow = $nextRunSec;
$definitiveNextTomorrowDev = $wakeupDevice;
}
@@ -1712,7 +1794,8 @@ sub RESIDENTStk_TimeDiff ($$;$) {
if ( $datetimeNow eq "" || $datetimeOld eq "" ) {
Log3 $name, 5,
-"RESIDENTStk $name: empty data: datetimeNow='$datetimeNow' datetimeOld='$datetimeOld'";
+ "RESIDENTStk $name: "
+ . "empty data: datetimeNow='$datetimeNow' datetimeOld='$datetimeOld'";
$datetimeNow = "1970-01-01 00:00:00";
$datetimeOld = "1970-01-01 00:00:00";
}