From a30b0cb4dceee5be254eda7d09dc5e491f050c2a Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Sun, 2 Oct 2016 12:22:44 +0000 Subject: [PATCH] 10_ZWave.pm: add links to parent/children for Multi_Endpoint devices (Forum #50176) git-svn-id: https://svn.fhem.de/fhem/trunk@12237 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_ZWave.pm | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/fhem/FHEM/10_ZWave.pm b/fhem/FHEM/10_ZWave.pm index 5910bf253..1573dc9be 100755 --- a/fhem/FHEM/10_ZWave.pm +++ b/fhem/FHEM/10_ZWave.pm @@ -21,6 +21,7 @@ sub ZWave_secStart($); sub ZWave_secEnd($); sub ZWave_configParseModel($;$); sub ZWave_callbackId($); +sub ZWave_setEndpoints($); our ($FW_ME,$FW_tp,$FW_ss); our %zwave_id2class; @@ -650,6 +651,8 @@ ZWave_Initialize($) ############################# +my $zw_init_ordered; + sub ZWave_Define($$) { @@ -688,9 +691,44 @@ ZWave_Define($$) asyncOutput($hash->{IODev}{addCL}, "created $name") if($hash->{IODev}); ZWave_SetClasses($homeId, $id, undef, $a[0]); } + + if($init_done) { + ZWave_setEndpoints($hash); + } else { + if(!$zw_init_ordered) { + $zw_init_ordered = 1; + InternalTimer(1, "ZWave_setEndpoints", $hash, 0); + } + } + return undef; } +sub +ZWave_setEndpoints($) +{ + my $mp = $modules{ZWave}{defptr}; + for my $k (sort keys %{$mp}) { + my $h = $mp->{$k}; + delete($h->{endpointRoot}); + delete($h->{endpointChildren}); + } + for my $k (sort keys %{$mp}) { + my $h = $mp->{$k}; + next if($h->{nodeIdHex} !~ m/(..)(..)/); + my ($root, $lid) = ($1, $2); + my $rd = $mp->{$h->{homeId}." ".$root}; + $h->{endpointRoot} = ($rd ? $rd->{NAME} : "unknown"); + if($rd) { + if($rd->{endpointChildren}) { + $rd->{endpointChildren} .= " ".$h->{NAME}; + } else { + $rd->{endpointChildren} = $h->{NAME}; + } + } + } +} + sub ZWave_initFromModelfile($$$) {