# Shutter Control (legacy) > Symcon Dokumentation · Deutsch · erzeugt am 2026-09-26 > Index: https://www.symcon.de/de/llms.txt Quelle: https://www.symcon.de/de/service/dokumentation/modulreferenz/legacy/shutter-control-legacy/ > **Achtung:** Dies ist eine veraltete Version. Es ist empfohlen ab Version 5.0 die neue Variante [Shutter Control](https://www.symcon.de/de/produkt/anwendungsbeispiele/rollladensteuerung/) zu nutzen. Um das IP-Symcon Shutter-Modul hardwareunabhängig zu machen, braucht das Modul ein Skript, welches sich um die Weitergabe der Befehle an Ihre Hardware kümmert. Alle, die folgende Hardware besitzen, können das Skript einfach kopieren und verwenden. Andere Hardware lässt sich leicht hinzufügen. (Mehr dazu unterhalb des Skripts). > **Hinweis:** Skripte, die durch das Shutter-Control ausgeführt werden, beinhalten diese [Systemvariablen](../concepts/automations.md) * Eaton Xcomfort Shutter * 1-Wire Shutter * Homematic (Dank an [hengesb](https://community.symcon.de/u/hengesb/summary) ) * LCN (Dank an [philipp](https://community.symcon.de/u/philipp/summary) ) * FS20MS Dieses Skript muss im Normalfall nur einmal in IP-Symcon vorhanden sein und es können beliebig viele Instanzen darauf zugreifen. Es muss Nichts editiert werden. ### Rollladen einmessen Beim zweiten Schritt werden die Zeiten gemessen, die der Rollladen braucht, um auf die einzelnen Positionen zu fahren. Die Messung muss zweimal durchgeführt werden. Für Auf und Ab. Zum Starten wird der entsprechende Button gedrückt, woraufhin der Rollladen sich in Bewegung setzen sollte. Der Button muss erneut gedrückt werden, wenn die auf ihm stehende Position erreicht wird. > **Hinweis:** Nach jedem Einlernen müssen die Werte mit dem “Setzen” Button übernommen werden. ### Tipps & Tricks > **Hinweis:** Bei einer Fahrt auf 0% und 100% werden fünf Sekunden zur Fahrzeit addiert, um eine definierte Position zu erreichen. > **Achtung:** Sollte die Laufzeit des Rollladens oberhalb des PHP-Skript-Limits liegen (180sek) muss dieses in der php.ini erhöht werden. (siehe [PHP](../components/service.md)) ### Hinweise für LCN Nutzer Das Shuttermodul kann mit dem Script universell für die Steuerung des Rollladen/Jalousie über die Ausgänge wie auch über die Relais genutzt werden. Soll das Shuttermodul einen Rollladen/Jalousie steuern, welche/r an den zwei Ausgängen eines UPP/SH/HU hängt, dann muss unter “Instance1″ die Instanz des Ausgangs 1 des Moduls gewählt werden und für “Instance2″ die Instanz des Ausgangs 2 des Moduls. Diese Belegung entspricht dann der Standardrichtung, wie sie aus der LCN-Pro mit Hoch- bzw. Runterfahren angesteuert wird. Sollte der Anschluss umgekehrt sein, muss nur die Zuordung von Ausgang 1 und Ausgang 2 zu den Einstellungen “Instance1″ und “Instance2″ geändert werden. Beim Betrieb mit Relais muss für “Instance1″ immer das erste Relais der beiden angegeben werden. Das erste Relais ist das, welches den Strom AN/AUS schaltet. “Instance2″ ist immer das Relais, welches die Richtung steuert. Sollte die Fahrtrichtung verdreht sein, muss dies manuell im Script geändert werden. Im “case Block für LCN” des Shutter Scriptes findet sich an den beiden Stellen ein entsprechender Kommentar. Für den Fall, dass man unterschiedlich verdrahtete Rollladen/Jalousien an den Relais nutzt, müssen also für die jeweiligen Konfigurationen zwei Shutterscripte verwendet werden. ### Shutter Skript ```php //Variables provided by ShutterControl Module //IPS_LogMessage("InstanceID", $_IPS['INSTANCE']); /* InstanceID */ //IPS_LogMessage("Direction", $_IPS['DIRECTION']); /* {0..2} Stop, Up, Down */ //IPS_LogMessage("Duration", $_IPS['DURATION']); /* ms */ if($_IPS['SENDER'] != "ShutterControl") { die("This script can only be started by the ShutterControl Module"); } define("SC_DIRECTION_STOP", 0); define("SC_DIRECTION_UP", 1); define("SC_DIRECTION_DOWN", 2); $instance = IPS_GetInstance($_IPS['INSTANCE']); switch($instance['ModuleInfo']['ModuleID']) { //Siemens Device S7/LOGO case "{932076B1-B18E-4AB6-AB6D-275ED30B62DB}": switch($_IPS['DIRECTION']) { case SC_DIRECTION_STOP: S7_WriteBit($_IPS['INSTANCE'], false); S7_WriteBit($_IPS['INSTANCE2'], false); break; case SC_DIRECTION_UP: S7_WriteBit($_IPS['INSTANCE'], true); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); S7_WriteBit($_IPS['INSTANCE'], false); } break; case SC_DIRECTION_DOWN: S7_WriteBit($_IPS['INSTANCE2'], true); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); S7_WriteBit($_IPS['INSTANCE2'], false); } break; } break; //FS20 case "{48FCFDC1-11A5-4309-BB0B-A0DB8042A969}": $running = CreateVariableByName($_IPS['INSTANCE'], "Moving", 0); $value = GetValue(IPS_GetObjectIDByIdent("StatusVariable", $_IPS['INSTANCE'])); switch($_IPS['DIRECTION']) { case SC_DIRECTION_STOP: if(GetValue($running)) { FS20_SwitchMode($_IPS['INSTANCE'], $value); SetValue($running, false); } break; case SC_DIRECTION_UP: if(!GetValue($running)) { FS20_SwitchMode($_IPS['INSTANCE'], true); SetValue($running, true); } if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); FS20_SwitchMode($_IPS['INSTANCE'], true); SetValue($running, false); } break; case SC_DIRECTION_DOWN: if(!GetValue($running)) { FS20_SwitchMode($_IPS['INSTANCE'], false); SetValue($running, true); } if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); FS20_SwitchMode($_IPS['INSTANCE'], false); SetValue($running, false); } break; } break; //EnOcean case "{1463CAE7-C7D5-4623-8539-DD7ADA6E92A9}": switch($_IPS['DIRECTION']) { case SC_DIRECTION_STOP: ENO_ShutterStop($_IPS['INSTANCE']); break; case SC_DIRECTION_UP: ENO_ShutterMoveUp($_IPS['INSTANCE']); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); ENO_ShutterStop($_IPS['INSTANCE']); } break; case SC_DIRECTION_DOWN: ENO_ShutterMoveDown($_IPS['INSTANCE']); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); ENO_ShutterStop($_IPS['INSTANCE']); } break; } break; //digitalStrom case "{3DDA1E2B-B807-4680-AB6D-E7E8FBD6093A}": switch($_IPS['DIRECTION']) { case SC_DIRECTION_STOP: DS_ShutterStop($_IPS['INSTANCE']); break; case SC_DIRECTION_UP: DS_ShutterMoveUp($_IPS['INSTANCE']); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); DS_ShutterStop($_IPS['INSTANCE']); } break; case SC_DIRECTION_DOWN: DS_ShutterMoveDown($_IPS['INSTANCE']); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); DS_ShutterStop($_IPS['INSTANCE']); } break; } break; //xComfort case "{1B7B5B7D-CAA9-4AB5-B9D8-EC805EC955AD}": switch($_IPS['DIRECTION']) { case SC_DIRECTION_STOP: MXC_ShutterStop($_IPS['INSTANCE']); break; case SC_DIRECTION_UP: MXC_ShutterMoveUp($_IPS['INSTANCE']); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); MXC_ShutterStop($_IPS['INSTANCE']); } break; case SC_DIRECTION_DOWN: MXC_ShutterMoveDown($_IPS['INSTANCE']); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); MXC_ShutterStop($_IPS['INSTANCE']); } break; } break; //LCN Unit case "{2D871359-14D8-493F-9B01-26432E3A710F}": $type=IPS_GetProperty($_IPS['INSTANCE'],'Unit'); switch($type) { //Ausgänge case 0: switch($_IPS['DIRECTION']) { case SC_DIRECTION_STOP: LCN_SetIntensity($_IPS['INSTANCE'],0,0); LCN_SetIntensity($_IPS['INSTANCE2'],0,0); break; case SC_DIRECTION_UP: LCN_SetIntensity($_IPS['INSTANCE'],100,4); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); LCN_SetIntensity($_IPS['INSTANCE'],0,0); } break; case SC_DIRECTION_DOWN: LCN_SetIntensity($_IPS['INSTANCE2'],100,4); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); LCN_SetIntensity($_IPS['INSTANCE2'],0,0); } break; } break; //Relais case 2: switch($_IPS['DIRECTION']) { case SC_DIRECTION_STOP: LCN_SwitchRelay($_IPS['INSTANCE'],false); break; case SC_DIRECTION_UP: LCN_SwitchRelay($_IPS['INSTANCE2'],false); // Um Relaisrichtung zu ändern bitte auf true LCN_SwitchRelay($_IPS['INSTANCE'],true); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); LCN_SwitchRelay($_IPS['INSTANCE'],false); } break; case SC_DIRECTION_DOWN: LCN_SwitchRelay($_IPS['INSTANCE2'],true);// Um Relaisrichtung zu ändern bitte auf false LCN_SwitchRelay($_IPS['INSTANCE'],true); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); LCN_SwitchRelay($_IPS['INSTANCE'],false); } break; } break; } break; //LCN Shutter case "{C81E019F-6341-4748-8644-1C29D99B813E}": switch($_IPS['DIRECTION']) { case SC_DIRECTION_STOP: LCN_ShutterStop($_IPS['INSTANCE']); break; case SC_DIRECTION_UP: LCN_ShutterMoveUp($_IPS['INSTANCE']); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); LCN_ShutterStop($_IPS['INSTANCE']); } break; case SC_DIRECTION_DOWN: LCN_ShutterMoveDown($_IPS['INSTANCE']); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); LCN_ShutterStop($_IPS['INSTANCE']); } break; } break; //1-Wire Shutter Modul (e-service Online) case "{BD0F2622-F67C-4248-9A04-316DF13914C3}": switch($_IPS['DIRECTION']) { case SC_DIRECTION_STOP: OW_SetPin($_IPS['INSTANCE'], 0, true); OW_SetPin($_IPS['INSTANCE'], 1, true); IPS_Sleep(100); OW_SetPin($_IPS['INSTANCE'], 0, false); OW_SetPin($_IPS['INSTANCE'], 1, false); break; case SC_DIRECTION_UP: OW_SetPin($_IPS['INSTANCE'], 0, true); IPS_Sleep(100); OW_SetPin($_IPS['INSTANCE'], 0, false); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); OW_SetPin($_IPS['INSTANCE'], 0, true); OW_SetPin($_IPS['INSTANCE'], 1, true); IPS_Sleep(100); OW_SetPin($_IPS['INSTANCE'], 0, false); OW_SetPin($_IPS['INSTANCE'], 1, false); } break; case SC_DIRECTION_DOWN: OW_SetPin($_IPS['INSTANCE'], 1, true); IPS_Sleep(100); OW_SetPin($_IPS['INSTANCE'], 1, false); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); OW_SetPin($_IPS['INSTANCE'], 0, true); OW_SetPin($_IPS['INSTANCE'], 1, true); IPS_Sleep(100); OW_SetPin($_IPS['INSTANCE'], 0, false); OW_SetPin($_IPS['INSTANCE'], 1, false); } break; } break; //1-Wire Shutter (1-wire.de) case "{6A75828A-25CD-4CF3-83EA-DAAB914030A7}": switch($_IPS['DIRECTION']) { case SC_DIRECTION_STOP: OneWireShutter($_IPS['INSTANCE'], 0, $_IPS['DURATION']); break; case SC_DIRECTION_UP: if($_IPS['DURATION'] == 0) { $_IPS['DURATION'] = 120000; } OneWireShutter($_IPS['INSTANCE'], 0, $_IPS['DURATION']); break; case SC_DIRECTION_DOWN: if($_IPS['DURATION'] == 0) { $_IPS['DURATION'] = 120000; } OneWireShutter($_IPS['INSTANCE'], 1, $_IPS['DURATION']); break; } break; //Homematic Shutter case "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}": switch($_IPS['DIRECTION']) { case SC_DIRECTION_STOP: HM_WriteValueBoolean($_IPS['INSTANCE'], "STOP", true); break; case SC_DIRECTION_UP: HM_WriteValueFloat($_IPS['INSTANCE'], "LEVEL", 1.0); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); HM_WriteValueBoolean($_IPS['INSTANCE'], "STOP", true); } break; case SC_DIRECTION_DOWN: HM_WriteValueFloat($_IPS['INSTANCE'], "LEVEL", 0.0); if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); HM_WriteValueBoolean($_IPS['INSTANCE'], "STOP", true); } break; } break; //DMXOUT case "{E19C2E41-7347-4A3B-B7D9-A9A88E0D133E}": switch($_IPS['DIRECTION']) { case SC_DIRECTION_STOP: DMX_SetValue($_IPS['INSTANCE'],1,0); //Relais Hoch DMX_SetValue($_IPS['INSTANCE2'],1,0); //Relais Runter break; case SC_DIRECTION_UP: DMX_SetValue($_IPS['INSTANCE2'],1,0); //Relais Runter DMX_SetValue($_IPS['INSTANCE'],1,255); //Relais Hoch if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); DMX_SetValue($_IPS['INSTANCE'],1,0); //Relais Hoch } break; case SC_DIRECTION_DOWN: DMX_SetValue($_IPS['INSTANCE'],1,0); //Relais Hoch DMX_SetValue($_IPS['INSTANCE2'],1,255); //Relais Runter if($_IPS['DURATION'] > 0) { IPS_Sleep($_IPS['DURATION']); DMX_SetValue($_IPS['INSTANCE2'],1,0); //Relais Runter } break; } break; default: die("No Handler for Module ".$instance['ModuleInfo']['ModuleName']." found"); } function OneWireShutter($ins, $dir, $sec) { @OW_SetStrobe($ins, True); $res = ($dir * 128) + ($sec / 1000); @OW_SetPort((integer)$ins, (integer)$res); } function CreateVariableByName($id, $name, $type) { $vid = @IPS_GetVariableIDByName($name, $id); if($vid===false) { $vid = IPS_CreateVariable($type); IPS_SetParent($vid, $id); IPS_SetName($vid, $name); IPS_SetInfo($vid, "This Variable was created by Script"); } return $vid; } ``` ### Informationen zum Erweitern des Skriptes Es werden bei einem Aufruf immer drei Parameter übergeben. * Die InstanzID des in dem Shutter Control Instanz eingestellten “Transmit Device” * Die Richtung, in die gefahren werden soll. * Die Zeit, die gefahren werden soll. (Dieser Wert ist 0 bei STOP und bei den TEST Buttons in der Eigenschaften-Seite) In den “Case Statements” müssen die [GUIDs](../concepts.md) für das jeweilige Modul eingefügt werden. Alle IP-Symcon Funktionen können verwendet werden. Es darf kein Output generiert werden (echo), andernfalls gilt dies als Fehler und wird im Message-Log angezeigt und der Status der “Position” Variable wird nicht aktualisiert. ## SC_Move Quelle: https://www.symcon.de/de/service/dokumentation/modulreferenz/legacy/shutter-control-legacy/sc-move/ `bool SC_Move(int $InstanzID, int $Position)` bewegt den Rollladen an eine bestimmte Position **Parameter** - `$InstanzID` (int): ID der Shutter Control Instanz - `$Position` (int): 0%-100%, 99% = Auf Spalt fahren **Rückgabewert** (bool): Konnte der Befehl erfolgreich ausgeführt werden, liefert er als Ergebnis __TRUE__, andernfalls __FALSE__. 0%-100%, 99% = Auf Spalt fahren **Beispiel** ```php SC_Move(12345, 50); //Auf 50% fahren ``` ## SC_MoveDown Quelle: https://www.symcon.de/de/service/dokumentation/modulreferenz/legacy/shutter-control-legacy/sc-movedown/ `bool SC_MoveDown(int $InstanzID, int $Dauer)` bewegt den Rollladen bis zu Endposition runter **Parameter** - `$InstanzID` (int): ID der Shutter Control Instanz - `$Dauer` (int): 0 = Endlagenschalter, >1 = Dauer in ms **Rückgabewert** (bool): Konnte der Befehl erfolgreich ausgeführt werden, liefert er als Ergebnis __TRUE__, andernfalls __FALSE__. 0 = Endlagenschalter, >1 = Dauer in ms **Beispiel** ```php SC_MoveDown(12345, 0); //Nach unten fahren ``` ## SC_MoveUp Quelle: https://www.symcon.de/de/service/dokumentation/modulreferenz/legacy/shutter-control-legacy/sc-moveup/ `bool SC_MoveUp(int $InstanzID, int $Dauer)` bewegt den Rollladen bis zu Endposition hoch **Parameter** - `$InstanzID` (int): ID der Shutter Control Instanz - `$Dauer` (int): 0 = Endlagenschalter, >1 = Dauer in ms **Rückgabewert** (bool): Konnte der Befehl erfolgreich ausgeführt werden, liefert er als Ergebnis __TRUE__, andernfalls __FALSE__. 0 = Endlagenschalter, >1 = Dauer in ms **Beispiel** ```php SC_MoveUp(12345, 0); //Nach oben fahren ``` ## SC_Stop Quelle: https://www.symcon.de/de/service/dokumentation/modulreferenz/legacy/shutter-control-legacy/sc-stop/ `bool SC_Stop(int $InstanzID)` **Parameter** - `$InstanzID` (int): ID der Shutter Control Instanz **Rückgabewert** (bool): Konnte der Befehl erfolgreich ausgeführt werden, liefert er als Ergebnis __TRUE__, andernfalls __FALSE__. ID der Shutter Control Instanz **Beispiel** ```php SC_Stop(12345); //Anhalten ```