2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-19 12:46:03 +00:00

90_SIGNALduino_un : fixed bug that can cause a crash (Forum#348854)

git-svn-id: https://svn.fhem.de/fhem/trunk@9618 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
mrsidey 2015-10-23 21:25:08 +00:00
parent b9c3bc6d70
commit 841c8ec3d1

View File

@ -98,18 +98,18 @@ SIGNALduino_un_Parse($$)
## Try TX70DTH Decoding
my $SensorTyp = "TX70DTH";
my $channel = SIGNALduino_SIGNALduino_bin2dec(substr($bitData,9,3));
my $channel = SIGNALduino_un_bin2dec(substr($bitData,9,3));
my $bin = substr($bitData,0,8);
my $id = sprintf('%X', oct("0b$bin"));
my $bat = int(substr($bitData,8,1)) eq "1" ? "ok" : "critical";
my $trend = "";
my $sendMode = "";
my $temp = SIGNALduino_SIGNALduino_bin2dec(substr($bitData,16,8));
my $temp = SIGNALduino_un_bin2dec(substr($bitData,16,8));
if (substr($bitData,14,1) eq "1") {
$temp = $temp - 1024;
}
$temp = $temp / 10;
my $hum = SIGNALduino_SIGNALduino_bin2dec(substr($bitData,29,7));
my $hum = SIGNALduino_un_bin2dec(substr($bitData,29,7));
my $val = "T: $temp H: $hum B: $bat";
Log3 $hash, 4, "$name decoded protocolid: 7 ($SensorTyp) sensor id=$id, channel=$channel, temp=$temp, hum=$hum, bat=$bat\n" ;
@ -124,12 +124,12 @@ SIGNALduino_un_Parse($$)
# ID? CHN TMP ?? HUM
$SensorTyp = "EAS800z";
$id = oct ("0b".substr($bitData,4,4));
$channel = SIGNALduino_SIGNALduino_bin2dec(substr($bitData,9,3))+1;
$channel = SIGNALduino_un_bin2dec(substr($bitData,9,3))+1;
$temp = oct ("0b".substr($bitData,12,12))/10;
$bat = int(substr($bitData,8,1)) eq "1" ? "ok" : "critical"; # Eventuell falsch!
$hum = SIGNALduino_SIGNALduino_bin2dec(substr($bitData,28,8));
$hum = SIGNALduino_un_bin2dec(substr($bitData,28,8));
$sendMode = int(substr($bitData,4,1)) eq "1" ? "auto" : "manual"; # Eventuell falsch!
my $type = SIGNALduino_SIGNALduino_bin2dec(substr($bitData,0,4));
my $type = SIGNALduino_un_bin2dec(substr($bitData,0,4));
Log3 $hash, 4, "$name decoded protocolid: 7 ($SensorTyp / type=$type) mode=$sendMode, sensor id=$id, channel=$channel, temp=$temp, hum=$hum, bat=$bat\n" ;
@ -157,12 +157,12 @@ SIGNALduino_un_Parse($$)
my $bat = int(substr($bitData,8,1)) eq "0" ? "ok" : "critical";
my $trend = "";
my $sendMode = int(substr($bitData,11,1)) eq "0" ? "automatic" : "manual";
my $temp = SIGNALduino_SIGNALduino_bin2dec(substr($bitData,25,11));
my $temp = SIGNALduino_un_bin2dec(substr($bitData,25,11));
if (substr($bitData,24,1) eq "1") {
$temp = $temp - 2048
}
$temp = $temp / 10.0;
my $hum = SIGNALduino_SIGNALduino_bin2dec(substr($bitData,17,7));
my $hum = SIGNALduino_un_bin2dec(substr($bitData,17,7));
my $val = "T: $temp H: $hum B: $bat";
Log3 $hash, 4, "$name decoded protocolid: 6 $SensorTyp, sensor id=$id, channel=$channel, temp=$temp\n" ;
@ -250,11 +250,11 @@ SIGNALduino_un_Parse($$)
{
my $SensorTyp = "perl NC-7367?";
my $id = oct ("0b".substr($bitData,4,4));
my $channel = SIGNALduino_bin2dec(substr($bitData,9,3))+1;
my $channel = SIGNALduino_un_bin2dec(substr($bitData,9,3))+1;
my $temp = oct ("0b".substr($bitData,20,8))/10;
my $bat = int(substr($bitData,8,1)) eq "1" ? "ok" : "critical"; # Eventuell falsch!
my $sendMode = int(substr($bitData,4,1)) eq "1" ? "auto" : "manual"; # Eventuell falsch!
my $type = SIGNALduino_bin2dec(substr($bitData,0,4));
my $type = SIGNALduino_un_bin2dec(substr($bitData,0,4));
Log3 $hash, 4, "$name decoded protocolid: 7 ($SensorTyp / type=$type) mode=$sendMode, sensor id=$id, channel=$channel, temp=$temp, bat=$bat\n" ;
@ -288,14 +288,14 @@ SIGNALduino_un_Attr(@)
sub
SIGNALduino_bin2dec($)
SIGNALduino_un_bin2dec($)
{
my $h = shift;
my $int = unpack("N", pack("B32",substr("0" x 32 . $h, -32)));
return sprintf("%d", $int);
}
sub
SIGNALduino_binflip($)
SIGNALduino_un_binflip($)
{
my $h = shift;
my $hlen = length($h);