DOIF/Automatisierung: Unterschied zwischen den Versionen

Aus FHEMWiki
(Die Seite wurde neu angelegt: „An dieser Stelle werden Lösungen für typische praxisrelevante Automatisierungsaufgaben mit Hilfe des DOIF-Moduls vorgestellt.<br> <br> Die folgenden Beispiel…“)
 
Keine Bearbeitungszusammenfassung
Zeile 43: Zeile 43:


=== Helligkeitsabhängige Zeitsteuerung für mehrere Szenarien ===
=== Helligkeitsabhängige Zeitsteuerung für mehrere Szenarien ===
=== Helligkeitsabhängige Zeitsteuerung für mehrere Szenarien mit tabellarischer Übersicht===
=== Helligkeitsabhängige Zeitsteuerung für mehrere Szenarien mit tabellarischer Übersicht===
{{Randnotiz|RNText='''Zeitsteuerung'''
* [https://fhem.de/commandref_DE.html#DOIF_Kombination_von_Ereignis_und_Zeitsteuerung_mit_logischen_Abfragen siehe Commandref: logische Abfragen]
}}
Anforderung: Verschiedene Lichtszenarien sollen über Angabe von bestimmten Parametern definiert werden können. Sie sollen tabellarisch dargestellt werden und einzeln abschaltbar sein.
'''Beispieldefinition'''
<syntaxhighlight lang="perl">
defmod di_Licht_all DOIF subs  {\
## Parameter                    1    2          3          4  5  6  7  8      9\
@{$VAR{params}}=split (/\| */,q(Szene|Daemmerung|Zeitspanne|on|off|von|bis|Status|aktiv));;\
\
## Definition einzelner Datensätze pro Szene\
push (@{$VAR{sc}},[split (/\| +/,q(Erdgeschoss| Daemmerung2| ([06:25-08:00|8] or [15:00-23:00])| Lampekueche,LampeFlur on| Lampekueche,LampeFlur off| 01-01| 12-31| off| on))]);;\
push (@{$VAR{sc}},[split (/\| +/,q(Kind2| Daemmerung2| [06:25-08:00|8] or [15:00-23:10]| schrank2 on| schrank2 off| 12-01| 03-31| off| on))]);;\
push (@{$VAR{sc}},[split (/\| +/,q(Terrasse| Dunkelheit| [17:00-23:05]| Terrasse on| Terrasse off| 01-01| 12-31| off| on))]);;\
push (@{$VAR{sc}},[split (/\| +/,q(Garten| Dunkelheit| [16:00-23:30]| Garten pct 50| Garten off| 01-01| 12-31| off| on))]);;\
## weitere Szenarien können hier Zeilenweise hinzugefügt werden\
\
## Bei Änderung der Definition werden erforderliche Readings erstellt und vorbelegt\
if ($::init_done) {\
  fhem("deletereading $SELF .*");;\
  my @sc=@{$VAR{sc}};;\
  my @params=@{$VAR{params}};;\
  set_State("initialized");;\
  for (my $i=0;;$i < @{$VAR{sc}};;$i++) {\
    for (my $j=7;;$j < @params;;$j++) { ## Parameter 6 und 7 werden als Reading angelegt\
      set_Reading ($sc[$i][0].".".$params[$j],$sc[$i][$j]);;\
    }\
  }\
}\
} ## end of subs\
\
DEF TPL_light ( ## Definition des Templates namens TPL_light\
light_$1 {  ## DOIF Block\
            ## Parameter Szene Daemmerung Zeitspanne on off von bis\
            ##          $1    $2        $3        $4 $5  $6  $7\
  if ([?$SELF:$1.aktiv] eq "on" and ($md ge "$6" or $md le "$7")) {\
    if (($3) and [$2] eq "on") {\
      fhem_set($4);;\
      set_State("Szene: $1");;\
      set_Reading("$1.Status","on",1);;\
    } else {\
      fhem_set ($5);;\
      set_Reading("$1.Status","off",1);;\
    }\
  }\
} ## Ende des light-Blocks\
) ## Ende der Templatedefinition\
\
## Generierung der Steuerung pro Beschattungsszene mit Hilfe des obigen Templates\
FOR (@{$VAR{sc}},TPL_light($_$1,$_$2,$_$3,"$_$4","$_$5",$_$6,$_$7))
attr di_Licht_all uiTable {\
  package ui_Table;;\
  $TC{1..10}="style='padding-left: 10px;; padding-right: 10px;; padding-top: 3px;; padding-bottom: 3px;;' align='center'";;\
}\
\
## Überschrift der Spalten\
"Szene"|"Dämmerung"|"Zeitspanne"|"on"|"off"|"von"|"bis"|"Status"|"aktiv"\
\
## Pro Datensatz einer Beschattungsszene wird eine Zeile mit Werten und Widgets generiert\
FOR (@{$VAR{sc}},"$_$1"|icon([$_$2])|"$_$3"|"$_$4"|"$_$5"|"$_$6"|"$_$7"|icon([$SELF:$_$1.Status])|WID([$SELF:$_$1.aktiv],"select,on,off"))
</syntaxhighlight>

Version vom 14. Juli 2020, 19:03 Uhr

An dieser Stelle werden Lösungen für typische praxisrelevante Automatisierungsaufgaben mit Hilfe des DOIF-Moduls vorgestellt.

Die folgenden Beispieldefinitionen arbeiten mit konkreten Geräten und Readings, sie können als RAW-Definition ins eigene System übernommen werden, dazu müssen die Gerätenamen, Readings, ggf. auch Icons den existierenden Namen des eigenen Systems angepasst werden. Zum Ausprobieren der Beispiele können statt echter Geräte auch Dummys benutzt werden.

Die Seite befindet sich im Aufbau.

Licht

Einfache Zeitsteuerung für ein Szenarium

Anforderung: Lichter sollen in einem bestimmten Zeitraum leuchten.

Beispieldefinition

defmod di_licht DOIF ([21:00-23:00])\
  (set Lampeflur on, set Lampekueche on)\
DOELSE\ 
  (set Lampeflur off, set Lampekueche off)

Helligkeitsabhängige Zeitsteuerung für ein Szenarium

Anforderung: Lichter sollen innerhalb eines Zeitraums leuchten, aber nur wenn es dunkel ist.

Beispieldefinition für Dunkelheit

Zunächst wird ein DOIF-Modul definiert, welches mit Hilfe eines Helligkeitssensors den Zustand "on" bei Dunkelheit annimmt, sonst "off"

defmod Dunkelheit DOIF ([Helligkeitssensor:brightness] < 100) DOELSE
attr Dunkelheit cmdState on|off

Beispieldefinition

defmod di_licht DOIF ([16:00-23:00] and [Dunkelheit] eq "on")\
  (set Lampeflur on, set Lampekueche on)\
DOELSE\ 
  (set Lampeflur off, set Lampekueche off)

Helligkeitsabhängige Zeitsteuerung für mehrere Szenarien

Helligkeitsabhängige Zeitsteuerung für mehrere Szenarien mit tabellarischer Übersicht

Anforderung: Verschiedene Lichtszenarien sollen über Angabe von bestimmten Parametern definiert werden können. Sie sollen tabellarisch dargestellt werden und einzeln abschaltbar sein.

Beispieldefinition

defmod di_Licht_all DOIF subs  {\
## Parameter                    1     2          3          4   5  6   7   8      9\
@{$VAR{params}}=split (/\| */,q(Szene|Daemmerung|Zeitspanne|on|off|von|bis|Status|aktiv));;\
\
## Definition einzelner Datensätze pro Szene\
push (@{$VAR{sc}},[split (/\| +/,q(Erdgeschoss| Daemmerung2| ([06:25-08:00|8] or [15:00-23:00])| Lampekueche,LampeFlur on| Lampekueche,LampeFlur off| 01-01| 12-31| off| on))]);;\
push (@{$VAR{sc}},[split (/\| +/,q(Kind2| Daemmerung2| [06:25-08:00|8] or [15:00-23:10]| schrank2 on| schrank2 off| 12-01| 03-31| off| on))]);;\
push (@{$VAR{sc}},[split (/\| +/,q(Terrasse| Dunkelheit| [17:00-23:05]| Terrasse on| Terrasse off| 01-01| 12-31| off| on))]);;\
push (@{$VAR{sc}},[split (/\| +/,q(Garten| Dunkelheit| [16:00-23:30]| Garten pct 50| Garten off| 01-01| 12-31| off| on))]);;\
## weitere Szenarien können hier Zeilenweise hinzugefügt werden\
\
## Bei Änderung der Definition werden erforderliche Readings erstellt und vorbelegt\
if ($::init_done) {\
  fhem("deletereading $SELF .*");;\
  my @sc=@{$VAR{sc}};;\
  my @params=@{$VAR{params}};;\
  set_State("initialized");;\
  for (my $i=0;;$i < @{$VAR{sc}};;$i++) {\
    for (my $j=7;;$j < @params;;$j++) { ## Parameter 6 und 7 werden als Reading angelegt\
      set_Reading ($sc[$i][0].".".$params[$j],$sc[$i][$j]);;\
    }\
  }\
}\
} ## end of subs\
\
DEF TPL_light ( ## Definition des Templates namens TPL_light\
light_$1 {  ## DOIF Block\
            ## Parameter Szene Daemmerung Zeitspanne on off von bis\
            ##           $1    $2         $3         $4 $5  $6  $7\
  if ([?$SELF:$1.aktiv] eq "on" and ($md ge "$6" or $md le "$7")) {\
    if (($3) and [$2] eq "on") {\
      fhem_set($4);;\
      set_State("Szene: $1");;\
      set_Reading("$1.Status","on",1);;\
    } else {\
      fhem_set ($5);;\
      set_Reading("$1.Status","off",1);;\
    }\
  }\
} ## Ende des light-Blocks\
) ## Ende der Templatedefinition\
\
## Generierung der Steuerung pro Beschattungsszene mit Hilfe des obigen Templates\
FOR (@{$VAR{sc}},TPL_light($_$1,$_$2,$_$3,"$_$4","$_$5",$_$6,$_$7))
attr di_Licht_all uiTable {\
  package ui_Table;;\
  $TC{1..10}="style='padding-left: 10px;; padding-right: 10px;; padding-top: 3px;; padding-bottom: 3px;;' align='center'";;\
}\
\
## Überschrift der Spalten\
"Szene"|"Dämmerung"|"Zeitspanne"|"on"|"off"|"von"|"bis"|"Status"|"aktiv"\
\
## Pro Datensatz einer Beschattungsszene wird eine Zeile mit Werten und Widgets generiert\
FOR (@{$VAR{sc}},"$_$1"|icon([$_$2])|"$_$3"|"$_$4"|"$_$5"|"$_$6"|"$_$7"|icon([$SELF:$_$1.Status])|WID([$SELF:$_$1.aktiv],"select,on,off"))