From 3d1b0c7545ef53de4fa8295c5f56cfe8dead420b Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Mon, 21 Nov 2016 13:50:42 +0000 Subject: [PATCH] 10_ZWave.pm: better mca parsing (Forum #50176) git-svn-id: https://svn.fhem.de/fhem/trunk@12616 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_ZWave.pm | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/fhem/FHEM/10_ZWave.pm b/fhem/FHEM/10_ZWave.pm index 0b53f8c79..8cc6fb0ea 100755 --- a/fhem/FHEM/10_ZWave.pm +++ b/fhem/FHEM/10_ZWave.pm @@ -3071,7 +3071,9 @@ ZWave_assocGroup($$$$) { my ($homeId, $gId, $max, $nodes) = @_; my %list = map { $defs{$_}{nodeIdHex} => $_ } - grep { $defs{$_}{homeId} && $defs{$_}{homeId} eq $homeId } + grep { $defs{$_}{homeId} && + $defs{$_}{nodeIdHex} && + $defs{$_}{homeId} eq $homeId } keys %defs; $nodes = join(" ", map { $list{$_} ? $list{$_} : "UNKNOWN_".hex($_); } @@ -3084,22 +3086,25 @@ ZWave_mcaReport($$$$) { my ($homeId, $gId, $max, $arg) = @_; my %list = map { $defs{$_}{nodeIdHex} => $_ } - grep { $defs{$_}{homeId} && $defs{$_}{homeId} eq $homeId } + grep { $defs{$_}{homeId} && + $defs{$_}{nodeIdHex} && + $defs{$_}{homeId} eq $homeId } keys %defs; - my $nodes=""; - my $ep=""; - my $marker = index($arg, "00"); - if($marker<0) { - $nodes = substr($arg, 0, length($arg)); - } else { - $nodes = substr($arg, 0, $marker); - $ep = substr($arg, $marker+2, length($arg)); + + my ($ret, $step) = ("", 1); + my @arg = ($arg =~ m/../g); + for(my $idx = 0; $idx < @arg; $idx += $step) { + my $a = $arg[$idx]; + if($step == 1 && $a eq "00") { + $step = 2; + $idx--; + next; + } + my $n = ($list{$a} ? $list{$a} : sprintf("UNKNOWN_%d", hex($a))); + $ret .= " ".($step == 1 ? $n : ($n.":".hex($arg[$idx+1]))); } - $nodes = join(" ", - map { $list{$_} ? $list{$_} : "UNKNOWN_".hex($_); } - ($nodes =~ m/../g)); - return sprintf("mca_%d:Max %d Nodes %s Endpoints %s", - hex($gId),hex($max), $nodes, $ep); + return sprintf("mca_%d:Max %d %s", + hex($gId), hex($max), ($ret ? "Active$ret" : "")); }