From 21bfd25bae8cd5c7afa156c7a87c52cb5502b691 Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Sat, 18 Nov 2017 10:29:25 +0000 Subject: [PATCH] 10_ZWave.pm: Handling extra bytes for the new UZB firmware (Forum #79659) git-svn-id: https://svn.fhem.de/fhem/trunk@15445 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_ZWave.pm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/fhem/FHEM/10_ZWave.pm b/fhem/FHEM/10_ZWave.pm index 2a3952c48..4a9bd83e6 100644 --- a/fhem/FHEM/10_ZWave.pm +++ b/fhem/FHEM/10_ZWave.pm @@ -1481,12 +1481,12 @@ ZWave_thermostatSetpointParse ($$) my $scale = (((hex($2) & 0x18)>>3) == 1) ? "F": "C"; my $size = (hex($2) & 0x07); - if (length($3) < $size*2) { + if (length($3) != $size*2) { Log3 $name, 1, "$name: THERMOSTAT_SETPOINT_REPORT " ."wrong number of bytes received"; return; } - my $sp = hex(substr($3,0,$size*2)); # 79659 + my $sp = hex($3); $sp -= (2 ** ($size*8)) if $sp >= (2 ** ($size*8-1)); $sp = $sp / (10 ** $prec); @@ -4821,6 +4821,16 @@ ZWave_Parse($$@) return "" } + if($arg =~ m/^(..)(.*)/) { + my $l1 = hex($1); + my $l2 = length($2)/2; + if($l1 > $l2) { + Log3 $ioName, $2, "Packet with short length ($arg)"; + return ""; + } + $arg = substr($arg, 0, ($l1+1)*2) if($l1 < $l2); #79659 + } + if($arg =~ m/^(..)(..)(.*)/ && $2 eq "c6") { # Danfoss Living Strangeness Log3 $ioName, 4, "Class mod for Danfoss ($2)"; $arg = sprintf("%s%02x%s", $1, hex($2) & 0x7f, $3);