DOIF/Automatisierung: Unterschied zwischen den Versionen

Aus FHEMWiki
Zeile 47: Zeile 47:
{{Randnotiz|RNText='''Helligkeitsabhängige Zeitsteuerung für mehrere Szenarien'''
{{Randnotiz|RNText='''Helligkeitsabhängige Zeitsteuerung für mehrere Szenarien'''
'''nützliche Links'''
'''nützliche Links'''
* [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus DOIF-Perlmodus]
* [https://fhem.de/commandref_DE.html#DOIF_Perl_Modus siehe Commandref: DOIF-Perlmodus]
* [https://forum.fhem.de/index.php/topic,111266.msg1054775.html#msg1054775 Forum]
* [https://forum.fhem.de/index.php/topic,111266.msg1054775.html#msg1054775 siehe Forum-Beitrag: Generalisierung mit Templates]
}}
}}
Anforderung: Verschiedene Lichtszenarien sollen über Angabe bestimmter Parameter generiert werden. Eine Lichtszene soll durch folgende Angaben definierbar sein: Szenenname, Daemmerungssensor (on/off), Zeitspanne, Einschaltbefehl, Ausschaltbefehl, Zeitraum des Jahres. Eine neue Szene soll durch Hinzufügen eines Template-Aufrufs erstellt werden können.
Anforderung: Verschiedene Lichtszenarien sollen über Angabe bestimmter Parameter generiert werden. Eine Lichtszene soll durch folgende Angaben definierbar sein: Szenenname, Daemmerungssensor (on/off), Zeitspanne, Einschaltbefehl, Ausschaltbefehl, Zeitraum des Jahres. Eine neue Szene soll durch Hinzufügen eines Template-Aufrufs erstellt werden können.

Version vom 14. Juli 2020, 21:39 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

Info green.pngeinfache Zeitsteuerung

nützliche Links

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

Info green.pngHelligkeitsabhängige Zeitsteuerung für ein Szenarium

nützliche Links

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

Info green.pngHelligkeitsabhängige Zeitsteuerung für mehrere Szenarien

nützliche Links

Anforderung: Verschiedene Lichtszenarien sollen über Angabe bestimmter Parameter generiert werden. Eine Lichtszene soll durch folgende Angaben definierbar sein: Szenenname, Daemmerungssensor (on/off), Zeitspanne, Einschaltbefehl, Ausschaltbefehl, Zeitraum des Jahres. Eine neue Szene soll durch Hinzufügen eines Template-Aufrufs erstellt werden können.

Beispieldefinition

defmod di_Licht_tpl DOIF DEF TPL_light ( ## Definition des Templates namens TPL_light zur Steuerung einer Lichtszene\
light_$1 {                               ## DOIF Block\
                                         ## Parameter: Szene Daemmerungssensor Zeitspanne on off von bis\
                                         ## Nr.:       $1    $2                $3         $4 $5  $6  $7\
  if ($md ge "$6" or $md le "$7") {      ## wenn innerhalb der Jahreszeit (von bis)\
    if (($3) and [$2] eq "on") {         ## wenn in der Zeitspanne und Dämmerung on\
      fhem_set($4);;                     ## schalte on-Befehle\
      set_State("Szene: $1");;           ## Setze Status des DOIF-Moduls\
    } else {\
      fhem_set ($5);;                    ## sonst, schalte off-Befehle\
    }\
  }\
} ## Ende des light-Blocks\
) ## Ende der Templatedefinition\
\
## Generierung der Steuerung pro Beschattungsszene mit Hilfe des obigen Templates\
TPL_light (Erdgeschoss,Daemmerung2,([06:25-08:00|8] or [15:00-23:00]),"Lampekueche,LampeFlur on","Lampekueche,LampeFlur off",01-01, 12-31)\
TPL_light (Kind2,Daemmerung2,[06:25-08:00|8] or [15:00-23:10],"schrank2 on","schrank2 off",12-01,03-31)\
TPL_light (Terrasse,Dunkelheit,[17:00-23:05],"Terrasse on","Terrasse off",01-01,12-31)\
TPL_light (Garten,Dunkelheit,[16:00-23:30],"Garten pct 50","Garten off",01-01,12-31)\
## ... hier können weitere Szenarien durch hinzufügen weiterer Zeilen generiert werden

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

Info green.pngHelligkeitsabhängige Zeitsteuerung für mehrere Szenarien mit tabellarischer Übersicht

nützliche Links

Anforderung: Verschiedene Lichtszenarien sollen über Angabe bestimmter Parameter generiert werden. Eine Lichtszene soll durch folgende Angaben definierbar sein: Szenenname, Daemmerungssensor (on/off), Zeitspanne, Einschaltbefehl, Ausschaltbefehl, Zeitraum des Jahres, aktueller Zustand der Szene (on/off), Aktivierungsschalter. Eine neue Szene soll durch hinzufügen einer Parameterzeile erstellt werden können. Erstellte Lichtszenarien 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 8 (Status) und 9 (aktiv) 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"))

Ergebnis der Beispieldefinition in der Webansicht:

Licht Szenarien.png