« Zurück zu Produkt

Dokumentation

Shutter Control (legacy)

Warning

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).

Warning

Skripte, die durch das Shutter-Control ausgeführt werden, beinhalten diese Systemvariablen

  • Eaton Xcomfort Shutter
  • 1-Wire Shutter
  • Homematic (Dank an hengesb )
  • LCN (Dank an philipp )
  • 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.

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.

Warning

Nach jedem Einlernen müssen die Werte mit dem “Setzen” Button übernommen werden.

Tipps & Tricks

Warning

Bei einer Fahrt auf 0% und 100% werden fünf Sekunden zur Fahrzeit addiert, um eine definierte Position zu erreichen.

Warning

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.

Haben Sie noch Fragen?