Hi Leute,
ich steh grad auf dem Schlauch... DOIF raubt mir immer die Nerven... ganz einfaches Beispiel:
([16:00-22:00] and [BM_Garage04:luminance:d] < 100) (set Aussenbeleuchtung on) DOELSE (set Aussenbeleuchtung off)
Ich möchte, dass wenn in der Zeit zwischen 16 und 22 Uhr die Außensensor sagt es ist dunkel, dass die Außenbeleuchtung angeschalten wird, diese aber immer um 22 Uhr ausgeht.
Jetzt ist der Außensensor aber direkt unter eine Lampe, die durch einen Bewegungsmelder angeschaltet wird.
Also zwischendruch wird die "luminance" mal wieder größer > 100. Dann geht das Licht aus, dann wieder an...
Ich möchte aber das der Befehl quasi nur einmal ausgeführt wird. repeatcmd = 0 hilft nicht....
Habt ihr da einen Rat?
Ist es überhaupt sinnvoll die Zeit mit reinzubringen? es wird ja abends nur einmal dunkel, aber dann müsste ich die Zeit im DOELSE setzen fürs ausschalten, richtig?!
VG+Danke
René
Ich würde mit
([16:00-22:00] and [BM_Garage04:luminance:d] < 100) (set Aussenbeleuchtung on) DOELSEIF ([22:00]) (set Aussenbeleuchtung off)
probieren
Moinsen, danke! Ich glaub das wars... es läuft... Das DOELSIF is da echt besser als DOELSE...
Brauch ich das repeatcmd = 0 jetzt noch?
VG
René
Es steht in der Einleitung der Commmandref zu DOIF:
ZitatDas DOIF-Modul arbeitet mit Zuständen. Jeder Ausführungszweig DOIF/DOELSEIF..DOELSEIF/DOELSE stellt einen eigenen Zustand dar (cmd_1, cmd_2, usw.). Das Modul merkt sich den zuletzt ausgeführten Ausführungszweig und wiederholt diesen standardmäßig nicht. Ein Ausführungszweig wird erst dann wieder ausgeführt, wenn zwischenzeitlich ein anderer Ausführungszweig ausgeführt wurde, also ein Statuswechsel des DOIF-Moduls stattgefunden hat. Dieses Verhalten ist sinnvoll, um zu verhindern, dass zyklisch sendende Sensoren (Temperatur, Feuchtigkeit, Helligkeit, usw.) zu ständiger Wiederholung des selben Befehls oder Befehlsabfolge führen.
In deinem Fall brauchst du keinerlei Attribute zu setzen.
Moinsen,
danke für die schnelle Antwort. Ich nutze ja Fhem seid 4 Jahren... aber das DOIF / notify etc... puhhh damit tu ich mich immer wieder schwer...
Hi Damian,
kannst du mir bei einem anderen DOIF nochmal auf die Sprünge helfen?
Thema "Urlaubssteuerung über Kalender"
Ich habe einen Kalenderview_Rene für meinen Kalender und ein DOIF, welches überprüft, ob ein Eintrag für Urlaub vorhanden ist.
Im CLAVIEW sieht der Eintrag wie folgt aus:
today_001_summary Urlaub
Mein DOIF funktioniert und man sieht es auch im Ereignismonitor
(["Kalenderview_Rene:today_\d\d\d_summary.*[U|u]rlaub.*"]) (set Urlaub on) DOELSE (set Urlaub off)
Der Dummy Urlaub wird eingeschaltet.
Lösche ich den Eintrag Urlaub raus und der Kalenderview aktualisert sich nach einem bestimmten Intervall, dann geht das DOIF aber nicht in den DOELSE Zweig, auch wenn kein Eintrag mit "Urlaub" mehr vorhanden ist.
Wenn ich das DOIF manuell mit "checkall" ausführe gehts. Von alleine wird der DOELSE Zweig aber nicht ausgeführt...
VG René
ZitatLösche ich den Eintrag Urlaub raus und der Kalenderview aktualisert sich nach einem bestimmten Intervall,
Führt das zu einem Event von Kalenderview_Rene:today_\d\d\d_summary?
Hi,
wenn ich den Kalenderview manuell update, dann für deine Frage zu keinem Event, aber wenn ich ein .* hinten anfüge, dann kommen Events :
also:
Kalenderview_Rene:today_\d\d\d_summary
=> kein Eintrag im Eventlog
Kalenderview_Rene:today_\d\d\d_summary.*
=> diese Einträge
2020-11-10 14:24:00 CALVIEW Kalenderview_Rene today_001_summary: Restmüll
2020-11-10 14:24:00 CALVIEW Kalenderview_Rene today_002_summary: Hans Geburtstag
VG
René
Diese Art der Abfrage ["Device:event"] kann niemals in den DOELSE-Fall laufen, da sie entweder triggert beim passenden Ereignis (DO-Fall) oder sie triggert gar nicht, wenn es kein passendes Ereignis gibt. Dh. sie kann nicht triggern und falsch sein.
Hi Damian,
sowas ähnliches hatte ich mir gedacht, ist das Event da... passt es, aber sonst nicht...
hast du für mich den entscheidenen Hinweis?
Das Ereignis ist ja :
2020-11-10 20:02:41 CALVIEW Kalenderview_Rene today_001_summary: Hans Geburtstag
2020-11-10 20:02:41 CALVIEW Kalenderview_Rene today_002_summary: Restmüll
2020-11-10 20:02:41 CALVIEW Kalenderview_Rene today_003_summary: Urlaub
Also entwender ich brauch ein ! passt nicht für meinen String
oder einen Stringvergleich... es funktioniert doch sowas hier mit Zahlen..
Es soll aus einem Reading, das z. B. ein Prozentzeichen beinhaltet, nur der Zahlenwert für den Vergleich genutzt werden:
define di_heating DOIF ([adjusting:actuator:d] < 10) (set heating off) DOELSE (set heating on)
Wie komme ich mit DOIF Device:Event an Urlaub ran?! also quasi an EVENTPART1
Also sowas hier in der Art...
["Kalenderview_Rene:today_\d\d\d_summary:.*] eq "Urlaub")
Wenn es dann kein Event mehr gibt, welches auf Urlaub passt, dann wäre das doch der DOELSE...
VG
René
Zitat von: fireball am 10 November 2020, 21:34:59
Hi Damian,
sowas ähnliches hatte ich mir gedacht, ist das Event da... passt es, aber sonst nicht...
hast du für mich den entscheidenen Hinweis?
Das Ereignis ist ja :
2020-11-10 20:02:41 CALVIEW Kalenderview_Rene today_001_summary: Hans Geburtstag
2020-11-10 20:02:41 CALVIEW Kalenderview_Rene today_002_summary: Restmüll
2020-11-10 20:02:41 CALVIEW Kalenderview_Rene today_003_summary: Urlaub
Also entwender ich brauch ein ! passt nicht für meinen String
oder einen Stringvergleich... es funktioniert doch sowas hier mit Zahlen..
Es soll aus einem Reading, das z. B. ein Prozentzeichen beinhaltet, nur der Zahlenwert für den Vergleich genutzt werden:
define di_heating DOIF ([adjusting:actuator:d] < 10) (set heating off) DOELSE (set heating on)
Wie komme ich mit DOIF Device:Event an Urlaub ran?! also quasi an EVENTPART1
Also sowas hier in der Art...
["Kalenderview_Rene:today_\d\d\d_summary:.*] eq "Urlaub")
Wenn es dann kein Event mehr gibt, welches auf Urlaub passt, dann wäre das doch der DOELSE...
VG
René
In diesem Fall solltest du besser Readings abfragen, die kannst du auf Inhalt abfragen.
Das geht dann aber nicht mit Regex.
z. B. (Kalenderview_Rene:today_001_summary] eq "Hans Geburtstag")...
Ok, aber ich brauch bei der Variante für die 3 Zahlen einen Platzhalter, sowas wie ein ddd oder ... Bei den regex.
Vg Rene
Zitat von: fireball am 10 November 2020, 22:06:29
Ok, aber ich brauch bei der Variante für die 3 Zahlen einen Platzhalter, sowas wie ein ddd oder ... Bei den regex.
Vg Rene
Platzhalter ist ja bereits regex - das geht an der Stelle nicht.