AttrTemplate: Unterschied zwischen den Versionen

Aus FHEMWiki
(Erste Version)
 
(Baustelle abgebaut, einige Links und Kategorien eingefügt)
Zeile 1: Zeile 1:
{{Baustelle}}
{{SEITENTITEL:AttrTemplate}}
{{SEITENTITEL:AttrTemplate}}
{{Infobox Modul
{{Infobox Modul
|ModPurpose=Hilfsmodul bzw. Befehl, das/der die Einrichtung von Geräten erleichtern kann
|ModPurpose=Hilfsmodul bzw. Befehl, das/der die Einrichtung von Geräten erleichtern kann
|ModType=h
|ModType=cmd
|ModCmdRef=
|ModCmdRef=
|ModForumArea=Automatisierung
|ModForumArea=Automatisierung
Zeile 18: Zeile 17:
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.
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 <code>set <Device-Name> attrTemplate ?</code> eine Liste der vorhandenen Templates samt kurzer Beschreibung aufgerufen werden.  
Um Ihnen die Auswahl zu erleichtern, kann  
* mit <code>set <Device-Name> attrTemplate ?</code> eine Liste der vorhandenen Templates samt kurzer Beschreibung aufgerufen werden.
* in der Detailansicht der Geräte über das Dropdownfeld ein ''template'' ausgewählt werden; dann 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 <code>set <Device-Name> attrTemplate <template_name></code> angewendet, wodurch die entsprechenden, in dem ''template'' hinterlegten Kommandos ausgeführt werden.
Hat man ein passendes ''template'' gefunden, wird mit <code>set <Device-Name> attrTemplate <template_name></code> angewendet, wodurch die entsprechenden, in dem ''template'' hinterlegten Kommandos ausgeführt werden.


Zeile 25: Zeile 26:
{{Link2Forum|Topic=104804|Message=988100|LinkText=Hier}} hat Rudolf König die Syntax erleutert, die in den attrTemplate-Dateien verwendet werden kann:
{{Link2Forum|Topic=104804|Message=988100|LinkText=Hier}} hat Rudolf König die Syntax erleutert, die in den attrTemplate-Dateien verwendet werden kann:
* 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:'')
* speziell werden Zeilen interpretiert die mit einem der folgenden Woerter beginnen: name: filter: prereq: par: desc: farewell: order:
* Zeilen, die mit einem der folgenden Schlüsselwörter beginnen, werden speziell interpretiert: ''name: filter: prereq: par: desc: farewell: order:''
* alle anderen Zeilen werden als auszufuehrende Befehle interpretiert, wenn man "set <Device-Name> attrTemplate TemplateName" ausfuehrt.
** '''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, fuer welche Geraete dieses Template anwendbar ist. Wird erst beim "set ?" ausgefuehrt.
** '''filter:''' devspec2array Ausdruck, der beschreibt, fuer 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 Geraet spezifiziert. Wird beim Einlesen des template Files ausgefuehrt. Falls nicht wahr ist, wird das Template entfernt. Ist fuer sowas wie "setze zusaetzlich Attribut XY falls die Installation HomeAssistant kennt" gedacht.
** '''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.
** '''par:''' kann mehrfach vorkommen, Syntax: par:<ParamaterName>:<Kommentar>:<Perl-Code>. Perl-Code versucht den Wert zu finden, falls nicht moeglich (return undef), wird ein Dialog mit "Replace" angezeigt (bzw. Usage:... im telnet). ParameterName wird in jeder Befehlzeile ersetzt mit dem Wert. Zusaetzlich: DEVICE wird mit dem Namen des Geraetes ersetzt.
** '''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 "set attrTemplate help ?". 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.
** '''farewell:''' wird zum Schluss als Dialog (oder Text in telnet)  angezeigt, falls beim Anwenden der Befehle kein Fehler aufgetreten 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 der Templates fuers Frontend, falls nicht vorhanden, wird name: genommen.
** '''order:''' bestimmt die Reihenfolge, in der die Templates im [[FHEMWEB|Webfrontend]] angezeigt werden; falls nicht vorhanden, wird ''name:'' genommen.
* alle anderen Zeilen werden als auszuführende Befehle interpretiert, wenn man <code>set <Device-Name> attrTemplate TemplateName</code> ausführt.


==Eigene templates entwickeln==
==Eigene templates entwickeln==
Zeile 42: Zeile 43:


==Links==
==Links==
* [[MQTT2_DEVICE#attrTemplate]]
* {{Link2Forum|Topic=93370|LinkText=Ankündigung des Moduls im Forum}}
*
* [[MQTT2_DEVICE#attrTemplate|Wiki zu attrTemplate und MQTT2_DEVICE]] - enthält auch Links zu speziellen Threads für bestimmte Device-Typen
* {{Link2Forum|Topic=94495|LinkText=Thread für getestete Vorschläge (MQTT2_DEVICE)}}.
* {{Link2Forum|Topic=94495|LinkText=Thread für getestete Vorschläge (MQTT2_DEVICE)}}.
* {{Link2Forum|Topic=94494|LinkText=Thread für Fragen und Anregungen (MQTT2_DEVICE)}}.
* {{Link2Forum|Topic=94494|LinkText=Thread für Fragen und Anregungen (MQTT2_DEVICE)}}.
* {{Link2Forum|Topic=97694|LinkText=Thread für HTTPMOD}}.
<references />
[[Kategorie:FHEM-Verwendung]]
[[Kategorie:HOWTOS]]

Version vom 5. November 2019, 12:40 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. Uber 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; dann 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 hat Rudolf König die Syntax erleutert, die in den attrTemplate-Dateien verwendet werden kann:

  • 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: par: desc: farewell: order:
    • name: Name des Templates, markiert gleichzeitig das Ende des vorherigen Templates
    • filter: devspec2array Ausdruck, der beschreibt, fuer 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.
    • 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 exisiteren auch spezielle Threads (siehe Linkliste unten)

Links