Dokumentation
Shutter Control (legacy)
Dies ist eine veraltete Version. Es ist empfohlen ab Version 5.0 die neue Variante Shutter Control 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).
Skripte, die durch das Shutter-Control ausgeführt werden, beinhalten diese Systemvariablen
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.
Rolladen einmessen
Beim zweiten Schritt werden die Zeiten gemessen, die der Rolladen 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 Rolladen sich in Bewegung setzen sollte. Der Button muss erneut gedrückt werden, wenn die auf ihm stehende Position erreicht wird.
Nach jedem Einlernen müssen die Werte mit dem “Setzen” Button übernommen werden.
Tipps & Tricks
Bei einer Fahrt auf 0% und 100% werden fünf Sekunden zur Fahrzeit addiert, um eine definierte Position zu erreichen.
Sollte die Laufzeit des Rollladens oberhalb des PHP-Skript-Limits liegen (180sek) muss dieses in der php.ini erhöht werden. (siehe PHP)
Hinweise für LCN Nutzer
Das Shuttermodul kann mit dem Script universell für die Steuerung des Rolladen/Jalousie über die Ausgänge wie auch über die Relais genutzt werden.
Soll das Shuttermodul einen Rolladen/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 Rolladen/Jalousien an den Relais nutzt, müssen also für die jeweiligen Konfigurationen zwei Shutterscripte verwendet werden.
Shutter Skript
//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 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.