AttrTemplate: Unterschied zwischen den Versionen

Aus FHEMWiki
(prereq und option geklärt)
Zeile 24: Zeile 24:
== Syntax ==
== Syntax ==


{{Link2Forum|Topic=104804|Message=988100|LinkText=Hier}} hat Rudolf König die Syntax erläutert, die in den attrTemplate-Dateien verwendet werden können:
{{Link2Forum|Topic=104804|Message=988100|LinkText=Hier}} und {{Link2Forum|Topic=99195|Message=925952|LinkText=hier}} hat Rudolf König die Syntax erläutert, die in den attrTemplate-Dateien verwendet werden können:
* leere Zeilen werden ignoriert
* leere Zeilen werden ignoriert
* Zeilen die mit # anfangen sind Kommentare (s.u. ''desc:'')
* Zeilen die mit # anfangen sind Kommentare (s.u. ''desc:'')
* Zeilen, die mit einem der folgenden Schlüsselwörter beginnen, werden speziell interpretiert: ''name: filter: prereq: par: desc: farewell: order:''
* Zeilen, die mit einem der folgenden Schlüsselwörter beginnen, werden speziell interpretiert: ''name: filter: prereq: option: par: desc: farewell: order:''
** '''name:''' Name des Templates, markiert gleichzeitig das Ende des vorherigen Templates
** '''name:''' Name des Templates, markiert gleichzeitig das Ende des vorherigen Templates
** '''filter:''' devspec2array Ausdruck, der beschreibt, für welche Geräte dieses Template anwendbar ist. Wird erst beim "set ?" ausgeführt.
** '''filter:''' devspec2array Ausdruck, der beschreibt, für welche Geräte dieses Template anwendbar ist. Wird erst beim "set ?" ausgeführt.
** '''prereq:''' ist entweder ein Perl-Ausdruck {}, oder ein ''devspec2array'', was genau ein Gerät spezifiziert. Wird beim Einlesen des template Files ausgeführt. Falls nicht wahr ist, werden die darauffolgenden Zeilen des Template nicht ausgeführt. Ist für sowas wie "setze zusätzlich Attribut XY falls die Installation HomeAssistant kennt" gedacht.
** '''prereq:'''
ist entweder ein Perl-Ausdruck {}, oder ein ''devspec2array'', was genau ein Gerät spezifiziert.
Falls mindestens ein prereq existiert, was nicht zutrifft, wird das betroffene Template aus dem Speicher entfernt.
Die Auswertung erfolgt beim FHEM Start oder bei {AttrTemplate_Initialize()}
** '''option:'''
Syntax entspricht prereq, wird jedoch beim Einlesen des template Files ausgeführt. Falls nicht wahr ist, werden die darauffolgenden Zeilen des Template nicht ausgeführt. Ist für sowas wie "setze zusätzlich Attribut XY falls die Installation HomeAssistant kennt" gedacht.
** '''par:''' kann mehrfach vorkommen, Syntax: <code>par:<ParamaterName>:<Kommentar>:<Perl-Code></code>. ''Perl-Code'' versucht den Wert zu finden, falls nicht möglich (''return undef''), wird ein Dialog mit "Replace" angezeigt (bzw. Usage:... im telnet). ''ParameterName'' wird in jeder Befehlzeile ersetzt mit dem Wert. Zusätzlich: ''DEVICE'' wird mit dem Namen des Gerätes ersetzt, wird ''DEVICE'' (z.B. für Modulnamen) als Text benötigt, muß es ''escaped'' werden (z.B. MQTT2_\DEVICE).
** '''par:''' kann mehrfach vorkommen, Syntax: <code>par:<ParamaterName>:<Kommentar>:<Perl-Code></code>. ''Perl-Code'' versucht den Wert zu finden, falls nicht möglich (''return undef''), wird ein Dialog mit "Replace" angezeigt (bzw. Usage:... im telnet). ''ParameterName'' wird in jeder Befehlzeile ersetzt mit dem Wert. Zusätzlich: ''DEVICE'' wird mit dem Namen des Gerätes ersetzt, wird ''DEVICE'' (z.B. für Modulnamen) als Text benötigt, muß es ''escaped'' werden (z.B. MQTT2_\DEVICE).
** '''desc:''' Kommentar fuer <code>set attrTemplate help ?</code>. Die letzte Zeile mit # vor ''name:'' wird als ''desc:'' interpretiert, falls kein ''desc:'' vorhanden ist.
** '''desc:''' Kommentar fuer <code>set attrTemplate help ?</code>. Die letzte Zeile mit # vor ''name:'' wird als ''desc:'' interpretiert, falls kein ''desc:'' vorhanden ist.

Version vom 12. Dezember 2019, 21:11 Uhr


AttrTemplate
Zweck / Funktion
Hilfsmodul bzw. Befehl, das/der die Einrichtung von Geräten erleichtern kann
Allgemein
Typ Befehl
Details
Dokumentation EN / DE
Support (Forum) Automatisierung
Modulname AttrTemplate.pm
Ersteller rudolfkoenig (Forum / Wiki)
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


AttrTemplate ist ein Hilfsmodul, mit dessen Hilfe Geräte auf einfache Weise mit einer passenden Konfiguration versehen lassen.

Das Modul AttrTemplate ist indirekt Bestandteil der SetExtensions, das Modul kann von Modulautoren aber auch ohne diese mit in beliebige (Geräte-) Module mit eingebaut werden. Über diesen Mechanismus ist der Befehl attrTemplate in einer Vielzahl von Modulen verfügbar.

Einführung

Ziel von attrTemplate ist es, den Nutzer bei der Konfiguration von Geräten zu unterstützen, indem vorrangig entsprechende Attribute gesetzt werden. Grundsätzlich ist es jedoch auch möglich, beliebige FHEM-Befehle oder Perl-Code im Rahmen von attrTemplate auszulösen. Teilt man entsprechende templates, sollte jedoch deutlich darauf hingewiesen werden, wenn ein Template etwas anderes tut als nur Attribute zu setzen, also insbesondere dauerhafte Konfigurationsänderungen in der Hardware selbst vorzunehmen.

Um Ihnen die Auswahl zu erleichtern, kann

  • mit set <Device-Name> attrTemplate ? eine Liste der vorhandenen Templates samt kurzer Beschreibung aufgerufen werden.
  • in der Detailansicht der Geräte über das Dropdownfeld ein template ausgewählt werden. Nun erhält man unmittelbar unter dem set-Befehl ebenfalls entsprechende weitere Informationen sowie den Code des template angezeigt, der bei Drücken auf set ausgeführt wird.

Hat man ein passendes template gefunden, wird mit set <Device-Name> attrTemplate <template_name> angewendet, wodurch die entsprechenden, in dem template hinterlegten Kommandos ausgeführt werden.

Syntax

Hier und hier hat Rudolf König die Syntax erläutert, die in den attrTemplate-Dateien verwendet werden können:

  • leere Zeilen werden ignoriert
  • Zeilen die mit # anfangen sind Kommentare (s.u. desc:)
  • Zeilen, die mit einem der folgenden Schlüsselwörter beginnen, werden speziell interpretiert: name: filter: prereq: option: par: desc: farewell: order:
    • name: Name des Templates, markiert gleichzeitig das Ende des vorherigen Templates
    • filter: devspec2array Ausdruck, der beschreibt, für welche Geräte dieses Template anwendbar ist. Wird erst beim "set ?" ausgeführt.
    • prereq:

ist entweder ein Perl-Ausdruck {}, oder ein devspec2array, was genau ein Gerät spezifiziert. Falls mindestens ein prereq existiert, was nicht zutrifft, wird das betroffene Template aus dem Speicher entfernt. Die Auswertung erfolgt beim FHEM Start oder bei {AttrTemplate_Initialize()}

    • option:

Syntax entspricht prereq, wird jedoch beim Einlesen des template Files ausgeführt. Falls nicht wahr ist, werden die darauffolgenden Zeilen des Template nicht ausgeführt. Ist für sowas wie "setze zusätzlich Attribut XY falls die Installation HomeAssistant kennt" gedacht.

    • par: kann mehrfach vorkommen, Syntax: par:<ParamaterName>:<Kommentar>:<Perl-Code>. Perl-Code versucht den Wert zu finden, falls nicht möglich (return undef), wird ein Dialog mit "Replace" angezeigt (bzw. Usage:... im telnet). ParameterName wird in jeder Befehlzeile ersetzt mit dem Wert. Zusätzlich: DEVICE wird mit dem Namen des Gerätes ersetzt, wird DEVICE (z.B. für Modulnamen) als Text benötigt, muß es escaped werden (z.B. MQTT2_\DEVICE).
    • desc: Kommentar fuer set attrTemplate help ?. Die letzte Zeile mit # vor name: wird als desc: interpretiert, falls kein desc: vorhanden ist.
    • farewell: wird zum Schluss als Dialog (oder Text in telnet) angezeigt, falls beim Anwenden der Befehle kein Fehler aufgetreten ist.
    • order: bestimmt die Reihenfolge, in der die Templates im Webfrontend angezeigt werden; falls nicht vorhanden, wird name: genommen.
  • alle anderen Zeilen werden als auszuführende Befehle interpretiert, wenn man set <Device-Name> attrTemplate TemplateName ausführt.

Eigene Templates entwickeln

Wer plant, mehrere gleichartige Geräte anzulegen, aber andere Einstellungen zu wählen, als sie in den vorhandenen Templates enthalten sind, kann hierfür ebenfalls die attrTemplate-Funktion mit eigenen Templates nutzen. Hierfür können die vorhandenen Templates der im Unterverzeichnis fhem/FHEM/lib/AttrTemplate zu findenden Dateien als Basis dienen. Ihre Templates speichern Sie einfach als neue Datei mit der Endung .template im selben Verzeichnis und lesen diese mit { AttrTemplate_Initialize() } neu ein. Danach können Sie diese direkt verwenden.

Haben Sie ein Template erstellt und möchten dieses teilen, erstellen Sie einfach einen Beitrag im entsprechenden Forenbereichen, für manche Module existieren auch spezielle Threads (siehe Linkliste unten)

Links