FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Benny33 am 18 September 2016, 11:14:08

Titel: Zeitsteuerung und Presence
Beitrag von: Benny33 am 18 September 2016, 11:14:08
Moin Zusammen,

Ich möchte zwischen 6 und 21 Uhr das die Zirkulationspumpe nur ein ist, wenn jemand zu Hause ist.
Von 21-6 Uhr soll die Pumpe auf jeden Fall aus sein ob einer da ist oder nicht.

([06:00-21:00] and ([Handy1] eq "present" or [Handy2] eq "present"))
(set ZirkPumpe on)
DOELSE
(set ZirkPumpe off)

Diese Funktion funktioniert auch. Sollte aber einer nach 21 Uhr Heim kommen geht die Pumpe an und nicht mehr aus, aber warum geht sie überhaupt erst an?

Gruß Benny
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Benny33 am 18 September 2016, 11:52:43
Ich glaube ich habs. Weiter unten habe ich endlich was dazu gefunden. Obwohl ich schon Stunden mit dem Problem mich beschäftigt habe.

([06:00-21:00] and ([Handy1] eq "present" or [Handy2] eq "present"))
(set ZirkPumpe on)
DOELSEIF ([21:00])
(set ZirkPumpe off)

Gerade ausprobiert so funktionierts glaube ich.

Benny
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Ellert am 18 September 2016, 16:56:32
Wenn um 7 Uhr beide abwesend sind, bleibt die Pumpe an bis 21 Uhr, da es vorher keinen Ausschalttrigger gibt.

Mit einen kompletten Ausschaltbedingung müsste es klappen.
([06:00-21:59] and ([Handy1] eq "present" or [Handy2] eq "present"))
(set ZirkPumpe on)
DOELSEIF ([21:00] or !([Handy1] eq "present" or [Handy2] eq "present"))
(set ZirkPumpe off)
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Benny33 am 19 September 2016, 12:20:45
Du hattest recht, ging heute nicht mehr aus.

Habe gerade dies hier eingefügt das scheint auch zu funktionieren.

([06:00-21:00] and [Handy1] eq "present" or [Handy2] eq "present")
(set ZirkPumpe on)
DOELSEIF ([21:00])
(set ZirkPumpe off)
DOELSE
(set ZirkPumpe off)


benny
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Damian am 19 September 2016, 13:13:48
Zitat von: Benny33 am 18 September 2016, 11:14:08
Moin Zusammen,

Ich möchte zwischen 6 und 21 Uhr das die Zirkulationspumpe nur ein ist, wenn jemand zu Hause ist.
Von 21-6 Uhr soll die Pumpe auf jeden Fall aus sein ob einer da ist oder nicht.

([06:00-21:00] and ([Handy1] eq "present" or [Handy2] eq "present"))
(set ZirkPumpe on)
DOELSE
(set ZirkPumpe off)

Diese Funktion funktioniert auch. Sollte aber einer nach 21 Uhr Heim kommen geht die Pumpe an und nicht mehr aus, aber warum geht sie überhaupt erst an?

Gruß Benny

Das Zeitintervall [06:00-21:00]  ist ab 21:00 nicht wahr, also kann die Pumpe nach 21:00 Uhr gar nicht angehen,  wenn jemand nachhause kommt, da mit and verknüpft - zumindest nicht bei dieser DOIF-Definition.

Gruß

Damian
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Benny33 am 19 September 2016, 15:11:46
Zitat von: Damian am 19 September 2016, 13:13:48
Das Zeitintervall [06:00-21:00]  ist ab 21:00 nicht wahr, also kann die Pumpe nach 21:00 Uhr gar nicht angehen,  wenn jemand nachhause kommt, da mit and verknüpft - zumindest nicht bei dieser DOIF-Definition.

Gruß

Damian

Ich möchte Deine Fachkenntnis nicht in Frage stellen, aber die Pumpe ging nach 21:00 an wenn jmd nach Hause kam.
Ich dachte ja auch sie dürfte nicht angehen, aber sie machte es. Ellerts hats ja auch erkannt.

Grüsse
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Benny33 am 19 September 2016, 15:15:11
Zitat von: Ellert am 18 September 2016, 16:56:32
Wenn um 7 Uhr beide abwesend sind, bleibt die Pumpe an bis 21 Uhr, da es vorher keinen Ausschalttrigger gibt.

Mit einen kompletten Ausschaltbedingung müsste es klappen.
([06:00-21:59] and ([Handy1] eq "present" or [Handy2] eq "present"))
(set ZirkPumpe on)
DOELSEIF ([21:00] or !([Handy1] eq "present" or [Handy2] eq "present"))
(set ZirkPumpe off)


Würdest Du mir bitte erklären was das Ausrufezeichen vor Handy1 bedeutet? in der Commandref unter DOIF habe ich nichts gefunden.
Sollte die erste Uhrzeit nicht 06:00-20:59 statt bis 21:59 heissen, Wenn nicht bitte auch erklären.

Vielen Dank
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Damian am 19 September 2016, 17:40:30
Zitat von: Benny33 am 19 September 2016, 15:11:46
Ich möchte Deine Fachkenntnis nicht in Frage stellen, aber die Pumpe ging nach 21:00 an wenn jmd nach Hause kam.
Ich dachte ja auch sie dürfte nicht angehen, aber sie machte es. Ellerts hats ja auch erkannt.

Grüsse

Na ja, ich weiß nicht was du sonst so in deiner Umgebung definiert hast. Aber ein Zeitintervall [06:00-21:00] ist per Definition ab 21:00 Uhr nicht wahr. Du kannst abgesehen davon in den Readings eines DOIF-Moduls immer sehen wann, wodurch zuletzt geschaltet wurde.

Ein Ausrufezeichen bedeutet in Perl (sowie in vielen anderen Programmiersprachen) und damit in der Bedingung von DOIF: Negation.
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Benny33 am 19 September 2016, 19:32:34
Zitat von: Damian am 19 September 2016, 17:40:30

Ein Ausrufezeichen bedeutet in Perl (sowie in vielen anderen Programmiersprachen) und damit in der Bedingung von DOIF: Negation.

Ich kann S5 und S7 programmieren. Dann würde das in diesem Fall (oder Uhrzeit oder nicht Handy1 present oder nicht Handy2 present)?
Also quasi (Uhrzeit oder Handy1 absent oder Handy2 absent). Habe ich das so richtig verstanden?
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Otto123 am 19 September 2016, 19:52:47
!([Handy1] eq "present" or [Handy2] eq "present")
present     present --> 1 oder 1 --> 1 --> ! --> 0
present     absent --> 1 oder 0 --> 1 --> ! --> 0
absent     present --> 0 oder 1 --> 1 --> ! --> 0
absent     absent --> 0 oder 0 --> 0 --> ! --> 1

Wenn es 21:00 ist dann ist der Ausdruck
21:00 oder 0 --> 1
21:00 oder 1 --> 1
die Anwesenheit ist egal
In der Zeit von 06:00 bis 21:59
1 und 0 --> 0
1 und 1 --> 1
Die Anwesenheit ist dominant.

Aber die Zeiten überlappen sich, die Pumpe muss 21:00 laufen, DOELSEIF fragt erst nach 21:59 und dann ist es nicht 21:00  8)

Gruß Otto
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Damian am 20 September 2016, 07:47:32
Zitat von: Otto123 am 19 September 2016, 19:52:47
!([Handy1] eq "present" or [Handy2] eq "present")
present     present --> 1 oder 1 --> 1 --> ! --> 0
present     absent --> 1 oder 0 --> 1 --> ! --> 0
absent     present --> 0 oder 1 --> 1 --> ! --> 0
absent     absent --> 0 oder 0 --> 0 --> ! --> 1

Wenn es 21:00 ist dann ist der Ausdruck
21:00 oder 0 --> 1
21:00 oder 1 --> 1
die Anwesenheit ist egal
In der Zeit von 06:00 bis 21:59
1 und 0 --> 0
1 und 1 --> 1
Die Anwesenheit ist dominant.

Aber die Zeiten überlappen sich, die Pumpe muss 21:00 laufen, DOELSEIF fragt erst nach 21:59 und dann ist es nicht 21:00  8)

Gruß Otto

Oder anders formuliert:

not (A oder B) ist gleich (not A und not B)
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Ellert am 20 September 2016, 08:12:07
Meine Überlegung war schlichter, wenn das Eintreten der Bedingung X (X entspricht hier [Handy1] eq "present" or [Handy2] eq "present") einschaltet, muss das Eintreten des Gegenteils ausschalten, also !X  ;)
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Damian am 20 September 2016, 08:28:27
Zitat von: Ellert am 20 September 2016, 08:12:07
Meine Überlegung war schlichter, wenn das Eintreten der Bedingung X (X entspricht hier [Handy1] eq "present" or [Handy2] eq "present") einschaltet, muss das Eintreten des Gegenteils ausschalten, also !X  ;)

Sicher, das ist ja alles nicht falsch, nur die ursprüngliche Definition ist völlig ausreichend:

([06:00-21:00] and ([Handy1] eq "present" or [Handy2] eq "present"))
(set ZirkPumpe on)
DOELSE
(set ZirkPumpe off)


Denn um 21:00 Uhr wird getriggert und auf jeden Fall DOELSE ausgeführt (lässt sich mit list des Moduls nachweisen). Wenn seine Pumpe danach läuft, dann hat es andere Gründe (Befehl am Aktor nicht angekommen oder System zwischendurch runtergefahren und das Modul geht vom falschen Zustand aus usw.)

Gruß

Damian

Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Otto123 am 20 September 2016, 12:16:10
Ich sehe das genau wie Damian. Aber Benny33 meint ja auch noch: wenn nach 21:00 Uhr einer kommt geht die Pumpe an, dass kann durch diese Definition gar nicht sein!

@Benny33 Wenn du deine Definition ZirkPumpe in der Weboberfläche anschaust, was steht da alles ganz unten unter
Probably associated with ?

Gruß Otto
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Benny33 am 22 September 2016, 11:24:29
Jetzt habe ich zwei Tage den Code von Ellert benutzt und die Pumpe ging nicht an wie zu erwarten.
Nun wollte ich das gerade mit meinem im ersten Post genannten Code simulieren und was soll ich sagen es geht nicht zu simulieren,
der Code macht das was er soll, wenn jmd nachdem per zeit ausgeschaltet ist heim kommt bleibt die Pumpe aus.
Jetzt steh ich da wie ein Depp. Menno. Ich könnt in die Tischkante beissen.
Ich werde jetzt wieder meinen Code vom ersten Post nehmen und mich melden wenn es nochmal vorkommt.

Danke für eure Unterstützung

LG Benny
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Otto123 am 22 September 2016, 11:37:14
Zitat von: Benny33 am 22 September 2016, 11:24:29
Jetzt steh ich da wie ein Depp. Menno. Ich könnt in die Tischkante beissen.
Ich werde jetzt wieder meinen Code vom ersten Post nehmen und mich melden wenn es nochmal vorkommt.
Hallo Benny,

vielleicht hat Pumuckel Zugriff auf den Schalter für die Zirkpumpe?  ;D
Bei mir macht der ja so manches, aber FHEM hat der bisher noch nicht.

Ich hätte gedacht irgendein andere Vorgang schaltet die Pumpe, aber in in deinem Screenshot sieht alles gut aus.

Gruß Otto
Titel: Antw:Zeitsteuerung und Presence
Beitrag von: Ellert am 22 September 2016, 12:24:02
ZitatIch werde jetzt wieder meinen Code vom ersten Post nehmen und mich melden wenn es nochmal vorkommt.

Wenn Du genau wissen möchtest welche Events auftreten und wie das DOIF schaltet, empfehle ich Dir ein extra FileLog zu erstellen, dort kannst Du nachvollziehen was abgelaufen ist, falls DU ein Fehlverhalten bemerkst.

define DOIF_Log FileLog ./log/DOIF_Log-%j.log <DOIFname>:.*|Handy1:.*|Handy2:.*|ZirkPumpe:.*