FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: onkel25 am 21 Februar 2017, 21:24:50

Titel: Bedingte Zeitsteuerung
Beitrag von: onkel25 am 21 Februar 2017, 21:24:50
Hallo zusammen

ich bin recht neu mit fhem unterwegs, habe schon einfache Sachen realisiert und wollte das jetzt gern ein wenig feintunen. Damit ich mich strukturiert damit beschäftigen kann, würde mir eine grobe Richtung und ein paar Stichworte, wie ich das folgende realisieren kann, sehr helfen.

Aktuelles Szenario:
- Jalousien fahren (zu unterschiedlichen Zeiten) runter

Wunschszenario
- Jalousien fahren nur herunter, wenn das jeweiligen Fenster nicht geöffnet ist
- sobald das Fenster dann geschlossen wird, fährt die Jalousie (ggf. mit ein wenig Zeitverzug) runter.

Mir geht es nur um ein paar Stichworte, wie das Wunschszenario möglichst elegant softwareseitig realisiert werden kann. Hardware existiert (Homematic und funktioniert getrennt voneinander super). Vermutlich ist es ja sinnvoll, die Logik (check des Öffnungszustands, nicht runterfahren, runterfahren sobald geschlossen) zentral zu hinterlegen, damit ich das nicht hartkodiert für jede einzelne Kombination von Sensor und Jalousieaktor separat machen muss.

Vielen Dank im Voraus!
Mario
Titel: Antw:Bedingte Zeitsteuerung
Beitrag von: Thorsten Pferdekaemper am 22 Februar 2017, 08:40:14
Hi,
das kommt ein bisschen darauf an, mit was Du das "aktuelle Szenario" realisiert hast. Sag mal was dazu.
Mein Ansatz wäre ansonsten, vor dem Herunterfahren, z.B. mit IF den Zustand des Fensterkontakts zu prüfen und dann eben nicht oder halt doch zu schließen. Dann noch ein notify auf den Fensterkontakt, der prüft, ob es Zeit ist, die Jalousie zu schließen.
Wenn man das ganze mit geschickten Namen und RegExen macht, dann muss man da auch nicht verfielfältigen. Ansonsten kann man bestimmt etwas in die 99_myUtils.pm auslagern.
Möglicherweise kann man da auch was mit DOIF machen, aber dann müsstest Du in den DOIF-Bereich wechseln.
Gruß,
   Thorsten
Titel: Antw:Bedingte Zeitsteuerung
Beitrag von: onkel25 am 22 Februar 2017, 20:01:15
Hallo Thorsten,

Vielen Dank! Aktuell läuft das über eine Gruppe (insofern Korrektur meines ersten Posts - alle fahren zur gleichen Zeit runter; nur in unterschiedlichen Gruppen zu anderen Zeiten hoch):

define JalousienSonnenuntergang at *{sunset_abs()} set alle_Jalousien off

Wenn ich Dich richtig verstehe könnte ich die Prüfung des Schließzustands mit RegEx in Richtung "fahre *.Jalousie runter, wenn *.Tuersensor = closed" realisieren (Alle Bezeichungen folgen der gleichen Logik: WoZ.Jalousie, WoZ.Tuersensor | KiZ.Jalousie, KiZ.Tuersensor etc.)

Lese mich basierend auf Deinen Stichworten mal weiter ein.

Vielen Dank und Grüße!
Mario
Titel: Antw:Bedingte Zeitsteuerung
Beitrag von: Thorsten Pferdekaemper am 22 Februar 2017, 23:42:38
Zitat von: onkel25 am 22 Februar 2017, 20:01:15Wenn ich Dich richtig verstehe könnte ich die Prüfung des Schließzustands mit RegEx in Richtung "fahre *.Jalousie runter, wenn *.Tuersensor = closed" realisieren
Im Prinzip ja, aber ganz so einfach ist es dann doch nicht. Im Trigger des notify geht das schon, aber dann wird man wahrscheinlich mit ein bisschen Zeichenkettenverarbeitung tricksen müssen.
Gruß,
   Thorsten
Titel: Antw:Bedingte Zeitsteuerung
Beitrag von: onkel25 am 25 Februar 2017, 16:57:12
Ich habe jetzt als Zwischenstand eine Lösung mit DOIF gefunden, mit der ich erstmal ganz zurfrieden bin.

define BiB.Jalousie.close DOIF ([{sunset()}] and [BiB.Tuersensor] eq "closed") (set BiB.Jalousie off) DOELSEIF ([BiB.Tuersensor] eq "open") (set BiB.Jalousie on) DOELSEIF ([BiB.Tuersensor] eq "closed" and [{sunset()}-{sunrise_abs(0,"7:15")}]) (set BiB.Jalousie off) DOELSEIF ([{sunrise_abs(0,"7:15")}]) (set BiB.Jalousie on)

Da es nur um 6 Jalousien geht, habe ich mich erstmal für die "händische" Version entschieden, das einzeln für jede anzulegen. Dadurch bin ich mit den Schließzeiten variabel und eine Verallgemeinerung wäre vermutlich komplexer. Zusätzlich öffnen jetzt noch die Jalousien, wenn man das Fenster öffnet und - sofern es nachts ist - schließt anschließend wieder.

Meine Frau ist begeistert #WAF

Viele Grüße, Mario
Titel: Antw:Bedingte Zeitsteuerung
Beitrag von: Damian am 25 Februar 2017, 19:25:11
Zitat von: onkel25 am 25 Februar 2017, 16:57:12
Ich habe jetzt als Zwischenstand eine Lösung mit DOIF gefunden, mit der ich erstmal ganz zurfrieden bin.

define BiB.Jalousie.close DOIF ([{sunset()}] and [BiB.Tuersensor] eq "closed") (set BiB.Jalousie off) DOELSEIF ([BiB.Tuersensor] eq "open") (set BiB.Jalousie on) DOELSEIF ([BiB.Tuersensor] eq "closed" and [{sunset()}-{sunrise_abs(0,"7:15")}]) (set BiB.Jalousie off) DOELSEIF ([{sunrise_abs(0,"7:15")}]) (set BiB.Jalousie on)

Da es nur um 6 Jalousien geht, habe ich mich erstmal für die "händische" Version entschieden, das einzeln für jede anzulegen. Dadurch bin ich mit den Schließzeiten variabel und eine Verallgemeinerung wäre vermutlich komplexer. Zusätzlich öffnen jetzt noch die Jalousien, wenn man das Fenster öffnet und - sofern es nachts ist - schließt anschließend wieder.

Meine Frau ist begeistert #WAF

Viele Grüße, Mario

Hier ist ein Beispiel für Verallgemeinerung https://forum.fhem.de/index.php/topic,46327.msg592816.html#msg592816, setzt allerdings voraus, dass du dich schon mit Regex-Syntax beschäftigt hast.