DOIF schaltet zu bestimmten Uhrzeiten einfach aus

Begonnen von ranger_one, 20 November 2015, 20:44:41

Vorheriges Thema - Nächstes Thema

ranger_one

Hallo,

folgende Aufgabe war gestellt:
Ich habe einen Pelletofen, den ich per Kombination dummy, Aussentemperatur und Zeit steuern möchten.
Der Dummy ist quasi in welchem Modus ich den Ofen betreiben möchte: Off, On, Halb, Auto
Off/On ist quasi der manuelle Override.
Halb ist einfach nur mit anderen Zeiten in der Übergangszeit.
Und Auto halt im Winter.

Das Ganze funktioniert zumeist recht gut.
Aber mittlerweile kommt fast täglich ein Problem, dass das DOIF den Ofen abschaltet, obwohl alle Bedingungen erfüllt sind.
Was mich noch skeptischer macht ist, dass das Off Kommando immer nur zu vollen Stunden passiert.
Es gibt ja mehrere Timer im DOIF und der Off Befehl kommt just zu solchen Zeiten.
Version ist 5.7 mit aktuellesten Updates.
Hier mal mein DOIF:

define ST_Pelletofen DOIF ([Pelletofen_Modus] eq "On") (set SW_Pelletofen on) \
DOELSEIF ([Pelletofen_Modus] eq "off") (set SW_Pelletofen off) \
DOELSEIF ([Pelletofen_Modus] eq "Halb" and [05:45-08:00] and [Temperatur_Nord:temperature] < 15 and (!($we)) ) (set SW_Pelletofen on)  \
DOELSEIF ([Pelletofen_Modus] eq "Halb" and [18:00-22:30] and [Temperatur_Nord:temperature] < 15 and (!($we)) ) (set SW_Pelletofen on)\
DOELSEIF ([Pelletofen_Modus] eq "Halb" and [07:00-09:30] and [Temperatur_Nord:temperature] < 15 and ($we) ) (set SW_Pelletofen on)\
DOELSEIF ([Pelletofen_Modus] eq "Halb" and [18:00-22:30] and [Temperatur_Nord:temperature] < 15 and ($we) ) (set SW_Pelletofen on) \
DOELSEIF ([Pelletofen_Modus] eq "Auto" and [05:45-22:30] and [Temperatur_Nord:temperature] < 15 and (!($we)) ) (set SW_Pelletofen on) \
DOELSEIF ([Pelletofen_Modus] eq "Auto" and [07:00-22:30] and [Temperatur_Nord:temperature] < 15 and ($we) ) (set SW_Pelletofen on)\
DOELSE (set SW_Pelletofen off)

Heute:
2015.11.20 08:00:00 3: FS20 set SW_Pelletofen off
2015.11.20 18:00:00 3: FS20 set SW_Pelletofen off

Teilweise kann ich das lösen, wenn ich den Staus Dummy mal auf Off stelle und dann zurück auf Auto. Geht aber nicht immer.
Habe ich da eventuell irgendwo einen Logikfehler bzw eine Lücke drin?
Nach meinem Verständnis sollte das DOIF ja immer jeden Status nach dem anderen prüfen.
Also immer zuerst den Dummy auf Off, On, Halb, Auto und erst dann Temperatur und Zeit.
Zeit und Temperatur haben definitiv zum den Abschaltzeitpunkt gepasst.

Bin für jeden Tip dankbar.
Habe noch 2 weitere DOIF's mit Rolladensteuerung udn Bilderrahmen, die sind nicht so komplex und funktionieren wunderbar.

Danke

ranger_one

Hallo,

ich habe das DOIF jetzt mal drastisch reduziert.

Ist jetzt nur noch:

define ST_Pelletofen DOIF (([Temperatur_Nord:temperature] < 15) and (!($we)) and [05:45-22:30]) (set SW_Pelletofen on) \
DOELSEIF (([Temperatur_Nord:temperature] < 15) and ($we) and [07:00-22:30]) (set SW_Pelletofen on)\
DOELSE (set SW_Pelletofen off)

Bei den Readings sieht es so aus:
Device           Temperatur_Nord   30.11.2015 07:41
cmd_event   Temperatur_Nord   30.11.2015 07:41
cmd_nr   1   30.11.2015 07:41
e_Temperatur_Nord_temperature   08. Sep   30.11.2015 07:41
state           cmd_1                   30.11.2015 07:41
timer_1_c1   01.12.2015 05:45   30.11.2015 05:45
timer_2_c1   30.11.2015 22:30   29.11.2015 22:30
timer_3_c2   01.12.2015 07:00   30.11.2015 07:00
timer_4_c2   30.11.2015 22:30   29.11.2015 22:30

Das Problem:
Zur Timerzeit timer_3_c2 um 07:00 Uhr schaltet der Ofen manchmal ab.
2015-11-30_07:00:00 ST_Pelletofen cmd_nr: 3
2015-11-30_07:41:10 ST_Pelletofen cmd_nr: 1
Un erst 40 Minuten später wieder an.
Die Temperatur war definitiv nie über 15 Grad zu diesem Zeitraum.
Warum schaltet zu diesem Timerzeitpunkt das System  ab?
Es nist ja ein Timer, der nur zum Wochenende schalten soll.
Trotzdem reagiert das Teil heute am Montag um 07:00 Uhr.

Damian

Zitat von: ranger_one am 30 November 2015, 11:03:16
Hallo,

ich habe das DOIF jetzt mal drastisch reduziert.

Ist jetzt nur noch:

define ST_Pelletofen DOIF (([Temperatur_Nord:temperature] < 15) and (!($we)) and [05:45-22:30]) (set SW_Pelletofen on) \
DOELSEIF (([Temperatur_Nord:temperature] < 15) and ($we) and [07:00-22:30]) (set SW_Pelletofen on)\
DOELSE (set SW_Pelletofen off)

Bei den Readings sieht es so aus:
Device           Temperatur_Nord   30.11.2015 07:41
cmd_event   Temperatur_Nord   30.11.2015 07:41
cmd_nr   1   30.11.2015 07:41
e_Temperatur_Nord_temperature   08. Sep   30.11.2015 07:41
state           cmd_1                   30.11.2015 07:41
timer_1_c1   01.12.2015 05:45   30.11.2015 05:45
timer_2_c1   30.11.2015 22:30   29.11.2015 22:30
timer_3_c2   01.12.2015 07:00   30.11.2015 07:00
timer_4_c2   30.11.2015 22:30   29.11.2015 22:30

Das Problem:
Zur Timerzeit timer_3_c2 um 07:00 Uhr schaltet der Ofen manchmal ab.
2015-11-30_07:00:00 ST_Pelletofen cmd_nr: 3
2015-11-30_07:41:10 ST_Pelletofen cmd_nr: 1
Un erst 40 Minuten später wieder an.
Die Temperatur war definitiv nie über 15 Grad zu diesem Zeitraum.
Warum schaltet zu diesem Timerzeitpunkt das System  ab?
Es nist ja ein Timer, der nur zum Wochenende schalten soll.
Trotzdem reagiert das Teil heute am Montag um 07:00 Uhr.

Um 07:00 Uhr wird getriggert und wenn die Bedingung wie heute nicht wahr ist, dann kommt nur noch der DOELSE-Fall in Frage, der dann zuschlägt.

So wird es besser funktionieren, die entsprechende Bedeutung der Wochentagangaben 7 bzw. 8 findest du in der Commandref zu DOIF.

define ST_Pelletofen DOIF (([Temperatur_Nord:temperature] < 15) and ([05:45-22:30|8] or [07:00-22:30|7]))
  (set SW_Pelletofen on)
DOELSE
  (set SW_Pelletofen off)


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ranger_one

Hallo,

vielen Dank für den Hinweis.
Ich möchte meinen Fehler nur verstehen.
In der commandref steht:
"Die Angaben werden immer von links nach rechts abgearbeitet. Zu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten. Kommt ein Device in mehreren Bedingungen vor, so wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist."
Ich hatte wahrscheinlich nur den ersten Teil beachtet.
Und war davon ausgegangen, dass quasi alle Bedingungen durchgegangen werden.
Oder wie muss ich das verstehen?