Hauptmenü

DOIF triggert falsch!

Begonnen von Spartacus, 05 April 2015, 18:53:13

Vorheriges Thema - Nächstes Thema

Spartacus

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

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

Damian

#11
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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

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

mmatt

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
- FHEM 5.5 auf RPI REV.2
- CUL V3 868MHz
- CUL_HM: HM-LC-Dim1TPBU-FM/HM-LC-Swl1PBU-FM/HM-LC-Sw1-BA-PCB/HB-UW-Sen-THPL-O/HM-SEN-MDIR-SM

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF