99_cleanUtils

Begonnen von igami, 12 Dezember 2015, 08:16:37

Vorheriges Thema - Nächstes Thema

igami

Hallo zusammen,

momentan bastel ich an einer weiterentwicklung von 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

Voraussetzungen
Das Paket libswitch-perl muss installiert sein

sudo apt-get install libswitch-perl


Initialisieren
Um 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 bleiben
captionGroup wie captionRoom nur mit dem Attribut group
disable 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 vergeben
Das 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. Ausnahmen
neben 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
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

igami

#1
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.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

pano

Hallo igami,
ich versuche die Osterfeiertage zu nutzen und mein FHEM sauber aufzuziehen. Um alle Devicetypen einheitlich hinzubekommen wollte ich mal mit der cleanUtils rumexperimentieren. Irgendwie kriege ich es aber nicht hin. Wenn ich deine Anleitung richtig verstehe ist das Vorgehen wie folgt (99_cleanUtils ist schon ins Verzeichniss kopiert, makefine der 00_myUtils beigefügt, Perl librarys für switch und json installiert)
1)  {clean()} aufrufen
2) mit "default <name>" einen neuen default anlegen.
Da ich als ersten Versuch mal meine bestehenden FileLogs in den Raum _Logs verschieben möchte, sieht das bei mir wie folgt aus:

Internals:
   CFGFN
   NAME       default_FileLogs
   NR         181
   STATE      ???
   TYPE       dummy
Attributes:
   actualRoom _Logs
   attributes actualRoom
   attributesExclude alias
   disable    1
   regexp     NAME=FileLog_.*
   room       default
   subType    default
   userattr   attributes initialize regexp

3) und dann??? Habe sowohl mit {clean()} als auch mit {inheritance()} keinen Erfolg erzielt.

Wie löse ich denn das eigentliche "Vererben" nun aus?

Dank und Grüße,
Pano


igami

Hallo Pano,

neue defaults stehen auf disabled, damit man erst einmal alle Attribute vergeben kann. Das Attribut einfach löschen oder auf 0 stellen und deine FileLogs sollten verschoben werden.

Grüße
igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

pano

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.