Hauptmenü

DOIF "and" und "or"-Problem

Begonnen von Spartacus, 11 Dezember 2016, 09:35:36

Vorheriges Thema - Nächstes Thema

Spartacus

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
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Spartacus

Hallo,
hat niemand einen Tipp, was ich falsch gemacht habe? Ich sehe es einfach nicht!
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

automatisierer

and bindet stärker als or.

hier ein ähnliches Problem.
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

Spartacus

#3
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


Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

automatisierer

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)





Spartacus

#5
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
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R