P.S.: Von Kommentaren wie "Ich hätte das aber viel schöner, schneller, leichter einfacher implementiert" bitte ich abzusehen. Das Projekt "Rolladensteuerung" ist für mich keine Lebensaufgabe.
Frank Sommer
- - - - -
Implementation Rolladensteuerung:
Ziel.: Automatische Rolladensteuerung, nur wenige manuelle Eingriffe möglich aber auch nicht erwünscht
- Fernsteuerung für manuelles rauf und runterfahren
- "Verriegelung" oben und unten um am WE den Schlaf nicht zu stören (unten) und um bei unklarer Wetterlage (Sturm) den Rolladen nicht zu bewegen (Forderung des Garantiegebers)
- Automatisches öffnen und schließen Morgens und Abends
- Abschattung damit im Sommer die Räume nicht aufheizen
Hardware
1.: FHZ 1000 an altem Notebook (läuft 24h durch, mit Reboot um 05:00) mit Windows XP und Homeputer Studio
2.: 3 EcoRoll Gurtwickler mit Funkmodul
3.: 4 Chamberlain Unterputz-Gurtwickler mit selbst angebautem Funkmodul ( FS20 Universal Schaltmodul)
4.: 1 Rolladen mit Wellenmotor und Somphy Funksteuerung (um FS20 Aktor für Anbindung an FHZ ergänzt)
5.: 1 4-Tasten Fernbedienung (....und weitere Fernbedienungen)
Alles am Beispiel Balkonrolladen mit Wellenmotor und Somphy Funksteuerung. Ich habe den Sourcecode insoweit reduziert.
Die Somphy Funksteuerung steuert den Balkonrolladen und hat 3 Tasten
Rauf
Runter
Stopp
Es reicht bei der Somphy FB ein kurzer Tastendruck um eine bestimmte Aktion auszuführen:
Druck auf "Oben" fährt Rolladen rauf, Druck auf "Unten" fährt Rolladen runter, "Stopp" hält den Rolladen an
Integration Somphy Funksteuerung mit FHZ
Die Somphy kann natürlich nicht mit der FHZ sprechen, deshalb muß irgendeine Anbindung her. Ich habe die Funksteuerung auseinander genommen und
nachgeschaut wie sie elektrisch funktioniert:
Wenn eine Taste der Funksteuerung gedrückt wird wird der entsprechende Kanal auf GND gelegt>> Lässt sich direkt an Ausgang vom FS20 Aktor (Universal Schaltmodul) anschließen weil die Ausgänge des FS20 Aktor Open Collector Ausgänge sind.
Das bedeutet: Funksteuerung von Somphy auseinandernehmen, an jeden Tasteranschluß und an GND ein Kabel löten und das alles mit einem FS Universalempfänger koppeln:
Der FS20 Aktor hat 4 Kanäle >> Jede Funktion liegt auf einem Kanal >> ein Kanal bleibt frei >> 4 Drähte erforderlich, Strom für FS20 Modul >> Steckernetzgerät (ich: USB-Hub liegt zufällig da rum), Die Somphy Funksteuerung nutzt immer noch ihre eingebaute Batterie
"Einfache" manuelle Rolladensteuerung
Zuerst habe ich mir über die zentrale Rolladensteuerung Gedanken gemacht. Was immer für Zusatzanforderungen an die Rolladensteuerung gestellt werden
die Zentralsteuerung bewegt den Rolladen und weiß ob evtl. ein anderer Fahrbefehl schon aktiv ist. Deshalb ist es gut, wenn man sich am Anfang über eine möglichst "perfekte" Zetralsteuerung Gedanken macht. Zusatzanforderungen kommen bestimmt (der Appetit kommt mit dem Essen) und die kann man dann einfacher implementieren.
Im Idealfall weiß die Steuerung auch in welcher Position sich der Rolladen befindet (tsa und seine Rolladensteuerung). Bei mir weiß die Rolladensteuerung allerdings nicht ob der Rolladen schon oben oder noch unten ist, oder ob sie sich in irgendeiner Zwischenposition befindet. Meine Rolladen bewegen sich leider zu "ungenau" um damit Fahrwege zu optimieren.
Teilaufgabe: Rolladen rauf und runterbewegen, stoppen mit Hilfe von zwei Tasten einer FS20 Fernbedienung
-----
Code: Alles auswählen
Makro: BalkonAuf
Wenn BalkonAuf.Sema ist gleich 1 dann
BalkonAuf.Sema:=1
wenn BalkonZu eingeschaltet und BalkonAuf eingeschaltet dann
** RollBalkzu ausschalten
** warte 2 sekunden
** RollBalkstopp einschalten für 1 sekunden
** warte 2 sekunden
** thx to tsa! weil Dank tsas direksende-Befehlen jetzt Schaltzeiten kleiner 1s möglich sind geht das jetzt einfacher:
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","[SSS]")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","adr=2241-3424-1124")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","cmd=EinMitZeit") ** das ist der schalter für balkonstopp
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","sek=0.25")
DirektSendekanal := "offen"
warte ("00:00:01")
DirektSendekanal := "geschlossen"
bueroautoaus := 1
BalkonRolladen := "oben"
gz_buzzer einschalten für 2 Sekunden
warte 2 sekunden
** RollBalkauf einschalten für 1 Sekunden
** warte 2 sekunden
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","[SSS]")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","adr=2241-3424-1131")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","cmd=EinMitZeit") ** das ist der schalter für balkonrauf
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","sek=0.25")
DirektSendekanal := "offen"
warte ("00:00:01")
DirektSendekanal := "geschlossen"
wenn-block-ende
wenn BalkonAuf eingeschaltet und BalkonZu ausgeschaltet dann
BalkonRolladen := "oben"
bueroautoaus := 0
** RollBalkauf einschalten für 1 Sekunden
** warte 2 sekunden
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","[SSS]")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","adr=2241-3424-1131")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","cmd=EinMitZeit") ** das ist der schalter für balkonrauf
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","sek=0.25")
DirektSendekanal := "offen"
warte ("00:00:01")
DirektSendekanal := "geschlossen"
makro starten BalkonSchalterAus
wenn-Block-Ende
wenn BalkonAuf ausgeschaltet dann
** RollBalkauf ausschalten dank tsa nicht mehr nötig
** warte 2 sekunden
** RollBalkstopp einschalten für 1 Sekunden
** warte 2 sekunden
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","[SSS]")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","adr=2241-3424-1124") ** das ist der schalter für balkonstopp
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","cmd=EinMitZeit")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","sek=0.25")
DirektSendekanal := "offen"
warte ("00:00:01")
DirektSendekanal := "geschlossen"
wenn-Block-Ende
BalkonAuf.Sema :=1
wenn-block-ende
die andere Fahrtrichtung:
Makro BalkonZu
Code: Alles auswählen
Wenn BalkonZu.Sema ist 1 dann
BalkonZu.Sema:=1
wenn BalkonZu eingeschaltet und Balkonauf ausgeschaltet dann
bueroautoaus := 0
BalkonRolladen := "unten"
** RollBalkzu einschalten für 1 sekunden
** warte 2 sekunden
** Dank TSA gehtds jetzt einfacher und sicherer...
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","[SSS]")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","adr=2241-3424-1122")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","cmd=EinMitZeit")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","sek=0.25")
DirektSendekanal := "offen"
warte ("00:00:01")
DirektSendekanal := "geschlossen"
Makro starten BalkonSchalterAus
wenn-Block-Ende
wenn BalkonZu ausgeschaltet dann
** RollBalkzu ausschalten
** warte 1 sekunden
** RollBalkstopp einschalten für 1 Sekunden
** warte 2 sekunden
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","[SSS]")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","adr=2241-3424-1124")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","cmd=EinMitZeit")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","sek=0.25")
DirektSendekanal := "offen"
warte ("00:00:01")
DirektSendekanal := "geschlossen"
wenn-Block-Ende
wenn BalkonZu eingeschaltet und BalkonAuf eingeschaltet dann
** RollBalkauf ausschalten
** warte 2 sekunden
** RollBalkstopp einschalten für 1 Sekunden
BalkonRolladen := "unten"
bueroautoaus := 1
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","[SSS]")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","adr=2241-3424-1124")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","cmd=EinMitZeit")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","sek=0.25")
DirektSendekanal := "offen"
warte ("00:00:01")
DirektSendekanal := "geschlossen"
** warte 1 sekunden
gz_buzzer einschalten für 2 Sekunden
warte 2 sekunden
** RollBalkzu einschalten für 1 Sekunden ....Das ist der Aktor
** warte 2 sekunden
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","[SSS]")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","adr=2241-3424-1122")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","cmd=EinMitZeit")
schreibedatei ("C:\Program Files\contronics\homeputer Studio\DirectSend.$$$","sek=0.25")
DirektSendekanal := "offen"
warte ("00:00:01")
DirektSendekanal := "geschlossen"
wenn-block-ende
BalkonZu.Sema :=1
wenn-block-ende
Makro BalkonSchalterAus
Code: Alles auswählen
warte Balkonauf.lzeit
BalkonAuf ausschalten
BalkonZu ausschalten
Sobald eine Taste der Fernsteuerung gedrückt wird, wird im Makro ein Timer gestartet und der entsprechende Fahrbefehl an den Rolladen gesendet. Die Laufzeit des Timers entspricht knapp der Laufzeit des Rolladen von der unteren zur oberen Endlage.makro starten BalkonSchalterAus
Wenn wieder eine Taste gedrückt wird während der Timer noch läuft (d.h. solange der virtuelle Schalter noch gesetzt ist), geht die Steuerung davon aus, daß der Rolladen noch unterwegs ist. Deshalb wird in diesem Fall zuerst ein "Stoppbefehl" an den Rolladen gesendet (Remember: die Somphy Funksteuerung hat 3 Tasten: Rauf, Runter, Stopp) und anschließend der neue Fahrbefehl gesendet. Der Timer wird neu gestartet. Wenn der Timer abgelaufen ist wird der virtuelle Schalter wieder zurückgesetzt.
Teilfunktion "Rolladen verriegeln"
Neben den einfachen Fahrbefehlen kann man über die 2-Tasten Fernbedienung den Rolladen in der unteren oder oberen Endlage "fixieren". Fixieren bedeutet nicht wirklich festhalten. Durch das Fixieren wird eine Variable (bueroautoaus) gesetzt, die von anderen Makros genutzt werden kann um festzustellen ob der Rolladen bewegt werden darf. Die Makros sind selbst dafür verantwortlich auf die Variable richtig zu reagieren.wenn BalkonZu eingeschaltet und BalkonAuf eingeschaltet dann
** RollBalkauf ausschalten
** warte 2 sekunden
** RollBalkstopp einschalten für 1 Sekunden
BalkonRolladen := "unten"
bueroautoaus := 1
gz_buzzer einschalten für 2 Sekunden
warte 2 sekunden
wenn-block-ende
Das Rolladen verriegeln funktioniert so:
Durch Drücken z.B. der Taste "Rauf" wird der Rolladen hinaufbewegt. Wenn die Taste "Rauf" noch einmal gedrückt wird während der Rolladen läuft (genauer: solangte der Timer noch aktiv ist) wird der Rolladen gestoppt. Wenn allerdings die Taste "Runter" gedrückt wird, während der Timer noch läuft (und der Rolladen sich nach oben bewegt), wird der Rolladen angehalten, nach unten bewegt und zusätzlich noch die Variable "Büroautoaus" gesetzt. Damit man irgendwie mitbekommt daß jetzt die "Verriegelung" aktiv ist, wird zusätzlich ein akustischer Melder (Buzzer) für 2 Sekunden aktiviert. Der Buzzer ist im gleichen Raum wie der Rolladen installiert, meistens sitzt er direkt mit auf dem FS20 Aktor und belegt einen eigenen Kanal.
Wenn jetzt noch einmal eine Taste der Fernbedienung gedrückt wird, wir die Verriegelung wieder gelöscht (keine akustische Bestatigung)wenn BalkonAuf eingeschaltet und BalkonZu ausgeschaltet dann
BalkonRolladen := "oben"
bueroautoaus := 0
Teilfunktion "Automatisches Öffnen Morgens und Abends"
Makro: RolladenBedOeffnen
Code: Alles auswählen
wenn Bueroautoaus ist gleich 0 dann ** Remember: die Makros sind für die Auswertung der Verriegelung verantwortlich
BalkonAuf einschalten
makro starten Balkonauf
warte 5 sekunden
wenn-Block-Ende
Funktion "Automatisches Schließen eine Stunde nach Sonnenuntergang"
Makro alarmsenden
Code: Alles auswählen
alarmzeit := SONNENUNTERGANG + "00:55:00"
steuerzeit := SONNENUNTERGANG + "01:00:00"
wenn Uhrzeit = alarmzeit dann
wenn bueroautoaus = 0 dann
gz_buzzer einschalten für 5 sekunden
warte ("00:00:07")
gz_buzzer einschalten für 5 sekunden
warte ("00:00:07")
gz_buzzer einschalten für 5 sekunden
endewenn
endewenn
wenn Uhrzeit = steuerzeit dann
makro starten rolladenbedschliessen
endewenn
Makro RolladenBedSchliessen
Code: Alles auswählen
Rolladen_Kueche schliessen
warte 5 sekunden
** Das dort oben als Beispiel wie das im Zusammenspiel mit anderen Rolladen implementiert ist. Zwischen jedem Fahrbefehl zu anderen
** Rolladen habe ich eine Pause von 5 Sekunden eingebaut, damit moeglichst keine Befehle verloren gehen: lessons learned
wenn bueroautoaus ist gleich 0 dann
BalkonZu einschalten
makro starten BalkonZu
warte 5 sekunden
wenn-Block-Ende
Fernbedienung_Rolladen_Buero einschalten
makro starten Fernbedienung_Rolladen_Buero
warte 5 sekunden
** so werden andere Rolladen gestartet. . . . . . .
Abends eine Stunde nach Sonnenuntergang werden die Rolladen geschlossen (sofern sie nicht verriegelt sind).steuerzeit := SONNENUNTERGANG + "01:00:00"
.
.
.
wenn Uhrzeit = steuerzeit dann
makro starten rolladenbedschliessen
endewenn
Das Schließen der Rolladen wird fünf Minuten vorher durch einen Buzzer akustisch angezeigt (damit man noch eine Chance hat die Rolladen zu verriegeln).alarmzeit := SONNENUNTERGANG + "00:55:00"
.
.
.
wenn Uhrzeit = alarmzeit dann
wenn bueroautoaus = 0 dann
gz_buzzer einschalten für 5 sekunden
warte ("00:00:07")
gz_buzzer einschalten für 5 sekunden
warte ("00:00:07")
gz_buzzer einschalten für 5 sekunden
endewenn
endewenn
- - - - - -
Funktion "Rolladenstellung OG (bzw. EG) anfahren"
Makro Rolladenstellung_OG
Code: Alles auswählen
Wenn Rolladenstellung_og.Sema ist gleich 1 dann
Rolladenstellung_og.Sema :=0
wenn Rolladenstellung_og groesser Rolladenstellung_og.stellung_alt dann
** rolladen runterfahren
Rolladenstellung_og.faktor := Rolladenstellung_og - Rolladenstellung_og.stellung_alt
Rolladenstellung_og.stellung_alt := Rolladenstellung_og
wenn bueroautoaus ist gleich 0 dann
BalkonZu einschalten
makro starten BalkonZu
Rolladenstellung_og.laufzeit := Rolladenstellung_og.faktor * BalkonZu.lzeit / 3
warte (Rolladenstellung_og.laufzeit)
BalkonZu umschalten
makro starten BalkonZu
warte 5 sekunden
wenn-block-ende
endewenn
wenn Rolladenstellung_og kleiner Rolladenstellung_og.stellung_alt dann
Rolladenstellung_og.faktor := Rolladenstellung_og.stellung_alt - Rolladenstellung_og
Rolladenstellung_og.stellung_alt := Rolladenstellung_og
wenn Rolladenstellung_og gleich 0 dann
Rolladenstellung_og.faktor := 3
** damit wird sichergestellt, daß der rolladen immer oben ankommt
wenn-block-ende
** rolladen rauffahren
wenn Bueroautoaus ist gleich 0 dann
BalkonAuf einschalten
makro starten Balkonauf
Rolladenstellung_og.laufzeit := Rolladenstellung_og.faktor * BalkonAuf.lzeit / 3
warte (Rolladenstellung_og.laufzeit)
BalkonAuf umschalten
makro starten BalkonAuf
warte 5 sekunden
wenn-Block-Ende
endewenn
Rolladenstellung_og.Sema :=1
wenn-block-ende
Die Rolladen auf der Wetterseite (Süden) im EG bzw. OG können gemeinsam bewegt werden. Es gibt vier Positionen:Rolladenstellung_og.laufzeit := Rolladenstellung_og.faktor * BalkonZu.lzeit / 3
Offen ==0, 1. Zwischenpos. ==1, 2. Zwischenpos. ==2, Zu ==3
Ich habe für jeden Rolladen einzeln die Laufzeiten rauf und runter bestimmt. Der Rolladen wird in die gewünschte Richtung bewegtBalkonAuf einschalten
makro starten Balkonauf
Rolladenstellung_og.laufzeit := Rolladenstellung_og.faktor * BalkonAuf.lzeit / 3
warte (Rolladenstellung_og.laufzeit)
BalkonAuf umschalten
makro starten BalkonAuf
und nach Ablauf der errechneten Laufzeit (Danke an Bümpi!) wird der Rolladen gestoppt.
Funktion "Abschattung damit im Sommer die Räume nicht aufheizen"
Makro RolladenOgBeiHitzeSchließen
Code: Alles auswählen
start:
maxtemperatur := 24,0+(Rolladenstellung_og*3)
Wenn gaestezimmer.Temperatur groesser maxtemperatur und uhrzeit groesser "10:00:00" und uhrzeit kleiner "16:00:00" und buero.temperatur groesser 22,5 und Rolladenstellung_og kleiner 4 dann
wenn Bueroautoaus ist gleich 0 dann
warte 20 sekunden
gz_buzzer einschalten für 5 sekunden
warte ("00:03:00")
RolladenBeiHitzeSchliessen.gesetzt:=RolladenBeiHitzeSchliessen.gesetzt+1
Rolladenstellung_og := Rolladenbeihitzeschliessen.gesetzt
wenn-Block-Ende
sonst
Wenn gaestezimmer.Temperatur kleiner 24,0 oder buero.temperatur kleiner 22,5 oder uhrzeit groesser "18:00:00" dann
wenn RolladenBeiHitzeSchliessen.gesetzt > 0 dann
RolladenBeiHitzeSchliessen.gesetzt := 0
Rolladenstellung_og := Rolladenbeihitzeschliessen.gesetzt
wenn-Block-Ende
wenn-block-ende
wenn-block-ende
warte ("00:11:00")
gehezu start
Tagsüber ist ab 10:00 die "Außentemperaturüberwachung" aktiv. Wenn die Außentemperaur einen bestimmten Wert überschreitet werden die Rolladen heruntergefahren. Damit ich aber bei 25 Grad nicht schon im Dunkeln sitze wird die Abschattung abhängig von der Außentemperatur gestaffelt:maxtemperatur := 24,0+(Rolladenstellung_og*3)
24 Grad: Stufe 1
27 Grad: Stufe 2
30 Grad: Stufe 3 (ganz unten)
Sobald die Außentemperatur unter 24 Grad sinkt oder nach 18:00 werden die Rolladen wieder nach oben gefahren. Das Script steuert aber nur die Funktion "Rolladenstellung_EG" bzw. *_OG an. Das Makro wird einmal gestartet und läuft dann zyklisch durch. Alle 11 Minuten wird eine Auswertung gemacht und das Script wartet danach wieder für 11 Minuten.start:
maxtemperatur := 24,0+(Rolladenstellung_og*3)
.
.
.
warte ("00:11:00")
gehezu start
---------
Was passiert nach dem Start von Homeputer ?
Code: Alles auswählen
Makro INIT
laden ("*ALL")
laden ("*ALLV")
BalkonAuf.Sema := 1
BalkonZu.Sema := 1
rolladenstellung_og.sema :=1
rolladenstellung_og.laufzeit := 0,0
** zwischenstellung zu null setzen ohne rolladen zu bewegen
rolladenstellung_og.stellung_alt := 0
rolladenstellung_og := 0
makro starten RolladenOGBeiHitzeSchliessen
Variablen gespeichert, damit nach einem evtl. Restart des Rechners die Steuerung noch weiß in welchem Zustand sie sich befindet.
Gruß
F.Sommer