Hallo,
ich verstehe gerade nicht, warum das DOIF heute (Sonntag) um 18:50 triggert. Eigentlich soll das doch nur von Mo-Do. (1234) triggern. Was habe ich hier falsch gemacht?
(([18:50-21:00|1234] or
[08:30-21:30|6] or
[08:30-21:00|0]) and [?hl.01.Feiertag] eq "none" and [?hl.01.Geburtstag] eq "none" or
[08:30-21:00] and [?hl.01.Feiertag] ne "none" or
[14:30-21:00] and [?hl.01.Geburtstag] ne "none" or
[14:30-21:30|8] and ($wday == 5 or [?hl.01.Feiertag:tomorrow] ne "none"))
(set GA.ss.SA.Wasserspiel on)
DOELSE
(set GA.ss.SA.Wasserspiel off)
Spartacus
Zitat von: Spartacus am 05 April 2015, 18:53:13
Hallo,
ich verstehe gerade nicht, warum das DOIF heute (Sonntag) um 18:50 triggert. Eigentlich soll das doch nur von Mo-Do. (1234) triggern. Was habe ich hier falsch gemacht?
(([18:50-21:00|1234] or
[08:30-21:30|6] or
[08:30-21:00|0]) and [?hl.01.Feiertag] eq "none" and [?hl.01.Geburtstag] eq "none" or
[08:30-21:00] and [?hl.01.Feiertag] ne "none" or
[14:30-21:00] and [?hl.01.Geburtstag] ne "none" or
[14:30-21:30|8] and ($wday == 5 or [?hl.01.Feiertag:tomorrow] ne "none"))
(set GA.ss.SA.Wasserspiel on)
DOELSE
(set GA.ss.SA.Wasserspiel off)
Spartacus
Ganz einfach, weil um 18:50 die ganze Bedingung wegen des ersten Intervalls ausgewertet wird und [14:30-21:00] and [?hl.01.Geburtstag] ne "none" wahrscheinlich wahr ist ;)
Gruß
Damian
Hi Damian,
verstehe ich nicht! Wieso wird diese Bedingung [18:50-21:00|1234]
von [14:30-21:00] and [?hl.01.Geburtstag] ne "none"
ausgehebelt? zumal
[14:30-21:00] and [?hl.01.Geburtstag] ne "none"
heute nicht wahr ist und" hl.01.Geburtstag" auf "none" steht!
Kannst du das noch mal für DAUs erklären?
Spartacus
Zitat von: Spartacus am 05 April 2015, 19:30:35
Hi Damian,
verstehe ich nicht! Wieso wird diese Bedingung [18:50-21:00|1234]
von [14:30-21:00] and [?hl.01.Geburtstag] ne "none"
ausgehebelt? zumal
[14:30-21:00] and [?hl.01.Geburtstag] ne "none"
heute nicht wahr ist und" hl.01.Geburtstag" auf "none" steht!
Kannst du das noch mal für DAUs erklären?
Spartacus
stimmt, da steht ja "ne" und du hast wahrscheinlich heute keinen Geburtstag, daher ist dieser Teil wohl nicht wahr, dafür aber : [08:30-21:00] and [?hl.01.Feiertag] ne "none"
Das Problem ist: du hast eine recht lange Bedingung mit vielen or-Teilen. Es ist aber eben nur
eine Bedingung, die in ihrer vollen Größe immer ausgewertet wird, wenn irgendein Timer, der darin vorkommt zuschlägt.
Zukünftig wird man auch mehrere völlig unabhängige Bedingungen für ein Kommando angeben können - deine or-Teile sind jedoch nicht von einander unabhängig, weil sie in einer Bedingung stecken.
Gruß
Damian
Hm!
so ganz kappiert habe ich das noch nicht!
Eigentlich sieht die abzubildende Funktionalität sehr einfach aus, dachte ich zumindest!
- Mo-Do von 17:00 -21:00
- Fr, an Geburtstagen und vor Feiertagen von 14:00-21:00
- Sa, So und an Feiertagen von 08:30 bis 21:30
Wäre es besser, das Ein-und Ausschalten getrennt zu verarbeiten?
Oder wie wäre hier ein korrekter Ansatz? Hast Du noch eine Idee?
Christian
Zitat von: Spartacus am 05 April 2015, 20:08:35
Hm!
so ganz kappiert habe ich das noch nicht!
Eigentlich sieht die abzubildende Funktionalität sehr einfach aus, dachte ich zumindest!
- Mo-Do von 17:00 -21:00
- Fr, an Geburtstagen und vor Feiertagen von 14:00-21:00
- Sa, So und an Feiertagen von 08:30 bis 21:30
Wäre es besser, das Ein-und Ausschalten getrennt zu verarbeiten?
Oder wie wäre hier ein korrekter Ansatz? Hast Du noch eine Idee?
Christian
wenn sich deine or-Fälle
nicht gegenseitig ausschließen, dann musst du sie in einzelne Bedingungen verfrachten, auf die Gefahr hin, dass das on-Kommando evtl. mehrfach nacheinander geschaltet wird.
also, z. B.:
(([18:50-21:00|1234] or [08:30-21:30|6] or [08:30-21:00|0]) and [?hl.01.Feiertag] eq "none" and [?hl.01.Geburtstag] eq "none")
(set GA.ss.SA.Wasserspiel on)
DOELSEIF ([14:30-21:30|8] and ($wday == 5 or [?hl.01.Feiertag:tomorrow] ne "none"))
(set GA.ss.SA.Wasserspiel on)
DOELSEIF ([08:30-21:00] and [?hl.01.Feiertag] ne "none")
(set GA.ss.SA.Wasserspiel on)
DOELSEIF ([14:30-21:00] and [?hl.01.Geburtstag] ne "none")
(set GA.ss.SA.Wasserspiel on)
DOELSE
(set GA.ss.SA.Wasserspiel off)
Ausblick: Zukünftig wird man mehrer unabhängige Bedingungen für eine Kommando definieren können. Es wird dann so aussehen.
(([18:50-21:00|1234] or [08:30-21:30|6] or [08:30-21:00|0]) and [?hl.01.Feiertag] eq "none" and [?hl.01.Geburtstag] eq "none") |
([14:30-21:30|8] and ($wday == 5 or [?hl.01.Feiertag:tomorrow] ne "none")) |
([08:30-21:00] and [?hl.01.Feiertag] ne "none") |
([14:30-21:00] and [?hl.01.Geburtstag] ne "none")
DOELSE
(set GA.ss.SA.Wasserspiel off)
Aber noch funktioniert es so nicht.
Gruß
Damian
Hallo Damian,
danke für die Infos, ich werde mir das einmal genauer ansehen...
Hast Du schon eine Idee, wann die neue Funktion implementiert werden soll?
Danke und Gruß,
Christian
Zitat von: Spartacus am 05 April 2015, 21:07:35
Hallo Damian,
danke für die Infos, ich werde mir das einmal genauer ansehen...
Hast Du schon eine Idee, wann die neue Funktion implementiert werden soll?
Danke und Gruß,
Christian
Die steht schon seit Weihnachten auf der ToDo-Liste, aber zuerst will ich noch ein Problem mit gleichen Timern in DOIF lösen. Es wird also bestimmt noch etwas dauern.
Gruß
Damian
Zitat von: Damian am 05 April 2015, 21:12:17
..... Es wird also bestimmt noch etwas dauern.
Gruß
Damian
Hallo Damian,
schade!.... aber ich probier es mal mit der Alternative!
Christian
Zitat von: Spartacus am 05 April 2015, 21:29:57
Hallo Damian,
schade!.... aber ich probier es mal mit der Alternative!
Christian
Die ist ungefährlich, die kannst du nutzen;)
Gruß
Damian
Hallo,
ich schon wieder....
ich habe nun den Vorschlag von Damian umgesetzt und mein Wasserspiel entsprechend eingestellt. Aber leider funktioniert das immer noch nicht. Heute (Freitag wday=5) ist das Wasserspiel um 14:30 Uhr eingeschaltet, aber um 17:00 hat es sich abgeschaltet. Warum verstehe ich noch immer nicht! Wo ist denn hier noch der Fehler?
(([17:00-21:00|1234] or
[08:30-21:30|6] or
[08:30-21:00|0]) and [?hl.01.Feiertag] eq "none" and [?hl.01.Geburtstag] eq "none")
(set GA.ss.SA.Wasserspiel on)
DOELSEIF
(([14:30-21:30|8] and $wday == 5) or [?hl.01.Feiertag:tomorrow] ne "none")
(set GA.ss.SA.Wasserspiel on)
DOELSEIF
([08:30-21:00] and [?hl.01.Feiertag] ne "none")
(set GA.ss.SA.Wasserspiel on)
DOELSEIF
([14:30-21:00] and [?hl.01.Geburtstag] ne "none")
(set GA.ss.SA.Wasserspiel on)
DOELSE
(set GA.ss.SA.Wasserspiel off)
Christian
Zitat von: Spartacus am 10 April 2015, 17:28:17
Hallo,
ich schon wieder....
ich habe nun den Vorschlag von Damian umgesetzt und mein Wasserspiel entsprechend eingestellt. Aber leider funktioniert das immer noch nicht. Heute (Freitag wday=5) ist das Wasserspiel um 14:30 Uhr eingeschaltet, aber um 17:00 hat es sich abgeschaltet. Warum verstehe ich noch immer nicht! Wo ist denn hier noch der Fehler?
(([17:00-21:00|1234] or
[08:30-21:30|6] or
[08:30-21:00|0]) and [?hl.01.Feiertag] eq "none" and [?hl.01.Geburtstag] eq "none")
(set GA.ss.SA.Wasserspiel on)
DOELSEIF
(([14:30-21:30|8] and $wday == 5) or [?hl.01.Feiertag:tomorrow] ne "none")
(set GA.ss.SA.Wasserspiel on)
DOELSEIF
([08:30-21:00] and [?hl.01.Feiertag] ne "none")
(set GA.ss.SA.Wasserspiel on)
DOELSEIF
([14:30-21:00] and [?hl.01.Geburtstag] ne "none")
(set GA.ss.SA.Wasserspiel on)
DOELSE
(set GA.ss.SA.Wasserspiel off)
Christian
ja, in dieser Konstellation triggert um 17:00 Uhr die erste Bedingung, die aber heute nicht wahr ist und damit bleibt nur noch der DOELSE Fall übrig, da die anderen Abfragen um 17:00 Uhr nicht ausgewertet werden.
Die Vielzahl der Bedingungen führt dazu, dass man alle möglichen Abhängigkeiten nicht mehr überblickt. Wahrscheinlich ist es besser bei der Komplexität deiner Abfragen, die sich zum Teil ausschließen zum Teil aber überschneiden, ohne Zeitintervalle zu arbeiten und stattdessen nur Zeitpunkte einmal für den Einschaltbefehl und einmal für den Ausschaltbefehl anzugeben:
([17:00|1234] or [08:30|6] or
([08:30|0]) and [?hl.01.Feiertag] eq "none" and [?hl.01.Geburtstag] eq "none")) or
([14:30|8] and $wday == 5) or [?hl.01.Feiertag:tomorrow] ne "none") or
([08:30] and [?hl.01.Feiertag] ne "none") or
([14:30] and [?hl.01.Geburtstag] ne "none"))
(set GA.ss.SA.Wasserspiel on)
DOELSEIF (...)
(set GA.ss.SA.Wasserspiel off)
Die Ausschalt-Bedingung musst du noch selbst definieren. Wahrscheinlich kannst du noch einiges vereinfachen. Hier kommt man mit zwei Fällen aus, weil die or-Falle im Gegensatz zu Intervallen nur zum Zeitpunkt der Triggerung wahr sind und sich dadurch nicht gegenseitig beeinflussen.
Gruß
Damian
Hi Damian,
das mit dem Einschalt- und Ausschaltpunkt hatte ich mir auch schon überlegt. Ich muss das mal in einer stillen Stunde austüfteln. Ich melde mich..
Danke,
Christian
Hi
Ich möchte gerne ein Licht für 10min in Abhängigkeit eines Bewegungsmelder schalten, aber nur in einer gewissen Zeitspanne, und nur falls ein Dummy-Schalter eingeschaltet ist.
Dazu habe ich mal das hier mit DOIF erstellt:
define DOIF_Alarm_Terasse_sued_AUTO_EIN_AUS DOIF ([22:00-05:00] and [CUL_HM_Bewegungsmelder_Terasse_sued:motion] and [dummy_Alarmanlage] eq "AUTO") (set CUL_HM_TerassenSpot on-for-timer 600)
Funktioniert auch, nur dass das Licht um 22:00 für die 600sec angeht, obwohl der Bewegungsmelder gar nicht aktiv ist. Also nichts auslöst. Auch im Eventmonitor ist vom Bewegungsmelder nichts zu sehen.
Vielleicht hat jemand nen Tipp für mich.
Grüsse Martin
Zitat von: mmatt am 11 April 2015, 16:35:36
Hi
Ich möchte gerne ein Licht für 10min in Abhängigkeit eines Bewegungsmelder schalten, aber nur in einer gewissen Zeitspanne, und nur falls ein Dummy-Schalter eingeschaltet ist.
Dazu habe ich mal das hier mit DOIF erstellt:
define DOIF_Alarm_Terasse_sued_AUTO_EIN_AUS DOIF ([22:00-05:00] and [CUL_HM_Bewegungsmelder_Terasse_sued:motion] and [?dummy_Alarmanlage] eq "AUTO") (set CUL_HM_TerassenSpot on-for-timer 600)
Funktioniert auch, nur dass das Licht um 22:00 für die 600sec angeht, obwohl der Bewegungsmelder gar nicht aktiv ist. Also nichts auslöst. Auch im Eventmonitor ist vom Bewegungsmelder nichts zu sehen.
Vielleicht hat jemand nen Tipp für mich.
Grüsse Martin
Ich vermute, dass es ein HM-Bewegungsmelder ist. Bei dem bleibt der Status auf motion, daher musst du nach dem Event motion abfragen ... :?motion (ohne Fragezeichen wäre es ein Reading motion)
Daher:
define DOIF_Alarm_Terasse_sued_AUTO_EIN_AUS DOIF ([?22:00-05:00] and [CUL_HM_Bewegungsmelder_Terasse_sued:?motion] and [?dummy_Alarmanlage] eq "AUTO") (set CUL_HM_TerassenSpot on-for-timer 600)
Alles andere soll nicht das Modul triggern, daher die Fragezeichen beim Intervall und beim dummy.
Gruß
Damian
Hallo Damian,
Ja, nun funktioniert es mit den ''?" perfect. :)
Vielen Dank für Deine Hilfe.
Und vielen Dank für Dein DOIF und IF Modul.
Grüsse Martin
Hallo zusammen,
ich habe meine Wasserspiel-Ansteuerung noch einmal umgebaut und würde es gerne noch einmal von Euch checken lassen, bevor ich das nun produktiv setzte:
Funktionsweise soll wie folgt aussehen:
Mo-Do
17:00 Uhr ein; 21:00 Uhr aus
Fr.
14:30 Uhr ein; 21:30 Uhr aus
Sa.
08:30 Uhr ein, 21:30 Uhr aus
So.
08:30 Uhr ein; 21:00 Uhr aus
vor Feiertagen
14:30 Uhr ein; 21:30 Uhr aus
an Feiertagen:
08:30 Uhr ein; 21:00 Uhr aus (wenn der Feiertag auf Fr. oder Sa. fällt, dann wird um 21:30 Uhr abgeschaltet
an Geburtstagen:
14:30 Uhr ein; 21:00 Uhr aus (wenn der Geburtstag auf Fr. oder Sa. fällt, dann wird um 21:30 Uhr abgeschaltet)
Code:
([17:00|1234] or
[08:30] and ([?hl.01.Feiertag] or $wday == 0 or or $wday == 6) or
[14:30] and ([?hl.01.Feiertag:tomorrow] ne "none" or [?hl.01.Geburtstag] ne "none" or $wday == 5))
(set GA.ss.SA.Wasserspiel on)
DOELSEIF
([21:00|01234] or
[21:30] and ([?hl.01.Feiertag:tomorrow] ne "none" or $wday == 5 or or $wday == 6))
(set GA.ss.SA.Wasserspiel off)
Ich hoffe ich habe nicht zu viel optimiert :-)
Christian
Zitat von: Spartacus am 13 April 2015, 16:15:12
Hallo zusammen,
ich habe meine Wasserspiel-Ansteuerung noch einmal umgebaut und würde es gerne noch einmal von Euch checken lassen, bevor ich das nun produktiv setzte:
Funktionsweise soll wie folgt aussehen:
Mo-Do
17:00 Uhr ein; 21:00 Uhr aus
Fr.
14:30 Uhr ein; 21:30 Uhr aus
Sa.
08:30 Uhr ein, 21:30 Uhr aus
So.
08:30 Uhr ein; 21:00 Uhr aus
vor Feiertagen
14:30 Uhr ein; 21:30 Uhr aus
an Feiertagen:
08:30 Uhr ein; 21:00 Uhr aus (wenn der Feiertag auf Fr. oder Sa. fällt, dann wird um 21:30 Uhr abgeschaltet
an Geburtstagen:
14:30 Uhr ein; 21:00 Uhr aus (wenn der Geburtstag auf Fr. oder Sa. fällt, dann wird um 21:30 Uhr abgeschaltet)
Code:
([17:00|1234] or
[08:30] and ([?hl.01.Feiertag] or $wday == 0 or or $wday == 6) or
[14:30] and ([?hl.01.Feiertag:tomorrow] ne "none" or [?hl.01.Geburtstag] ne "none" or $wday == 5))
(set GA.ss.SA.Wasserspiel on)
DOELSEIF
([21:00|01234] or
[21:30] and ([?hl.01.Feiertag:tomorrow] ne "none" or $wday == 5 or or $wday == 6))
(set GA.ss.SA.Wasserspiel off)
Ich hoffe ich habe nicht zu viel optimiert.
Christian
So lassen sich zumindest Fehler schneller finden, weil nur zwei Bedingung da sind und falls irgendetwas sich nicht ausschließen sollte, so ist es hier nicht tragisch, weil ohne do always sowieso nicht doppelt geschaltet wird.
Da hast du dein Leben aber gut durchgeplant, wo bleibt da Spielraum für etwas Zufall :) Naja mit den neuen Zeit-Features kannst du es ja mit rand() noch einbauen ;)
Gruß
Damian
Hallo Damian,
naja, das ist nur eine Schaumdüse die Wasser über ein paar Natursteine plätschern lässt. Das hat mit einem durchplanten Leben nichts zu tun. Der Zeitplan richtet sich nach unserem gewohnten Tagesablauf und hat sich schon zu CC2-Zeiten bewährt. Und außerdem gibt es noch einen Taster, damit kann man das Wasserspiel, unabhängig von der Automatik, ein- bzw. ausschalten :)
Da Du offenbar keinen offensichtlichen Fehler im Code gefunden hast, werde ich das jetzt mal produktiv setzen. Ich hoffe es läuft nun wie gewünscht! Die nächsten Feiertage kommen ja im Mai und der nächste Geburtstag steht am 27.ten an....
...es bleibt spannend,
Christian
Zitat von: Spartacus am 13 April 2015, 20:09:25
Hallo Damian,
naja, das ist nur eine Schaumdüse die Wasser über ein paar Natursteine plätschern lässt. Das hat mit einem durchplanten Leben nichts zu tun. Der Zeitplan richtet sich nach unserem gewohnten Tagesablauf und hat sich schon zu CC2-Zeiten bewährt. Und außerdem gibt es noch einen Taster, damit kann man das Wasserspiel, unabhängig von der Automatik, ein- bzw. ausschalten :)
Da Du offenbar keinen offensichtlichen Fehler im Code gefunden hast, werde ich das jetzt mal produktiv setzen. Ich hoffe es läuft nun wie gewünscht! Die nächsten Feiertage kommen ja im Mai und der nächste Geburtstag steht am 27.ten an....
...es bleibt spannend,
Christian
ja, ein echter FHEMer baut da aber noch die Jahreszeit, Tageslicht, Sonnenaufgang, Sonnenuntergang, Wetterprognose, Regen, Sonne, Anwesenheit und das eigene Wohlbefinden mit ein :D
Gruß
Damian