Individualisierbare Zeitsteuerung bei den Jalousien

Begonnen von FunkOdyssey, 14 November 2014, 17:59:06

Vorheriges Thema - Nächstes Thema

FunkOdyssey

Tag miteinander,

ich bin absolute FHEM-Laie und lese mich seit Tagen ein. Dies ist mein erster Beitrag und ich brauche ein wenig Hilfe.

Ich möchte über das Frontend möglichst viele Parameter eines DOIFs individualisieren. Jedoch bin ich mit dem Ergebnis nicht wirklich glücklich. Der Code ist ein wenig unübersichtlich und schwer zu pflegen. Außerdem schaffe ich das noch nicht, eine weitere Bedingung (ob Seitentüren mit einbezogen werden sollen) mit einzubauen.


#########################################################################
## Automatik Steuerung
#########################################################################

define auto_jal_master dummy
attr auto_jal_master alias Zeitsteuerung aktivieren
attr auto_jal_master devStateIcon ja:general_an:nein nein:general_aus:ja
attr auto_jal_master group Jalousiensteuerung
attr auto_jal_master icon fts_shutter_automatic
attr auto_jal_master room Automation
attr auto_jal_master setList state:ja,nein
attr auto_jal_master sortby 01
attr auto_jal_master webCmd state

define auto_jal_open_mit_tueren dummy
attr auto_jal_open_mit_tueren alias Seitentüren auch öffnen
attr auto_jal_open_mit_tueren devStateIcon ja:general_an:nein nein:general_aus:ja
attr auto_jal_open_mit_tueren group Jalousiensteuerung
attr auto_jal_open_mit_tueren icon fts_door_open
attr auto_jal_open_mit_tueren room Automation
attr auto_jal_open_mit_tueren setList state:ja,nein
attr auto_jal_open_mit_tueren sortby 05
attr auto_jal_open_mit_tueren webCmd state

define auto_jal_close_mit_tueren dummy
attr auto_jal_close_mit_tueren alias Seitentüren auch schließen
attr auto_jal_close_mit_tueren devStateIcon ja:general_an:nein nein:general_aus:ja
attr auto_jal_close_mit_tueren group Jalousiensteuerung
attr auto_jal_close_mit_tueren icon fts_door_open
attr auto_jal_close_mit_tueren room Automation
attr auto_jal_close_mit_tueren setList state:ja,nein
attr auto_jal_close_mit_tueren sortby 06
attr auto_jal_close_mit_tueren webCmd state

define auto_jal_zeit_werktags dummy
attr auto_jal_zeit_werktags alias Jalousien öffnen - Werktags
attr auto_jal_zeit_werktags devStateIcon .*:rc_BLANK
attr auto_jal_zeit_werktags event-on-change-reading .*
attr auto_jal_zeit_werktags group Jalousiensteuerung
attr auto_jal_zeit_werktags icon fts_shutter_up
attr auto_jal_zeit_werktags room Automation
attr auto_jal_zeit_werktags setList state:6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30,10:00
attr auto_jal_zeit_werktags webCmd state

define auto_jal_zeit_wochenende dummy
attr auto_jal_zeit_wochenende alias Jalousien öffnen - Wochenende
attr auto_jal_zeit_wochenende devStateIcon .*:rc_BLANK
attr auto_jal_zeit_wochenende event-on-change-reading .*
attr auto_jal_zeit_wochenende group Jalousiensteuerung
attr auto_jal_zeit_wochenende icon fts_shutter_up
attr auto_jal_zeit_wochenende room Automation
attr auto_jal_zeit_wochenende setList state:6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30,10:00
attr auto_jal_zeit_wochenende webCmd state

define automatik_uhrzeit_close_min dummy
attr automatik_uhrzeit_close_min alias Jalousien schließen nicht vor
attr automatik_uhrzeit_close_min devStateIcon .*:rc_BLANK
attr automatik_uhrzeit_close_min event-on-change-reading .*
attr automatik_uhrzeit_close_min group Jalousiensteuerung
attr automatik_uhrzeit_close_min icon fts_shutter_down
attr automatik_uhrzeit_close_min room Automation
attr automatik_uhrzeit_close_min setList state:16:00,16:30,17:00,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30
attr automatik_uhrzeit_close_min webCmd state

define automatik_uhrzeit_close_max dummy
attr automatik_uhrzeit_close_max alias Jalousien schließen spätestens um
attr automatik_uhrzeit_close_max devStateIcon .*:rc_BLANK
attr automatik_uhrzeit_close_max event-on-change-reading .*
attr automatik_uhrzeit_close_max group Jalousiensteuerung
attr automatik_uhrzeit_close_max icon fts_shutter_down
attr automatik_uhrzeit_close_max room Automation
attr automatik_uhrzeit_close_max setList state:16:00,16:30,17:00,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30
attr automatik_uhrzeit_close_max webCmd state

#define auto_jal_steuerung DOIF ([[auto_jal_zeit_werktags]-{sunset("REAL",600,"16:30","22:00")}|8] or [09:00-{sunset("REAL",600,"16:30","22:00")}|7]) (set alle_jalousien_ohne_tueren 100) DOELSE (set alle_jalousien_ohne_tueren 0)
define auto_jal_steuerung DOIF (\
[{ReadingsVal("auto_jal_zeit_werktags","state","10:00")}-{sunset("REAL",600,{ReadingsVal("automatik_uhrzeit_close_min","state","19:00")},{ReadingsVal("automatik_uhrzeit_close_max","state","22:00")})}|8] \
or\
[{ReadingsVal("auto_jal_zeit_wochenende","state","10:00")}-{sunset("REAL",600,{ReadingsVal("automatik_uhrzeit_close_min","state","19:00")},{ReadingsVal("automatik_uhrzeit_close_max","state","22:00")})}|7]\
) \
(set alle_jalousien_ohne_tueren 100) \
DOELSE\
(set alle_jalousien_ohne_tueren 0)\

attr auto_jal_steuerung alias Automatik Jalousien Steuerung
attr auto_jal_steuerung disable 0
attr auto_jal_steuerung group Automation
attr auto_jal_steuerung room Automation

define auto_jal_schalter DOIF ([auto_jal_master] eq "ja") (attr auto_jal_steuerung disable 0) DOELSE (attr auto_jal_steuerung disable 1)
attr auto_jal_schalter alias Automatik Jalousien Schalter
attr auto_jal_schalter group Automation
attr auto_jal_schalter room Automation


Dieses "Durcheinander" würde ich nun gerne noch mit folgender Bedingung erweitern:


IF ([auto_jal_open_mit_tueren:state] eq "ja")
(set alle_jalousien_mit_tueren 100)
ELSE
(set alle_jalousien_ohne_tueren 100)


bzw. im DOIF-Else-Teil:


IF ([auto_jal_open_mit_tueren:state] eq "ja")
(set alle_jalousien_mit_tueren 0)
ELSE
(set alle_jalousien_ohne_tueren 0)


Sicherlich kann/darf man DOIFs nicht mit IFs verschachteln. Also müsste ich die DOIF-Bedingungen erweitern, um die Steuerung der Türen. Damit bin ich dann aber total überfordert.

Könnte Sie das mal jemand anschauen und mit Tipps geben bzw. Abkürzungen zeigen?
Geht das vielleicht alles auch eleganter?  :-)

Danke

Damian

Zitat von: Funk.Odyssey am 14 November 2014, 17:59:06
Tag miteinander,

ich bin absolute FHEM-Laie und lese mich seit Tagen ein. Dies ist mein erster Beitrag und ich brauche ein wenig Hilfe.

Ich möchte über das Frontend möglichst viele Parameter eines DOIFs individualisieren. Jedoch bin ich mit dem Ergebnis nicht wirklich glücklich. Der Code ist ein wenig unübersichtlich und schwer zu pflegen. Außerdem schaffe ich das noch nicht, eine weitere Bedingung (ob Seitentüren mit einbezogen werden sollen) mit einzubauen.


#########################################################################
## Automatik Steuerung
#########################################################################

define auto_jal_master dummy
attr auto_jal_master alias Zeitsteuerung aktivieren
attr auto_jal_master devStateIcon ja:general_an:nein nein:general_aus:ja
attr auto_jal_master group Jalousiensteuerung
attr auto_jal_master icon fts_shutter_automatic
attr auto_jal_master room Automation
attr auto_jal_master setList state:ja,nein
attr auto_jal_master sortby 01
attr auto_jal_master webCmd state

define auto_jal_open_mit_tueren dummy
attr auto_jal_open_mit_tueren alias Seitentüren auch öffnen
attr auto_jal_open_mit_tueren devStateIcon ja:general_an:nein nein:general_aus:ja
attr auto_jal_open_mit_tueren group Jalousiensteuerung
attr auto_jal_open_mit_tueren icon fts_door_open
attr auto_jal_open_mit_tueren room Automation
attr auto_jal_open_mit_tueren setList state:ja,nein
attr auto_jal_open_mit_tueren sortby 05
attr auto_jal_open_mit_tueren webCmd state

define auto_jal_close_mit_tueren dummy
attr auto_jal_close_mit_tueren alias Seitentüren auch schließen
attr auto_jal_close_mit_tueren devStateIcon ja:general_an:nein nein:general_aus:ja
attr auto_jal_close_mit_tueren group Jalousiensteuerung
attr auto_jal_close_mit_tueren icon fts_door_open
attr auto_jal_close_mit_tueren room Automation
attr auto_jal_close_mit_tueren setList state:ja,nein
attr auto_jal_close_mit_tueren sortby 06
attr auto_jal_close_mit_tueren webCmd state

define auto_jal_zeit_werktags dummy
attr auto_jal_zeit_werktags alias Jalousien öffnen - Werktags
attr auto_jal_zeit_werktags devStateIcon .*:rc_BLANK
attr auto_jal_zeit_werktags event-on-change-reading .*
attr auto_jal_zeit_werktags group Jalousiensteuerung
attr auto_jal_zeit_werktags icon fts_shutter_up
attr auto_jal_zeit_werktags room Automation
attr auto_jal_zeit_werktags setList state:6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30,10:00
attr auto_jal_zeit_werktags webCmd state

define auto_jal_zeit_wochenende dummy
attr auto_jal_zeit_wochenende alias Jalousien öffnen - Wochenende
attr auto_jal_zeit_wochenende devStateIcon .*:rc_BLANK
attr auto_jal_zeit_wochenende event-on-change-reading .*
attr auto_jal_zeit_wochenende group Jalousiensteuerung
attr auto_jal_zeit_wochenende icon fts_shutter_up
attr auto_jal_zeit_wochenende room Automation
attr auto_jal_zeit_wochenende setList state:6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30,10:00
attr auto_jal_zeit_wochenende webCmd state

define automatik_uhrzeit_close_min dummy
attr automatik_uhrzeit_close_min alias Jalousien schließen nicht vor
attr automatik_uhrzeit_close_min devStateIcon .*:rc_BLANK
attr automatik_uhrzeit_close_min event-on-change-reading .*
attr automatik_uhrzeit_close_min group Jalousiensteuerung
attr automatik_uhrzeit_close_min icon fts_shutter_down
attr automatik_uhrzeit_close_min room Automation
attr automatik_uhrzeit_close_min setList state:16:00,16:30,17:00,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30
attr automatik_uhrzeit_close_min webCmd state

define automatik_uhrzeit_close_max dummy
attr automatik_uhrzeit_close_max alias Jalousien schließen spätestens um
attr automatik_uhrzeit_close_max devStateIcon .*:rc_BLANK
attr automatik_uhrzeit_close_max event-on-change-reading .*
attr automatik_uhrzeit_close_max group Jalousiensteuerung
attr automatik_uhrzeit_close_max icon fts_shutter_down
attr automatik_uhrzeit_close_max room Automation
attr automatik_uhrzeit_close_max setList state:16:00,16:30,17:00,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30
attr automatik_uhrzeit_close_max webCmd state

#define auto_jal_steuerung DOIF ([[auto_jal_zeit_werktags]-{sunset("REAL",600,"16:30","22:00")}|8] or [09:00-{sunset("REAL",600,"16:30","22:00")}|7]) (set alle_jalousien_ohne_tueren 100) DOELSE (set alle_jalousien_ohne_tueren 0)
define auto_jal_steuerung DOIF (\
[{ReadingsVal("auto_jal_zeit_werktags","state","10:00")}-{sunset("REAL",600,{ReadingsVal("automatik_uhrzeit_close_min","state","19:00")},{ReadingsVal("automatik_uhrzeit_close_max","state","22:00")})}|8] \
or\
[{ReadingsVal("auto_jal_zeit_wochenende","state","10:00")}-{sunset("REAL",600,{ReadingsVal("automatik_uhrzeit_close_min","state","19:00")},{ReadingsVal("automatik_uhrzeit_close_max","state","22:00")})}|7]\
) \
(set alle_jalousien_ohne_tueren 100) \
DOELSE\
(set alle_jalousien_ohne_tueren 0)\

attr auto_jal_steuerung alias Automatik Jalousien Steuerung
attr auto_jal_steuerung disable 0
attr auto_jal_steuerung group Automation
attr auto_jal_steuerung room Automation

define auto_jal_schalter DOIF ([auto_jal_master] eq "ja") (attr auto_jal_steuerung disable 0) DOELSE (attr auto_jal_steuerung disable 1)
attr auto_jal_schalter alias Automatik Jalousien Schalter
attr auto_jal_schalter group Automation
attr auto_jal_schalter room Automation


Dieses "Durcheinander" würde ich nun gerne noch mit folgender Bedingung erweitern:


IF ([auto_jal_open_mit_tueren:state] eq "ja")
(set alle_jalousien_mit_tueren 100)
ELSE
(set alle_jalousien_ohne_tueren 100)


bzw. im DOIF-Else-Teil:


IF ([auto_jal_open_mit_tueren:state] eq "ja")
(set alle_jalousien_mit_tueren 0)
ELSE
(set alle_jalousien_ohne_tueren 0)


Sicherlich kann/darf man DOIFs nicht mit IFs verschachteln. Also müsste ich die DOIF-Bedingungen erweitern, um die Steuerung der Türen. Damit bin ich dann aber total überfordert.

Könnte Sie das mal jemand anschauen und mit Tipps geben bzw. Abkürzungen zeigen?
Geht das vielleicht alles auch eleganter?  :-)

Danke
Du kannst bei DOIF selbstverständlich IF´s verwenden mit beliebiger Schachtelungstiefe.
Du kannst bei DOIF in der jeweiligen Bedingung zusätzliche Abfragen mit and bzw. or verknüpfen.

DOIF ([[auto_jal_zeit_werktags]-{sunset... wird nicht funktionieren. Status eines Devices direkt als Zeitangabe ist nicht programmiert. Soetwas müsstest du über Value regeln, also:

DOIF ([{Value("auto_jal_zeit_werktags")}-{sunset...

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FunkOdyssey

Dein Hinweis bezieht sich auf eine auskommentierte Zeile. Die hatte ich versehentlich mit gepostet.

Anstatt mit Value habe ich "ReadingsVal" genutzt. Wenn "Value" auch geht, dann wird es schon ein wenig schlanker.

Damian

Zitat von: Funk.Odyssey am 14 November 2014, 19:15:47
Dein Hinweis bezieht sich auf eine auskommentierte Zeile. Die hatte ich versehentlich mit gepostet.

Anstatt mit Value habe ich "ReadingsVal" genutzt. Wenn "Value" auch geht, dann wird es schon ein wenig schlanker.

Value bezieht sich auf den Status, ReadingsVal auf das Reading state, beide sind meistens identisch.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FunkOdyssey

So sieht das DOIF jetzt aus. Komisch ist nur, dass die Zeiten in den Readings nicht mit der Auswahl übereinstimmen.

DEF
(
[{Value("auto_jal_zeit_werktags")}-{sunset("REAL",600,{Value("automatik_uhrzeit_close_min")},{Value("automatik_uhrzeit_close_max")})}|8]
or
[{Value("auto_jal_zeit_wochenende")}-{sunset("REAL",600,{Value("automatik_uhrzeit_close_min")},{Value("automatik_uhrzeit_close_max")})}|7]
)
(IF ([auto_jal_open_mit_tueren:state] eq "ja")(set alle_jalousien_mit_tueren 100) ELSE (set alle_jalousien_ohne_tueren 100))
DOELSE
(IF ([auto_jal_open_mit_tueren:state] eq "ja")(set alle_jalousien_mit_tueren 0) ELSE (set alle_jalousien_ohne_tueren 0))

Damian

Zitat von: Funk.Odyssey am 14 November 2014, 20:57:59
So sieht das DOIF jetzt aus. Komisch ist nur, dass die Zeiten in den Readings nicht mit der Auswahl übereinstimmen.

DEF
(
[{Value("auto_jal_zeit_werktags")}-{sunset("REAL",600,{Value("automatik_uhrzeit_close_min")},{Value("automatik_uhrzeit_close_max")})}|8]
or
[{Value("auto_jal_zeit_wochenende")}-{sunset("REAL",600,{Value("automatik_uhrzeit_close_min")},{Value("automatik_uhrzeit_close_max")})}|7]
)
(IF ([auto_jal_open_mit_tueren:state] eq "ja")(set alle_jalousien_mit_tueren 100) ELSE (set alle_jalousien_ohne_tueren 100))
DOELSE
(IF ([auto_jal_open_mit_tueren:state] eq "ja")(set alle_jalousien_mit_tueren 0) ELSE (set alle_jalousien_ohne_tueren 0))


Sie werden ja auch nur bei der Definition, modify und wenn die zuvor gesetzte Zeit gekommen ist, neu gesetzt.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FunkOdyssey

Gibt es denn eine Möglichkeit, dass zu ändern?
Ich habe es mit dem "do always" Attribut ausprobiert und mit "event-on-change-reading" im Reading. Nur ohne Erfolg. Muss ich dann irgendwie mit "notify" arbeiten?

Damian

Zitat von: Funk.Odyssey am 14 November 2014, 21:55:18
Gibt es denn eine Möglichkeit, dass zu ändern?
Ich habe es mit dem "do always" Attribut ausprobiert und mit "event-on-change-reading" im Reading. Nur ohne Erfolg. Muss ich dann irgendwie mit "notify" arbeiten?

ja, siehe: http://forum.fhem.de/index.php/topic,23833.msg217082.html#msg217082
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FunkOdyssey

Sorry. Ich stehe ein wenig auf dem Schlauch. 
Muss ich je Reading ein Notify mit der gesamten DEF aufnehmen?
Oder kann ich einfach nur ein Modify oder ähnlich triggern?

Ich habe leider keine Ahnung, wie die Zeile dann aussehen soll.

igami

Du musst ein notify haben dass auf alle Zeitänderungen anspringt:

define ntfy_ja_time notify auto(matik_uhrzeit_close_(min|max)|_jal_zeit_(werktags|wochenende)).* {my $DEF=InternalVal('auto_jal_steuerung','DEF','DEF error');;fhem("modify auto_jal_steuerung $DEF")}


Grüße
Igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Damian

#10
Zitat von: igami am 15 November 2014, 05:24:46
Du musst ein notify haben dass auf alle Zeitänderungen anspringt:

define ntfy_ja_time notify auto(matik_uhrzeit_close_(min|max)|_jal_zeit_(werktags|wochenende)).* {my $DEF=InternalVal('auto_jal_steuerung','DEF','DEF error');;fhem("modify auto_jal_steuerung $DEF")}


Grüße
Igami

oder einfach mit einem zusätzlichen DOIF statt notify:

define di_settime DOIF ([auto_jal_zeit_werktags] or [auto_jal_zeit_wochenende]) (modify auto_jal_steuerung [auto_jal_steuerung:&DEF])

attr di_settime do always


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

igami

Zitat von: Damian am 15 November 2014, 09:48:17
oder einfach mit einem zusätzlichen DOIF statt notify:

define di_settime DOIF ([auto_jal_zeit_werktags] or [auto_jal_zeit_wochenende]) (modify auto_jal_steuerung [auto_jal_steuerung:&DEF])

attr di_settime do always

Dann spendiere ich dem ganzen noch ein

attr di_settime wait 15

damit man in Ruhe erst mal alles einstellen kann.

Grüße
Igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

FunkOdyssey

Danke für die vielen wertvollen Tipps. Das scheint auch generell gut zu funktionieren. Nur zweifle ich die Timer an. Besonders die, welche eigentlich durch Sunset inkl. Variablen erstellt werden sollte.

Beispiel:

state: timer_1_c1
initialized: 16.11.2014 08:30:00|8

state: timer_2_c1
16.11.2014 00:00:00|8

state: timer_3_c1
initialized: 16.11.2014 09:30:00|7

state: timer_4_c1
initialized: 16.11.2014 00:00:00|7


Wahrscheinlich steht dort überall "00:00:00", da Sunset erst über Nach berechnet wird. Aber dann werden die Timer im Doif scheinbar nicht mehr nachträglich aktualisiert.

Oder könnte man das mit Twilight nachbauen? Dafür habe ich einen Dummy in meiner Konfiguration. Doch dann habe ich das "nicht vor...öffnen" und "spätestens bis..." nicht mehr bzw. ich weiß nicht, wie ich das integrieren soll.

Könnt ihr mit folgen? :-)

igami

#13
Ich habe das ganze nun mal nachgebaut und es funktioniert. Steht bei dir dein max vllt auf 00:00?
Wenn du die Zeiten normal im sunset angibst bekommst du die richtigen Zeiten?

Habe auch alle dummys zu einem gefasst

define d_jal dummy

attr d_jal setList
controlMode:manual,auto
doors:true,false
workday:6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30,10:00
weekend:6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30,10:00
min:16:00,16:30,17:00,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30
max:16:00,16:30,17:00,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30

attr d_jal webCmd controlMode:doors:workday:weekend:min:max

Readings:
2014-11-16 08:43:56   controlMode     auto
2014-11-16 08:41:45   doors           false
2014-11-16 08:08:35   max             23:00
2014-11-16 08:42:15   min             17:30
2014-11-16 08:43:56   state           controlMode auto
2014-11-16 08:43:45   weekend         6:45
2014-11-16 08:42:02   workday         6:45

zum readings setzen brauchst du dann noch einen notify

define ntfy_setreading notify d_.*
{
if(
($EVENT ~~ / /)
and
($EVENT !~ /: /)
)
{fhem("setreading $NAME $EVENT")}
}

das erste DOIF, welches sich um die Schaltzeiten kümmert:

define di_jal_1 DOIF
(
   [{ReadingsVal("d_jal","workday","10:00")}-{sunset("REAL",600,ReadingsVal("d_jal","min","16:30"),ReadingsVal("d_jal","max","22:00"))}|8]
or [{ReadingsVal("d_jal","weekend","10:00")}-{sunset("REAL",600,ReadingsVal("d_jal","min","16:30"),ReadingsVal("d_jal","max","22:00"))}|7]
)
  (
  IF ([d_jal:doors] eq "true")
    (set d_jal withdoors 100)
  ELSE
    (set d_jal withoutdoors 100)
  )
DOELSE
  (
  IF ([d_jal:doors] eq "true")
    (set d_jal withdoors 0)
  ELSE
    (set d_jal withoutdoors 0)
  )

das zweite DOIF, welches das erste aktualisiert oder disabled

define di_jal_2 DOIF
([d_jal] eq "controlMode auto")
  (attr di_jal_1 disable 0)
DOELSEIF
([d_jal] eq "controlMode manual")
  (attr di_jal_1 disable 1)
DOELSEIF
(  [d_jal:workday]
or [d_jal:weekend]
or [d_jal:min]
or [d_jal:max]
)
  (modify di_jal_1 [di_jal_1:&DEF])

attr di_jal_2 do always

attr di_jal_2 wait 1:1:1


Grüße
Igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Damian

Warum machst du das so kompliziert?

({my $DEF=InternalVal("di_jal_1","DEF","DEF error");;fhem("modify di_jal_1 $DEF")})

Wie ich vorhin gepostet habe, unterstützt DOIF außer Readings- und Stati- auch Internals-Angaben und das nicht nur in der Bedingung, sondern auch im Ausführungsteil. Also:

(modify auto_jal_1 [auto_jal_1:&DEF])

Das dürfte nicht nur kürzer, sondern auch einfacher für Perl-Nicht-Programmierer sein.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF