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
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
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.
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
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))
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
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?
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
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.
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
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
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
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? :-)
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
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
Habe das überlesen ::)
Aber du hast recht, ist wesentlich einfacher so.
Grüße
Igami
@Igami:
Ist das lauffähiger Code oder eher ein Beispiel?
Ich finde nirgends eine Defintion für di_jal_2.
Und heißt in deinem Beispiel die Jalousien-Structures auch "di_jal"? So heißt doch bereits der Dummy.
Ist das bewusst so gewählt oder nur ein Typo?
Am Rande:
Du hast ja alle Dummys zusammengefasst. Das gefällt mir sehr gut. Aber wie macht man die Werte dann konfigurierbar? In der GUI finde ich dann nichts.
Danke.
Zitat von: Funk.Odyssey am 16 November 2014, 13:05:14
Ist das lauffähiger Code oder eher ein Beispiel?
durch geringe änderungen lauffähig
im ausführenden Teil des di_jal_1 musst du das d_jal durch deine structure ersetzten.
Zitat von: Funk.Odyssey am 16 November 2014, 13:05:14
Ich finde nirgends eine Defintion für di_jal_2.
das di_jal_2 steht doch drin (nach dem Edit...) :P
Zitat von: Funk.Odyssey am 16 November 2014, 13:05:14
Und heißt in deinem Beispiel die Jalousien-Structures auch "di_jal"? So heißt doch bereits der Dummy.
Ist das bewusst so gewählt oder nur ein Typo?
der dummy heißt
d_jal
die DOIFs heißen
di_jal
Zitat von: Funk.Odyssey am 16 November 2014, 13:05:14
Am Rande:
Du hast ja alle Dummys zusammengefasst. Das gefällt mir sehr gut. Aber wie macht man die Werte dann konfigurierbar?
attr d_jal webCmd controlMode:doors:workday:weekend:min:max
Danke. Das hat mir sehr weitergeholfen.Meine Frage bzgl. der Namensgebung bezog sich auf folgende Zeilen. Natürlich habe ich hier meine Structures benutzt, aber das "set d_jal" verwirrt ein wenig.
IF ([d_jal:doors] eq "true")
(set d_jal withdoors 100)
ELSE
(set d_jal withoutdoors 100)
Zitat
attr d_jal webCmd controlMode:doors:workday:weekend:min:max
Jetzt wo ich am Rechner sitze, kann ich es auch konfigurieren. Es lag wohl am iOS, dass ich das nicht übers Tablet erkennen konnte. Dies werde ich später weiter verfolgen.
ich habe dieses hier mit Interesse verfolgt und frage deshalb, ich finde hier nur diverse Codeschnipsel
wenn ich nur einmal das Dummy eingebe bekomme ich schon jede Menge Fehler mit unbekanntem Kommando, mit den gesamten Code funktioniert das schon gar nicht.
Was ist denn am Code alles als Voraussetzung zu sehen damit ich das erst einmal anschauen kann wie das gesamte Konstrukt aussieht um es für meine Bedürfnisse anzupassen..?
hier mal die Fehler nach Unknown command controlMode:manual,auto, try help.
Unknown command doors:true,false, try help.
Unknown command 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, try help.
Unknown command 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, try help.
Unknown command 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, try help.
Unknown command 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, try help.
In den Code-Beispielen ist überall ein Zeilenumbruch enthalten.
Falls du es direkt in der fhem.cfg einfügst, dann hagelt es Fehlermeldungen. Bearbeitet man die DEFs, dann funktioniert das.
Ich habe es in der fhem.cfg eingefügt und überall ein \ am Zeilenende angehangen. Dabei hatte ich auch einige Zeilen übersehen, die für weitere Fehler sorgen.
Hmm. Im Moment stehe ich (mal wieder) ein wenig auf dem Schlauch.
Sobald ich im Reading irgendwelche Werte ändere, springen die anderen Auswahlfelder wieder auf die Default-Werte. Also bei den Uhrzeiten habe ich ständig wieder "06:30" in der Auswahl.
Im Log habe ich dazu noch folgendes:
Zitat
2014.11.16 14:22:19 2: di_jal_2: reading does not exist: [d_jal:workday]
2014.11.16 14:22:19 3: ntfy_setreading return value: Unknown command d_.*, try help.
das d_.* ist mir doppelt ins notify gerutscht, einmal raus nehmen
Der Code ist so formatiert, dass man ihn hier lesen kann, mit Zeilenumbrüchen kopieren und in der Commandozeile in FHEM einfügen kann. Die Zeilenumbrüche werden allerdings nicht in die DEF übernommen
Perfekt.
Nun läuft es von der Eingabe her stabiler. Ich hatte noch ein paar fehlerhafte Zeilenumbrüche im Code, die sich auch ein wenig merkwürdig verhalten haben. Mir fehlte ein Leerzeichen vor dem "\". :-)
Ich habe jetzt einige Timer mit dem Min|Max-Zeiten.
state | initialized | 2014-11-16 14:38:32 |
timer_1_c1 | 17.11.2014 08:00:00|8 | 2014-11-16 14:38:32 |
timer_2_c1 | 16.11.2014 17:00:00|8 | 2014-11-16 14:38:32 |
timer_3_c1 | 17.11.2014 10:00:00|7 | 2014-11-16 14:38:32 |
timer_4_c1 | 16.11.2014 17:00:00|7 | 2014-11-16 14:38:32 |
Es scheint fast so, als wären die sunset()-Zeiten noch nicht enthalten.
Update: Irgendetwas ist merkwürdig. Mal stehen die richtigen Sonnenuntergangszeiten drinnen. Dann mal wieder nicht.
Scheinbar werden die Default-Werte in den Timern gespeichert, wenn ich mit die Uhrzeiten ändere.
Und irgendetwas anderes löst sporadisch das Speichern der Sonnenuntergangszeiten aus.
Ich kann es noch nicht 100%ig nachstellen.
Ich möchte, dass die Jalousien in der Woche um 08:00 Uhr hochgehen sollen. Und am Wochenende um 10:00. Runterfahren soll zum Zeitpunkt des Sonnenuntergangs stattfinden.
Irgendwie werden die DOIF-Timer scheinbar durcheinandergewürfelt. Hier habe ich zwar nun die Sonnenuntergangszeit, aber werktags eine falsche Hochfahrzeit.
state | initialized | 2014-11-16 14:53:28 |
timer_1_c1 | 17.11.2014 10:00:00|8 | 2014-11-16 14:53:28 |
timer_2_c1 | 16.11.2014 16:43:16|8 | 2014-11-16 14:53:28 |
timer_3_c1 | 17.11.2014 10:00:00|7 | 2014-11-16 14:53:28 |
timer_4_c1 | 16.11.2014 16:43:16|7 | 2014-11-16 14:38:32 |
Der aktuelle Code sieht wie folgt aus:
Zitat
define d_jal dummy
attr d_jal group Jalousiensteuerung
attr d_jal room Automation
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
define ntfy_setreading notify d_.* \
{ \
if( \
($EVENT ~~ / /) \
and \
($EVENT !~ /: /) \
) \
{fhem("setreading $NAME $EVENT")} \
}
attr ntfy_setreading group Automation
attr ntfy_setreading room Automation
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 alle_jalousien_mit_tueren 100) \
ELSE \
(set alle_jalousien_ohne_tueren 100) \
) \
DOELSE \
( \
IF ([d_jal:doors] eq "true") \
(set alle_jalousien_mit_tueren 0) \
ELSE \
(set alle_jalousien_ohne_tueren 0) \
)
attr di_jal_1 disable 0
attr di_jal_1 group Automation
attr di_jal_1 room Automation
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 group Automation
attr di_jal_2 room Automation
attr di_jal_2 wait 1:1:1
Jetzt habe ich herausgefunden, warum ich immer wieder die Default-Werte von ReadingsVal im Timer habe.
Sobald ich eine Bearbeiten der fhem.cfg durchführe, werden die Timer teilweise zurückgesetzt.
Sonnenuntergang überlebt, aber meine (eigentlich individualisierten) Hochfahrzeiten (die auch im Dummy noch existieren) fehlen in den Timern.
Hallo,
ZitatSobald ich eine Bearbeiten der fhem.cfg durchführe,
Das ist so, ja.
Nach einem save fhem.cfg liest FHEM die komplette Konfig neu ein daher werden deine Timer wieder auf die Defaultwerte gesetzt.
Warum bearbeitest du die fhem.cfg direkt?
Codes und Geräte lassen sich wunderbar über das jeweilige DEF bearbeiten und sämtliche Timer bleiben davon unberührt.
Grüße
So langsam habe ich das verstanden.
Ich muss mir mal etwas ausdenken, wie die Timer einen Neustart überleben.
Im Moment bin ich einfach zu aktiv in Fhem, um alles über die GUI zu machen. :-)
Ich habe den oben - eigentlich bewusst zusammengefassten - Dummy wieder in mehrere Dummys zerlegt. Code-technisch ist das zwar sauberer, aber mit der Gestaltung im Frontend komme ich dann nicht klar. Mir fehlten die Aliase und die bunten Icons.
Hallo,
ZitatIch muss mir mal etwas ausdenken, wie die Timer einen Neustart überleben.
Äh, wozu neu starten :o
ZitatIm Moment bin ich einfach zu aktiv in Fhem, um alles über die GUI zu machen. :-)
Na denkst du ich mach nichts in meiner Konfig ???
Naja, nicht direkt - ich mach alles über die FHEM-Oberfläche.
Und ich bin zur Zeit meine Hardware von FS20 auf HM am umstellen - ich hab meine fhem.cfg noch nicht einmal direkt dafür bearbeitet (wozu auch 8) ).
Das mach ich alles bequem über die FHEM-Oberfläche.
Versuch es mal und du wirst sehen du gewöhnst dich schneller dran als du dachtest.
Grüße
Wie ich bereits erwähnte, werden die DOIF-Zeiten nach einem FHEM-Neustart (egal warum) immer wieder auf die Default-Werte gesetzt. Die eingestellten Parameter in den Readings werden erst nach einer Änderung ausgelesen und in den Timer genutzt.
Ich bin im Forum über eine Möglichkeit gestolpert, die das möglicherweise gehen soll. Quick&Dirty sieht es folgendermaßen aus:
define ntfy_setreading_auto_jal2 notify global:INITIALIZED \
{ \
if( \
($EVENT ~~ / /) \
and \
($EVENT !~ /: /) \
) \
{fhem("setreading $NAME $EVENT")} \
}
Das funktioniert nur leider nicht. Ich befürchte, dass es nicht reicht, wenn ich einfach nur das Suchmuster ändere, oder?
Hat jemand einen Tipp? Danke.
Zitat von: Funk.Odyssey am 06 Dezember 2014, 12:33:39
Hat jemand einen Tipp? Danke.
Das snippet kommt mir doch bekannt vor ;)
Guck dir mal die Events an auf die das notify reagiert.
Grüße
Igami
Wie geht das bzw. wie mache ich das?
Steht doch in der DEF von deinem notify ;)
define ntfy_setreading_auto_jal2 notify global:INITIALIZED \
{ \
if( \
($EVENT ~~ / /) \
and \
($EVENT !~ /: /) \
) \
{fhem("setreading $NAME $EVENT")} \
}
$NAME = global
$EVENT = INITIALIZE
Und dann guck dir an, was das notify macht. Ist denke ich nicht das was du möchtest.
Aber die Frage ist warum die readings nach einem neustart weg sind. Solltest du das nicht herausfinden können pass doch einfach die default werde im DOIF an.
Grüße
Igami