FHEM > DOIF

neue Features: Generalisierung mit Templates

(1/9) > >>

Damian:
Es tritt immer wieder das Problem auf, dass man mehrere DOIFs definieren muss, die ähnlich aber nicht ähnlich genug sind, um sie über ein konventionelles DOIF zusammenzufassen.

Es gibt jetzt die Möglichkeit im DOIF-Perl-Modus eine Definition für mehrerer DOIFs vorzunehmen.

Anwendungsbeispiel:

Bisher habe ich für die Beschattung des Hauses mehrere DOIFs definieren müssen, weil bestimmte Parameter von Zimmer zu Zimmer, von Fenster zu Fenster unterschiedlich sind.

Bei mir fahren die Rollläden bei Sonneneinstrahlung nur einmal am Tag in Beschattungsposition. Mehr Automatisierung möchte ich beim Beschatten nicht haben. Vorweg: Natürlich lässt sich die untere Definition für mehr Automatisierung oder andere Anwendungen beliebig anpassen.

Das neue generalisierte DOIF sieht jetzt so aus:


--- Code: ---defmod di_beschattung2 DOIF DEF TPL_shutter ( ## Definition des Templates namens TPL_shutter\
{  ## DOIF Block\
  if ([$2:measured-temp] > 24 and [$3] eq "on" and [$4-$5] and !$VAR{$1}) { ## Wenn die Zimmertemperatur über 24 und Sonne scheint innherhalb des Zeitfensters und das Fenster noch nicht heruntergefahren wurde\
    fhem_set("$6 $7");;  ## Fenster herunterfahren\
    $VAR{$1}=1;;         ## Merker setzen, dass Fenster bereits heruntergefahren wurde\
  }\
}\
) ## Ende der Templatedefinition\
\
{[00:01];;delete $VAR;;}    ## nachts alle Merker löschen\
\
## Definition einzelner DOIF-Blöcke mit Hilfe des Templates\
##          $1 $2        $3      $4    $5    $6    $7\
TPL_shutter (1,TH_Bad_HM,Sonne_s,12:00,21:00,R_Bad,30)\
TPL_shutter (2,TH_DG_HM,Sonne_s,12:00,21:00,R_DG,30)\
TPL_shutter (3,TH_Kueche_HM,Sonne_s,09:00,14:00,R_Kueche,50)\
TPL_shutter (4,TH_Kz_o_HM,Sonne_s,09:00,14:00,R_Kinderzimmer1_O,30)\
TPL_shutter (5,TH_Kz_o_HM,Sonne_s,12:00,21:00,R_Kinderzimmer1_S,25)\
TPL_shutter (6,TH_Kz_w_HM,Sonne_s,12:00,21:00,R_Kinderzimmer2_S,25)\
TPL_shutter (7,TH_Kz_w_HM,Sonne_w,15:30,21:00,R_Kinderzimmer2_W.*,25)\
TPL_shutter (8,TH_WZ_HM,Sonne_s,12:30,21:00,R_W_S,25)\
TPL_shutter (9,TH_WZ_HM,Sonne_w,15:30,21:00,R_W_W.*,25)\

--- Ende Code ---

Hier wird zunächst ein DOIF-Template namens "TPL_shutter" mit mehreren Platzhaltern für die Steuerungslogik erstellt. Danach wird pro Fenster/Fenstergruppe das Template mit unterschiedlichen Parametern (Temperatursensor im Zimmer, Sonneneinstrahlung, Zeiten, Rollladen, Position) aufgerufen. Auf diese Weise werden mehrere DOIF-Blöcke innerhalb des DOIFs definiert, die die Funktionalität mehrerer unabhängiger DOIFs haben. Auch bei Template-Nutzung wird die gesamte Definition vom Modul in Perl übersetzt, so dass zur Laufzeit reines Perl mit maximaler Performance abgearbeitet wird.

Mit der oberen Definition konnte ich 9 konventionelle DOIFs durch ein einziges ersetzen, was die Pflege bzw. Anpassungen der Steuerung erheblich vereinfacht.

Wenn man jetzt noch über das uiTable-Attribut, das übrigens schon lange das Template-Konzept nutzt, die dazugehörige Oberfläche im gleichen Modul definiert, so hat man Steuerung und Visualisierung an einer Stelle: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Visualisierung_und_Steuerung_von_Rolll.C3.A4den

Damian:
Neue DOIF-Version wurde eingecheckt.

Damian:
Hier mal ein weiteres Beispiel für eine Zeitschaltuhr zum Setzen von Zimmertemperaturen:

zuvor konventionell:


--- Code: ---defmod di_Heizung DOIF ([05:00|8] or [05:30|7])\
  (set TH_Kueche_HM desired-temp 21,\
   set TH_Bad_HM desired-temp 22,\
   set TH_DG_HM desired-temp 21,\
   set TH_WZ_HM desired-temp 21,\
   set TH_Kz_w_HM desired-temp 21,\
   set TH_Kz_o_HM desired-temp 21)\
DOELSEIF ([08:00|8] or [09:00|7])\
   (set TH_Kueche_HM desired-temp 20,\
   set TH_Bad_HM desired-temp 20,\
   set TH_DG_HM desired-temp 20,\
   set TH_WZ_HM desired-temp 21,\
   set TH_Kz_w_HM desired-temp 20,\
   set TH_Kz_o_HM desired-temp 20)\
DOELSEIF ([12:00])\
   (set TH_Kueche_HM desired-temp 21,\
   set TH_Bad_HM desired-temp 20,\
   set TH_DG_HM desired-temp 21,\
   set TH_WZ_HM desired-temp 22,\
   set TH_Kz_w_HM desired-temp 21,\
   set TH_Kz_o_HM desired-temp 21)\
DOELSEIF ([20:00])\
    (set TH_Kueche_HM desired-temp 21,\
   set TH_Bad_HM desired-temp 20,\
   set TH_DG_HM desired-temp 20,\
   set TH_WZ_HM desired-temp 20,\
   set TH_Kz_w_HM desired-temp 20,\
   set TH_Kz_o_HM desired-temp 20)\

--- Ende Code ---

jetzt mit Templates:


--- Code: ---defmod di_Heizung_neu DOIF DEF TPL_set_temp ( ## Template zum Setzen der Zimmertemperaturen\
{$1;;   ## Zeitangabe\
fhem_set"TH_Kueche_HM desired-temp $2";;\
fhem_set"TH_Bad_HM desired-temp $3";;\
fhem_set"TH_DG_HM desired-temp $4";;\
fhem_set"TH_WZ_HM desired-temp $5";;\
fhem_set"TH_Kz_o_HM desired-temp $6";;\
fhem_set"TH_Kz_w_HM desired-temp $7";;\
}\
)\
##            Zeit      Ku,Ba,DG,WZ,Ko,Kw\
TPL_set_temp ([05:00|8] or [05:30|7],21,22,21,22,21,21)\
TPL_set_temp ([08:00|8] or [09:00|7],20,20,20,21,20,20)\
TPL_set_temp ([12:00],               21,20,21,22,21,21)\
TPL_set_temp ([20:00],               21,20,20,20,20,20)
--- Ende Code ---

moonsorrox:
Hallo Damian, dass ist eine Super tolle Sache mit der Beschattung, ich setze sie momentan auch mit diversen DOIFs um und habe natürlich dadurch jede Menge DOIFs am Start.
Ich werde mir das mal anschauen, obwohl ich Perl als Feind habe  ;) was nicht heißen soll das ich mich damit nicht beschäftige, aber lernen wollte ich es jetzt nicht, weil es mir nicht liegt.
Mal schauen ob ich es schaffe das mal umzusetzen und es dann praktisch auch einsetze...

Damian:

--- Zitat von: moonsorrox am 25 Mai 2020, 18:23:16 ---Hallo Damian, dass ist eine Super tolle Sache mit der Beschattung, ich setze sie momentan auch mit diversen DOIFs um und habe natürlich dadurch jede Menge DOIFs am Start.
Ich werde mir das mal anschauen, obwohl ich Perl als Feind habe  ;) was nicht heißen soll das ich mich damit nicht beschäftige, aber lernen wollte ich es jetzt nicht, weil es mir nicht liegt.
Mal schauen ob ich es schaffe das mal umzusetzen und es dann praktisch auch einsetze...

--- Ende Zitat ---

Die erforderlichen Perl-Kenntnisse halten sich in Grenzen. Hier ist fast schon mehr DOIF-Kenntnis von Nutzen.

Ich versuche bei mir die restlichen DOIFs zu generalisieren. Im Beschattungsmodul kann man auch das morgendliche Hochfahren und das abendliche Runterfahren der Rollläden unterbringen. Jetzt muss ich noch die  Lichtsteuerung in ein DOIF stecken, dann ist meine Haus-Automatisierung mit wenigen DOIFs abgedeckt ;)

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln