DOIF/Templates: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
An dieser Stelle wird die Nutzung von Templates im DOIF-Modul erklärt. Mit Hilfe von Templates können Lösungen nicht nur für eine Problemstellung, im Folgenden Szenario genannt, sondern gleich generisch (allgemeingültig) für mehrere Szenarien erstellt werden.
An dieser Stelle wird die Nutzung von Templates im DOIF-Modul erklärt. Mit Hilfe von Templates können Lösungen nicht nur für eine Problemstellung, im Folgenden '''Szenario''' genannt, sondern gleich generisch (allgemeingültig) für mehrere Szenarien erstellt werden.


Die Vorgehensweise dazu wird am Beispiel einer Zeitschaltuhr aufgezeigt.
Die Vorgehensweise dazu wird am Beispiel einer Zeitschaltuhr aufgezeigt.
Zeile 13: Zeile 13:
</syntaxhighlight>
</syntaxhighlight>


Hier wurden sowohl Zeiten, als auch das Gerät festgelegt. Möchte man nun eine weitere Zeitschaltuhr definieren, so würde man die Definition kopieren und die festen Angaben der Zeitpunkte und das Gerät abändern. Auf diese Weise lassen sich beliebig viele Modul-Kopien anfertigen, die für sich eigenständig funktionieren. Das Problem fällt allerdings spätestens dann auf, wenn man an der Steuerung etwas ändern möchte, z. B. einen weiteren Zeitpunkt oder eine andere Bedingung zum Ein- oder Ausschalten hinzufügen möchte, die nicht nur ein Szenario betrifft, sondern alle. Dann muss man alle Kopien entsprechen abändern.
Hier wurden sowohl Zeiten, als auch das Gerät festgelegt. Möchte man nun eine weitere Zeitschaltuhr definieren, so würde man die Definition kopieren den Modulnamen und die festen Angaben der Zeitpunkte und das zu schaltende Gerät abändern. Auf diese Weise ließen sich beliebig viele Modul-Kopien anfertigen, die für sich eigenständig funktionieren würden. Das Problem fällt allerdings spätestens dann auf, wenn man an der Steuerung etwas ändern möchte, z. B. einen weiteren Zeitpunkt oder eine andere Bedingung zum Ein- oder Ausschalten hinzufügen möchte, die nicht nur ein Szenario betrifft, sondern alle. Dann muss man alle Kopien entsprechen abändern.


'''Definition mit Templates'''
'''Definition mit Templates'''
Zeile 26: Zeile 26:
}}
}}


Ausgehend von der obigen Definition, wird ein Template erstellt. Hiebei werden feste Angaben durch Platzhalter ersetzt. Anschließend wird das definierte Template hier TPL_ZS mehrfach genutzt, um mehrere Szenarien zu definieren.
Ausgehend von der obigen Definition, wird ein Template erstellt. Hiebei werden feste Angaben durch Platzhalter ersetzt. Anschließend wird das definierte Template hier TPL_ZS mehrfach mit unterschiedlichen Zeiten und Geräten genutzt, um mehrere Szenarien zu definieren.


<syntaxhighlight lang="perl">
<syntaxhighlight lang="perl">
defmod di_zeitschaltuhr DOIF DEF TPL_ZS ( ## mit DEF TPL_<Name> ( wird die Definition eines Tempaltes names <Name> eingeleitet\
defmod di_zeitschaltuhr DOIF DEF TPL_ZS ( ## hier wird die Definition eines Templates namens TPL_ZS eingeleitet\
{if ([$1] or [$2] or [$3]) {fhem_set"$4 on"} elsif ([$5] or [$6] or [$7]) {fhem_set ("$4 off")}}\
{if ([$1] or [$2] or [$3]) {fhem_set"$4 on"} elsif ([$5] or [$6] or [$7]) {fhem_set ("$4 off")}}\
) ## Ende der Temlate-Definition namens TPL_ZS\
) ## Ende der Temlate-Definition namens TPL_ZS\

Version vom 26. Juli 2020, 14:20 Uhr

An dieser Stelle wird die Nutzung von Templates im DOIF-Modul erklärt. Mit Hilfe von Templates können Lösungen nicht nur für eine Problemstellung, im Folgenden Szenario genannt, sondern gleich generisch (allgemeingültig) für mehrere Szenarien erstellt werden.

Die Vorgehensweise dazu wird am Beispiel einer Zeitschaltuhr aufgezeigt.

Ausgangspunkt soll eine einfache Zeitschaltuhr mit jeweils drei Einschalt- und drei Ausschalt-Zeitpunkten sein.

Definition ohne Templates

Dazu wird folgende Definition vorgenommen:

defmod di_zeitschaltuhr DOIF {if ([10:00] or [12:00] or [16:00]) {fhem_set"lampe on"} elsif ([11:00] or [14:00] or [20:00]) {fhem_set ("lampe off")}}

Hier wurden sowohl Zeiten, als auch das Gerät festgelegt. Möchte man nun eine weitere Zeitschaltuhr definieren, so würde man die Definition kopieren den Modulnamen und die festen Angaben der Zeitpunkte und das zu schaltende Gerät abändern. Auf diese Weise ließen sich beliebig viele Modul-Kopien anfertigen, die für sich eigenständig funktionieren würden. Das Problem fällt allerdings spätestens dann auf, wenn man an der Steuerung etwas ändern möchte, z. B. einen weiteren Zeitpunkt oder eine andere Bedingung zum Ein- oder Ausschalten hinzufügen möchte, die nicht nur ein Szenario betrifft, sondern alle. Dann muss man alle Kopien entsprechen abändern.

Definition mit Templates

Info green.pngDOIF-Templates
  • eine Template-Definition hat folgenden Aufbau DEF TPL_<Template-Name> (<DOIF-Definition im Perlmodus>)
  • <Template-Name> ist ein freiwählbare Name
  • Platzhalter für variable Informationen werden mit $1, $2 usw. angegeben
  • Der Aufruf eines Templates: TPL_<Template-Name>(<Parameter1>,<Parameter2>,....)
  • Der übergebene <Parameter1> wird im Template anstelle des Platzhalters $1 eingesetzt, <Parameter2> anstelle des Platzhalters $2 usw.
  • Innerhalb eines DOIFs können beliebig viele Template-Definitionen vorgenommen werden
  • Innerhalb eines DOIFs können beliebig viele Template-Aufrufe vorgenommen werden


Ausgehend von der obigen Definition, wird ein Template erstellt. Hiebei werden feste Angaben durch Platzhalter ersetzt. Anschließend wird das definierte Template hier TPL_ZS mehrfach mit unterschiedlichen Zeiten und Geräten genutzt, um mehrere Szenarien zu definieren.

defmod di_zeitschaltuhr DOIF DEF TPL_ZS ( ## hier wird die Definition eines Templates namens TPL_ZS eingeleitet\
{if ([$1] or [$2] or [$3]) {fhem_set"$4 on"} elsif ([$5] or [$6] or [$7]) {fhem_set ("$4 off")}}\
) ## Ende der Temlate-Definition namens TPL_ZS\
\
## Definition mehrer Zeitschaltuhren mit Hilfe des obigen Templates namens TPL_ZS\
##      $1    $2    $3    $4        $5    $6    $7\
TPL_ZS (10:00,12:00,16:00,Flurlampe,11:00,14:00,20:00)
TPL_ZS (09:00,11:00,16:30,Tischlampe,10:00,13:30,21:00)

Hier wurde die Steuerung mit Hilfe von Platzhaltern $1,$ 2 usw. verallgemeinert. Die eigentliche Definition der Steuerung hat durch den Aufruf des Templates TPL_ZS stattgefunden. Die übergebenen Zeiten und Geräte wurden anstatt der Platzhalter im Template eingesetzt. Nun arbeiten zwei unabhängige Zeitschaltuhren mit unterschiedlichen Zeitpunkten und unterschiedlichen Geräten innerhalb eines DOIF-Moduls. Wird die Steuerung innerhalb des Templates geändert, so wirkt sich die Änderung für alle Template-Aufrufe.