diff --git a/FHEM/98_structure.pm b/FHEM/98_structure.pm
index 8678f0138..9f6dac21e 100755
--- a/FHEM/98_structure.pm
+++ b/FHEM/98_structure.pm
@@ -191,19 +191,19 @@ sub structure_Notify($$)
my @value;
for (my $i=0; $i<@gruppe; $i++) {
@value = split(":", $gruppe[$i]);
- if(@value == 1) { # Reading
+ if(@value == 1) { # value[0]:.* -> .*
$devstate = ReadingsVal($d, $value[0], undef);
- } elsif(@value == 2) { # bsp: on:An
+ } elsif(@value == 2) { # state:value[0] -> value[1]
$devstate = ReadingsVal($d, "state", undef);
- if(defined($devstate) && $devstate eq $value[0]){
+ if(defined($devstate) && $devstate =~ m/^$value[0]/){
$devstate = $value[1];
$i=99999; # RKO: ??
}
- } elsif(@value == 3) { # Reading:OriginalStatus:NeuerStatus
+ } elsif(@value == 3) { # value[0]:value[1] -> value[2]
$devstate = ReadingsVal($d, $value[0], undef);
- if(defined($devstate) && $devstate eq $value[1]){
+ if(defined($devstate) && $devstate =~ m/^$value[1]/){
$devstate = $value[2];
}
}
@@ -494,15 +494,24 @@ structure_Attr($@)
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 is a device 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 depends only on port A with an unmodified state.
-
Example:
+
+
<struct_type>_map
+ With this attribute, which has to specified for the structure-
+ member, you can redefine the value reported by a specific
+ structure-member for the structure value. The attribute has three
+ variants:
+
+ - readingName
+ take the value from readingName instead of state.
+
+ - oldVal:newVal
+ if the state reading matches oldVal, then replace it with newVal
+
+ - readingName:oldVal:newVal
+ if readingName matches oldVal, then replace it with newVal
+
+
+ Example:
- define door OWSWITCH <ROMID>
- define lamp1 dummy
@@ -546,20 +555,25 @@ structure_Attr($@)
Define
- define <name> structure <struct_type> <dev1> <dev2> ...
-
+ define <name> structure <struct_type> <dev1>
+ <dev2> ...
+
Mit dem Device "Structure" werden Strukturen/Zusammenstellungen von anderen
- 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
- 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)
+ 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 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)
Beispiel:
@@ -587,20 +601,22 @@ structure_Attr($@)
Get wird im Structur-Device nicht unterstützt.
+
Attribute
- clientstate_behavior
- 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 diesem Attribut definiert:
+ 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 diesem Attribut definiert:
- absolute
- Die Struktur wird erst dann den Status der zugefügten Devices annehmen,
- wenn alle Devices einen identischen Status vorweisen. Bei unterschiedlichen
- Devictypen kann dies per Attribut <struct_type>_map pro Device
- beinflusst werden. Andernfalls hat die Struktur den Status "undefined".
+ Die Struktur wird erst dann den Status der zugefügten Devices
+ annehmen, wenn alle Devices einen identischen Status vorweisen. Bei
+ unterschiedlichen Devictypen kann dies per Attribut
+ <struct_type>_map pro Device beinflusst werden. Andernfalls hat
+ die Struktur den Status "undefined".
- relative
S.u. clientstate_priority.
@@ -611,66 +627,68 @@ structure_Attr($@)
HomeMatic Geräte benötigt.
- last
- Die Struktur übernimmt den Status des zuletzt geänderten Gerätes.
+ Die Struktur übernimmt den Status des zuletzt geänderten
+ Gerätes.
-
+
clientstate_priority
Wird die Struktur auf ein relatives Verhalten eingestellt, so wird die
- Priorität der Devicestati über das Attribut clientstate_priority
- beinflusst. Die Prioritäten sind in absteigender Reihenfolge anzugeben.
- Dabei können Gruppen mit identischer Priorität angegeben werden, um zb.
- unterschiedliche Devicetypen zusammenfassen zu können. Jede Gruppe wird durch
- Leerzeichen oder /, jeder Eintrag pro Gruppe durch Pipe getrennt. Der Status der
- Struktur ist der erste Eintrag in der entsprechenden Gruppe.
-
-
Beispiel:
-
- - attr kueche clientstate_behavior relative
- - attr kueche clientstate_priority An|On|on Aus|Off|off
- - attr haus clientstate_priority Any_On|An All_Off|Aus
-
- In diesem Beipiel nimmt die Struktur kueche
entweder den Status
- An
oder Aus
an. Die Struktur haus
nimmt
- entweder den Status Any_on
oder All_off
an. Sobald ein
- Device der Struktur haus
den Status An
hat nimmt die
- Struktur den Status Any_On
an. Um dagegen den Status
- All_off
anzunehmen, müssen alle Devices dieser Struktur auf
- off
stehen.
-
- Um mehrere Devices unterschiedlicher Typen gruppieren zu können ist ein
- Status-Mapping auf jedem einzelnen Device mittels Attribut <struct_type>_map
- möglich.
- Im folgenden Beispiel nimmt das Reading "A" den Status "offen" oder "geschlossen"
- an, und des Reading "state" von "lampe1" den Status "on" oder "off".
- Die Struktur "kueche" reagiert nun auf "An" bzw "on" (Prio 1) bzw.
- auf "OK", "Aus", "off". Der Status den diese Struktur schlussendlich annehmen kann
- ist entweder "An" oder "OK".
- Der Status des Devices lampe1 wird umdefiniert von "on" nach "An" bzw "off" nach "Aus".
- Das Device "tuer", welches vom Type "OWSWITCH" ist, bringt ausschließlich
- das Reading A in die Struktur ein welches von "open" nach "on" sowie "clesed"
- nach "Aus" umdefiniert wird.
- Die Struktur kueche
wird folglich nur dann "An" ausgeben,
- wenn a) das Device lampe1 den Status "on" und(!) b) das Device tuer den Status
- open im Reading A aufweist. Die Struktur wird sofort auf den Status "OK" wechseln,
- sobald eines der beiden Devices den Status wechselt.
- Ist im Attribut <struct_type>_map nur das Reading angegeben, so wird dessen
- Status unmodifiziert an die Struktur weitergegeben.
- Ist das Attribut <struct_type>_map nicht definiert, so wird das
- Reading state
an die Struktur weitergegeben.
-
Beispiel:
-
- - define tuer OWSWITCH <ROMID>
- - define lampe1 dummy
- - attr lampe1 cmdlist on off
- - define kueche structure struct_kitchen lamp1 door
- - attr kueche clientstate_priority An|on OK|Aus|off
- - attr lampe1 struct_kitchen_map on:An off:Aus
- - attr tuer struct_kitchen_map A:open:on A:closed:off
- - attr tuer2 struct_kitchen_map A
-
+ Priorität der Devicestati über das Attribut
+ clientstate_priority
beinflusst. Die Prioritäten sind
+ in absteigender Reihenfolge anzugeben. Dabei können Gruppen mit
+ identischer Priorität angegeben werden, um zb. unterschiedliche
+ Devicetypen zusammenfassen zu können. Jede Gruppe wird durch
+ Leerzeichen oder /, jeder Eintrag pro Gruppe durch Pipe getrennt. Der
+ Status der Struktur ist der erste Eintrag in der entsprechenden Gruppe.
+
Beispiel:
+
+ - attr kueche clientstate_behavior relative
+ - attr kueche clientstate_priority An|On|on Aus|Off|off
+ - attr haus clientstate_priority Any_On|An All_Off|Aus
+
+ In diesem Beipiel nimmt die Struktur kueche
entweder den
+ Status An
oder Aus
an. Die Struktur
+ haus
nimmt entweder den Status Any_on
oder
+ All_off
an. Sobald ein Device der Struktur
+ haus
den Status An
hat nimmt die Struktur den
+ Status Any_On
an. Um dagegen den Status All_off
+ anzunehmen, müssen alle Devices dieser Struktur auf off
+ stehen.
+
+
+ <struct_type>_map
+ Mit diesem Attribut, das dem Struktur-Mitglied zugewiesen werden
+ muss, koennen die Werte, die die einzelnen Struktur- Mitglieder melden,
+ umdefiniert werden, damit man unterschiedliche Geraeteklassen
+ zusammenfassen kann. Es existieren drei Varianten:
+
+ - readingName
+ nehme den Wert von readingName anstatt von state
+
+ - oldVal:newVal
+ falls der Wert der state Reading oldVal (als regex) ist, dann ersetze
+ diesen mit newVal.
+
+ - readingName:oldVal:newVal
+ falls der Wert der readingName oldVal (als regex) ist, dann ersetze
+ diesen mit newVal.
+
+
+ Beispiel:
+
+ - define tuer OWSWITCH <ROMID>
+ - define lampe1 dummy
+ - attr lampe1 cmdlist on off
+ - define kueche structure struct_kitchen lamp1 door
+ - attr kueche clientstate_priority An|on OK|Aus|off
+ - attr lampe1 struct_kitchen_map on:An off:Aus
+ - attr tuer struct_kitchen_map A:open:on A:closed:off
+ - attr tuer2 struct_kitchen_map A
+
+
structexclude
Bei gesetztem Attribut wird set, attr/deleteattr ignoriert. Dies