diff --git a/fhem/FHEM/60_EM.pm b/fhem/FHEM/60_EM.pm index 7301e6478..3887cb971 100755 --- a/fhem/FHEM/60_EM.pm +++ b/fhem/FHEM/60_EM.pm @@ -93,7 +93,7 @@ sub b($$) { my ($t,$p) = @_; - return -1 if(length($t) < $p); + return -1 if(!defined($t) || length($t) < $p); return ord(substr($t,$p,1)); } @@ -123,6 +123,8 @@ EM_Get($@) if($a[1] eq "time") { my $d = EmGetData($hash->{DeviceName}, "74"); + return "Read error" if(!defined($d)); + $v = sprintf "%4d-%02d-%02d %02d:%02d:%02d", b($d,5)+2006, b($d,4), b($d,3), b($d,0), b($d,1), b($d,2); @@ -130,6 +132,7 @@ EM_Get($@) } elsif($a[1] eq "version") { my $d = EmGetData($hash->{DeviceName},"76"); + return "Read error" if(!defined($d)); $v = sprintf "%d.%d", b($d,0), b($d,1); } else { diff --git a/fhem/FHEM/61_EMWZ.pm b/fhem/FHEM/61_EMWZ.pm index e79684b46..88a1a11d7 100755 --- a/fhem/FHEM/61_EMWZ.pm +++ b/fhem/FHEM/61_EMWZ.pm @@ -35,10 +35,16 @@ EMWZ_GetStatus($) } my $dnr = $hash->{DEVNR}; - my $d = IOWrite($hash, sprintf("7a%02x", $dnr-1)); - my $name = $hash->{NAME}; + my $d = IOWrite($hash, sprintf("7a%02x", $dnr-1)); + if(!defined($d)) { + my $msg = "EMWZ $name read error"; + Log GetLogLevel($name,2), $msg; + return $msg; + } + + if($d eq ((pack('H*',"00") x 45) . pack('H*',"FF") x 6)) { my $msg = "EMWZ no device no. $dnr present"; Log GetLogLevel($name,2), $msg; @@ -118,6 +124,7 @@ EMWZ_Set($@) my $v = $a[2]; my $d = $hash->{DEVNR}; my $msg; + my $name = $hash->{NAME}; if($a[1] eq "price") { $v *= 10000; # Make display and input the same @@ -132,9 +139,15 @@ EMWZ_Set($@) } my $ret = IOWrite($hash, $msg); + if(!defined($d)) { + my $msg = "EMWZ $name read error"; + Log GetLogLevel($name,2), $msg; + return $msg; + } + if(ord(substr($ret,0,1)) != 6) { $ret = "EMWZ Error occured: " . unpack('H*', $ret); - Log GetLogLevel($hash->{NAME},2), $ret; + Log GetLogLevel($name,2), $ret; return $ret; }