Hallo, ich steuere zur Zeit eine Rollade mit diesem Szenario:
Rollade fährt mittels diesen Code rauf und runter:
define eg.rollade.garten.rechts.hoch at *07:00 set eg.rollade.garten.rechts on
define eg.rollade.garten.rechts.zu at *{sunset(0,"17:00","22:00")} set eg.rollade.garten.rechts off
Ich möchte jetzt gerne einen Fensterkontakt (HM-Sec-SCo oder HM-Sec-SC-2) einsetzten um die Rollade in folgender Form zu beeinflussen:
1. wenn die Tür geöffnet wird soll die Rollade hoch fahren
2. wenn die Tür geschlossen wird soll sie ggf anhand Sunset offen bleiben oder runter fahren
3. wenn die Tür offen ist nicht herunterfahren wenn Sunset diese schließen will
Kann ich das mit DOIF ausdrücken, oder in meinen jetztzigen Code noch einfügen? Wie gehe ich da an das Problem dran? Problem für mich ist ja, dass ich ein Event (Rollade runter) unterdrücken muß und wenn ich die Türe schließe dieses ausgeführt werden soll. Ich habe Schwierigkeiten solche verschachtelten Bedingungen auszudrücken und einen brauchbaren Logikansatz zu finden. Den Code bastele ich mir dann gerne selber, aber ich brauche Knochen die mir zugeworfen werden :-)
Ein ähnliches Problem wird mich auch noch an der Südseite ereilen, wenn ich die Rolläden zum Hitzeschutz anhand von Wetterdaten, Bestrahlungsstärken, Zimmertemperatur und Sunset differenziert fahren will, sprich bei Sunset 100% runter und bei Sonnenschutz nur 80% runter (man will ja nicht auch noch Licht in der Bude anmachen müssen, wenn draußen 35°C und die Sonne scheint)
Sollte ich den Rolladen-Soll Status (also als 100% zu, 80% zu) als Dummys definieren? Aber dazu habe ich ja noch Zeit, bis wieder Sommer ist 8)
Danke schon mal :-)
Gruß Bernd Seidler
am Hoch brauchst Du eigentlich nichts zu tun :-)
Am runter ist es doch auch kein Problem ...
bei dem Timer machst Du ein if mit dazu
also in Knochensprache define Roulade.zu *sunset {wenn Fensterkontakt ist gleich zu dann schließe sonst mache nichts oder gehe in hab acht Position}
dann noch einen Trigger auf Fenster.auf und Fenster.zu
Viel Vergnügen
Ralf
PS.: Es macht Sinne sich den Sollzustand des Rollos zu merken :-)
Wenn Du hier im Forum suchst, dann findest Du genau was Du suchst schon fertig als Code
Hallo Bernd,
etwas ähnliches habe ich auch vor. Was ich jetzt bereits habe, ist das wenn ich die Tür auf mache der Rolladen hoch geht und das Licht an und umgegehrt, habe ich je in ein Notify getan:
Kontakt_Garten:closed { if($hour < 8 || $hour >= 18) { fhem ("set Rolladen02 on")}}; { if($hour < 8 || $hour >= 18) { fhem ("set LED_aussen off")}}
Kontakt_Garten:opened { if($hour < 8 || $hour >= 18) { fhem ("set Rolladen02 off")}}; { if($hour < 8 || $hour >= 18) { fhem ("set LED_aussen on")}}
Die Rolladensteuerung sieht noch so aus (Verknüpfung zwecks Aussperrschutz ist mir noch nicht gelungen, auch überlege ich die Steuerung noch an das Tageslichgt zu koppeln:
define Tageslicht dummy
attr Tageslicht room Wetter
define Tageslicht_hell at *{sunset(-3600)} set Tageslicht hell
attr Tageslicht_hell room Wetter
define Tageslicht_dunkel at *{sunrise(+1800)} set Tageslicht dunkel
attr Tageslicht_dunkel room Wetter
define Rolladen01_zeit_down at *{sunset(-60)} { fhem ("set Rolladen01 on")
attr Rolladen01_zeit_down room Wohnzimmer
define Rolladen01_zeit_up at *{sunrise(+60)} { fhem ("set Rolladen01 off")
attr Rolladen01_zeit_up room Wohnzimmer
Gruß
Micha
Mit DOIF ist das in einer einzige Codezeile erledigt.
Einfach mal im commandref dazu lesen, da steht das Modul sehr gut erklärt.
Mein runterfahren von Rolladen01 um 18:08 hat leider auch nicht funktioniert :-(
Zitat von: Mitch am 23 Februar 2015, 17:00:22
Mit DOIF ist das in einer einzige Codezeile erledigt.
Wenn man die Syntax beherrscht :-(
Also ich verstehe hier den Einen und Anderen echt nicht.
Ich bin quasi auch noch Anfänger, aber ich "bilde mich weiter", vor allem mit lesen im commandref, Forum und Wiki und testen.
Nur so kann ich dazu lernen.
Ich hatte ja extra geschrieben, schau dir das commandref an, dort ist extrem ausführlich und einfach erklärt, wie DOIF funktioniert. Sogar auf Deutsch!!
Wenn man eine Hausautomation wie fhem aufbauen möchte, muss man schon ein bisschen "mehr" tun. Es ist halt keine Lösung von der Stange mit Bunt klicki klick.
Gerade zum Thema Rolladensteuerung gibt es hier im Forum und im Wiki Tonnen an Beispielen.
Einmal kurz gesucht und man findet alles, was man brauch ::)
Auch das Einsteiger PDF ist immer eine gute Quelle, um "richtige" Codes für ein notify mit if else zu finden.
Einsteiger pdf habe ich schon gelesen und probiere gerade mit der commandref und dem DOIF.
Was schon funktioniert ist
([18:00|8]) (set Rolladen01 on) DOELSEIF ([06:00|8]) (set Rolladen01 off)
Konnte ich mit angepassten Zeiten auch schon testen.
Doch wie baue ich jetzt ein sunset(-120) ein, damit zwei Stunden vor Sonnenuntergang an Werktagen und sunset(-60) eine Stunde vor Sonnenuntergang Rolladen01 runterfährt ?
An Werktagen um 06:00 und am Wochenende um 08:00 hoch fährt. Ich habe in de commandref dazu für mich erkrennbar leider nichts gefunden.
Wenn das klappt macht es vermutlich erst Sinn an Rolladen02 und dummy Gartentuer mit der Aussperrsicherung zu gehen.
??? Auch das steht "quasi" im commandref:
ZitatSchalten bei Sonnenaufgang und Sonnenuntergang:
define di_light DOIF ([{sunrise_abs()}-{sunset(1800,"17:00","21:00")}])(set outdoorlight off) DOELSE (set outdoorlight on)
Die Stelle hatte ich auch gefunden, aber nicht verstanden. Ich wollte Sie nicht blind übernehmen, aber beschrieben ist da leider nicht viel :-(
Und ausprobieren geht nicht und der Spieltrieb wird gnadenlos unterdrückt.
Ja, so geht es auch - es gibt ja zum Glück das Forum.
Zitat von: mfeske am 23 Februar 2015, 20:05:48
...aber beschrieben ist da leider nicht viel :-(
??? da steht doch quasi schon der Code drinnen. Ein bisschen Eigeninitiative sollte schon sein und die Suchfunktion ist dein Freund :-X
Auch ich bilde mir ein, dass ich meine Rollladensteuerung "kompliziert" haben will. Mein Lösungsansatz sieht so aus:
Aus allen möglichen Randbedingungen, die auch noch je mehr als 2 Zustände einnehmen können, errechne ich mir einen Index. Mit diesem gehe ich dann in einen Array, wo die gewünschte Rollladenposition hinterlegt ist.
Nach einem Wochenende habe ich soviel Perl gelernt (und ausprobiert), dass das wohl auch funktioniert. Nur ein Punkt ist noch offen: wo hinterlege ich global den Array? Ich möchte den ja nur einmal beim Start von FHEM schreiben und dann von verschiedenen FHEM-Stellen lesend darauf zugreifen.
Für einen Tipp bin ich dankbar.
Einen lieben Gruß
Jürgen
Hallo Mitch,
ich habe mich mal vorsichtig ran getastet:
define Rolladen01_timer DOIF ([{sunset(-600)}|8]) (set Rolladen01 on) DOELSEIF ([{sunset(-0)}|7]) (set Rolladen01 on) DOELSEIF ([{sunrise(+30)}|8]) (set Rolladen01 off) DOELSEIF ([{sunrise(+600)}|7]) (set Rolladen01 off)
Ich erhalte folgende Readings:
state initialized 2015-02-24 15:02:03
timer_1_c1 24.02.2015 17:59:32|8 2015-02-24 15:02:03
timer_2_c2 24.02.2015 18:09:32|7 2015-02-24 15:02:03
timer_3_c3 25.02.2015 06:30:17|8 2015-02-24 15:02:03
timer_4_c4 25.02.2015 06:39:47|7 2015-02-24 15:02:03
Ist das jetzt schon ein Hinweis das ich es korrekt gemacht habe? Testen ohne Sonnenaufgang oder -untergang ist ja eher schlecht ;-)
Als nächstes würde ich probieren den Aussperrschutz in das DOIF zu verbasteln, oder sollte ich das lieber irgendwie extra machen?
Wenn Kontakt_Garten opened dann Rolladen02 nicht on; wenn Kontakt_Garten geschlossen wird und closed ist dann Rolladen02 on.
Gruß
Micha
Das sieht doch schon mal sehr gut aus.
Und mit Deiner Überlegung
ZitatWenn Kontakt_Garten opened dann Rolladen02 nicht on; wenn Kontakt_Garten geschlossen wird und closed ist dann Rolladen02 on.
bist du auf dem richtigen Weg.
Ich schreibe mir solche Bedingungen auch einfach immer erst "wörtlich" auf.
Quasi, was will ich:
- wenn Sonnenaufgang und Wochende und Kontakt_Garten geschlossen -> dann Rollo hoch
- wenn Sonnenuntergang und Wochende und Kontakt_Garten geschlossen -> dann Rollo runter
Dann setzt ich das in den "echten" Code um:
define Rolloautomatik DOIF ([{sunset(-600)}|8] and [Kontakt_Garten] eq "off) (set Rolladen01 on) ...usw
Hallo Mitch,
danke mit and [Kontakt_Garten] eq "off)
hast Du mich jetzt schon wieder ein Stück nach vorne geworfen.
An der Stelle wird also geprüft, ob der Kontakt closed ist un nur dann wird runtergefahren. Aber merkt mein DOIF jetzt automatisch wenn der Kontakt opened war und geschlossen wird {sunset(-600)} aber schon überschritten ist?
Wenn Du es dem DOIF sagst, dann schon ;D
Mein Momentaner Ansatz sieht dann so aus :
define Rolladen02_timer DOIF ([{sunset(+600)}|8] and [Kontakt_Garten] eq "closed") (set Rolladen02 on) DOELSEIF ([{sunset(+120)}|7]) (set Rolladen02 on) DOELSEIF ([{sunrise(-30)}|8]) (set Rolladen02 off) DOELSEIF ([{sunrise(-600)}|7]) (set Rolladen02 off)
Gut ;)
Aber, mit der variable {sunset(+600)} hast Du eine "Zeit".
Somit ist Deine Bedingung: wenn des eine bestimmte Uhrzeit hat und der Kontakt closed ist -> Rollo runter
Wenn jetzt aber zum Zeitpunkt ({sunset(+600)}) der Kontakt noch offen ist und dann zu geht, passiert nichts mehr, weil ja die erste Bedingung, die zeitliche, nicht mehr wahr ist ;)
Nachdem du dich jetzt schon gut rein gearbeitet hast, so mach ich das:
mit zwei notifys einen dummy ein oder aus schalten, wenn hell oder dunkel (mit sunrise/sunset), diesen kann ich wunderbar weiter benutzen.
Zusätzlich habe ich einen dummy, mit dem ich die Rollo-Automatik ein bzw. aus schalte.
So sieht meine Rollosteuerung im EG aus:
([dunkel] eq "on" and [Rollo.Automatik] eq "An" and [Fenster_Terrasse] eq "closed") (set Rollo.Ost Zu,set Rollo.Sued.links Zu,set Rollo.Sued.rechts Zu,set Rollo_WZ_Terrasse 20) DOELSEIF ([22:30] and [dunkel] eq "on" and [Rollo.Automatik] eq "An" and [Fenster_Terrasse] eq "closed") (set Rollo_WZ_Terrasse off) DOELSEIF ([dunkel] eq "off" and [Rollo.Automatik] eq "An") (set Rollo.Ost Auf,set Rollo.Sued.links Auf,set Rollo.Sued.rechts Auf,set Rollo.Buero Auf,set Rollo_WZ_Terrasse on)
Somit habe ich den Fall, dass entweder dunkel oder Automatik steuert (zusätzlich muss die Terrassentür zu sein.
Ich fahre erst mal auf 20% und dann ganz zu.
Hallo Mitch,
prima Danke werde da mal noch dran rumspielen. Hatte mir auch überlegt die Sache über ein dummy Tageslicht mit hell / dunkel zu regeln, was den Vorteil hätte ich würde auch den Türkontakt darüber abfragen und müsste nicht überall einzelne Werte und offsets hinterlegen. Hatte auch einen coolen Trick der Woche (http://www.fhemwiki.de/wiki/Trick_der_Woche#Januar_2014) gefunden und diesen nachgebaut. Allerdings habe ich was falsch gemacht oder im Trick der Woche ist ausnahmsweise ein Fehler. Bei mir ist Tageslicht hell / dunkel verdreht.
define Tageslicht dummy
attr Tageslicht room Wetter
define Tageslicht_hell at *{sunset(-3600)} set Tageslicht hell
attr Tageslicht_hell room Wetter
define Tageslicht_dunkel at *{sunrise(+1800)} set Tageslicht dunkel
attr Tageslicht_dunkel room Wetter
Ich hatte mir jetzt überlegt das ganze anzupassen für Rolladen_down und Rolladen_up die at s festzulegen und dann in den Dummy Rolladen_Zustand up und down reinzuschreiben.
define Rolladen_Zustand dummy
attr Rolladen_Zustand room Wetter
define Rolladen_down at *{sunset(-3600)} set Rolladen_Zustand down
attr Rolladen_down room Wetter
define Rolladen_up at *{sunrise(+1800)} set Rolladen_Zustand up
attr Rolladen_up room Wetter
Aber ich vermutlich werde ich dann auf ein Problem stossen mit den Verschiebungen für Wochentag und Wochenende :-( ins unsaubere geschrieben:
attr Rolladen02a_timer room Wohnzimmer
define Rolladen02_timer DOIF ([Rolladen_Zustand] eq "down" and [Kontakt_Garten] eq "closed" and --> Wochentag 8 --> Zeitoffset -1800) (set Rolladen02 on) DOELSEIF ([Rolladen_Zustand] eq "down" and [Kontakt_Garten] eq "closed"and --> Wochenende 7 --> Zeitoffset +1800) (set Rolladen02 on) DOELSEIF ([Rolladen_Zustand] eq "up" and --> Wochentag 8 --> Zeitoffset -1800) (set Rolladen02 off) DOELSEIF ([Rolladen_Zustand] eq "up" and --> Wochentag 7 --> Zeitoffset +1800) (set Rolladen02 off)
attr Rolladen02a_timer room Wohnzimmer
Gruß
Micha
Ich habe mein Hell/Dunkel Tag/Nacht Problem mit einem Zusatzreading in dem Rolladenaktor gelöst :-)
im at für das öffnen und schliessen habe ich noch zusätzlich ein setreading hm.rollade.1 Sollstatus open/closed/0%/100%/whatever gesetzt.
so kann ich es auch ganz einfach im DOIF readingsval abrufen
nach einem clear reading ist es bei HM zwar weg, kommt aber automatisch beim nächsten Zyklus wieder oder ich muss es von Hand setzen
Hallo,
das Thema Aussperrsicherung hat mich schon seit längerem interessiert. Allerdings hat mich bei den meisten Ansätzen gestört, dass direkte Tasterbefehle immer noch ein Schliessen ermöglichen.
Mir schwebte eine Lösung vor, die direkt auf die Register des Aktors zugreift.
Hier mein Lösungsansatz, den ich gerne zur Diskussion stellen möchte:
define d_aussperrschutz_bad DOIF ([virtual_og_bd_fenstersensor] eq "set_offen" )\
(set og_bd_Raffstore_2 regSet driveDown 0)\
(set og_bd_Raffstore_2 regSet driveDown 0 og_bd_taster_raffstore_down)\
DOELSE\
(set og_bd_Raffstore_2 regSet driveDown 42.5)\
(set og_bd_Raffstore_2 regSet driveDown 42.5 og_bd_taster_raffstore_down)
Bei geöffnetem Fenster setze ich die Fahrzeit des Motors beim runterfahren auf 0 Sekunden, beim Schliessen und in Kippstellung wird die normale Fahrzeit wieder eingestellt.
Gruß, Martin
Hallo Martin,
klappt natürlich nur, wenn die Rolläden durch Fahrzeiten gesteuert werden ;-) Vielleicht hilft ja auch das hier (http://forum.fhem.de/index.php/topic,34848.0.html).
Gruß
Micha
Hallo Micha,
das ist richtig. Bei Homematic Aktoren scheint mir das aber auch der sinnvollste Ansatz zu sein.
So wird es jedenfalls auch im Wiki empfohlen:
http://www.fhemwiki.de/wiki/HM-LC-BL1-FM_Funk-Jalousieaktor#Fahrtzeiten_kalibrieren (http://www.fhemwiki.de/wiki/HM-LC-BL1-FM_Funk-Jalousieaktor#Fahrtzeiten_kalibrieren)
Bei mir war es unverzichtbar, weil ich Raffstores mit verstellbaren Lamellen habe und nur über die Fahrzeiten Einfluss auf den Anstellwinkel der Lamellen habe.
Ausserdem will ich als nächstes mit dem gleichen Verfahren auch eine Sturmabschaltung realisieren, weil Raffstores bei Sturm in eine sichere Position gefahren werden müssen. Das hilft natürlich nur, wenn nicht irgendein Nutzer sie anschliessend wieder runterfährt.
Über die Register müsste das Narrensicher umsetzbar sein.
Gruß, Martin