Rolladensteuerung mit Aussperrschutz und Komfortöffnung

Begonnen von mfeske, 10 März 2015, 12:39:09

Vorheriges Thema - Nächstes Thema

Frini

Versuch doch mal meine Beispiele zu übernehmen und "intelligente" und "dumme" Rolladen nicht zu mischen

Dersch

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

Dersch

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

Frini

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


moonsorrox

wenn das einer so übernimmt wird das nichts...!
define doi.rol.eg.wz.RolladeGartenRechtsAutomatik

eher so

define doi.rol.eg.wz.RolladeGartenRechtsAutomatik DOIF
;) :D
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Frini

Schon klar. Ist halt nur aus meinem FHEM rauskopiert und kurz das define als Namenserklärung mit hinzugefügt.  8)

kjmEjfu

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 ...  ;)
Migriere derzeit zu Home Assistant

Dersch

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

Dersch

#23
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])

Frini

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.

Dersch

#25
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)

Dersch

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.

Frini

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.

Franz Tenbrock

#28
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

cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

sash.sc

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
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb