From 7f5f59a38599beff8d02a7930f0ea3b51f1a54ee Mon Sep 17 00:00:00 2001 From: loredo Date: Tue, 4 Apr 2017 14:03:34 +0000 Subject: [PATCH] Unit.pm: error handling in case reading value is not a number git-svn-id: https://svn.fhem.de/fhem/trunk@13892 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/Unit.pm | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/fhem/FHEM/Unit.pm b/fhem/FHEM/Unit.pm index 66cff9915..005733233 100644 --- a/fhem/FHEM/Unit.pm +++ b/fhem/FHEM/Unit.pm @@ -4381,7 +4381,7 @@ sub Unit_DbLog_split($$) { # general event handling if ( !defined($value) && $event =~ -/^(.+): +[\D]*(\d+\.?\d*)[\s\u202F\u00A0]*[\[\{\(]?[\s\u202F\u00A0]*([\w\°\%\^\/\\]*).*/ +m/^(.+): +[\D]*(\d+\.?\d*)[\s\u202F\u00A0]*[\[\{\(]?[\s\u202F\u00A0]*([\w\°\%\^\/\\]*).*/ && defined($1) && defined($2) ) { @@ -4390,10 +4390,10 @@ sub Unit_DbLog_split($$) { $unit = defined($3) ? $3 : ""; } - unless ( defined($value) && looks_like_number($value) ) { + if ( !defined($value) || !looks_like_number($value) ) { Unit_Log3( $name, $reading, undef, 10, "Unit_DbLog_split $name: Ignoring event $event: value $value does not look like a number" - ); + ) if ( defined($value) ); return undef; } @@ -4458,7 +4458,7 @@ sub CommandSetReadingDesc($@) { my @rets; my $last; foreach my $name ( devspec2array( $a->[0], $cl ) ) { - if ( !defined( $defs{$name} ) ) { + unless ( Unit_IsDevice($name) ) { push @rets, "Please define $name first"; next; } @@ -4524,7 +4524,7 @@ sub CommandDeleteReadingDesc($@) { my @rets; my $last; foreach my $name ( devspec2array( $a->[0], $cl ) ) { - if ( !defined( $defs{$name} ) ) { + unless ( Unit_IsDevice($name) ) { push @rets, "Please define $name first"; next; } @@ -4549,4 +4549,22 @@ sub CommandDeleteReadingDesc($@) { return join( "\n", @rets ); } +sub Unit_IsDevice($;$) { + my $devname = shift; + my $devtype = shift; + + return 1 + if ( defined($devname) + && defined( $defs{$devname} ) + && ( !$devtype || $devtype eq "" ) ); + + return 1 + if ( defined($devname) + && defined( $defs{$devname} ) + && defined( $defs{$devname}{TYPE} ) + && $defs{$devname}{TYPE} =~ m/^$devtype$/ ); + + return 0; +} + 1;