Hallo zusammen,
momentan bastel ich an einer weiterentwicklung von makefine (http://www.fhemwiki.de/wiki/Makefine). Hiermit können
- Attribute vererbt werden
- der alias aus Attrbuten zusammengesetzt werden
- es gibt eine readingsGroup um defaultAttribute auf neu angelernte devices zu schreiben (quasi eine Eingabemaske für setdefaultattr)
(http://forum.fhem.de/index.php?action=dlattach;topic=45553.0;attach=44531)
Weitere Funktionen sind noch geplant
- durch definieren von controlUnits und vergeben von Attributen Automationen automatisiert zu erstellen
VoraussetzungenDas Paket libswitch-perl muss installiert sein
sudo apt-get install libswitch-perl
InitialisierenUm alle benötigten notifys anzulegen muss einmalig in der FHEM-Kommandozeile {clean()} aufgerufen werden.
1. Attribute vererben (inheritance)Vorab ein list von meinem default_notify
Internals:
NAME default_notify
NR 23
STATE active
TYPE dummy
Readings:
2015-12-12 07:14:26 state active
Attributes:
DbLogExclude .*
attributes DbLogExclude devStateIcon icon
devStateIcon inactive:ios-off:active .*:ios-on-blue:inactive
icon audio_mic
regexp TYPE=notify
room default
subType default
userattr attributes regexp
Zu den Attributen
regexp enthält das Suchmuster für die devices auf die es angewendet werden soll
attributes enthält eine Leerzeichen getrennnte Liste der Attribute die übertragen werden sollen
subType muss auf default stehen um als default erkannt zu werden
actualRoom wird das Attribut actualRoom vergeben bekommen alle Erben diese Attribut als room, das default Device kann jedoch im Raum default bleiben
captionRoom wird das Attribut captionRoom vergeben bekommen alle Erben diese Attribut als room, das default Device kann jedoch im Raum default bleibencaptionGroup wie captionRoom nur mit dem Attribut groupdisable wenn es auf 1 steht wird dies default ignoriert
Für alle Attribute kann man noch zwei modifier voranstellen
undef: Das Attribut wird nur vererbt, wenn noch nichts anderes eingetragen ist, so werden geänderte Attribute von Erben nicht überschrieben. z.B.
attr default_notify icon undef:audio_mic
least: Hiermit kann eine Liste vorgegeben werden die mindestens in dem Attribut stehen muss Bsp:
attr default_notify event-on-change-reading least(,):state
Hierbei kann in Klammern der Trenner angegeben werden, im Beispiel ein Komma, default ist ein Leerzeichen.
Neue defaults kann man einfach mittels
default <name>
anlegen, ein "default_" wird dem Namen automatisch voran gestellt. Ihnen werden dann die Attribute disable, room, subType und userattr gegeben.
2. Alias aus Attributen vergebenDas muster ist dabei so
<room>: <description>[ index][ suffix]
Sofern room und description angegeben sind wird der Alias gebiltet, auch hierbei wird captionRoom unterstützt, so kann man im Wohnzimmer eine Lampe mit alias "Terasse: Strahler" haben.
Desweiteren können für captionRoom, description, index und suffix auch Perl ausdrücke angegeben werden. Z.Bsp:
attr captionRoom HM_2C10D8_Pwr {AttrVal((devspec2array("device=".InternalVal($name, "device", 0).":FILTER=chanNo=01"))[0], "room", 0)}
Hier wird nun im Alias der Raum des Channels 01, also des Gerätes, das mich interessiert genommen, sollte dieser einmal geändert werden wird auch der alias der anderen Channels geändert, sodass es wieder passt.
Hierzu muss dann einmalig in der FHEM-Kommandozeile {clean()} aufgerufen werden.
3. Ausnahmenneben dem modifier "undef:" gibt es auch das Attribut "attributesExclude" in die eine Leerzeichengetrennte Liste von Attributen eingetragen werden kann, die dieser Erbe dann nicht automatisch bekommt.
Vielleicht hilft es ja dem einen oder anderen.
Grüße
igami
Um templates für default devices zu teilen habe ich den device 'simulator' von justme1968 in die 99_cleanUtils eingepflegt
http://forum.fhem.de/index.php/topic,41056.msg332574.html#msg332574
Hier folgen nun einige Templates die mittels jsonlist2 exportiert wurden.
Diese können mittels
{jsonlist2device("<filename>")}
importiert werden.
Grmpf, hab grade die Tomaten von den Augen genommen und das disable gesehen.
Hätte ich ja auch selbst drauf kommen können (schäm :-[)
Vielen Dank für den Hinweis, jetzt funzt es auch.
Gelobe hiermit Besserung.