FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Tobias am 23 Juni 2014, 11:06:34

Titel: structure und structexclude
Beitrag von: Tobias am 23 Juni 2014, 11:06:34
Hi,

ich habe eine große Structure "Structure_Haus" definiert. Darunter zu deselben Structure neue Structures. Ich habe überall ein structexclude "Structure_Haus:.* definiert. Aber trotzdem werden Attributänderung jedesMal durchgereicht. Ich denke ich habe da noch etwas nicht ganz verstanden. Wo liegt mein Fehler??? (Im Folgenden mal die StructureDefs nur auf das Wesenliche beschränkt...)

define Structure_Haus structure Structure_Haus Structure_KG Structure_EG Structure_OG;
attr Structure_Haus structexclude Structure_Haus:.*

define Structure_EG structure Structure_Haus Fenster_EG_AZ_Gross
attr Structure_EG structexclude Structure_Haus:.*

define Fenster_EG_AZ_Gross structure Structure_Haus Fenster_EG_AZ_Gross_O Fenster_EG_AZ_Gross_U
attr Fenster_EG_AZ_Gross structexclude Structure_Haus:.*



Da gibt es noch mehr, wichtig ist jedoch, das die Definition des <struct_type> immer identisch ist: Structure_Haus. Ich möchte niemals!!! Vererbungen nach unten in die Struture haben


Titel: Antw:structure und structexclude
Beitrag von: hexenmeister am 25 Juni 2014, 00:54:42
Ich habe fast genauso definiert. Bis auf die struct_type. Funktioniert gut, Attribute werden nicht vererbt.
Zitat
# Rolladen: Alle
define st_gg_rollo structure room st_eg_rollo st_og_rollo
attr st_gg_rollo alias Alle Rolladen
...
attr st_gg_rollo structexclude st_.*

# Rolladen: OG Gesamt
define st_og_rollo structure room bz_rollo sz_rollo ka_rollo kb_rollo
attr st_og_rollo alias Alle OG Rolladen
...
attr st_og_rollo structexclude st_.*

# Rolladen: Bad
define bz_rollo CUL_HM ...
...
attr bz_rollo structexclude st_*

...
Titel: Antw:structure und structexclude
Beitrag von: Tobias am 25 Juni 2014, 07:49:13
da liegt höchstwarscheinlich der Haken -> structexclude
Du hast structexclude auf st_* angewendet. Ich bin/war der Meinung structexclude muss auf die struct_type, also room, angewendet werden.
Leider steht nirgends die genaue Funktionsweise von structexlude. Wozu ist es da?? Was macht es? Was macht es nicht? Steht nicht im Wiki und nur rudimentär in der comandref. Jedenfalls hab ichs wohl nicht verstanden.

Hier kann wohl nur Rudi aufklären??..??
Titel: Antw:structure und structexclude
Beitrag von: hexenmeister am 25 Juni 2014, 12:16:32
Ich habe in den Quelltext reingeschaut. Dort wird einfach jede Weitergabe an das betroffene Gerät unterbunden, wenn struktureexclude-Attribut dieses Geräts zu dem namen der Strukture (die gerade dabei ist, die Änderungten weiter zu geben) passt.

if($attr{$d} && $attr{$d}{structexclude}) {
my $se = $attr{$d}{structexclude};
next if($hash->{NAME} =~ m/$se/);
}


Ich habe gestern excludes reingeschrieben, weil mich genervt hat, dass 'sortby'-Attribute weitergegeben wird (was diesen hier ad absurdum führt). Heute habe ich jedoch ein Problem dabei gemerkt: Es werde auch keine gewollte Änderungen (set für Position) weitergegeben. Mist. Hätte ich gestern sehen können...
Titel: Antw:structure und structexclude
Beitrag von: Tobias am 25 Juni 2014, 13:13:01
ok, also muss in die structexcludes ALLE Namen aller beteiligten Structures, bzw. als RegExp.
Aber wozu zum Teufel ist dann struct_type gut?????
Titel: Antw:structure und structexclude
Beitrag von: justme1968 am 25 Juni 2014, 13:37:18
das ist für die <struct_type>_map attribute.

gruss
  andre
Titel: Antw:structure und structexclude
Beitrag von: hexenmeister am 25 Juni 2014, 14:55:20
Zitatalso muss in die structexcludes ALLE Namen aller beteiligten Structures, bzw. als RegExp.
Ja, muss man mit RegExp erfassen, Listen gehen hier leider nicht.

Was mir aber noch weniger gefällt... Es sieht so aus, dass man nicht selektiv Attribute unterbinden kann. Oder Set-Kommanden durchleiten aber alle Attribute weglassen.
Oder habe ich doch etwas übersehen?
Titel: Antw:structure und structexclude
Beitrag von: Tobias am 25 Juni 2014, 15:03:47
naja, in der commandref habe ich etwas gelesen von einer Unterscheidung SET und ATTR mit der definition <name> bzw. <name>:<name>
Titel: Antw:structure und structexclude
Beitrag von: hexenmeister am 25 Juni 2014, 15:07:08
Korrigiere mich selbst. Mit den Attributen könnte doch gehen. Die Methode dafür ist etwas anders aufgebaut:

if($attr{$d} && $attr{$d}{structexclude}) {
my $se = $attr{$d}{structexclude};
next if("$me:$list[1]" =~ m/$se/);
}


Hier kann man anscheinend mit <StructName>:<AttrName> arbeiten. Wie in commandref beschrieben.
Werde heute ausprobieren.

Aber selektiv set-Befehle weitergeben geht dann trotzdem nicht...

@Tobias: Du warst schneller ;)