From d0803640ab83eb1fa30faa0259b1a28788a56a8c Mon Sep 17 00:00:00 2001 From: jpawlowski Date: Wed, 6 Jan 2016 15:48:18 +0000 Subject: [PATCH] RESIDENTStk: improve code robustness git-svn-id: https://svn.fhem.de/fhem/trunk@10378 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/RESIDENTStk.pm | 61 ++++++++++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 12 deletions(-) diff --git a/fhem/FHEM/RESIDENTStk.pm b/fhem/FHEM/RESIDENTStk.pm index 7fa178f57..39a7fedbc 100644 --- a/fhem/FHEM/RESIDENTStk.pm +++ b/fhem/FHEM/RESIDENTStk.pm @@ -87,12 +87,27 @@ sub RESIDENTStk_wakeupSet($$) { my $wakeupUserdeviceRealname = "Bewohner"; - if (defined($defs{$wakeupUserdevice})) { - if ($defs{$wakeupUserdevice}{TYPE} eq "ROOMMATE") { - $wakeupUserdeviceRealname = AttrVal( AttrVal($NAME,"wakeupUserdevice",""), AttrVal( AttrVal($NAME,"wakeupUserdevice",""), "rr_realname", "group" ), $wakeupUserdeviceRealname ); - } elsif ($defs{$wakeupUserdevice}{TYPE} eq "GUEST") { - $wakeupUserdeviceRealname = AttrVal( AttrVal($NAME,"wakeupUserdevice",""), AttrVal( AttrVal($NAME,"wakeupUserdevice",""), "rg_realname", "group" ), $wakeupUserdeviceRealname ); - } + if ( defined( $defs{$wakeupUserdevice} ) ) { + if ( $defs{$wakeupUserdevice}{TYPE} eq "ROOMMATE" ) { + $wakeupUserdeviceRealname = AttrVal( + AttrVal( $NAME, "wakeupUserdevice", "" ), + AttrVal( + AttrVal( $NAME, "wakeupUserdevice", "" ), "rr_realname", + "group" + ), + $wakeupUserdeviceRealname + ); + } + elsif ( $defs{$wakeupUserdevice}{TYPE} eq "GUEST" ) { + $wakeupUserdeviceRealname = AttrVal( + AttrVal( $NAME, "wakeupUserdevice", "" ), + AttrVal( + AttrVal( $NAME, "wakeupUserdevice", "" ), "rg_realname", + "group" + ), + $wakeupUserdeviceRealname + ); + } } # check for required userattr attribute @@ -1553,6 +1568,13 @@ sub RESIDENTStk_wakeupGetNext($) { sub RESIDENTStk_TimeDiff ($$;$) { my ( $datetimeNow, $datetimeOld, $format ) = @_; + if ( $datetimeNow eq "" || $datetimeOld eq "" ) { + Log3 $name, 5, +"RESIDENTStk $name: empty data: datetimeNow='$datetimeNow' datetimeOld='$datetimeOld'"; + $datetimeNow = "1970-01-01 00:00:00"; + $datetimeOld = "1970-01-01 00:00:00"; + } + my $timestampNow = RESIDENTStk_Datetime2Timestamp($datetimeNow); my $timestampOld = RESIDENTStk_Datetime2Timestamp($datetimeOld); my $timeDiff = $timestampNow - $timestampOld; @@ -1571,14 +1593,29 @@ sub RESIDENTStk_TimeDiff ($$;$) { sub RESIDENTStk_Datetime2Timestamp($) { my ($datetime) = @_; + my $timestamp; - my ( $date, $time, $y, $m, $d, $hour, $min, $sec, $timestamp ); + if ( $datetime =~ +/.*([0-9]{4})-([0-9]{1}|[0-9]{2})-([0-9]{1}|[0-9]{2}).([0-9]{1}|[0-9]{2}):([0-9]{1}|[0-9]{2}):([0-9]{1}|[0-9]{2}).*/ + ) + { + my ( $date, $time, $y, $m, $d, $hour, $min, $sec ); - ( $date, $time ) = split( ' ', $datetime ); - ( $y, $m, $d ) = split( '-', $date ); - ( $hour, $min, $sec ) = split( ':', $time ); - $m -= 01; - $timestamp = timelocal( $sec, $min, $hour, $d, $m, $y ); + $sec = $6; + $min = $5; + $hour = $4; + $d = $3; + $m = $2; + $y = $1; + + $m -= 01 if ( $m > 0 ); + $timestamp = timelocal( $sec, $min, $hour, $d, $m, $y ); + } + else { + Log3 $name, 5, + "RESIDENTStk $name: timestamp '$datetime' has wrong format."; + $timestamp = timelocal( "00", "00", "00", "01", "01", "1970" ); + } return $timestamp; }