Manuelle Betätigung einer Winmatic erfassen

Begonnen von Der_müde_Joe, 27 Mai 2018, 21:24:49

Vorheriges Thema - Nächstes Thema

Der_müde_Joe

Hallo,

ich habe mein Haus mit mehreren Winmatic ausgestattet und die Belüftung komplett automatisiert, indem die Luftfeuchtigkeit drinnen und draußen verglichen wird und im Winter sogar noch die Schimmelgefährdung mit einbezogen wird.

define HWR.Lueften.Automatik_Winter DOIF ([HWR_TF:schimmelGefahr] eq "ja" and [HWR_TF:lueftenMoeglich] eq "ja")  (set H_Fenster_01 level 100 ignore 50, set HWR_Entfeuchter off) DOELSEIF ([HWR_TF:schimmelGefahr] eq "ja" and [HWR_TF:lueftenMoeglich] eq "nein") (set H_Fenster_01 level 0 0 50, set HWR_Entfeuchter on) DOELSE (set H_Fenster_01 level 0 0 50, set HWR_Entfeuchter off)
attr HWR.Lueften.Automatik_Winter room HWR
define HWR.Lueften.Automatik_Sommer DOIF ([HWR_TF:lueftenMoeglich] eq "ja")  (set H_Fenster_01 level 100 ignore 50, set HWR_Entfeuchter off) DOELSEIF ([HWR_TF:schimmelGefahr] eq "ja" and [HWR_TF:lueftenMoeglich] eq "nein") (set H_Fenster_01 level 0 0 50, set HWR_Entfeuchter on) DOELSE (set H_Fenster_01 level 0 0 50, set HWR_Entfeuchter off) (set H_Fenster_01 level 0 0 50, set HWR_Entfeuchter off)
attr HWR.Lueften.Automatik_Sommer room HWR


"Leider" kann man die Winmatic an ihren Tastern ja auch Manuell betätigen und dies unterliegt natürlich keiner Automatisierung. Bedeutet, wenn es ganz schlecht läuft könnte das Fenster ewig aufbleiben nach der manuellen Betätigung, da die Abfrageparameter nie mehr erreicht werden.

Nun gibt es für mich zwei Möglichkeiten. Entweder ich erfasse irgendwie, dass das Fenster Manuell betätigt wurde und gebe nach z.B. 15 Minuten den Befehl wieder in die Ausgangslage zurück zu gehen. Da habe ich dann aber das Problem, dass ich die Ausgangslage in den 15 Minuten schon wieder geändert haben könnte... Oder ich müsste alle 15 MIn in dem DOIF überprüfen, ob das Fenster noch die Position hat und es dann zurück setzen. Dies hatte ich mit einem do always versucht, aber dann läuft alle 15 Minuten die Entriegelung, da das Fenster dann für 0 Sekungen auf die Position 0 fährt.

Hat einer eine Idee, wie man das ordentlich lösen kann?

Lieben Gruß
Joe

Markus M.

Ich hab zwar keine Ahnung von DOIF und halte das hier auch für wenig geeignet, verstehe aber dein Problem nicht ganz (da du den aktuellen level Wert ja jederzeit auslesen kannst).
Ich kann dir aber sagen wie ich es gemacht habe:

Ich habe mir eine sehr lange Funktion geschrieben, die alle 15 Minuten aufgerufen wird.
Darin wird abhängig von vielen Faktoren und in geeigneter Reihenfolge der Soll-Zustand meiner Fenster definiert und dann unter Umständen auch angefahren.

Vereinfacht:
- Lock bei Urlaub und Abwesenheit bei Dunkelheit, hohen Windgeschwindigkeiten, tiefen Temperaturen oder leeren Akkus
- Schliessen ungeschützter Fenster wenn es regnet
- Schliessen/öffnen bei entsprechenden Temperaturunterschieden je Raum, wenn das Heizsystem im Sommer auf "Kühlen" steht
- Keine Fahrt, wenn es in den letzten X Minuten (egal aus welchem Grund) schon eine Fahrt gab
- Kein Schliessen in der Küche, solange gekocht wird

Hoffe das hilft dir als Denkanstoss erst mal weiter.
Aktuell weder Smarthome noch FHEM vorhanden

Pfriemler

Ich habe (noch) keine Winmatic (Anschaffung für ein Fenster ist aber "in Arbeit") und verstehe nicht: Eine Winmatic meldet doch hoffentlich - wie alle anderen Homematic-Geräte auch - ihren Status selbsttätig an die Zentrale, auch nach einer Positionsänderung. Darauf kann man doch direkt reagieren.

Ein Großteil meiner Automatisierung arbeitet - vereinfacht gesagt - mit Soll-Vorgaben, Ist-Analysen und Korrekturmöglichkeiten. Das ist zwar etwas aufwändiger, sorgt aber für nachvollziehbare Ereignisse und Situationen, bei Bedarf durch Logeinträge.

Konkretes Beispiel: Mein Garagentorantrieb kann durch FHEM gesteuert werden. Die Benutzeroberflächen (Web, Taster) setzen dabei nur eine Status-/Wunschvariable (öffne, schließe, lüfte), ein erstes DOIF schickt die Befehle ab (set open, set close, set ventilation), ein zweites DOIF erfasst zurückgemeldete Zustände und setzt die besagte Variable auf den Zustand (auf, zu, Lüftung). Ein Icon auf der Weboberfläche zeigt alle Zustände an, eben inklusive der optischen Rückmeldung über den erfassten Fahrbefehl.

Das auf den Ist-Zustand reagierende DOIF erfasst auch ungeplante Zustände (undefinierter Zwischenstand, Meldung von Torkontakt und Antrieb stimmen nicht überein etc) - und reagiert auch auf einen lokalen Tastendruck, der sonst keine Ereignisse erzeugt: Meldet das Tor einen geänderten Zustand,  ohne dass die Wunschvariable kurz zuvor gesetzt wurde (Alter des readings), dann liegt mit Sicherheit eine lokale Betätigung vor, etwa weil der Postbote das (systemspezifische) Funk-Zahlenschloss benutzt hat um ein Paket zu hinterlegen. Das bekomme ich dann explizit aufs Handy gemeldet. Das klappt völlig ohne zyklische Abfragen.

Sowas ähnliches könnte hier auch klappen: Wunschzustand in Dummy setzen und übermittlen, auf Abweichung vom Wunschzustand direkt reagieren.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Der_müde_Joe

Hallo,

ich habe mich ja nun länger nicht gemeldet und wollte nun nach viel basteln eine Rückmeldung geben, wie ich das ganze für mich angemessen gelöst habe.

Ursprünglich hing bei mir das öffnen des Fensters und das Einschalten eines Entfeuchters von zwei Variablen ab. Die zwei in jedem Fall gesetzten Variablen definierten einerseits die Schimmelgefahr mit Ja/Nein und die zweite Variable war ob Lüften überhaubt möglich ist abhängig von der inneren und äußeren Luftfeuchte. Ebenfalls mit Ja/Nein.

Nun habe ich eure Ideen befolgt und habe zwei weiteren Variablen aufgenommen:
Fenster verriegelt oder nicht
und
Entfeuchter An oder Nicht

Somit hatte ich nun vier Variablen. Nicht jede Kombination aus diesen Variablen ist natürlich sinnvoll, aber gerade wenn da einer noch von Hand das Festern öffnet oder den Entfeuchter ausschaltet, ist es möglich, dass diese Kombinationen auftreten. Also habe ich mir eine Schalttabelle in Excel erstellt um alle Kombinationen einmal abzubilden. Insgesamt ergeben sich bei vier Variablen 16 Kombinationen.


schimmel lüften Fenster Entfeuchter ziel Fenster ziel entfeuchter
1 1 1 1 - aus
0 1 1 1 zu aus
1 0 1 1 zu -
0 0 1 1 zu aus
1 1 0 1 auf aus
0 1 0 1 - aus
1 0 0 1 - -
0 0 0 1 - aus
1 1 1 0 - -
0 1 1 0 zu -
1 0 1 0 zu an
0 0 1 0 zu -
1 1 0 0 auf -
0 1 0 0 - -
1 0 0 0 - an
0 0 0 0 - -



Danach habe ich dann das oben abgebildete in ein DOIF gepackt und die Zeilen ohne Ziel natürlich gelöscht. Denn wenn es nichts zu tun gibt, macht es auch keinen Sinn diese Kombinationen abzufragen.

Der Entfeuchter ist in diesem Raum ein Dummy deshalb das &STATE


define HWR.Lueften.Automatik_Winter DOIF ([HWR_TF:schimmelGefahr] eq "ja" and [HWR_TF:lueftenMoeglich] eq "ja" and [H_Fenster_01:state] eq "100" and [HWR_Entfeuchter:&STATE] eq "on") (set HWR_Entfeuchter off) DOELSEIF ([HWR_TF:schimmelGefahr] eq "nein" and [HWR_TF:lueftenMoeglich] eq "ja" and [H_Fenster_01:state] eq "100" and [HWR_Entfeuchter:&STATE] eq "on") (set H_Fenster_01 level 0 0 20, set HWR_Entfeuchter off) DOELSEIF ([HWR_TF:schimmelGefahr] eq "ja" and [HWR_TF:lueftenMoeglich] eq "nein" and [H_Fenster_01:state] eq "100" and [HWR_Entfeuchter:&STATE] eq "on") (set H_Fenster_01 level 0 0 20) DOELSEIF ([HWR_TF:schimmelGefahr] eq "nein" and [HWR_TF:lueftenMoeglich] eq "nein" and [H_Fenster_01:state] eq "100" and [HWR_Entfeuchter:&STATE] eq "on") (set H_Fenster_01 level 0 0 20, set HWR_Entfeuchter off) DOELSEIF ([HWR_TF:schimmelGefahr] eq "ja" and [HWR_TF:lueftenMoeglich] eq "ja" and [H_Fenster_01:state] eq "locked" and [HWR_Entfeuchter:&STATE] eq "on") (set H_Fenster_01 level 100 ignore 20, set HWR_Entfeuchter off) DOELSEIF ([HWR_TF:schimmelGefahr] eq "nein" and [HWR_TF:lueftenMoeglich] eq "ja" and [H_Fenster_01:state] eq "locked" and [HWR_Entfeuchter:&STATE] eq "on") (set HWR_Entfeuchter off) DOELSEIF ([HWR_TF:schimmelGefahr] eq "nein" and [HWR_TF:lueftenMoeglich] eq "nein" and [H_Fenster_01:state] eq "locked" and [HWR_Entfeuchter:&STATE] eq "on") (set HWR_Entfeuchter off) DOELSEIF ([HWR_TF:schimmelGefahr] eq "nein" and [HWR_TF:lueftenMoeglich] eq "ja" and [H_Fenster_01:state] eq "100" and [HWR_Entfeuchter:&STATE] eq "off") (set H_Fenster_01 level 0 0 20) DOELSEIF ([HWR_TF:schimmelGefahr] eq "ja" and [HWR_TF:lueftenMoeglich] eq "nein" and [H_Fenster_01:state] eq "100" and [HWR_Entfeuchter:&STATE] eq "off") (set H_Fenster_01 level 0 0 20, set HWR_Entfeuchter on) DOELSEIF ([HWR_TF:schimmelGefahr] eq "nein" and [HWR_TF:lueftenMoeglich] eq "nein" and [H_Fenster_01:state] eq "100" and [HWR_Entfeuchter:&STATE] eq "off") (set H_Fenster_01 level 0 0 20) DOELSEIF ([HWR_TF:schimmelGefahr] eq "ja" and [HWR_TF:lueftenMoeglich] eq "ja" and [H_Fenster_01:state] eq "locked" and [HWR_Entfeuchter:&STATE] eq "off") (set H_Fenster_01 level 100 ignore 20) DOELSEIF ([HWR_TF:schimmelGefahr] eq "ja" and [HWR_TF:lueftenMoeglich] eq "nein" and [H_Fenster_01:state] eq "locked" and [HWR_Entfeuchter:&STATE] eq "off") (set HWR_Entfeuchter on)
attr HWR.Lueften.Automatik_Winter room HWR
attr HWR.Lueften.Automatik_Winter do always


Nun fehlt mir noch eine Idee, wie ich eine Sperrzeit definieren kann. Also dass nach einem öffnen z.B. das Fenster erst wieder nach einer Stunde öffnet um sicher zu stellen, dass das Fenster nicht alle fünf Minuten auf- und wieder zu fährt. Hat Dazu jemand eine Idee, wie man das einbringen könnte?

Lieben Gruß
Joe