Shutter Control Modul

Scheinbar bin ich blind, aber Was ist die Sender-Instanz?

Vielleicht sollte ich noch mal etwas weiter ausholen:

Ich hab jetzt mein „Rollo-Runter“ als Sender-Instanz 1 eingebunden:

Aber das will gar nicht funktionieren.
Jetzt stellt sich mir die Frage was bitte soll ich den ansonsten Ansteuern?:banghead:

Wenn jemand hier vielleicht ein Beispiel hätte, …

Hallo Zusammen,

ich versuchs mal in der Rubrik, vielleicht wird mir hier geholfen.

Ich müsste wissen was im Shutter Control unter Sende-Instanz rein kommt.

Ich hab bei mir z.B. eine Logo8 und habe einen Merker eingebunden der auch entsprechend das macht was er soll. Dieser hier fährt den Rollo runter:

Und das dann als Sende-Instanz 1 in den Shutter Control eingebunden:

Aber das funktioniert nicht, was muss den dann unter Sende-Instanz rein?

HILFE!!!

VG

Michael

Auf dem zweiten Screenshot kann man nicht erkennen was das genau ist, Ist das eine Geräteinstanz oder ein Dummymodul mit einer Variable darunter? Die zweite Sendeinstanz ist in der Regel selten notwendig. Das Shutter Skript hast Du für die Art von Rollläden angepasst?

Hallo,

bei mir stehen hinter dem Shutter Modul Relais von LCN (je ein Netz- und Richtungsrelais). Die Instanz 1 ist das jeweilige Netzrelais, 2 das Richtungsrelais. Das Shutterscript https://www.symcon.de/service/dokumentation/modulreferenz/shutter-control/ habe ich in IPS angelegt und nach meinen Vorgaben (LCN) bearbeitet, das heißt, die EIGENE Modul-Nummer in dem entsprechenden case-Zweig eingetragen. Die Modul-Nummer im Beispielscript wird ja bei Dir nicht zutreffen…
Dieses script trägst Du auch ein, wenn Du ein neues Shuttermodul anlegst.

Hoffentlich habe ich es ausführlich genug beschrieben, Gerhard

Doppelte Themen bringen gar nichts, darum habe ich das mal zusammengeführt.
Richtig posten :wink:

Es wurde ja teilweise schon angedeutet.
Es fehlt die Angabe von dir, auf die verwendete Instanz welche du steuern möchtest.

Das Script für das Shutter Control von hier:
Shutter Control — IP-Symcon :: Automatisierungssoftware
unterstützt nur die Geräte welche dort ab switch($instance[‚ModuleInfo‘][‚ModuleID‘]) aufgelistet sind.

[ul]
[li]//Siemens Device S7/LOGO[/li][li]//FS20[/li][li]//EnOcean[/li][li]//digitalStrom[/li][li]//xComfort[/li][li]//LCN Unit[/li][li]//LCN Shutter[/li][li]//1-Wire Shutter Modul (e-service Online)[/li][li]//1-Wire Shutter (1-wire.de)[/li][li]//Homematic Shutter[/li][/ul]

Findet das Script deine Hardware nicht, solltest du im Reiter Meldungen oder direkt beim Testen der Instanz eigentlich einen Fehler bekommen.

Michael

Ok, also ich Fang mal ganz vorne an:

Ich hab hier eine Rollosteuerung geerbt die mit der Siemens Logo realisiert wurde.
Da mir letztes Jahr die alte Logo dank Blitzschlag abgeraucht ist, habe ich die neuste Logo8 verbaut.

Soweit so gut nun bin ich dabei nach und nach das ganze „Smart“ zu machen.

Da die Logo8 über ETH erreichbar ist, hab ich mir gedacht das muss doch auch über IPS steuerbar sein.

Gestern hab ich endlich es hinbekommen, übrigens Dank dieses sehr guten Forums und seiner Mitglieder, durch setzten von Merkern die Rollos einfach über Schalter hoch- und runter zufahren.

Für jeden Rollo habe ich zwei solcher Merker, einer für Hoch, einer für Runter.

Da das aber Bedientechnisch und auch Anzeigetechnisch nicht wirklich toll ist, bin ich über das Shutter Modul gestolpert und fand das ganz ansprechend.

Jetzt ist die Frage wie spreche ich mit dem Shutter Control die Merker an? So das die Rollos hoch und runter fahren kann.

Vielleicht weis ja jemand wie man das hinbekommt.

VG

Michael

Ähm. Nochmal direkt gefragt: Welche Typ von Instanz ist das. Steht in der Konsole hinter jeder Instanz, ist aber bei jedem Screenshot von dir nicht zu sehen.
Und bekommst du (Fehler)Meldungen.
Michael

Siemens Device

Sollte mit dem Script aus der Anleitung funktionieren.
Sender1 ist die Instanz für hoch und Sender2 für runter.
Kannst du im Debug der Instanzen sehen ob Befehle gesendet werden, wenn du das ShutterControl bedienst?
Michael

Genau so hab ich mir das gedacht, aber ich bekomme eine Fehler:

29.01.2017 00:28:21*| Shutter Control*| <br />
<b>Parse error</b>: syntax error, unexpected ‚if‘ (T_IF) in <b>/var/lib/symcon/scripts/17239.ips.php</b> on line <b>8</b><br />

Ja dann auch bitte das Script Posten.
Irgendwas ist dann anders als in der Doku.
Michael

Hab ich von der Webseite:

<?

 //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'])
{   
    case "{932076B1-B18E-4AB6-AB6D-275ED30B62DB}": //Siemens Device S7/LOGO
        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;
    case "{48FCFDC1-11A5-4309-BB0B-A0DB8042A969}": //FS20
        $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;
    case "{1463CAE7-C7D5-4623-8539-DD7ADA6E92A9}": //EnOcean
        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;            
    case "{3DDA1E2B-B807-4680-AB6D-E7E8FBD6093A}": //digitalStrom
        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;             
    case "{1B7B5B7D-CAA9-4AB5-B9D8-EC805EC955AD}": //xComfort
        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;
    case "{2D871359-14D8-493F-9B01-26432E3A710F}": //LCN Unit
        $type=IPS_GetProperty($_IPS['INSTANCE'],'Unit');
        switch($type)
        {
            case 0: //Ausgänge
                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;
            case 2: //Reais
                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;
    case "{C81E019F-6341-4748-8644-1C29D99B813E}": //LCN Shutter
        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;            
    case "{BD0F2622-F67C-4248-9A04-316DF13914C3}":  //1-Wire Shutter Modul (e-service Online)
        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)
                {
                    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;
    case "{6A75828A-25CD-4CF3-83EA-DAAB914030A7}": //1-Wire Shutter (1-wire.de)
        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;
    case "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}": //Homematic Shutter
        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;
    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;
}

?>

Hab ihn grade noch mal neu kopiert…jetzt geht es!

Allerdings gibt es da bei mir ein Problem.
Dadurch das das das Logo-Programm in das geschehen eingebunden ist. Bräuchte ich ein gegen Signal zum stoppen.
Sprich bei mir läuft, wenn einmal der Taster gedrückt wurde der Rollo runter und hält nur an wenn ich in die Gegenrichtung ein Signal setze.

Wie mach ich das?.

Hab es hinbekommen!

Die Merker im Logo-Programm vor den Ausgang gesetzt dann geht es auch:-)

Danke nochmal an alle.

Hallo,

das Script ist sowas von Wundervoll. Nur eine Frage, jetzt habe ich ja z.B. eine Fernbedienung mit dem ich ja auch den Rolladen Auf/Ab steuern kann. Natürlich würde ich gerne die Berechnung der Position auch mit der Fernbedienung auslösen bzw. berechnen lassen.

Wie kann man das umsetzen ?

Gruß
MacToolz

Ich kann die Frage nicht konkret verstehen. Du legst für jeden Rolladen den Du besitzt eine Shutter Control Instanz an, in dieser stellst Du dann einmalig die Fahrzeiten ein, diese ändern sich ja nicht, es sei denn Du baust etwas am Rollladenmotor um. Wenn Du Dir die Position anzeigen lassen willst bzw. im Webfront verstellen ist es davon abhängig wie Du dies steuerst. Du kannst die Instanz direkt über den Aktor schalten, HomematicEasy install legt dazu z.B. auch gleich passende Variablen mit an. Die Rückmeldung bekommst Du wenn das Homematic ist so oder so. Du kannst auch über den Shutter Control die Position einstellen auch da aktualisiert sich die Position wenn Du darüber die Position verstellst. Oder aber Du nutzt IPS Shadowing. Auf alle Fälle musst Du die Position nicht berechnen das sollte auf jedem Weg automatisch gehen, daher kann ich die Frage nicht ganz einordnen.

Hi, fonzo, ich denke gemeint ist, wenn man eine Fernbedienung benutzt geht diese Info an der automation vorbei. Dann kann auch nicht gerechnet werden

Gesendet von iPhone mit Tapatalk

Hallo zusammen,

ich würde hier gerne mal anknüpfen, da ich mich gerade mit dem gleichen Thema beschäftige.

Ich habe eine Beckhoff Steuerung, diese ist per Modbus an IPS angebunden.
Steuerung Licht usw. funktioniert auch schon problemlos. Währen der Feiertage habe ich mich dann mal mit meiner Rolladensteuerung beschäftigt.

Ich habe für jede einzelne Rollade eine Shutter Control Instanz angelegt. Das Skript habe ich entsprechend meiner Modbus Anbindung angepasst. Die Steuerung funktioniert auch im großen und ganzen. OK, wenn natürlich per Taster im Zimmer gefahren wird, weiß die Visu natürlich nicht mehr wo die Rollade steht… :banghead:

Ein Problem habe ich bei zwei Terassentüren, die berechnete Laufzeit für ganz runter bzw. hoch liegt bei 28 Sekunden.
Hier meckert mein Skript das die Laufzeit von 30 Sekunden überschritten wurde.
Ich habe erstmal die Zeit manuell auf 20 Sekunden gestellt. Bekomme zumindest keinen Fehler mehr.
Gibt es hierfür eine andere Lösung? :confused:

Mein größtes Problem ist aber ein Wochenplan. Ich würde gerne mehrere Rolladen über einen Plan steuern.
Wenn ich jetzt einen direkt bei der Shutter Control Instanz anlege, steuert dieser ja nur die eine Rollade.
Wie mache ich das richtig? Geht das nur per Script? Wenn ja, wie?

Danke für Eure Hilfe.

VG
Thomas

P.S.: Kennt sich jemand mit den Beckhoff Funktionsmodulen aus? Leider hat mein Baustein für die Rollo Steuerung nur einen Eingang für up bzw. down, wenn an diesem ein 1 Signal anliegt, wird der Ausgang für eine eingestelle Zeit angesteuert. Eine weitere Möglichkeit ist SwitchOverUp bzw. SwitchOverDown, liegt hier ein 1 Signal länger als die eingestellte Zeit (1ms) an, wird auch wieder komplett hoch oder runter gefahren.
Wünschenswert wäre ja ein Eingang der den Ausgang so lange ansteuert wie eine 1 am Eingang anliegt.

genau so sieht es aus … rein theoretisch würde ich entweder das Script anpassen und entsprechend noch was mitgeben oder halt um das Script noch was drum herum bauen… aber da bin ich noch was von dern Anwendung im IPS entfernt …

Gruß