diff --git a/FHEM/98_structure.pm b/FHEM/98_structure.pm index 88112b80c..a125e3177 100755 --- a/FHEM/98_structure.pm +++ b/FHEM/98_structure.pm @@ -370,15 +370,24 @@ structure_Attr($@) $list[1] eq "room" || $list[1] =~ m/clientstate/ || $list[1] eq "loglevel"); - my $hash = $defs{$list[0]}; + + my $me = $list[0]; + my $hash = $defs{$me}; + + if($hash->{INATTR}) { + Log 1, "ERROR: endless loop detected in structure_Attr for $me"; + next; + } $hash->{INATTR} = 1; + my $ret = ""; foreach my $d (sort keys %{ $hash->{CONTENT} }) { next if(!$defs{$d}); - if($defs{$d}{INATTR}) { - Log 1, "ERROR: endless loop detected for $d in " . $hash->{NAME}; - next; + if($attr{$d} && $attr{$d}{structexclude}) { + my $se = $attr{$d}{structexclude}; + next if("$me:$list[1]" =~ m/$se/); } + $list[0] = $d; my $sret; if($type eq "del") { @@ -392,7 +401,7 @@ structure_Attr($@) } } delete($hash->{INATTR}); - Log GetLogLevel($hash->{NAME},5), "ATTR: $ret" if($ret); + Log GetLogLevel($me,4), "Stucture attr $type: $ret" if($ret); return undef; } @@ -431,53 +440,7 @@ structure_Attr($@)
  • set house off

  • - - The backward propagated status change from the devices to this structure - works in two different ways. -
    Attribute clientstate_behavior
    -
  • absolute
  • - -
  • relative
  • - -
  • last
  • - -
    Example:
    - - In this example the status of kitchen is either on or off. - The status of house is either Any_on or All_off. -
    - To group more devices from different types of devices you can define - a clientstate redefining on each device with the attribute <struct_type>_map. - For example the reading "A" of device door is "open" or "closed" - and the state of device lamp1 should redefine from "on" to "An" and "off" to "Aus". - A special case are devices with more than 1 input port (eg. OWSWITCH). The last - example shows the attribute only with a value of "A". The propagated value of the device - are depending only of port A with an unmodified state. -
    Example:
    - +
    @@ -488,22 +451,92 @@ structure_Attr($@) matches (as a regexp) the name of the current structure.
    + Get
    + Attributes
    - =end html =begin html_DE @@ -521,14 +554,14 @@ structure_Attr($@) Devices erstellt um sie zu Gruppen zusammenzufassen. (Beispiel: im Haus alles ausschalten)
    Die Liste der Devices die einer Struktur zugeordnet sind kann duch das Kommando - addstruct / delstruct im laufenden Betrieb verändert werden. Es können - sowohl einzelne Devices als auch Gruppen von Devices (TYPE=FS20) zugefügt werden. - Jedes zugefügt Device erhält zwei neue Attribute <struct_type>=<name> - sowie <struct_type>_map wenn es zu einer Struktur zugefügt wurde. Diese + addstruct / delstruct im laufenden Betrieb verändert werden. Es können + sowohl einzelne Devices als auch Gruppen von Devices (TYPE=FS20) zugefügt werden. + Jedes zugefügt Device erhält zwei neue Attribute <struct_type>=<name> + sowie <struct_type>_map wenn es zu einer Struktur zugefügt wurde. Diese Attribute werden wieder automatisch entfernt, sobald das Device von der Struktur entfernt wird.
    - Eine Struktur kann ebenfalls zu einer anderen Struktur zugefügt werden. Somit - können z b. kaskadierende Strukturen erstellt werden. (Z.b. KG,EG,OG, Haus) + Eine Struktur kann ebenfalls zu einer anderen Struktur zugefügt werden. Somit + können z b. kaskadierende Strukturen erstellt werden. (Z.b. KG,EG,OG, Haus) Beispiel:

    + - Der Status einer Struktur hängt von den Stati der zugefügten Devices ab. - Dabei wird das propagieren der Stati der Devices in zwei Gruppen klassifiziert - und mittels folgendem Attribut definiert: +
    + + Set + +
    + + Get + +
    + + Attribute + - =end html_DE =cut