Ich blicke wieder einmal nicht durch, dabei gibt es so viele Beispiele und Erklärungen. Vieleicht denke ich zu kompliziert.
Ich möchte meine Rolläden runterfahren wenn der Helligkeitswert vom "HM-Sen-LI-O" kleiner-gleich 0.5 ist und in der Zeit von 19:00 bis 22:00 Uhr.
wenn um oder nach 22:00 Uhr der Helligkeitswert <= 0.5 immer noch nicht erreicht ist sollen die Rollos aber um 22:00 Uhr trotzdem runterfahren.
Das habe ich bis jetzt gemacht:
ein Dummy mit meinen gewünschten Werten angelegt
Internals:
CFGFN
NAME Rollo.grp_4.zu
NR 10470
STATE Gruppe 4
TYPE dummy
Readings:
2017-04-22 07:22:55 Rollos OG.Rollo.Henna.Fenster,OG.Rollo.Shirin.Fenster,OG.Rollo.Buero.Tuer
2017-04-22 07:11:44 bis 22:00:00
2017-04-22 07:11:44 brightness 0.5
2017-04-21 10:50:35 state Gruppe 4
2017-04-22 07:11:44 von 19:00:00
Attributes:
readingList von bis brightness Rollos
room test
dazu versuche ich jetzt ein DOIF zu erstellen:
define GRP_4_Rollos DOIF ([Brightness_Sensor:brightness] <= [Rollo.grp_4.zu:brightness] and time >= [Rollo.grp_4.zu:von] and time <= [Rollo.grp_4.zu:bis]) (set [Rollo.grp_4.zu:Rollos] zu)
DOELSEIF (time >= [Rollo.grp_4.Zeit.runter:bis]) (set set [Rollo.grp_4.zu:Rollos] zu)
Internals:
CFGFN
DEF ([Brightness_Sensor:brightness] <= [Rollo.grp_4.zu:brightness] and time >= [Rollo.grp_4.zu:von] and time <= [Rollo.grp_4.zu:bis]) (set [Rollo.grp_4.zu:Rollos] zu)
DOELSEIF (time >= [Rollo.grp_4.Zeit.runter:bis]) (set [Rollo.grp_4.zu:Rollos] zu)
NAME GRP_4_Rollos
NR 10925
NTFY_ORDER 50-GRP_1_Rollos
STATE initialized
TYPE DOIF
Readings:
2017-04-22 07:57:06 cmd 0
2017-04-22 07:57:06 state initialized
Condition:
0 ReadingValDoIf($hash,'Brightness_Sensor','brightness') <= ReadingValDoIf($hash,'Rollo.grp_4.zu','brightness') and time >= ReadingValDoIf($hash,'Rollo.grp_4.zu','von') and time <= ReadingValDoIf($hash,'Rollo.grp_4.zu','bis')
1 time >= ReadingValDoIf($hash,'Rollo.grp_4.Zeit.runter','bis')
Devices:
0 Brightness_Sensor Rollo.grp_4.zu
1 Rollo.grp_4.Zeit.runter
all Brightness_Sensor Rollo.grp_4.zu Rollo.grp_4.Zeit.runter
Do:
0:
0 set [Rollo.grp_4.zu:Rollos] zu
1:
0 set [Rollo.grp_4.zu:Rollos] zu
2:
Helper:
globalinit 1
last_timer 0
sleeptimer -1
Itimer:
Readings:
0 Brightness_Sensor:brightness Rollo.grp_4.zu:brightness Rollo.grp_4.zu:von Rollo.grp_4.zu:bis
1 Rollo.grp_4.Zeit.runter:bis
all Brightness_Sensor:brightness Rollo.grp_4.zu:brightness Rollo.grp_4.zu:von Rollo.grp_4.zu:bis Rollo.grp_4.Zeit.runter:bis
Regexp:
All:
State:
Attributes:
room test
Kann mir da bitte jemand auf die Sprünge helfen?
Besten Dank.
Denn Sinn des Dummies habe ich nicht verstanden, OK Zeiten/Helligkeitswerte anpassen. Rollos zusammenfassen kannst Du per Strucure (https://fhem.de/commandref_DE.html#structure), oder über geschickte Benennung der Rollos und Regex. Zeiten/Helligkeitswerte kannst Du im DOIF auch direkt hinterlegen.
Im Bedingungsteil denke ich, wird
and time >= [Rollo.grp_4.zu:von] and time <= [Rollo.grp_4.zu:bis]
nicht funktionieren. Was ist "time", es ist kein Gerät o.ä. (es fehlen die [] um time)? Der Ausführungsteil sieht auch nicht ganz Regelkonform aus, hier kannst Du IIRC nicht auf eine Kombination Gerät:READING ([Rollo.grp_4.zu:Rollos]) zurückgreifen (-> Lösung Structure oder Regex).
Als Anregung mal mein Ansatz:
DOELSEIF
## 08 - Sichtschutz Kueche und Balkon Abends
([sensor.licht:brightness] < '50' and [sensor.licht:brightness] > '1.0')
(set rollladen.og.wz.balkon 25, set rollladen.og.kueche.* 25)
DOELSEIF
## 09 - Alle Rolllaeden runter (Terrassentuer ist zu)
([?Buderus:OutdoorTemp] > "0.0" and [sensor.licht:brightness] <= '1.0' and [?tfk.og.terrasse] eq "closed")
(set rollladen.* 25)
DOELSEIF
## 10 - Alle Rolllaeden runter, bis auf Terrassentür (Terrassentür ist offen)
([?Buderus:OutdoorTemp] > "0.0" and [sensor.licht:brightness] <= '1.0' and [?tfk.og.terrasse] eq "open")
(set rollladen.eg.* 25, set rollladen.og.kueche.* 25, set rollladen.og.ez 25, set rollladen.og.wz.* 25)
Deine Zeitliche Bedingung müsste hier noch dazugebaut werden, in der Art
[?19:00-22:00] and ... ## Rest des DOIF Bedingungszweiges, das Fragezeichen bedeutet, die Uhrzeit wird nur abgefragt, triggert aber nicht.
Deine Bedingung "um 22 Uhr in jedem Fall Rollläden runter" könnte durch einen weiteren DOESLEIF Zweig ([22:00])(set ROLLLADEN zu) festgelegt werden.
Soviel mal als Denkanstoß. Ansonsten lohnt ein Blick in die Commandref zu DOIF, damian hat hier echt viel dokumentiert und niedergeschrieben.
Vielen Dank ersteinmal für die Antwort.
ich möchte auf keinen fall feste Werte wie Uhrzeit etc. in der DOIF haben, ich möchte das später mal dynamisch im tablet ui einstellen bzw. ändern können.
Rollos mit Structure zusammenfassen ist klar, mache ich auch später vieleicht, aber mit (set [Rollo.grp_2:Rollos] zu) gehts ja auch....
mit "time" wollte ich eigendlich die aktuelle Uhrzeit haben.... so einfach ist es dann wohl doch nicht.
ich habe es jetzt ersteinmal mit $hour umgebaut, im dummy dann die Stunden eingetragen und nicht die ganze Uhrzeit mit Minuten und Sekunden.
So funktioniert es leider nur Teilweise, setze ich das Attribut "DO always" und mache die Rollos im angegeben Zeitraum manuell wieder auf, gehen sie wieder zu solbald der Helligkeitssensor triggert
DOIF
([Brightness_Sensor:brightness] <= [Rollo.grp_2:zu_brightness] and $hour >= [Rollo.grp_2:zu_von] and $hour <= [Rollo.grp_2:zu_bis]) (set [Rollo.grp_2:Rollos] zu) DOELSEIF ($hour >= [Rollo.grp_2:zu_bis]) (set [Rollo.grp_2:Rollos] zu)
DUMMY
Internals:
CFGFN
NAME Rollo.grp_2
NR 10446
STATE Gruppe 2
TYPE dummy
Readings:
2017-04-22 07:14:12 Rollos EG.Rollo.Buero.Fenster,EG.Rollo.Esszimmer.Fenster,EG.Rollo.Wohnzimmer.Fenster
2017-04-22 08:40:09 auf_bis 7
2017-04-22 08:19:22 auf_brightness 0.5
2017-04-22 08:39:56 auf_von 6
2017-04-21 10:49:12 state Gruppe 2
2017-04-22 12:00:57 zu_bis 22
2017-04-22 12:03:12 zu_brightness 0.5
2017-04-22 12:09:56 zu_von 19
Attributes:
readingList auf_von auf_bis auf_brightness zu_von zu_bis zu_brightness Rollos
room test
setList auf_von auf_bis auf_brightness zu_von zu_bis zu_brightness Rollos
([Brightness_Sensor:brightness] <= [Rollo.grp_2:zu_brightness] and [?[Rollo.grp_2:zu_von]-[Rollo.grp_2:zu_bis]] or [Rollo.grp_2:zu_bis]) (set [Rollo.grp_2:Rollos] zu) DOELSEIF ([00:00])
besten Dank !
aber wenn ich das so übernehme gehen die Rollos jedes mal runter sobald der Bightness.Sensor die helligkeit übermittelt.
im Dummy habe ich folgendes:
zu_bis 23:00
zu_brightness 0.5
zu_von 20:00
und der Brightness.Sensor meldet etwas um die 600
was macht denn das "DOELSEIF ([00:00])" genau
Zitat von: ms_steini am 22 April 2017, 16:53:00
ui das sieht fein aus, besten Dank !
was macht denn das "DOELSEIF ([00:00])" genau
Da fehlten noch klammern:
([Brightness_Sensor:brightness] <= [Rollo.grp_2:zu_brightness] and [?[Rollo.grp_2:zu_von]-[Rollo.grp_2:zu_bis]] or [[Rollo.grp_2:zu_bis]]) (set [Rollo.grp_2:Rollos] zu) DOELSEIF ([00:00])
Das DOIF-Modul arbeitet mit Zuständen und wiederholt standardmäßig (ohne do always) den gleichen Befehl nicht.
Um Mitternacht wechselt das Modul in einen anderen Zustand und wird damit für den nächsten Tag scharfgestellt.
super Danke, habe ich verstanden...
mir fällt aber gerade auf das wenn der Brightness.Sensor zur angebenen Zeit im Dummy "Rollo.grp_2:zu_bis" NICHT <= den im Dummy angebenen Wert hat,
dürften die Rollos ja überhaupt nicht runterfahren,
die Bedinngung ([Brightness_Sensor:brightness] <= [Rollo.grp_2:zu_brightness] trift ja dann garnicht zu, egal wieviel Uhr es ist
Zitat von: ms_steini am 22 April 2017, 17:41:29
super Danke, habe ich verstanden...
mir fällt aber gerade auf das wenn der Brightness.Sensor zur angebenen Zeit im Dummy "Rollo.grp_2:zu_bis" NICHT <= den im Dummy angebenen Wert hat,
dürften die Rollos ja überhaupt nicht runterfahren,
die Bedinngung ([Brightness_Sensor:brightness] <= [Rollo.grp_2:zu_brightness] trift ja dann garnicht zu, egal wieviel Uhr es ist
deswegen wird mit or um 22:00 Uhr auf jeden Fall die Bedingung wahr und dein Rollladen fährt runter.
Guten Morgen,
ich glaube ich rücke dem Verstehen von "DOIF" immer näher, habe aber immernoch kleine Verständnisprobleme, ganz besonders bei den Klammern.
Die Commandref DOIF (https://fhem.de/commandref_DE.html#DOIF) ist schon sehr hilfreich, vielen dank dafür
Ich habe jetzt ein DOIF versucht zu erweitern:
Rollo ZU bei Helligkeit <= 0.5, zwischen 19:00 und 22:00 Uhr, nicht später als 22:00 Uhr
Rollo AUF bei Helligkeit >= 0.5, zwischen 06:30 und 07:15 Uhr an Arbeitstagen, nicht später als 07:15 Uhr, und NICHT wenn ich Nachtschicht habe
Rollo AUF um 09:00 Uhr am Wochenende u. Feiertage, aber NICHT wenn ich Nachtschicht habe
Rollo AUF um 13:00 Uhr wenn ich Nachtschicht habe an jedem Tag inkl. Wochenende und Feiertage
([Brightness_Sensor:brightness] <= [Rollo.grp_5:zu_brightness] and [?[Rollo.grp_5:zu_von]-[Rollo.grp_5:zu_bis]] or [[Rollo.grp_5:zu_bis]]) (set [Rollo.grp_5:Rollos] zu)
DOELSEIF ([Brightness_Sensor:brightness] >= [Rollo.grp_5:auf_brightness] and [Schichtplan_Nacht] == 0 and [?[Rollo.grp_5:auf_von]-[Rollo.grp_5:auf_bis]|AT] or [[Rollo.grp_5:auf_bis]|AT] and [Schichtplan_Nacht] == 0) (set [Rollo.grp_5:Rollos] auf)
DOELSEIF ([?[Rollo.grp_5:auf_WE]|WE] and [Schichtplan_Nacht] == 0) (set [Rollo.grp_5:Rollos] auf)
DOELSEIF ([?[Rollo.grp_5:auf_Nachtdienst]] and [Schichtplan_Nacht] == 1) (set [Rollo.grp_5:Rollos] auf)
Schichtplan_Nacht ist ein Dummy welches durch ein Notify gesetzt wird
Nachtschicht { fhem "set Schichtplan_Nacht " . (ReadingsVal("Nachtschicht", "modeStart", "") =~ "_Nacht" ? 1:0) }
Nachtschicht ist eine ICAL (.ics Datei)
Was mir jetzt komisch vorkommt ist die erste DOELSEIF und ob das [Schichtplan_Nacht] == 0 noch in extra Klammern muß ?
Nein muss es nicht.
Die doppelten eckigen Klammern, brauchst du nur bei indirekten Zeitangaben - also eine [] weil Zeitangaben immer in eckigen Klammern stehen müssen und die zweite [] für das [Device:Reading] in dem die Zeit steht. Das '[Rollo.grp_5:zu_bis]' wir ja z.B. in 22:00 aufgelöst und die 22:00 muss in [] eckigen Klammern stehen. Daher [[...]] oder wenn es nicht triggern soll [?[...]]
Dann gibt es da noch runde Klammern bei and/or Verknüpfungen von Bedingungen. Ist wie bei Punkt- vor Strichrechnung - das and bindet stärker als das or - das and ist also die Punkt- und das or die Strichrechnung.
Zitat von: automatisierer am 24 April 2017, 07:17:05
Nein muss es nicht.
Die doppelten eckigen Klammern, brauchst du nur bei indirekten Zeitangaben - also eine [] weil Zeitangaben immer in eckigen Klammern stehen müssen und die zweite [] für das [Device:Reading] in dem die Zeit steht. Das '[Rollo.grp_5:zu_bis]' wir ja z.B. in 22:00 aufgelöst und die 22:00 muss in [] eckigen Klammern stehen. Daher [[...]] oder wenn es nicht triggern soll [?[...]]
Dann gibt es da noch runde Klammern bei and/or Verknüpfungen von Bedingungen. Ist wie bei Punkt- vor Strichrechnung - das and bindet stärker als das or - das and ist also die Punkt- und das or die Strichrechnung.
Hallo automatisierer,
dann müsste mein DOIF ja richtig sein.
nur zur Sicherheit im zweiten DOELSEIF:
DOELSEIF ([Brightness_Sensor:brightness] >= 0.5
AND [Schichtplan_Nacht] == 0
AND [?[06:30]-[07:15]|AT]
OR [[07:15]|AT]
AND [Schichtplan_Nacht] == 0) (set [Rollo.grp_5:Rollos] auf)
in Klartext für mich:
bei Helligkeit >= 0.5
und wenn ich
KEINE Nachtschicht habe und in der Zeit von 06:30 bis 07:15 Uhr an Arbeitstagen geht das Rollo auf
ODER spätestens um 07:15 Uhr
und wenn ich
KEINE Nachtschicht habe
Wenn dem so ist, habe ich ja doch ein wenig verstanden.
jo, sollte so sein.
and und or müssen natürlich klein geschrieben werden... ansonsten dürfte das nur auf einen Fehler hinaus laufen...
besten DANK
(and or habe ich nur zum hervorheben hier im Text groß geschrieben)
irgendwie habe ich da doch noch einen Fehler drin.
Rollos sollten eigendlich heute "Sonntag" um 09:00 Uhr aufgegangen sein... sind sie aber nicht
Das DoIf stand noch auf "cmd_1" von gestern abend wo die Rollos heruntergefahren sind.
ich vermute da stimmt wieder etwas mit den Klammern nicht
DUMMY
NAME Rollo.grp_4
NR 377
STATE Gruppe 4
TYPE dummy
Readings:
2017-04-22 07:22:55 Rollos OG.Rollo.Henna.Fenster,OG.Rollo.Shirin.Fenster,OG.Rollo.Buero.Tuer
2017-04-30 10:03:31 auf_WE 09:00
2017-04-25 11:02:43 auf_bis 07:15
2017-04-22 17:28:52 auf_brightness 0.5
2017-04-22 17:28:52 auf_von 06:30
2017-04-25 08:19:48 state Gruppe 4
2017-04-22 17:28:52 zu_bis 22:00
2017-04-22 17:28:52 zu_brightness 0.5
2017-04-22 17:28:52 zu_von 19:00
DOIF
([Brightness_Sensor:brightness] <= [Rollo.grp_4:zu_brightness] and [?[Rollo.grp_4:zu_von]-[Rollo.grp_4:zu_bis]] or [[Rollo.grp_4:zu_bis]]) (set [Rollo.grp_4:Rollos] zu)
DOELSEIF (([Brightness_Sensor:brightness] >= [Rollo.grp_4:auf_brightness] and [NRW_Ferientag] == 0) and [?[Rollo.grp_4:auf_von]-[Rollo.grp_4:auf_bis]|AT] or [[Rollo.grp_4:auf_bis]|AT] and [NRW_Ferientag] == 0) (set [Rollo.grp_4:Rollos] auf)
DOELSEIF ([?[Rollo.grp_4:auf_WE]|WE] or [NRW_Ferientag] == 1) (set [Rollo.grp_4:Rollos] auf)