[Gelöst] DOIF: Fensterkontakt mit Wartezeit

Begonnen von FSausF, 07 Februar 2020, 01:11:12

Vorheriges Thema - Nächstes Thema

FSausF

Zitat von: xenos1984 am 07 Februar 2020, 09:32:29
DOIF ([Fenster_Wohnzimmer:state] eq "open")
(set Heizkoerper_Wohnzimmer_Sw off)
DOELSEIF (([Hauptschalter:state] eq "off") or ([Wohnzimmer_Climate:measured-temp] > [Wohnzimmer_Climate:desired-temp]))
(set Heizkoerper_Wohnzimmer_Sw off)
DOELSE
(set Heizkoerper_Wohnzimmer_Sw on)

Dazu die Attribute:
wait 60:0:0
do resetwait
repeatsame 1

Hi,
das ist beim Öffnen der Tür schon richtig gut, so will ich das!
Aber beim Schließen nicht. Denn da ist der Sensor noch zeitlich sensibel. Also, wenn die Tür beim Bierholen hinter mir zufällt. Oder wenn ich sie zwischen Kippen und Öffnung wechsele.
Ich fürchte, ich werde doch noch eine intensive Runde mit ReadingsTimeVal spielen müssen.
Dazu muß ich das erst Mal dazu kriegen, überhaupt etwas auszuspucken.
Die Idee ist, das Reading des Fenstersensors nur dann zu verwenden, wenn es älter als XX Sekunden (also stabil) ist.

Hat einer eine Idee, wie ich im DOIF den ReadinsTimeVal mit der aktuellen Zeit verglichen kriege?
(Ich surfe parallel zu ReadingsTimeVal nochmal im Forum...)

amenomade

Dann mach einfach ein zusätzliches DOELSEIF Fenster closed, mit entspr. wait timer
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

FSausF

Zitat von: amenomade am 09 Februar 2020, 00:01:29
Dann mach einfach ein zusätzliches DOELSEIF Fenster closed, mit entspr. wait timer
Ja, da bin ich auch gerade angekommen, nachdem ich es mit "ReadinsAge" versucht hatte. Das funktioniert zwar, aber das Erreichen des "ReadingsAge" triggert das DOIF nicht...

Also ist der Plan:

  • Ich kreiere mir einen Dummy mit möglichen Status "open" und "closed"
  • Ich baue mir dazu einen DOIF, der den Status des Dummies abhängig vom Fensterkontakt mit WAIT setzt. Und sich ruhig verhält so lange einer am Fenster rumspielt.
  • Ich nehme den Dummy in die Steuerung meiner Heizung.
  • Alles wird gut!

Ich werde berichten...

amenomade

#18
Zitat von: FSausF am 09 Februar 2020, 00:06:51
Ja, da bin ich auch gerade angekommen, nachdem ich es mit "ReadinsAge" versucht hatte. Das funktioniert zwar, aber das Erreichen des "ReadingsAge" triggert das DOIF nicht...

Wer spricht von ReadingsAge??? ?

DOIF ([Fenster_Wohnzimmer:state] eq "open")
(set Heizkoerper_Wohnzimmer_Sw off)
DOELSEIF ([Fenster_Wohnzimmer:state] eq "closed")
(set Heizkoerper_Wohnzimmer_Sw on)
DOELSEIF (([Hauptschalter:state] eq "off") or ([Wohnzimmer_Climate:measured-temp] > [Wohnzimmer_Climate:desired-temp]))
(set Heizkoerper_Wohnzimmer_Sw off)
DOELSE
(set Heizkoerper_Wohnzimmer_Sw on)
wait 60:30:0:0


Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

FSausF

Zitat von: amenomade am 09 Februar 2020, 00:15:25
DOIF ([Fenster_Wohnzimmer:state] eq "open")
(set Heizkoerper_Wohnzimmer_Sw off)
DOELSEIF ([Fenster_Wohnzimmer:state] eq "closed")
(set Heizkoerper_Wohnzimmer_Sw on)
DOELSEIF (([Hauptschalter:state] eq "off") or ([Wohnzimmer_Climate:measured-temp] > [Wohnzimmer_Climate:desired-temp]))
(set Heizkoerper_Wohnzimmer_Sw off)
DOELSE
(set Heizkoerper_Wohnzimmer_Sw on)
wait 60:30:0:0

Nee, Du, ich glaub', das ist so nicht der Kracher...
Denn das schaltet doch die Heizung immer ein, wenn einer die Tür wieder zu macht.
Ich geh' mal an die Sache mit dem Dummy...

FSausF

So, Leute, ich glaub', ich hab's.
Danke für Euer Hirnschmalz!

Hier die Zusammenfassung:

Was ist das Problem?
Der Homematic-Fenstersensor HM-SEC-SCO sendet Statusänderungen sofort. Wenn man ein Fenster von Kipp auf offen wechselt, gibt es zwischndurch ein kurzes "closed"-Reading. Das ist hinderlich, wenn man eine Steuerung haben möchte, die nur dann reagiert, wenn das Reading stabil ist. Also keiner an der Tür spielt, weil er sich zum Beispiel auf dem Balkon ein Bier holt.

Wie ist die Lösung?
Übersichtlich und relativ einfach geht das mit drei Komponenten:
1.) Ein Dummy, der den Status des Fenstersensors zeitversetzt und beruhigt spiegelt.
Zum Beispiel mit folgenden Attributen:
devStateIcon open:fts_window_1w_open@red closed:fts_window_1w
setList closed open

2.) Ein DOIF, das den Status des Dummies abhängig vom Fenstersensor steuert.
Zum Beispiel:
DOIF
([Fenster_Wohnzimmer:state] eq "closed")
(set dummy_Balkontuer closed)
DOELSE
(set dummy_Balkontuer open)
mit den Attributen:
wait 60:60

3.) Ein DOIF, das dann die eigentliche Steuerung, zum Beispiel der Heizung macht:
Also
DOIF
(([dummy_Balkontuer:state] eq "closed" and [Hauptschalter:state] eq "on") and
([Wohnzimmer_Climate:measured-temp] <= [Wohnzimmer_Climate:desired-temp]))
(set Heizkoerper_Wohnzimmer_Sw on)
DOELSE
(set Heizkoerper_Wohnzimmer_Sw off)

...und alles wird gut!
Also, das glaube ich jetzt zumindest.
Und das ist auch für Anfänger intellektuell einigermassen überschaubar.
Wenngleich es natürlich Geister gibt, die behaupten, eigentlich solle man DOIF gar nicht einsetzen und alles nur über NOTIFY lösen...

So, und jetzt hol' ich mir mal ein Bier vom Balkon...

FSausF

Per

Den Dummy kannst du weglassen und direkt den Status des DOIF nutzen.