Hauptmenü

Zeitsteuerung und Presence

Begonnen von Benny33, 18 September 2016, 11:14:08

Vorheriges Thema - Nächstes Thema

Benny33

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

Benny33

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

Ellert

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)

Benny33

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

Damian

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

Benny33

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

Benny33

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

Damian

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

Benny33

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?

Otto123

!([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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

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

Ellert

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

Damian

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

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

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Benny33

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