From f5113cc1ea18e6463d1f52d94f3ec5e4eb5c3708 Mon Sep 17 00:00:00 2001 From: pahenning <> Date: Sun, 19 Oct 2014 05:47:58 +0000 Subject: [PATCH] Alarm.pm: catch stupid configuration errors OWMULTI.pm: bugfix of warning http://forum.fhem.de/index.php/topic,28047.0.html git-svn-id: https://svn.fhem.de/fhem/trunk@6789 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/21_OWMULTI.pm | 27 +++++++++++++++++---- fhem/contrib/Alarm/95_Alarm.pm | 43 +++++++++++++++++++--------------- 2 files changed, 46 insertions(+), 24 deletions(-) diff --git a/fhem/FHEM/21_OWMULTI.pm b/fhem/FHEM/21_OWMULTI.pm index 2378e7076..3f5f0b948 100644 --- a/fhem/FHEM/21_OWMULTI.pm +++ b/fhem/FHEM/21_OWMULTI.pm @@ -82,7 +82,7 @@ no warnings 'deprecated'; sub Log($$); -my $owx_version="5.20"; +my $owx_version="5.22"; #-- flexible channel name my $owg_channel; @@ -189,7 +189,7 @@ sub OWMULTI_Attr(@) { } } last; - }; + } } } return $ret; @@ -290,6 +290,14 @@ sub OWMULTI_Define ($$) { return undef; } +######################################################################################## +# +# OWMULTI_Notify - implements the Notify Function +# +# Parameter hash = hash of device addressed +# +######################################################################################## + sub OWMULTI_Notify ($$) { my ($hash,$dev) = @_; if( grep(m/^(INITIALIZED|REREADCFG)$/, @{$dev->{CHANGED}}) ) { @@ -298,6 +306,14 @@ sub OWMULTI_Notify ($$) { } } +######################################################################################## +# +# OWMULTI_Init - implements the Init function +# +# Parameter hash = hash of device addressed +# +######################################################################################## + sub OWMULTI_Init ($) { my ($hash)=@_; #-- Start timer for updates @@ -343,6 +359,7 @@ sub OWMULTI_ChannelNames($) { #-- put into readings $owg_channel = $cnama[0]; + $hash->{READINGS}{$owg_channel}{VAL} = " "; $hash->{READINGS}{$owg_channel}{TYPE} = $cnama[1]; $hash->{READINGS}{$owg_channel}{UNIT} = $unarr[0]; $hash->{READINGS}{$owg_channel}{UNITABBR} = $unarr[1]; @@ -354,12 +371,12 @@ sub OWMULTI_ChannelNames($) { $tfactor = 1.0; if( $tunit eq "Celsius" ){ - $tabbr = "°C"; + $tabbr = "°C"; } elsif ($tunit eq "Kelvin" ){ $tabbr = "K"; $toffset += "273.16" } elsif ($tunit eq "Fahrenheit" ){ - $tabbr = "°F"; + $tabbr = "°F"; $toffset = ($toffset+32)/1.8; $tfactor = 1.8; } else { @@ -418,7 +435,7 @@ sub OWMULTI_FormatValues($) { } elsif( $vfunc ne "" ){ $vval = int( $vfunc*1000 )/1000; } else { - + #-- todo ? } #-- string buildup for return value, STATE diff --git a/fhem/contrib/Alarm/95_Alarm.pm b/fhem/contrib/Alarm/95_Alarm.pm index 18c566ea6..484bf03f4 100644 --- a/fhem/contrib/Alarm/95_Alarm.pm +++ b/fhem/contrib/Alarm/95_Alarm.pm @@ -40,7 +40,7 @@ my $alarmname = "Alarms"; # link text my $alarmhiddenroom = "AlarmRoom"; # hidden room my $alarmpublicroom = "Alarm"; # public room my $alarmno = 8; -my $alarmversion = "1.6"; +my $alarmversion = "1.7"; ######################################################################################### # @@ -300,24 +300,29 @@ sub Alarm_Exec($$$$$){ if( ($ntp <= $etp) && ($ntp >= $stp) ){ #-- raised by sensor (attribute values have been controlled in CreateNotifiers) @sta = split('\|', AttrVal($dev, "alarmSettings", 0)); - $mga = $sta[2]." ".AttrVal($name, "level".$level."msg", 0); - #-- replace some parts - my @evtpart = split(" ",$evt); - $mga =~ s/\$NAME/$dev/g; - $mga =~ s/\$EVENT/$evt/g; - for( my $i=1;$i<= int(@evtpart);$i++){ - $mga =~ s/\$EVTPART$i/$evtpart[$i-1]/g; - } - #-- readings - readingsSingleUpdate( $hash, "level".$level,$dev,0 ); - readingsSingleUpdate( $hash, "short", $mga, 0); - $mga = Alarm_getstate($hash)." ".$mga; - readingsSingleUpdate( $hash, "state", $mga, 0 ); - $msg = "[Alarm $level] raised from device $dev with event $evt"; - #-- calling actors AFTER state update - $cmd = AttrVal($name, "level".$level."onact", 0); - fhem($cmd); - Log3 $hash,3,$msg; + if( $sta[2] ){ + $mga = $sta[2]." ".AttrVal($name, "level".$level."msg", 0); + #-- replace some parts + my @evtpart = split(" ",$evt); + $mga =~ s/\$NAME/$dev/g; + $mga =~ s/\$EVENT/$evt/g; + for( my $i=1;$i<= int(@evtpart);$i++){ + $mga =~ s/\$EVTPART$i/$evtpart[$i-1]/g; + } + #-- readings + readingsSingleUpdate( $hash, "level".$level,$dev,0 ); + readingsSingleUpdate( $hash, "short", $mga, 0); + $mga = Alarm_getstate($hash)." ".$mga; + readingsSingleUpdate( $hash, "state", $mga, 0 ); + $msg = "[Alarm $level] raised from device $dev with event $evt"; + #-- calling actors AFTER state update + $cmd = AttrVal($name, "level".$level."onact", 0); + fhem($cmd); + Log3 $hash,3,$msg; + }else{ + $msg = "[Alarm $level] not raised, alarmSensor $dev has wrong settings"; + Log3 $hash,1,$msg; + } }else{ $msg = "[Alarm $level] not raised, not in time slot"; Log3 $hash,5,$msg;