DOIF/Automatisierung: Unterschied zwischen den Versionen
Zeile 50: | Zeile 50: | ||
* [https://forum.fhem.de/index.php/topic,111266.msg1054775.html#msg1054775 Forum] | * [https://forum.fhem.de/index.php/topic,111266.msg1054775.html#msg1054775 Forum] | ||
}} | }} | ||
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- | 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''' | '''Beispieldefinition''' | ||
Zeile 56: | Zeile 56: | ||
defmod di_Licht_tpl DOIF DEF TPL_light ( ## Definition des Templates namens TPL_light zur Steuerung einer Lichtszene\ | defmod di_Licht_tpl DOIF DEF TPL_light ( ## Definition des Templates namens TPL_light zur Steuerung einer Lichtszene\ | ||
light_$1 { ## DOIF Block\ | light_$1 { ## DOIF Block\ | ||
## Parameter Szene | ## Parameter: Szene Daemmerungssensor Zeitspanne on off von bis\ | ||
## | ## Nr.: $1 $2 $3 $4 $5 $6 $7\ | ||
if ($md ge "$6" or $md le "$7") {\ | if ($md ge "$6" or $md le "$7") {\ | ||
if (($3) and [$2] eq "on") {\ | if (($3) and [$2] eq "on") {\ | ||
Zeile 71: | Zeile 71: | ||
) ## Ende der Templatedefinition\ | ) ## Ende der Templatedefinition\ | ||
\ | \ | ||
## Generierung der Steuerung pro | ## 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 (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 (Kind2,Daemmerung2,[06:25-08:00|8] or [15:00-23:10],"schrank2 on","schrank2 off",12-01,03-31)\ |
Version vom 14. Juli 2020, 20:09 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
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") {\
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\
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
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 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"))
Ergebnis der Beispieldefinition in der Webansicht: