FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Depechem am 29 Dezember 2019, 22:20:28

Titel: DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: Depechem am 29 Dezember 2019, 22:20:28
Hallo
ich möchte gern folgende Automatisierung erstellen. Nur leider komme ich nicht ganz weiter.
Folgendes soll gemacht werden

Wenn Fenster-Rolladen geschlossen Rollo_Badezimmer control 0
und Fenster geöffnet wird Bad_Fenster_angekippt Open
dann öffne Fenster-Rolladen set Rollo_Badezimmer control 100

soweit kein Problem als DOIF
([Rollo_Badezimmer:control] eq "0" and [Bad_Fenster_angekippt:state] eq "Open")(set Rollo_Badezimmer control 100)

nun soll aber der Rolladen nach 30 Minuten wieder runter gehen was grundlegend mit "sleep  1800" möglich ist > aber nur mit folgender Bedingung. Er soll nur wieder nach 30min runter gehen wenn die Zeit zwischen Sonnenuntergang und Sonnenaufgang liegt.
Also eine weitere Bedingung. Ist dies mit einem DOIF möglich? Vieleicht könnt ihr mir dazu einen Ansatz geben? Falls es damit nicht gelöst werden kann, wie wäre es alternativ möglich?

Danke Euch
VG Thomas
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: ahermann86 am 29 Dezember 2019, 23:04:25
Hallo,

ohne es getestet zu haben, hätte ich folgende Idee:


([Bad_Fenster_angekippt:state] eq "Open" and [?Rollo_Badezimmer:control] eq "0")
(set Rollo_Badezimmer control 100)
( IF ([{sunrise_abs("HORIZON=0",0)}] and [{sunset_abs("HORIZON=0",0)}]) (set Rollo_Badezimmer control 0) )

DOELSE
()  ##Timer abwürgen


Attributes:
wait 0,1800:0

Gruß
Axel
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: Depechem am 30 Dezember 2019, 07:58:48
Zitat von: ahermann86 am 29 Dezember 2019, 23:04:25
Hallo,

ohne es getestet zu haben, hätte ich folgende Idee:


([Bad_Fenster_angekippt:state] eq "Open" and [?Rollo_Badezimmer:control] eq "0")
(set Rollo_Badezimmer control 100)
( IF ([{sunrise_abs("HORIZON=0",0)}] and [{sunset_abs("HORIZON=0",0)}]) (set Rollo_Badezimmer control 0) )

DOELSE
()  ##Timer abwürgen


Attributes:
wait 0,1800:0

Gruß
Axel

Hallo Axel, Danke das kling schon mal gut. Leider springt er bei Ausführung immer gleich von cmd_1 über  cmd_1.1 zu cmd_2
Also kann er das IF nicht ganz auswerten.

so sieht es bei mir aus


([Bad_Fenster_angekippt:state] eq "Open" and [Rollo_Badezimmer:control] eq "0")
(set Rollo_Badezimmer control 100)
(IF ([{sunset("HORIZON=-3.5",0,"16:00","22:00")}] and [{sunrise("HORIZON=-3.2",0,"05:00","08:00")}]) (set Rollo_Badezimmer control 0))

DOELSE
()  ##Timer abwürgen


wo könnte noch der Fehler liegen?

meine normale Rolladensteuerung funktioniert mit folgenden 2 "at"
defmod Rollos_Wohnung_Thomas_Sonnenaufgang at *{sunrise("HORIZON=-3.2",0,"05:00","08:00")} set Rollo_Balkontuer pct 100;; set Rollo_Wohnzimmer pct 100;; set Rollo_Fenster_Kueche pct 100;; sleep 15;; set Rollo_Badezimmer pct 100;; set Rollo_KiZi_vorn pct 100

defmod Rollos_Wohnung_Thomas_Sonnenuntergang at *{sunset("HORIZON=-3.5",0,"16:00","22:00")} set Rollos_Wohnung_Thomas down;; sleep 0.5;; \
set Rollo_Wohnzimmer pct 55

Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: CoolTux am 30 Dezember 2019, 08:02:21
Hallo Thomas,

Was spricht gegen das ASC (AutoShuttersControl) Modul  ;)


Grüße
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: Depechem am 30 Dezember 2019, 08:20:33
Zitat von: CoolTux am 30 Dezember 2019, 08:02:21
Hallo Thomas,

Was spricht gegen das ASC (AutoShuttersControl) Modul  ;)


Grüße

stimmt das gibt es ja jetzt auch.
Muss ich mich mal in Ruhe mit beschäftigen. Kann man dort drin meine gewünschten Automatisierungen einfach lösen?
Laut Commandref soll ja genau das der Hintergrund des Moduls sein und da shast auch du wieder erstellt ;-)

Ich schaue es mir an. Danke
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: CoolTux am 30 Dezember 2019, 08:47:18
Einfach ist relativ. Du müsstest Dich etwas einarbeiten  ;D
Aber das meiste Deiner Wünsche sollte kein Problem sein.
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: ahermann86 am 30 Dezember 2019, 14:02:59
Hallo,

habe es nun doch einmal nachgebaut:


([EG_Fenster_Arbeit:getG1] eq "on" and [?EG_Rollo_Arbeit:getG1:d] == 100)
(set EG_Rollo_Arbeit Auf) ##Auf
( IF ([{sunrise_abs("HORIZON=0",0)}] and [{sunset_abs("HORIZON=0",0)}]) (set EG_Rollo_Arbeit Ab) )

DOELSE
()  ##Timer abwürgen


Das funktioniert bei mir auch so. Mir ist aufgefallen, dass du das "?" in dem [?Rollo_Badezimmer:control] eq "0") nicht eingebaut hast.
Ohne dem funktioniert das bei mir auch nicht. Das löst sofort einen Trigger beim Fahren aus und somit wird der DOELSE aktiv sobald der Rollladen nicht mehr "0" ist.

Füge das "?" ein und es wird funktionieren ;)

Gruß
Axel
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: CoolTux am 30 Dezember 2019, 14:07:34
Bedeutet das ? nicht eher das es keinen Trigger gibt sondern das hier lediglich eine Abfrage erfolgen soll?
Stand früher jedenfalls mal so in der Commandref
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: Damian am 30 Dezember 2019, 14:15:48
Diese Definitione macht so keinen Sinn:

IF ([{sunrise_abs("HORIZON=0",0)}] and [{sunset_abs("HORIZON=0",0)}])

IF kennt keine Zeitintervalle,  deine Abfrage entspricht

if ("HH:MM:SS" and "HH:MM:SS") ...

das ist immer wahr.
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: ahermann86 am 30 Dezember 2019, 14:24:01
@CoolTux: Ja, das ist ja auch mein Ziel.  8)

@Damian: Das hatte ich so nicht bedacht - ich dachte das geht, da es in einer DOIF Bedingung so funktioniert.. aber jetzt wo du mich aufklärst, das IF ist ja ein "anderes" Modul..
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: Depechem am 30 Dezember 2019, 16:53:35
Zitat von: Damian am 30 Dezember 2019, 14:15:48
Diese Definitione macht so keinen Sinn:

IF ([{sunrise_abs("HORIZON=0",0)}] and [{sunset_abs("HORIZON=0",0)}])

IF kennt keine Zeitintervalle,  deine Abfrage entspricht

if ("HH:MM:SS" and "HH:MM:SS") ...

das ist immer wahr.

Danke für eure Infos. Bedeutet das ein ich eine sunrise / sunset Funktion mit einem IF Befehl nicht kombinieren kann!? Wie könnte man das alternativ umsetzen?
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: ahermann86 am 30 Dezember 2019, 18:03:49
Mein letzter Versuch:



([EG_Fenster_Arbeit:getG1] eq "off")
() ##Timer abwürgen - wenn Fenster vor Ablauf des Timers zu gemacht wird bleibt Rollladen oben

DOELSEIF (     [EG_Fenster_Arbeit:getG1] eq "on"
           and [?EG_Rollo_Arbeit:getG1:d] == 100)
(set EG_Rollo_Arbeit Auf)

DOELSEIF (     [$SELF:cmd_nr, 2] == 2
           and [EG_Rollo_Arbeit:getG1:d] > 0
           and [{sunrise_abs("HORIZON=0",0)}-{sunset_abs("HORIZON=0",0)}])
(set EG_Rollo_Arbeit Ab)



Alternativ könnte man ein zweites DOIF definieren, welches nur die Bedinung ([{sunrise_abs("HORIZON=0",0)}-{sunset_abs("HORIZON=0",0)}]) hat und dieses als IF wie in der ersten Version abfragen...

Nachtrag:
Was mir gerade noch in den Sinn gekommen ist: Du nimmst einfach in das IF die Funktion isday() (https://forum.fhem.de/index.php?topic=10857.0)

Gruß
Axel
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: Depechem am 30 Dezember 2019, 22:46:47
Vielen Dank Alex,
so hat es geklappt  :D

Hier meine fertige Lösung:


##Rollo schließt - wenn Fenster geschlossen wird sowie zwischen Sonnenuntergang sowie Aufgang

([Bad_Fenster_angekippt:state] eq "closed")

(     [Bad_Fenster_angekippt:state] eq "closed"
           and [Rollo_Badezimmer:control] > 0
           and [{sunset("HORIZON=-3.5",0,"16:00","22:00")}-{sunrise("HORIZON=-3.2",0,"05:00","08:00")}])
(set Rollo_Badezimmer control 0)



##Rollo öffnet - wenn Rollo zu und Fenster angekippt

DOELSEIF (     [Bad_Fenster_angekippt:state] eq "open"
           and [?Rollo_Badezimmer:control] == 0)
(set Rollo_Badezimmer control 100)



##Rollo schließt - wenn Zeit abgelaufen(siehe wait attr) und Rollo größer als 0 sowie zwischen Sonnenuntergang sowie Aufgang

DOELSEIF (     [$SELF:cmd_nr, 2] == 2
           and [Rollo_Badezimmer:control] > 0
           and [{sunset("HORIZON=-3.5",0,"16:00","22:00")}-{sunrise("HORIZON=-3.2",0,"05:00","08:00")}])
(set Rollo_Badezimmer control 0)


attr wait:0:0:1800

Gruß Thomas
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: Damian am 30 Dezember 2019, 23:21:56
Und du bist sicher, dass dein Timer nach Ankippen des Fensters anläuft?
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: Depechem am 30 Dezember 2019, 23:23:28
Zitat von: Damian am 30 Dezember 2019, 23:21:56
Und du bist sicher, dass dein Timer nach Ankippen des Fensters anläuft?

Ja alles mehrfach getestet, warum sollte er nicht


Gesendet von iPhone mit Tapatalk
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min bei Sonnenstand run
Beitrag von: Damian am 30 Dezember 2019, 23:25:14
Weil das Modul standardmäßig nicht auf selbst generierte Events reagiert.
Titel: Antw:DOIF Rolladen hoch wenn Fenster geöffnet wird und nach 30min ...
Beitrag von: Per am 02 Januar 2020, 13:25:10
Zitat von: Damian am 30 Dezember 2019, 14:15:48
IF kennt keine Zeitintervalle,  deine Abfrage entspricht

if ("HH:MM:SS" and "HH:MM:SS") ...
Würde es in einem DOIF_Reading funktionieren?