Zwei interagierende DOIF´s stören sich und sollten nicht

Begonnen von holle75, 20 Juli 2016, 13:29:42

Vorheriges Thema - Nächstes Thema

holle75

Hallo, für meine Klima gibt es eine Zeit- und Anwesenheitsabhängige Steuerung. Zusätzlich möchte ich einen Dummy-Button haben, der die Klima für nur 2 Stunden anschaltet und von der ersteren Steuerung "überschrieben" werden kann.

Ich bin der Meinung, meine Logik stimmt ;) .... trotzdem stört der 2-Stunden-Button das andere DOIF

define Container_XTENDER_Schalter_KLIMAAnAusDOIF DOIF ([{sunrise(18000,"06:00","11:00")}-{sunset(-7200,"17:00","22:00")}] and [Anwesenheit:state] eq "present" and [Container_SENSOR_XtenderTransfer:sensor] eq "closed" and [Container_TEMPFEUCHTESENSOR:temperature] > 24) (set ZirkusOben_KLIMA on) DOELSE (set ZirkusOben_KLIMA off)
attr Container_XTENDER_Schalter_KLIMAAnAusDOIF devStateIcon disabled:general_aus@red:initialize initialized:general_an@yellow:disable cmd_2:general_an@yellow:disable cmd_1:general_an@green:disable initialize:general_an@yellow:disable
attr Container_XTENDER_Schalter_KLIMAAnAusDOIF group XtenderHeizungKLIMA
attr Container_XTENDER_Schalter_KLIMAAnAusDOIF initialize initialized
attr Container_XTENDER_Schalter_KLIMAAnAusDOIF room Anwesenheit
attr Container_XTENDER_Schalter_KLIMAAnAusDOIF wait 600:0


ist das erste DOIF

define KLIMA2StundenDummy dummy
attr KLIMA2StundenDummy icon frost
attr KLIMA2StundenDummy room ZirkusOben
attr KLIMA2StundenDummy setList on off

define KLIMA2StundenDOIF DOIF ([KLIMA2StundenDummy:state] eq "on") (set ZirkusOben_KLIMA on) (set ZirkusOben_KLIMA off, set KLIMA2StundenDummy off) DOELSEIF ([Container_XTENDER_Schalter_KLIMAAnAusDOIF] eq "cmd_1" or [ZirkusOben_KLIMA:state] eq "off" or [KLIMA2StundenDummy:state] eq "off") (set KLIMA2StundenDummy off)
attr KLIMA2StundenDOIF do resetwait
attr KLIMA2StundenDOIF room ZirkusOben
attr KLIMA2StundenDOIF wait 0,7200,0


der 2-Stunden Button.

ich logge das Anschalten der Klima mit und habe folgendes Problem

2016-07-19_10:19:16 ZirkusOben_KLIMA set_on
2016-07-19_10:19:16 ZirkusOben_KLIMA working: off
2016-07-19_10:19:16 ZirkusOben_KLIMA on
2016-07-19_10:20:12 ZirkusOben_KLIMA set_off
2016-07-19_10:20:12 ZirkusOben_KLIMA working: off
2016-07-19_10:20:12 ZirkusOben_KLIMA off
2016-07-19_10:33:14 ZirkusOben_KLIMA set_on
2016-07-19_10:33:14 ZirkusOben_KLIMA working: off
2016-07-19_10:33:14 ZirkusOben_KLIMA on


bedeutet, er macht die Klima entsprechend des ersten DOIF´s an, dann aus und kurz danach wieder an. Ohne das 2-Stunden-DOIF funktioniert alles tadellos.

Jemand eine Idee wie das zweite DOIF (der Dummy-2-Stunden-Button wird nicht gedrückt, also das zweite DOIF wird nicht aktiviert) in das erste reinpfuscht?

Danke und Gruß

H.

Brockmann

Das erste DOIF triggert den DOELSEIF-Zweig des zweiten über [ZirkusOben_KLIMA:state].
Diese Bedingung selbst ist dann zwar nicht wahr, aber wenn eine der beiden anderen or-verknüpften Bedingungen wahr ist, wird der DOELSEIF-Zweig ausgeführt:
Zitat([Container_XTENDER_Schalter_KLIMAAnAusDOIF] eq "cmd_1" or [ZirkusOben_KLIMA:state] eq "off" or [KLIMA2StundenDummy:state] eq "off") (set KLIMA2StundenDummy off)

holle75

#2
Hallo Brockmann, aber der DOELSEIF vom zweiten DOIF schaltet ja nur den Dummy (KLIMA2StundenDummy ) wieder aus, nicht die Klima (denke ich) .... und das was du beschreibst ist genau meine Intention:

Wenn das erste DOIF einschaltet soll eine etwäige 2 Stunden-Schaltung keine Auswirkung mehr haben (die Klima zB nicht weil noch 20 Minuten der 2 Stunden Laufzeit übrig sind dann trotzdem ausschalten) und der 2 Stunden Button wird resettet.

Ich verstehe nicht, warum nach knapp 1 Minute die Klima morgens nochmal ausgeschaltet wird.

Brockmann

Zitat von: holle75 am 20 Juli 2016, 17:30:04
aber der DOELSEIF vom zweiten DOIF schaltet ja nur den Dummy (KLIMA2StundenDummy ) wieder aus, nicht die Klima (denke ich)
Ja, hast Recht. Da habe ich nicht richtig hingeschaut. War nur die einzige Verbindung zwischen den beiden DOIFs, die ich so gesehen habe.
Ich denke auch immer noch, dass es da eine Wechselwirkung geben kann, wg. des resetwait. Aber das würde nicht die ca. 1 Minute Wartezeit erklären.
Da muss noch was anderes im Spiel sein. Vielleicht kannst Du erstmal feststellen, welches DOIF nun eigentlich ausgeschaltet hat (am Timestamp der Readings).
Dann mal direkt nach dem unerwarteten Verhalten ein list <Name des DOIFs> machen. Dann kannst Du ablesen, was getriggert hat und warum geschaltet wurde.

Außerdem müsste das wait-Attribut etwas anders aussehen, oder?
Zitatattr KLIMA2StundenDOIF wait 0,7200:0
Ich denke aber nicht, dass das hier eine Rolle spielt.

holle75

#4
Ich werde morgen früh mal ein paar lists machen und mich wieder melden.

Ich hatte das wait so verstanden, dass alle Ausführungs-Befehle in der Kette von vorne nach hinten mit Kommata getrennt sind?

define KLIMA2StundenDOIF DOIF ([KLIMA2StundenDummy:state] eq "on") (set ZirkusOben_KLIMA on) (set ZirkusOben_KLIMA off, set KLIMA2StundenDummy off) DOELSEIF ([Container_XTENDER_Schalter_KLIMAAnAusDOIF] eq "cmd_1" or [ZirkusOben_KLIMA:state] eq "off" or [KLIMA2StundenDummy:state] eq "off") (set KLIMA2StundenDummy off)


1 (set ZirkusOben_KLIMA on) -> 0 sek
2 (set ZirkusOben_KLIMA off, set KLIMA2StundenDummy off)  -> 7200 sek
3 (set KLIMA2StundenDummy off) -> 0 sek

attr KLIMA2StundenDOIF wait 0,7200,0

Ellert

Du könntest die Ereignisse der DOIF im Log protokollieren, in dem Du ein DOIF darauf ansetzt. Dann ist es leichter zu sehen, wer wann und warum schaltet.

define listDOIF DOIF (["^Container_XTENDER_Schalter_KLIMAAnAusDOIF$|^KLIMA2StundenDOIF$"]) (({Log 1, "listDOIF: Gerät: $DEVICE:[$DEVICE] --> Events: $EVENTS"}))

holle75


holle75

error: Wrong timespec "^Container_XTENDER_Schalter_KLIMAAnAusDOIF$: either HH:MM:SS or {perlcode}

bekomme ich im Reading

Ellert


holle75

# $Id: 98_DOIF.pm 9913 2015-11-16 19:34:36Z damian-s $

mmh, ich weiss, wird mal Zeit. Wollte demnächst mal auf 5.7 und dann auch alle Module updaten .... keine Zeit für den Rundumschlag

Ellert

Ja, daran liegt es, es geht auch mit notify

define listnotify notify (Container_XTENDER_Schalter_KLIMAAnAusDOIF|KLIMA2StundenDOIF):.* {Log 1, "listnotify: Gerät: $NAME --> Events: $EVENT"}

Notify verwende ich selten, daher kann die Syntax fehlerhaft sein.

holle75

so scheint er es zu mögen

define listnotify notify Container_XTENDER_Schalter_KLIMAAnAusDOIF:.*|KLIMA2StundenDOIF:.* {Log 1, "listnotify: Gerät: $NAME --> Events: $EVENT"}


mal schauen, was ich morgen im Log habe. Danke

Brockmann

Zitat von: holle75 am 20 Juli 2016, 20:16:52
Ich hatte das wait so verstanden, dass alle Ausführungs-Befehle in der Kette von vorne nach hinten mit Kommata getrennt sind?
Ich war von der aktuellen DOIF-Version ausgegangen, da wird es anders gemacht:
http://fhem.de/commandref_DE.html#DOIF_wait

Bei der von Dir eingesetzten Version war das vermutlich noch anders..

holle75

Jo, glaube deine Definition ist die Richtige.

Gegen 10:21 sollte ich bezüglich des anderen Fehlers mehr wissen. Laut Log jetzt über die Nacht vermute ich eine addlog-Problematik. Mal schauen dann.

holle75

#14
... wieder ein Stück weiter. Das Problem tritt nur auf, wenn ich Nachts den 2-Stunden-Button mal gedrückt und die Klima hab laufen lassen. Das werde ich jetzt heute Nacht dann machen.

Bis jetzt sieht der log so aus


......
2016.07.21 06:31:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_event: ZirkusOben_KLIMA
2016.07.21 06:31:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_2
2016.07.21 07:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_nr: 2
2016.07.21 07:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_event: ZirkusOben_KLIMA
2016.07.21 07:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_2
2016.07.21 07:31:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_nr: 2
2016.07.21 07:31:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_event: ZirkusOben_KLIMA
2016.07.21 07:31:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_2
2016.07.21 08:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_nr: 2
2016.07.21 08:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_event: ZirkusOben_KLIMA
2016.07.21 08:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_2
2016.07.21 08:31:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_nr: 2
2016.07.21 08:31:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_event: ZirkusOben_KLIMA
2016.07.21 08:31:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_2
2016.07.21 09:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_nr: 2
2016.07.21 09:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_event: ZirkusOben_KLIMA
2016.07.21 09:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_2
2016.07.21 09:31:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_nr: 2
2016.07.21 09:31:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_event: ZirkusOben_KLIMA
2016.07.21 09:31:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_2
2016.07.21 10:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_nr: 2
2016.07.21 10:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_event: ZirkusOben_KLIMA
2016.07.21 10:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_2
2016.07.21 10:21:19 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_nr: 2
2016.07.21 10:21:19 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_event: ZirkusOben_KLIMA
2016.07.21 10:21:19 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_2
2016.07.21 10:21:19 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_nr: 2
2016.07.21 10:21:19 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_event: Container_XTENDER_Schalter_KLIMAAnAusDOIF
2016.07.21 10:21:19 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_2
2016.07.21 10:21:19 1: listnotify: Geraet: Container_XTENDER_Schalter_KLIMAAnAusDOIF --> Events: cmd_nr: 1
2016.07.21 10:21:19 1: listnotify: Geraet: Container_XTENDER_Schalter_KLIMAAnAusDOIF --> Events: cmd_event: timer_1
2016.07.21 10:21:19 1: listnotify: Geraet: Container_XTENDER_Schalter_KLIMAAnAusDOIF --> Events: cmd_1
2016.07.21 10:21:19 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_nr: 2
2016.07.21 10:21:19 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_event: ZirkusOben_KLIMA
2016.07.21 10:21:19 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_2
2016.07.21 10:31:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_nr: 2
2016.07.21 10:31:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_event: ZirkusOben_KLIMA
2016.07.21 10:31:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_2
2016.07.21 11:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_nr: 2
2016.07.21 11:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_event: ZirkusOben_KLIMA
2016.07.21 11:01:36 1: listnotify: Geraet: KLIMA2StundenDOIF --> Events: cmd_2

......


die halbstündigen Einträge kommen von einem addlog auf Container_XTENDER_Schalter_KLIMAAnAusDOIF worauf KLIMA2StundenDOIF  reagiert.