Hallo zusammen,
nach dem ich hier viel profitiert habe möchte ich an dieser Stelle vielleicht einen Teil zurück geben und es dem ein oder anderen Newbi auch einfacher machen. Für die FHEM Profis sicher ein Kinderspiel für Newbis manchmal doch eine schwere Geburt. Worum geht es.
Rolladen01 soll gesteuert nach Sonnenuntergang, -aufgang gesteuert werden.
Für Rolladen02 soll das auch zu treffen, aber dieser soll nur herunterfahren wenn die Terassentür Kontakt_Garten geschlossen ist (Aussperrschutz) wird die Tür später geschlossen soll der Rolladen02 rutnerfahren.
Wenn die Tür geöffnet wird und der Rolladen02 geschlossen ist soll dieser geöffnet werden, wenn es Dunkel ist soll die Aussenbeleuchtung eingeschaltet werden.
Wenn die Tür geschlossen wird und es an der Zeit ist soll der Rolladen02 runterfahren und das Licht ausgeschaltet werden, wenn es eingeschaltet war.
Ich habe mir drei DOIF's angelegt, wobei man vermutlich die letzten beiden zusammenlegen kann.
define Komfort_Gartentuer DOIF ([Rolladen02_Zustand] eq "down" and [Kontakt_Garten] eq "closed") (set Rolladen02 on, set LED_aussen off) DOELSEIF ([Rolladen02_Zustand] eq "down" and [Kontakt_Garten] eq "opened") (set Rolladen02 off, set LED_aussen on)
attr Komfort_Gartentuer room Wohnzimmer
define Rolladen01_timer DOIF ([{sunset(-600)}|8]) (set Rolladen01 on, set Rolladen01_Zustand down) DOELSEIF ([{sunset(-0)}|7]) (set Rolladen01 on, set Rolladen01_Zustand down) DOELSEIF ([{sunrise(+30)}|8]) (set Rolladen01 off, set Rolladen01_Zustand up) DOELSEIF ([{sunrise(+600)}|7]) (set Rolladen01 off, set Rolladen01_Zustand up)
attr Rolladen01_timer room Wohnzimmer
define Rolladen02_timer DOIF ([{sunset(+600)}|8] and [Kontakt_Garten] eq "closed") (set Rolladen02 on, set Rolladen02_Zustand down) DOELSEIF ([{sunset(+120)}|7]) (set Rolladen02 on, set Rolladen02_Zustand down) DOELSEIF ([{sunrise(-30)}|8]) (set Rolladen02 off, set Rolladen02_Zustand up) DOELSEIF ([{sunrise(-600)}|7]) (set Rolladen02 off, set Rolladen02_Zustand up)
attr Rolladen02_timer room Wohnzimmer
Meine Intertechnogeräte heissen:
Rolladen01, Rolladen02, Kontakt_Garten und LED_aussen
über drei Dummy's lasse ich mir den Zustand anzeigen:
Gartentuer, Rolladen01_Zustand, Rolladen02_Zustand
attr Gartentuer devStateIcon offen:ampel_gruen zu:ampel_rot:FS20.off
attr Gartentuer room Wohnzimmer
define Rolladen01_Zustand dummy
attr Rolladen01_Zustand devStateIcon down:shutter_closed up:shutter_open:FS20.off
attr Rolladen01_Zustand room Wohnzimmer
define Rolladen02_Zustand dummy
attr Rolladen02_Zustand devStateIcon down:shutter_closed up:shutter_open:FS20.off
attr Rolladen02_Zustand room Wohnzimmer
über ein Notify setze ich den Status von Gartentuer
define Kontakt_Garten_notify notify Kontakt_Garten { if (Value("Kontakt_Garten") eq "closed") { fhem("set Gartentuer zu") } else { fhem("set Gartentuer offen") }}
attr Kontakt_Garten_notify room Wohnzimmer
Verbesserungsvorschläge sind natürlich jederzeit willkommen
Gruß
Micha
Hi,
find ich ne super Sache werd ich gleich mal daheim ausprobieren.
Ich hab bei mir derzeit nur ne akustische Warnung wenn ich das Rollo runterfahre und die Tür offen ist.
Wenn ich das Rolle manuelle runterfahre oder über das Frontend dann fährt der Rolladen trotzdem runter oder?
Grüße
Alex
Klar, fährt trotzdem runter ;-)
Neues DOIF mit wait, deshalb Anpassungen am Code und jetzt auch eine aklustische Warnung, bevor der Rolladen runter fährt.
define Rolladen02_timer DOIF ([{sunset(-600)}|8] and [Kontakt_Garten] eq "closed")((set gong_MP3 playTone 0,008,0))(set Rolladen02 on)(set Rolladen02_Zustand down) DOELSEIF ([{sunset(-1200)}|7])((set gong_MP3 playTone 0,008,0))(set Rolladen02 on)(set Rolladen02_Zustand down) DOELSEIF ([{sunrise(+1)}|8]) ((set gong_MP3 playTone 0,009,0)) (set Rolladen02 off)(set Rolladen02_Zustand up) DOELSEIF ([{sunrise(+600)}|7]) ((set gong_MP3 playTone 0,009,0))(set Rolladen02 off)(set Rolladen02_Zustand up)
attr Rolladen02_timer room Wohnzimmer
attr Rolladen02_timer wait 0,5,5:0,5,5:0,5,5:0,5,5
define Komfort_Gartentuer DOIF ([Rolladen02_Zustand] eq "down" and [Kontakt_Garten] eq "closed") (set Rolladen02 on, set LED_aussen off) DOELSEIF ([Rolladen02_Zustand] eq "down" and [Kontakt_Garten] eq "opened") (set Rolladen02 off, set LED_aussen on)
attr Komfort_Gartentuer room Wohnzimmer
Hallo,
ich hätte mal eine kurze Frage:
Müsste folgender Code
define Rolladen02_timer DOIF
([{sunset(-600)}|8] and [Kontakt_Garten] eq "closed")
((set gong_MP3 playTone 0,008,0))
(set Rolladen02 on)(set Rolladen02_Zustand down)
DOELSEIF
([{sunset(-1200)}|7])((set gong_MP3 playTone 0,008,0))
(set Rolladen02 on)(set Rolladen02_Zustand down)
DOELSEIF
([{sunrise(+1)}|8]) ((set gong_MP3 playTone 0,009,0))
(set Rolladen02 off)(set Rolladen02_Zustand up)
DOELSEIF ([{sunrise(+600)}|7])
((set gong_MP3 playTone 0,009,0))(set Rolladen02 off)(set Rolladen02_Zustand up
nicht so lauten
define Rolladen02_timer DOIF
([{sunset(-600)}|8] and [Kontakt_Garten] eq "closed")
((set gong_MP3 playTone 0,008,0))(set Rolladen02 on)(set Rolladen02_Zustand down)
DOELSEIF
([{sunset(-1200)}|7]and [Kontakt_Garten] eq "closed")
((set gong_MP3 playTone 0,008,0))(set Rolladen02 on)(set Rolladen02_Zustand down)
DOELSEIF ([{sunrise(+1)}|8])
((set gong_MP3 playTone 0,009,0)) (set Rolladen02 off)(set Rolladen02_Zustand up)
DOELSEIF
([{sunrise(+600)}|7])
((set gong_MP3 playTone 0,009,0))(set Rolladen02 off)(set Rolladen02_Zustand up
?
Sonst wird die Abfrage des Kontaktes nur am Wochenende durchgeführt. Oder steh ich hier gaaanz gewaltig auf dem Schlauch?
Grüße
Hallo Frini,
vielen Dank für den Hinweis. Ich gebe Dir da uneingeschränkt recht. Ein Fehler von mir ;-)
Gruß
Micha
Hallo,
Sollte kein Klugscheißen sein. Ich bin mit FHEM ganz am Anfang und versteh die DOIF Eigenheiten noch nicht ganz so.
Ich hab meine Steuerung auf Deinem Code aufgebaut..
Danke!
define doi.eg.wz.RolladeGartenRechts DOI
([{sunset(+600)}|8] and [sens.eg.wz.TerrassentuerRechts:state] eq "closed")
(set rol.eg.wz.RolladeGartenRechts on, set dum.eg.wz.RolladeGartenRechts down)
DOELSEIF
([{sunset(+600)}|8] and [sens.eg.wz.TerrassentuerRechts:state] eq "tilted")
(set rol.eg.wz.RolladeGartenRechts pct 50, set dum.eg.wz.RolladeGartenRechts lueften)
DOELSEIF
([{sunset(+600)}|8] and [sens.eg.wz.TerrassentuerRechts:state] eq "opened")
(set rol.eg.wz.RolladeGartenRechts off, set dum.eg.wz.RolladeGartenRechts up)
DOELSEIF
([{sunset(+120)}|7] and [sens.eg.wz.TerrassentuerRechts:state] eq "closed")
(set rol.eg.wz.RolladeGartenRechts on, set dum.eg.wz.RolladeGartenRechts down)
DOELSEIF
([{sunset(+120)}|7] and [sens.eg.wz.TerrassentuerRechts:state] eq "tilted")
(set rol.eg.wz.RolladeGartenRechts pct 50, set dum.eg.wz.RolladeGartenRechts lueften)
DOELSEIF
([{sunset(+120)}|7] and [sens.eg.wz.TerrassentuerRechts:state] eq "opened")
(set rol.eg.wz.RolladeGartenRechts off, set dum.eg.wz.RolladeGartenRechts up)
DOELSEIF
([{sunrise(-30)}|8])
(set rol.eg.wz.RolladeGartenRechts off, set dum.eg.wz.RolladeGartenRechts up)
DOELSEIF
([{sunrise(-600)}|7])
(set rol.eg.wz.RolladeGartenRechts off, set dum.eg.wz.RolladeGartenRechts up)
Ich hoffe, dass morgen mal langsam die Aktoren eintreffen und ich langsam mit dem Erdgeschoss starten kann. :P
Hallo,
ich hab endlich meinen fehlenden Aktor bekommen. Und kriege das obige DOIF zum verrecken nicht ans laufen.
Die Rollade fährt zwar hoch, wenn ich die Tür öffne, allerdings fährt se nicht wieder runter.
Vielleicht kann mir noch einmal jemand ein schups in die richtige Richtung geben.
ich habe bei den DOIFs do allways gesetzt.
Grüße
Hallo Frini,
ein paar Codezeilen und Logauszüge würden helfen, beim helfen ;-)
Gruß
Micha
Sorry, ich war gestern echt zu müde :-)
Ich wollte das wie zuletzt mit einem kombinierten DOIF lösen, allerdings hat das gar nicht funktioniert. Hier mal noch einmal das kombinierte DOIF:
Ich habe ein DOIF namens doi.eg.wz.RolladeGartenRechts erstellt mit:
([{sunset(+600)}|8] and [sens.eg.wz.TerrassentuerRechts:state] eq "closed")
(set rol.eg.wz.RolladeGartenRechts off, set dum.eg.wz.RolladeGartenRechts down)
DOELSEIF
([{sunset(+600)}|8] and [sens.eg.wz.TerrassentuerRechts:state] eq "tilted")
(set rol.eg.wz.RolladeGartenRechts 30, set dum.eg.wz.RolladeGartenRechts lueften)
DOELSEIF
([{sunset(+600)}|8] and [sens.eg.wz.TerrassentuerRechts:state] eq "open")
(set rol.eg.wz.RolladeGartenRechts on, set dum.eg.wz.RolladeGartenRechts up)
DOELSEIF
([{sunset(+120)}|7] and [sens.eg.wz.TerrassentuerRechts:state] eq "closed")
(set rol.eg.wz.RolladeGartenRechts off, set dum.eg.wz.RolladeGartenRechts down)
DOELSEIF
([{sunset(+120)}|7] and [sens.eg.wz.TerrassentuerRechts:state] eq "tilted")
(set rol.eg.wz.RolladeGartenRechts 30, set dum.eg.wz.RolladeGartenRechts lueften)
DOELSEIF
([{sunset(+120)}|7] and [sens.eg.wz.TerrassentuerRechts:state] eq "open")
(set rol.eg.wz.RolladeGartenRechts on, set dum.eg.wz.RolladeGartenRechts up)
DOELSEIF
([{sunrise(-30)}|8])
(set rol.eg.wz.RolladeGartenRechts on, set dum.eg.wz.RolladeGartenRechts up)
DOELSEIF
([{sunrise(-600)}|7])
(set rol.eg.wz.RolladeGartenRechts on, set dum.eg.wz.RolladeGartenRechts up)
attr doi.eg.wz.RolladeGartenRechts do always
Das Dummy dum.eg.wz.RolladeGartenRechts läuft mit, um das nachher zu visualisieren.
Das zweite DOIF sollte dafür sorgen, dass rol.eg.wz.RolladeGartenRechts entweder komplett hoch fährt, oder zum lüften nur ein Stück hochfährt. getriggert auf den Dummy dum.eg.wz.RolladeGartenRechts.
([dum.eg.wz.RolladeGartenRechts] eq "down" and [sen.eg.wz.TerrassentuerRechts:state] eq "closed")
(set rol.eg.wz.RolladeGartenRechts off)
DOELSEIF
([dum.eg.wz.RolladeGartenRechts] eq "down" and [sen.eg.wz.TerrassentuerRechts:state] eq "tilted")
(set rol.eg.wz.RolladeGartenRechts 30)
DOELSEIF
([dum.eg.wz.RolladeGartenRechts] eq "down" and [sen.eg.wz.TerrassentuerRechts:state] eq "open")
(set rol.eg.wz.RolladeGartenRechts on)
attr doi.TerrassentuerKomfort do always
Wo häng ich da?
Ich hatte es gestern abend kurzzeitig soweit, dass die Rolladen zur Uhrzeit runtergefahren sind und bei betätigen des Griffes auch aufgefahren sind. Allerdings sind die nicht wieder zu gefahren.
Sooo. Ich hab mal alles noch einmal zurück geändert.
Mit:
([{sunset(+600)}|8] and [sen.eg.wz.TerrassentuerRechts] eq "closed")
(set rol.eg.wz.RolladeGartenRechts off, set dum.eg.wz.RolladeGartenRechts down)
DOELSEIF
([{sunset(+120)}|7] and [sen.eg.wz.TerrassentuerRechts] eq "closed")
(set rol.eg.wz.RolladeGartenRechts off, set dum.eg.wz.RolladeGartenRechts down)
DOELSEIF
([{sunset(+120)}|7] and [sen.eg.wz.TerrassentuerRechts] eq "tilted")
(set rol.eg.wz.RolladeGartenRechts 30, set dum.eg.wz.RolladeGartenRechts 30)
DOELSEIF
([{sunset(+600)}|8] and [sen.eg.wz.TerrassentuerRechts] eq "tilted")
(set rol.eg.wz.RolladeGartenRechts 30, set dum.eg.wz.RolladeGartenRechts 30)
DOELSEIF
([{sunrise(-30)}|8])
(set rol.eg.wz.RolladeGartenRechts on, set dum.eg.wz.RolladeGartenRechts up)
DOELSEIF
([{sunrise(-600)}|7])
(set rol.eg.wz.RolladeGartenRechts on, set dum.eg.wz.RolladeGartenRechts up
und dem anderen DOIF
([dum.eg.wz.RolladeGartenRechts] eq "down" and [sen.eg.wz.TerrassentuerRechts] eq "closed")
(set rol.eg.wz.RolladeGartenRechts off)
DOELSEIF
([dum.eg.wz.RolladeGartenRechts] eq "down" and [sen.eg.wz.TerrassentuerRechts] eq "tilted")
(set rol.eg.wz.RolladeGartenRechts 30)
DOELSEIF
([dum.eg.wz.RolladeGartenRechts] eq "down" and [sen.eg.wz.TerrassentuerRechts] eq "open")
(set rol.eg.wz.RolladeGartenRechts on)
Klappt es jetzt.
Ich glaub langsam komm ich hinter meinen Fehler. Ich trigger nur den Dummy, nicht jedoch die tatsächliche Rollade im zweiten Dummy. Oder?
Hi, genau daean hänge ich auch als Newbie grade. Ich setze Homematic Geräte ein und habe mehrere Rolladenaktoren in eine Structure gepackt welche über Sunrise und Sunset gesteuert wird. Nun soll einer der Rolläden nicht runterfahren wenn der Türkontakt auf open steht.
Hier ist mein DOIF
([WzRolladenTuer] eq "down" and [WzGartenTuer] eq "open") (setreading WzRolladenTuer last_state [WzRolladenTuer], set WzRolladenTuer on)
DOELSEIF
([WzRolladenTuer] <= 80 and [WzGartenTuer] eq "open") (setreading WzRolladenTuer last_state [WzRolladenTuer], set WzRolladenTuer on)
DOELSEIF
([WzRolladenTuer] eq "down" and [WzGartenTuer] eq "tilted") (setreading WzRolladenTuer last_state [WzRolladenTuer], set WzRolladenTuer 15)
DOELSEIF
([WzRolladenTuer:last_state] eq "down" and [WzGartenTuer] eq "closed") (set WzRolladenTuer [WzRolladenTuer:last_state])
DOELSEIF
([WzRolladenTuer:last_state] <= 100 and [WzGartenTuer] eq "closed") (set WzRolladenTuer [WzRolladenTuer:last_state])
DOELSEIF
([RollosMain] eq "off" and [WzGartenTuer] eq "open") (set WzRolladenTuer on)
Die letzte Passage soll das besagte erledigen. Aber ich denke es wird so nicht Funktionieren oder? Hast du evtl einen anderen Hinweis für mich?
RollosMain ist die Structure. WzRolladenTuer der eine aus der Structure welcher bei geöffneter WzGartenTuer eben nicht schließen soll. Nachdem die Tür geschlossen wurd soll er aber natürlich runterfahren wenn zwischenzeitlich RollosMain über Sunset geschlossen wurde.
Die anderen obigen Regeln habe ich mir aus Beispielen zusammengelegt. Funktioniert soweit auch. Nur der letzte Befehl ist mein kläglicher Eigenversuch :)
Grüße
Dirk
Hallo,
heißt RollosMain eq "off, dass die unten oder oben sind?
ich habe die Rolladen bei mir in zwei Gruppen aufgeteilt.
Intelligente Rolladen, die mittels Drehgriffsensor beim Öffnen oder Kippen aufgefahren werden.
"Dumme" Rolladen, die nur über sunset, sunrise und Temperatur gefahren werden.
Demnach habe ich drei DOIFS erstellt. Hier nochmal die drei DOIF Varianten im Vergleich. Ich habe die nicht über structure oder sonstiges Zusammengefasst. Ist für mich später einmal verständlicher :-)
## Automatik für "dumme" Rolladen ohne Fensterkontakt
define doi.RolladenAutomatik DOIF
([06:00|8]) ## fahre Rollade am Werktag um 06:00 hoch
(set rol.og.sz.RolladeLinks up, set rol.og.sz.RolladeRechts up)
(set rol.eg.wz.RolladeGartenLinks up, set rol.eg.wz.RolladeKueche up)
(set rol.og.kz.RolladeLinks up, set rol.og.kz.RolladeRechts up)
(set rol.dg.az.Rollade up)
DOELSEIF
([{sunrise(+120,"08:00","10:00")}|7]) ## fahre Rollade 2 Minuten verzögert hoch, wenn Sonnenaufgang am Wochenende, jedoch nicht vor 08:00 und spätestens 10:00
(set rol.og.sz.RolladeLinks up, set rol.og.sz.RolladeRechts up)
(set rol.eg.wz.RolladeGartenLinks up, set rol.eg.wz.RolladeKueche up)
(set rol.og.kz.RolladeLinks up, set rol.og.kz.RolladeRechts up)
(set rol.dg.az.Rollade up)
DOELSEIF
([{sunset(+120)}|8])
(set rol.dg.az.Rollade down)
(set rol.og.kz.RolladeLinks up, set rol.og.kz.RolladeRechts down)
(set rol.eg.wz.RolladeGartenLinks up, set rol.eg.wz.RolladeKueche down)
(set rol.og.sz.RolladeLinks up, set rol.og.sz.RolladeRechts down)
DOELSEIF
([{sunset(+600)}|7])
(set rol.dg.az.Rollade down)
(set rol.og.kz.RolladeLinks up, set rol.og.kz.RolladeRechts down)
(set rol.eg.wz.RolladeGartenLinks up, set rol.eg.wz.RolladeKueche down)
(set rol.og.sz.RolladeLinks up, set rol.og.sz.RolladeRechts down)
attr wait 0,300,600,900:0,300,600,900:0,300,600,900:0,300,600,900
Für die intelligenten Rolladen mit Fensterkontakt, erstelle ich pro Rollo und Fensterkontakt ein DOIF für das öffnen und schließen nach sunset und sunrise und ein DOIF für das automatische verfahren wenn die Tür geöffnet wird.
Als Beispiel hier die Terrassentuer.
define doi.rol.eg.wz.RolladeGartenRechtsAutomatik
([06:00|8]) ## fahre Rollade am Werktag um 06:00 hoch
(set rol.eg.wz.RolladeGartenRechts up)
DOELSEIF
([{sunset(+120)}|8] and [sen.eg.wz.TerrassentuerRechts] eq "closed") ## fahre Rollade 2 Minuten verzögert runter wenn Sonnenuntergang am Werktag und Tür geschlossen
(set rol.eg.wz.RolladeGartenRechts down)
DOELSEIF
([{sunset(+120)}|8] and [sen.eg.wz.TerrassentuerRechts] eq "tilted") ## fahre Rollade 10 Minuten verzögert in Lüftungsposition wenn Sonnenuntergang am Werktag und Tür gekippt
(set rol.eg.wz.RolladeGartenRechts 30)
DOELSEIF
([{sunrise(+120,"08:00","10:00")}|7]) ## fahre Rollade 2 Minuten verzögert hoch, wenn Sonnenaufgang am Wochenende, jedoch nicht vor 08:00 und spätestens 10:00
(set rol.eg.wz.RolladeGartenRechts up)
DOELSEIF
([{sunset(+600)}|7] and [sen.eg.wz.TerrassentuerRechts] eq "closed") ## fahre Rollade 10 Minuten verzögert runter wenn Sonnenuntergang am Wochenende und Tür geschlossen
(set rol.eg.wz.RolladeGartenRechts down)
DOELSEIF
([{sunset(+600)}|7] and [sen.eg.wz.TerrassentuerRechts] eq "tilted") ## fahre Rollade 2 Minuten verzögert in Lüftungsposition wenn Sonnenuntergang am Wochenende und Tür gekippt
(set rol.eg.wz.RolladeGartenRechts 30)
Zu diesem Pärrchen gehört noch das Automatik DOIF
define doi.rol.eg.wz.RolladeGartenRechtsAutomatik
([rol.eg.wz.RolladeGartenRechts] eq "up" and [sen.eg.wz.TerrassentuerRechts] eq "open") ## Wenn Rollade auf einer Position up und Terrassentuer wird geöffnet
(setreading rol.eg.wz.RolladeGartenRechts last_state [rol.eg.wz.RolladeGartenRechts]) ## schreibe die Position des Rollos in ein Reading
DOELSEIF
([rol.eg.wz.RolladeGartenRechts] ne "up" and [sen.eg.wz.TerrassentuerRechts] eq "open") ## Wenn Rollade unten und Terrassentuer wird geöffnet
(setreading rol.eg.wz.RolladeGartenRechts last_state [rol.eg.wz.RolladeGartenRechts], set rol.eg.wz.RolladeGartenRechts on) ## schreibe die Position des Rollos in ein Reading und fahre das Rollo hoch
DOELSEIF
([rol.eg.wz.RolladeGartenRechts] eq "up" and [sen.eg.wz.TerrassentuerRechts] eq "tilted") ## Wenn Rollade auf einer Position up und Terrassentuer wird gekippt zum Lüften
(setreading rol.eg.wz.RolladeGartenRechts last_state [rol.eg.wz.RolladeGartenRechts]) ## schreibe die Position des Rollos in ein Reading
DOELSEIF
([rol.eg.wz.RolladeGartenRechts] <=29 and [sen.eg.wz.TerrassentuerRechts] eq "tilted") ## Wenn Rollade auf einer Position zwischen 0 - 30 und Terrassentuer wird gekippt zum Lüften
(setreading rol.eg.wz.RolladeGartenRechts last_state [rol.eg.wz.RolladeGartenRechts], set rol.eg.wz.RolladeGartenRechts 30) ## schreibe die Position des Rollos in ein Reading und fahre das Rollo in Lüftungsposition
DOELSEIF
([rol.eg.wz.RolladeGartenRechts] eq "down" and [sen.eg.wz.TerrassentuerRechts] eq "tilted") ## Wenn Rollade unten und Terrassentuer wird gekippt zum Lüften
(setreading rol.eg.wz.RolladeGartenRechts last_state [rol.eg.wz.RolladeGartenRechts], set rol.eg.wz.RolladeGartenRechts 30) ## schreibe die Position des Rollos in ein Reading und fahre das Rollo in Lüftungsposition
DOELSEIF
([rol.eg.wz.RolladeGartenRechts:last_state] ne "up" and [sen.eg.wz.TerrassentuerRechts] eq "closed") ## Wenn das gespeicherte Reading ein Wert von 0 - 100 hat und die Terrassentuer wird geschlossen
(set rol.eg.wz.RolladeGartenRechts [rol.eg.wz.RolladeGartenRechts:last_state]) ## nutze das Reading und fahre das Rollo in die entsprechende Position zurück
Ich bin mir nicht sicher, ob das verknüpfen der intelligenten und dummen Rollos so ohne weiteres funktioniert. So läuft es bei mir auf jedenfall.
Zitat von: Frini am 10 November 2015, 08:48:58
Hallo,
heißt RollosMain eq "off, dass die unten oder oben sind?
off heißt sie sind unten.
Größtenteils hatte ich mich aus deinem super Beitrag bedient! :D http://forum.fhem.de/index.php/topic,42619.msg350114.html#msg350114 (http://forum.fhem.de/index.php/topic,42619.msg350114.html#msg350114) Nun möchte ich das noch um die Sicherheitsfunktion erweitern.
Ich habe nun auch mal testen können. Mit meinem anfänglichen Versuch bin ich sogar schon nah dran! Wenn ich RollosMain auf Off stelle und der Türkontakt auf open steht. Zuckt der Rollo kurz aber bleibt oben. Aber ich bin mir sicher es gibt auch einen eleganteren Weg. Allerdings muss ich jetzt noch hinbekommen, dass wenn RolloMain runtergefahren wurde, WzRolladenTuer oben geblieben ist da WzGartenTuer auf open steht, der Rollo runterfährt wenn GartenTuer dann anschließend geschlossen wird.
Allerdings ist bei mir noch ein Fehler drin. Heute morgen stand der WzRolladenTuer auf Lüftungsmodus nach dem über RollosMain und Sunrise das hochfahren getriggert wurde. Das verstehe ich bislang noch nicht hat aber sicher was mit dem Speichern der Readings zu tun.
Ich probiere dein Setup mal auf meinen Fall aus evtl habe ich da ein besseres Verhalten.
GrüßeDirk
Edit:
so geht es jedenfalls nicht, dass der Rollo nach schließen der Tür runterfährt:
DOELSEIF ([RollosMain] eq "off" and [WzRolladenTuer] eq "on" and [WzGartenTuer] eq "closed") (set WzRolladenTuer off)
Hallo Dersch
Du musst immer bedenken, dass "DOIF" auf Trigger reagiert. Bei Deinem letzten Beispiel, fragst Du WzRolladenTuer auf "on" ab, und setzt danach "off". Das erscheint mir so nicht moeglich. Ich habe auch so meine Probleme (vom Verstaendnis her) mit "DOIF"'s. Wenn mehrere "DOIF"'s auf einen Aktor wirken, dann scheint sich das zu beissen. Man sollte, wie gelernt, einen Aktor immer nur einmal beschreiben, dann wird nur das Konstrukt drumherum immer komplexer! Entscheidend ist auch das Attribut "doalways", da sich "DOIF" "merkt" wo es ist, siehe dazu auch die CMDREF, und dann die Aktion nicht mehr durchfuehrt.
Gruss Christoph
Versuch doch mal meine Beispiele zu übernehmen und "intelligente" und "dumme" Rolladen nicht zu mischen
Ja das ist meime Aufgabe für heute Abend. Ich musste eben aber noch 2 wietere Rollo Aktoren in die Wand einbauen. Nun bin ich bei 6 von 18 wobei einige erst noch auf Rohrmotor umgebaut werden müssen. :) viel arbeir steht noch bevor
Zitat von: Frini am 10 November 2015, 14:45:05
Versuch doch mal meine Beispiele zu übernehmen und "intelligente" und "dumme" Rolladen nicht zu mischen
Gestern Abend hatte ich dann doch keine Lust mehr :( Aber nun habe ich mir dein Beispiel genauer angeschaut und frage mich wo bei dir die Sicherheitsfunktion eingebaut ist. Und was besagt, dass der Rolladen runterfahren soll nachdem die Sicherheitsfunktion gegriffen hat und die Tür geschlossen wurde. Kannst du mir das ein wenig erklären? Ich brauch noch einige Bespiele um das alles besser verstehen zu können. :P
Ich versuch mal.
Der Aussperrschutz ist hier eingefügt:
define doi.rol.eg.wz.RolladeGartenRechtsAutomatik
([06:00|8]) ## fahre Rollade am Werktag um 06:00 hoch
(set rol.eg.wz.RolladeGartenRechts up)
DOELSEIF
([{sunset(+120)}|8] and [sen.eg.wz.TerrassentuerRechts] eq "closed") ## fahre Rollade 2 Minuten verzögert runter wenn Sonnenuntergang am Werktag und Tür geschlossen
(set rol.eg.wz.RolladeGartenRechts down)
DOELSEIF
([{sunset(+120)}|8] and [sen.eg.wz.TerrassentuerRechts] eq "tilted") ## fahre Rollade 10 Minuten verzögert in Lüftungsposition wenn Sonnenuntergang am Werktag und Tür gekippt
(set rol.eg.wz.RolladeGartenRechts 30)
DOELSEIF
([{sunrise(+120,"08:00","10:00")}|7]) ## fahre Rollade 2 Minuten verzögert hoch, wenn Sonnenaufgang am Wochenende, jedoch nicht vor 08:00 und spätestens 10:00
(set rol.eg.wz.RolladeGartenRechts up)
DOELSEIF
([{sunset(+600)}|7] and [sen.eg.wz.TerrassentuerRechts] eq "closed") ## fahre Rollade 10 Minuten verzögert runter wenn Sonnenuntergang am Wochenende und Tür geschlossen
(set rol.eg.wz.RolladeGartenRechts down)
DOELSEIF
([{sunset(+600)}|7] and [sen.eg.wz.TerrassentuerRechts] eq "tilted") ## fahre Rollade 2 Minuten verzögert in Lüftungsposition wenn Sonnenuntergang am Wochenende und Tür gekippt
(set rol.eg.wz.RolladeGartenRechts 30)
Das Rollo fährt nur zu, wenn die Tür geschlossen ist. Wenn die Tür gekippt ist, fährt das Rollo auch nur in Lüftungsposition. War die Tür vorher geöffnet und wird nach Einbrauch der Dämmerung geschlossen, fährt diese ebenfalls runter.
Die Automatik, dass das Rollo immer wieder die vorher zuletzt angewählte Position anfährt, sollte die Tür gekippt oder geöffnet werden, wird in dem AutomatikDOIF realisiert. Hier schreibe ich vor auslösen der Fahrbewegegung den letzten Stand in ein Reading und nutze diesen Wert nach dem Schließen der Tür um das Rollo auf die ursprüngliche Position zurück zufahren.
([rol.eg.wz.RolladeGartenRechts] eq "up" and [sen.eg.wz.TerrassentuerRechts] eq "open") ## Wenn Rollade auf einer Position up und Terrassentuer wird geöffnet
(setreading rol.eg.wz.RolladeGartenRechts last_state [rol.eg.wz.RolladeGartenRechts]) ## schreibe die Position des Rollos in ein Reading
DOELSEIF
([rol.eg.wz.RolladeGartenRechts] ne "up" and [sen.eg.wz.TerrassentuerRechts] eq "open") ## Wenn Rollade unten und Terrassentuer wird geöffnet
(setreading rol.eg.wz.RolladeGartenRechts last_state [rol.eg.wz.RolladeGartenRechts], set rol.eg.wz.RolladeGartenRechts on) ## schreibe die Position des Rollos in ein Reading und fahre das Rollo hoch
DOELSEIF
([rol.eg.wz.RolladeGartenRechts] eq "up" and [sen.eg.wz.TerrassentuerRechts] eq "tilted") ## Wenn Rollade auf einer Position up und Terrassentuer wird gekippt zum Lüften
(setreading rol.eg.wz.RolladeGartenRechts last_state [rol.eg.wz.RolladeGartenRechts]) ## schreibe die Position des Rollos in ein Reading
DOELSEIF
([rol.eg.wz.RolladeGartenRechts:last_state] ne "up" and [sen.eg.wz.TerrassentuerRechts] eq "closed") ## Wenn das gespeicherte Reading ein Wert von 0 - 100 hat und die Terrassentuer wird geschlossen
(set rol.eg.wz.RolladeGartenRechts [rol.eg.wz.RolladeGartenRechts:last_state]) ## nutze das Reading und fahre das Rollo in die entsprechende Position zurück
wenn das einer so übernimmt wird das nichts...!
define doi.rol.eg.wz.RolladeGartenRechtsAutomatik
eher so
define doi.rol.eg.wz.RolladeGartenRechtsAutomatik DOIF
;) :D
Schon klar. Ist halt nur aus meinem FHEM rauskopiert und kurz das define als Namenserklärung mit hinzugefügt. 8)
Sieht sehr cool aus, Respekt.
Aber wenn ich das für jeden Rolladen hinterlege, dann hätte ich eine Menge fast identischer DOIFs.
Wenn daraus jetzt noch jemand eine elegante Multi-Roll-Lösung basteln würde ... ;)
Zitat von: Frini am 11 November 2015, 13:00:04
Ich versuch mal.
Der Aussperrschutz ist hier eingefügt:
Ich probiere das für den einen Rolladen mit Türkontakt nun mal so aus:
([{sunset("REAL",1800,"17:00","22:30")}] and [WzGartenTuer] eq "closed") (set WzRolladenTuer down) DOELSEIF
([{sunset("REAL",1800,"17:00","22:30")}] and [WzGartenTuer] eq "tilted") (set WzRolladenTuer 15) DOELSEIF
([{sunrise("REAL",-900,"6:00","8:00")}]) (set WzRolladenTuer up)
Mal schauen wie es so funktioniert :)
Grüße
Dirk
Nee der Rolladen ging heute leider nicht hoch.
Im log habe ich nur das:
2015.11.12 07:22:37 3: CUL_HM set WzRolladenTuer off
2015.11.12 07:22:37 3: CUL_HM set WzRolladenTuer on
Verstehe ich grade nicht so ganz??? Warum schaltet er ihn erst off (obwohl schon unten) und dann on (und ist dann doch nicht oben)? Fehler wurden von beiden DOIF's nicht ausgegeben. Die Config sieht nun so aus:
Automatik:
([{sunset("REAL",1800,"17:00","22:30")}] and [WzGartenTuer] eq "closed")
(set WzRolladenTuer down)
DOELSEIF
([{sunset("REAL",1800,"17:00","22:30")}] and [WzGartenTuer] eq "tilted")
(set WzRolladenTuer 15)
DOELSEIF
([{sunrise("REAL",-900,"6:00","8:00")}]) (set WzRolladenTuer up)
TürRollo Verhalten:
([WzRolladenTuer] eq "down" and [WzGartenTuer] eq "open")
(setreading WzRolladenTuer last_state [WzRolladenTuer], set WzRolladenTuer on)
DOELSEIF
([WzRolladenTuer] <= 80 and [WzGartenTuer] eq "open")
(setreading WzRolladenTuer last_state [WzRolladenTuer], set WzRolladenTuer on)
DOELSEIF
([WzRolladenTuer] eq "down" and [WzGartenTuer] eq "tilted")
(setreading WzRolladenTuer last_state [WzRolladenTuer], set WzRolladenTuer 15)
DOELSEIF
([WzRolladenTuer:last_state] eq "down" and [WzGartenTuer] eq "closed")
(set WzRolladenTuer [WzRolladenTuer:last_state])
DOELSEIF
([WzRolladenTuer:last_state] <= 100 and [WzGartenTuer] eq "closed")
(set WzRolladenTuer [WzRolladenTuer:last_state])
Versuch mal das
([WzRolladenTuer:last_state] eq "up" and [WzGartenTuer] eq "open")
(setreading WzRolladenTuer last_state[WzRolladenTuer])
DOELSEIF
([WzRolladenTuer] ne "up" and [WzGartenTuer] eq "open")
(setreading WzRolladenTuer last_state [WzRolladenTuer], set WzRolladenTuer on)
DOELSEIF
([WzRolladenTuer:last_state] eq "up" and [WzGartenTuer] eq "tilted")
(setreading WzRolladenTuer last_state[WzRolladenTuer])
DOELSEIF
([WzRolladenTuer] eq "down" and [WzGartenTuer] eq "tilted")
(setreading WzRolladenTuer last_state [WzRolladenTuer], set WzRolladenTuer 15)
DOELSEIF
([WzRolladenTuer:last_state] ne "up" and [WzGartenTuer] eq "closed")
(set WzRolladenTuer [WzRolladenTuer:last_state])
Du hast bei der <=100 die 100 eingeschlossen. Ich hab das bei mir mit ne "up" zuletzt gut hinbekommen. Mit den Zahlen steh ich noch ein bisschen auf Kriegsfuß. Ich weiß nicht ob das hilft, aber das DOIF geht die Bedingungen von vorne nach hinten durch. Tritt etwas passendes ein, ist die Bedingung erfüllt und das DOIF fragt die danach folgenden nicht mehr ab. (So hab ich das zumindest verstanden)
Die 1. und 3. Bedingung werden nur genutzt um das Reading zwischendurch auf up zu setzen. Ich hatte zwischenzeitlich das Problem, dass die Rollade auf ein falsch gespeichertes Reading gefahren ist. So hab ich den Fehler unterbinden können. Geht vielleicht auch eleganter, aber so klappts jetzt ;-)
hast Du attr do always gesetzt?
Ich habe bei mir gestern abend noch einmal ein bisschen abgeändert und schreibe jetzt bei der Automatik wenn gekippt oder geöffnet ist ebenfalls das reading last_state.
Bei Deinem Code würde das so aussehen:
([{sunset("REAL",1800,"17:00","22:30")}] and [WzGartenTuer] eq "closed")
(set WzRolladenTuer down)
DOELSEIF
([{sunset("REAL",1800,"17:00","22:30")}] and [WzGartenTuer] eq "tilted")
(set WzRolladenTuer 15, setreading WZRolladenTuer last_state down)
DOELSEIF
([{sunrise("REAL",-900,"6:00","8:00")}]) (set WzRolladenTuer up)
Sollte das DOIF nicht sauber schalten, erkennt er zumindest bei Fensterschließen, dass der last_state down ist und dann das Rollo runterfährt (letzte Bedingung aus dem ersten DOIF)
Klar wäre eine Multiroll Lösung eleganter. Das krieg ich mit meinem FHEM Know How aber noch nicht hin. Bis dato ist das für mich so ganz praktikabel. Ich habe in Summe 12 Rolladen, wovon 4 "intelligente" Rolladen sind. Terrassentuer, Carporttuer, GästeWC (zum lüften), Badezimmer (zum Lüften). Das sind in Summe 9 DOIFs für die Haupfunktionen und 1 DOIF welches sich um die Beschattung im Sommer kümmert. Also eigentlich ganz praktikabel.
ja do aways war gesetzt.
Ich habe mal deine Vorschläge übernommen und mal schauen wie es jetzt läuft :) Auf jeden Fall schon mal danke für deine Hilfe :D
Ich denke mit der Zeit und der Begeisterung für FHEM wird das Wissen schon steigen und mit den ganzen Fehlern am Anfang können wir ja nur dazu lernen :) Durch deine Beispiele konnte ich zumindest jetzt schon mehr umsetzen als ich mir vor ein paar Tagen noch zugetraut hatte :)
Bis ich alle meine 18 Rolläden umgerüstet habe und dann auch 4 intelligente mit Drehkontaktsensor habe, werde ich sicher schon etwas besser damit umzugehen wissen.
Wobei wenn ich die Rolläden mit optischen Sensoren auch als intelligent Einstufe werden es sogar 8 sein.
Meinen Küchenrolladen mit Belüftungsfunktion und Dunstabzugssteuerung (wg Kaminofen) konnte ich schon verläßlich mit einem DOIF umsetzten obwohl der Küchenrolladen in der Structure mit allen anderen "dummen" Rolläden sitzt. Dadurch, dass hier nur ein optischer Sensor drin sitzt ist das auch völlig ausreichend.
Nur den WzRolladenTuer habe ich nun aus der Structure rausgenommen, da die Einstellung nun etwas komplexer ist.
Hier mal das Beispiel für den Küchenrolladen um evtl. jemand anderen damit helfen zu können:
Lüftungs DOIF:
([KuRolladen] eq "down" and [KuFensterkontakt] eq "open")
(setreading KuRolladen last_state [KuRolladen], set KuRolladen 15)
DOELSEIF
([KuRolladen:last_state] eq "down" and [KuFensterkontakt] eq "closed")
(set KuRolladen [KuRolladen:last_state])
Dunstabzugsschaltung:
([KuFensterkontakt] eq "closed")
(set KuDunstabzugSw off)
DOELSEIF
([KuFensterkontakt] eq "open")
(set KuDunstabzugSw on)
Eine Sache ist mir nun nach der letzten Änderung aufgefallen. Wenn der Rolladen aufgrund von Sunset runtergefahren ist und die Tür geöffnet wird fährt er hoch (wie er soll) wird nun aber nach dem Öffnen die Tür gekippt bleibt der Rolladen oben. Er sollte aber nach meinem Verständnis auf 15 fahren da:
([{sunset("REAL",1800,"17:00","22:30")}] and [WzGartenTuer] eq "tilted")
(set WzRolladenTuer 15, setreading WZRolladenTuer last_state down
Wenn nun nach dem gekippt auf geschlossen umgestellt wird, dann fährt der Rolladen auf 15.
Da ist wohl noch etwas mit dem Readings setzen nicht ganz richtig. Ich komme nur grade nicht drauf. Vielleicht kommt dir ja eine Idee.
Das hab ich noch nicht ausprobiert. Hab meiner Chefin eingebleut, dass sie immer erst die Tür zu machen soll und dann kippen. So wird das Reading beim neuen Kippvorgang neu gesetzt.
Du könntest das setreading an der Stelle weglassen, allerdings glaube ich nicht, dass es ausschlaggebend ist.
Hallo
genau das was ich suche ..
im ersten Beitrag steht das hier
Meine Intertechnogeräte heissen:
Rolladen01, Rolladen02, Kontakt_Garten und LED_aussen
Mit rename könnte jeder Anfänger ganz einfach die Aktoren so benennen wie im Beispiel, wenn dann alles läuft kann man ja über ein erneutes rename die gewünschten Namen nehmen. oder?
Homematic überträgt ja anders als FS20 den aktuellen Zustand, ändert sich dadurch der code??
Hab den Thread hier 2x überflogen .. welchen code ich nun nehmen soll ist mir noch nicht ganz klar.
Am schnellstne ginge es mit einem kompletten coebeispiel aus der fhem.cfg
Werde das auf jeden Fall weiter verfolgen, mal sehen ob in den nächsten Tag Zeit ist...
so hab nun 1 Stunde gelesen und probiert und mal wieder die eine oder andere Hürde
Was ich immer wieder feststelle, super tolle Sachen aber durch die infividuelle Namensgebung für Einsteiger nicht so leicht nachvollziehbar / zeitaufwendig.
|7 Wochenende
|8 Wochentag
war nicht im Einsteiger PDF zu finden dann im Forum gesucht, dann letztendlich die Erklärung in der Commandref
!$w ,$w war mir bekannt.
Was ich nur noch bräuchte, der Rest ist mir noch zu komliziert ist die Unterscheidung Wochentag Wochenende
Der Rolladen fährt mit diesem Code schon einmal richtig. nur wenn er am WE dann um 7 Uhr hochfährt wird meine Frau nicht begeistert sein.
Man kann ja dann ein howtoo ins wiki schreiben, da aber dann einfache Namen und erst einmal einfache Beispiele damit man schnell eine Übersicht hat. Dann mit den gleichen Namen Step für Step weitere Beispiele.
Rollade Türkontakt Automatik
define Rollade_WZ_Auto DOIF ([{sunset("REAL",1450,"16:00","23:00")}-07:00] and [TK_wohnen] eq "closed" and [?Rollade_WZ] ne "closed") (set Rollade_WZ off) DOELSE (set Rollade_WZ on)
attr Rollade_WZ_Auto room Wohnzimmer
attr Rollade_WZ_Auto wait 5
ZitatWas ich nur noch bräuchte, der Rest ist mir noch zu komliziert ist die Unterscheidung Wochentag Wochenende
Der Rolladen fährt mit diesem Code schon einmal richtig. nur wenn er am WE dann um 7 Uhr hochfährt wird meine Frau nicht begeistert sein.
Man kann ja dann ein howtoo ins wiki schreiben, da aber dann einfache Namen und erst einmal einfache Beispiele damit man schnell eine Übersicht hat. Dann mit den gleichen Namen Step für Step weitere Beispiele.
Rollade Türkontakt Automatik
Habe meine Rollos über 2 at Befehle am Wochenende und in Woche gesteuert.
Ansteuerung für die Woche
Internals:
COMMAND { if ($we) { fhem("set Jallo3 {(60+int(rand(40)))}"); } }
DEF *{sunrise_abs(+14100)} { if ($we) { fhem("set Jallo3 {(60+int(rand(40)))}"); } }
Und für das Wochenende
Internals:
COMMAND { if (!($we)) { fhem("set Jallo3 {(60+int(rand(40)))}"); } }
DEF *{sunrise_abs(+6200)} { if (!($we)) { fhem("set Jallo3 {(60+int(rand(40)))}"); } }
Interessant ist vielleicht auch, dass das Rollo dann auf einen Zufallswert von 60% bis 100% gefahren wird.
Die Unterscheidung ist zwischen Woche ($we) und nicht in der Woche (! $we). Das ! Steht für die negierung der Woche!
Gruß
Sascha
Ich plazier die Frage einfach mal hier.
Normalerweise bei dem Befehl set Rolladen 100 fährt das Teil hoch gebe ich aber set Rolladen 25 an, hätte ich erwartet dass der Rolladen auf 3/4 zu macht. Stattdessen schließt er völlig. Mit dem Wert 45 hingegen komme ich an die 25 etwa ran. Woran kann das liegen ?
Hallo en-trust
Zum Einen thread gekapert, zum Anderen ist unsere Glaskugel kaputt! Ich vermute, falsche Zeitdefinition!
Gruss Christoph
Zitat von: en-trust am 14 Juni 2016, 15:08:22
Ich plazier die Frage einfach mal hier.
Normalerweise bei dem Befehl set Rolladen 100 fährt das Teil hoch gebe ich aber set Rolladen 25 an, hätte ich erwartet dass der Rolladen auf 3/4 zu macht. Stattdessen schließt er völlig. Mit dem Wert 45 hingegen komme ich an die 25 etwa ran. Woran kann das liegen ?
also das ist denke ich ganz normal, das mußt du ausprobieren...! bei mir z.B. wenn ich Nachtschicht habe lasse ich den Rollladen um 13 Uhr auf pct 30 fahren, dass bedeutet er liftet den Rollladen so das sich gerade die Schlitze öffnen und es ein wenig Licht einfällt...
Der nächste Öffnungsschritt ist pct 50 das bedeutet der Rollladen hat jetzt ca. 15 - 20cm geöffnet hat...
Was will ich damit sagen, du selber bestimmst doch durch die Prozente der Öffnung wieviel du haben möchtest... denn
25% ist zwar ein Viertel und eben dann 50% die Hälfte aber der Rollladen der ja verschieden lang sein kann fährt ja dadurch nicht automatisch ein Viertel oder gar die Hälfte ;)
oder du passt die Fahrzeiten wie es pc1246 geschrieben hat, an...!
Diese sind gemeint:
R-driveDown
R-driveTurn
R-driveUp
Das wars...
R-driveDown
R-driveTurn
R-driveUp
musste die Zeite des rauf und runter fahrens messen und eintragen.