Hallo,
ich habe offenbar noch ein Logikproblem in meinem DOIF.
...
DOELSEIF
((((([07:45|8] or [22:00|8]) and [?hl.01.Feiertag] eq "none" and ![?state.NRW.Ferien.dum] or
[09:00] and ([?hl.01.Feiertag] ne "none" or [?state.NRW.Ferien.dum]) or
[23:00] and ([?hl.01.Feiertag] ne "none" or [?state.NRW.Ferien.dum]) and [?hl.01.Feiertag] ne "Silvester" or
[23:00|7] and [?hl.01.Feiertag] ne "Silvester") or
[02:00] and [?hl.01.Feiertag] eq "Neujahr") and Advent and [?switch.di.01.OG.fl.SD.Boden.dum] eq "on") or [switch.di.01.OG.fl.SD.Boden.dum] eq "on")
(set OG.fl.SD.Boden off)
Getriggert wurde heute um 09:00, allerdings dachte ich, dass die Anweisung "and ([?hl.01.Feiertag] ne "none" or [?state.NRW.Ferien.dum])" dies verhindert, da beide Bedingungen "0" sind. Das passiert hier nicht und ist damit nicht das, was ich erreichen wollte.
Muss hier hier den Ausdruck noch klammern? Also so?
([09:00] and ([?hl.01.Feiertag] ne "none" or [?state.NRW.Ferien.dum]) )
Danke und Gruß,
Christian
Hallo,
hat niemand einen Tipp, was ich falsch gemacht habe? Ich sehe es einfach nicht!
Christian
and bindet stärker als or.
hier ein ähnliches Problem.
https://forum.fhem.de/index.php/topic,61965.msg533635.html#msg533635 (https://forum.fhem.de/index.php/topic,61965.msg533635.html#msg533635)
Aber ich glaubve das du da ein generelles DOIF verständnis Problem hast.
[?hl.01.Feiertag] eq "none" and ![?state.NRW.Ferien.dum]
was soll das machen? im speziellen das hier:
![?state.NRW.Ferien.dum]
das kenne ich so nicht
Hallo,
danke für Deine Antwort.
state.NRW.Ferien.dum
ist ein Dummy und nimmt die Werte "0" und "1" ein.
"1": Ferien NRW
"0": keine Ferien NRW
Demnach wird: ![?state.NRW.Ferien.dum]
nur wahr, wenn keine Ferien sind.
Konkret:
[07:45|8] or [22:00|8]) and [?hl.01.Feiertag] eq "none" and ![?state.NRW.Ferien.dum]
getriggert wird jeweils "07:45" und "22:00" an Werktagen, aber nur außerhalb von Feiertagen ([?hl.01.Feiertag]) und Ferien.
Das müsste eigentlich korrekt sein, oder?
Problem ist hier ja auch nicht dieser Ausdruck, sonder das um 09:00 Uhr getriggert wird. Und das soll ja gerade durch das "and "
[09:00] and ([?hl.01.Feiertag] ne "none" or [?state.NRW.Ferien.dum])
verhindert werden.
Nachtrag:
ich glaube, ich sehe es gerade: es muss "![?state.NRW.Ferien.dum])" heissen!
Allerdings habe ich hier noch einen Fehler drin, den ich noch nicht sehe, denn hier
([07:45|8] or [22:00|8]) and [?hl.01.Feiertag] eq "none" and ![?state.NRW.Ferien.dum]
wurde gestern um 22:00 Uhr getriggert, obwohl Sonntag war. Und "8" steht m.E. für werktags.
Christian
Zitat von: Spartacus am 12 Dezember 2016, 17:00:43
Hallo,
danke für Deine Antwort.
state.NRW.Ferien.dum
ist ein Dummy und nimmt die Werte "0" und "1" ein.
"1": Ferien NRW
"0": keine Ferien NRW
Demnach wird: ![?state.NRW.Ferien.dum]
nur wahr, wenn keine Ferien sind
jo, das klingt plausibel. Diese Funktion kannte ich noch nicht... daher war ich ein wenig stutzig.
ZitatKonkret:
[07:45|8] or [22:00|8]) and [?hl.01.Feiertag] eq "none" and ![?state.NRW.Ferien.dum]
getriggert wird jeweils "07:45" und "22:00" an Werktagen, aber nur außerhalb von Feiertagen ([?hl.01.Feiertag]) und Ferien.
Das müsste eigentlich korrekt sein, oder?
dem sollte auch so sein.
ZitatProblem ist hier ja auch nicht dieser Ausdruck, sonder das um 09:00 Uhr getriggert wird. Und das soll ja gerade durch das "and "
[09:00] and ([?hl.01.Feiertag] ne "none" or [?state.NRW.Ferien.dum])
verhindert werden.
Nachtrag:
ich glaube, ich sehe es gerade: es muss "![?state.NRW.Ferien.dum])" heissen!
![?state.... sollte richtig sein. Dann triggert es um 09 Uhr nicht an Feiertagen oder Ferientagen
ZitatAllerdings habe ich hier noch einen Fehler drin, den ich noch nicht sehe, denn hier
([07:45|8] or [22:00|8]) and [?hl.01.Feiertag] eq "none" and ![?state.NRW.Ferien.dum]
wurde gestern um 22:00 Uhr getriggert, obwohl Sonntag war. Und "8" steht m.E. für werktags.
Christian
Daran kann ich so keinen Fehler finden 8 ist Werktag.
Vielleicht kannst du den Code etwas übersichtlicher gestalten, so zum Beispiel:
DOELSEIF
(([07:45|8] or [22:00|8]) and [?hl.01.Feiertag] eq "none" and ![?state.NRW.Ferien.dum]) (set OG.fl.SD.Boden off)
DOELSEIF
([09:00] and ([?hl.01.Feiertag] ne "none" or [?state.NRW.Ferien.dum])) (set OG.fl.SD.Boden off)
DOELSEIF
([23:00] and ([?hl.01.Feiertag] ne "none" or [?state.NRW.Ferien.dum]) and [?hl.01.Feiertag] ne "Silvester") (set OG.fl.SD.Boden off)
DOELSEIF
([23:00|7] and [?hl.01.Feiertag] ne "Silvester") (set OG.fl.SD.Boden off)
DOELSEIF
([02:00] and [?hl.01.Feiertag] eq "Neujahr" and Advent and ([?switch.di.01.OG.fl.SD.Boden.dum] eq "on" or [switch.di.01.OG.fl.SD.Boden.dum] eq "on")) (set OG.fl.SD.Boden off)
Hallo automatisierer,
ich habe noch etwas am Code gefeilt, aber irgendwie klappt das alles nicht so wirklich:
(((
([06:30|8] or [17:30|8]) and [?hl.01.Feiertag] eq "none" and ![?state.NRW.Ferien.dum] or
([08:30] or [16:30]) and ([?hl.01.Feiertag] ne "none" or [?state.NRW.Ferien.dum]) or
[08:30|7]) and Advent) and [?switch.di.01.OG.fl.SD.Boden.dum] eq "on")
(set OG.fl.SD.Boden on)
DOELSEIF
(((
([07:45|8] or [22:00|8]) and [?hl.01.Feiertag] eq "none" and ![?state.NRW.Ferien.dum] or
[09:00] or
[23:00] and [?hl.01.Feiertag] ne "Silvester" or
[02:00] and [?hl.01.Feiertag] eq "Neujahr") and Advent and [?switch.di.01.OG.fl.SD.Boden.dum] eq "on") or [switch.di.01.OG.fl.SD.Boden.dum] eq "on")
(set OG.fl.SD.Boden off)
DOELSEIF
([switch.di.01.OG.fl.SD.Boden.dum] eq "off")
(set OG.fl.SD.Boden off)
Um 22:00 Uhr hätte eigentlich das hier greifen müssen, und hier ist nix passiert.
....
DOELSEIF
(((
([07:45|8] or [22:00|8]) and [?hl.01.Feiertag] eq "none" and ![?state.NRW.Ferien.dum] or
...
Die 23:00 Uhr Abschaltung hat auch nicht stattgefunden. Ich habe den Eindruck, es liegt an dem Absatz nach den ersten Klammern. Mal gucken, ob die Lampe morgen um 06:30 einschaltet.
Dein Besipiel wird bei mir nicht funktionieren, da der ganze erste Teil noch einmal geklammert ist und mit dem "Advent" verknüpft ist. D.h. Das Ganze läuft nur in der Adventszeit und wenn die Automatik aktiviert ist (...and Advent and [?switch.di.01.OG.fl.SD.Boden.dum] eq "on"))
Das müsste m.E. dann in jeden DOELSIF -Zweig eingebaut werden.
Christian