From d4f26fbf936aafae71516127e6e723aceffa1cae Mon Sep 17 00:00:00 2001 From: hotmaz <> Date: Sat, 11 Feb 2012 22:20:34 +0000 Subject: [PATCH] bugfix git-svn-id: https://svn.fhem.de/fhem/trunk@1253 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_EIB.pm | 99 ++++++++++++++++----------------------------- 1 file changed, 34 insertions(+), 65 deletions(-) diff --git a/fhem/FHEM/10_EIB.pm b/fhem/FHEM/10_EIB.pm index bf225a801..11dcad580 100644 --- a/fhem/FHEM/10_EIB.pm +++ b/fhem/FHEM/10_EIB.pm @@ -276,70 +276,41 @@ EIB_Parse($$) my @list; my $found = 0; - my $def = $modules{EIB}{defptr}{"$dev"}; - if($def) { - foreach my $n (keys %{ $def }) { - my $lh = $def->{$n}; - $n = $lh->{NAME}; # It may be renamed - - return "" if(IsIgnored($n)); # Little strange. - - # parse/translate by datapoint type - $v = EIB_ParseByDatapointType($lh,$n,$v); - - $lh->{CHANGED}[0] = $v; - $lh->{STATE} = $v; - $lh->{RAWSTATE} = $rawv; - $lh->{LASTGROUP} = $dev; - $lh->{READINGS}{state}{TIME} = TimeNow(); - $lh->{READINGS}{state}{VAL} = $v; - - Log 2, "EIB $n $v"; - - push(@list, $n); - $found = 1; + # check if the code is within the read groups + # we will inform all definitions subsribed to this code + foreach my $mod (keys %{$modules{EIB}{defptr}}) + { + my $def = $modules{EIB}{defptr}{"$mod"}; + if($def) { + foreach my $n (keys %{ $def }) { + my $lh = $def->{$n}; + foreach my $c (keys %{ $lh->{CODE} } ) + { + $c = $lh->{CODE}{$c}; + if($c eq $dev) + { + $n = $lh->{NAME}; # It may be renamed + + return "" if(IsIgnored($n)); # Little strange. + + # parse/translate by datapoint type + $v = EIB_ParseByDatapointType($lh,$n,$v); + + $lh->{CHANGED}[0] = $v; + $lh->{STATE} = $v; + $lh->{RAWSTATE} = $rawv; + $lh->{LASTGROUP} = $dev; + $lh->{READINGS}{state}{TIME} = TimeNow(); + $lh->{READINGS}{state}{VAL} = $v; + Log 2, "EIB $n $v"; + + push(@list, $n); + $found = 1; + } + }} } - #return @list; - } - - # check also the further codes - { - # check if the code is within the read groups - - foreach my $mod (keys %{$modules{EIB}{defptr}}) - { - my $def = $modules{EIB}{defptr}{"$mod"}; - if($def) { - my @list; - foreach my $n (keys %{ $def }) { - my $lh = $def->{$n}; - foreach my $c (keys %{ $lh->{CODE} } ) - { - $c = $lh->{CODE}{$c}; - if($c eq $dev) - { - $n = $lh->{NAME}; # It may be renamed - - return "" if(IsIgnored($n)); # Little strange. - - # parse/translate by datapoint type - $v = EIB_ParseByDatapointType($lh,$n,$v); - - $lh->{CHANGED}[0] = $v; - $lh->{STATE} = $v; - $lh->{RAWSTATE} = $rawv; - $lh->{LASTGROUP} = $dev; - $lh->{READINGS}{state}{TIME} = TimeNow(); - $lh->{READINGS}{state}{VAL} = $v; - Log 2, "EIB $n $v"; - - push(@list, $n); - $found = 1; - } - }} - } - } - } + } + return @list if $found>0; @@ -349,9 +320,7 @@ EIB_Parse($$) Log(3, "EIB Unknown device $dev ($dev_name), Value $val, please define it"); return "UNDEFINED EIB_$dev EIB $dev"; } - } - } sub