Probleme mit Shutter Control

Hallo zusammen,

ich habe mal wieder ein Problem mit dem Shutter Control Modul. Bei einigen Rolladen funktioniert es vollkommen Problemlos bei anderen überhaupt nicht. Mal kurz meine Vorgehensweise:

  1. Instanz Shutter Conrol anlegen
  2. Sende Instanz festlegen --> Betreffender HM Rolladen Aktor
  3. Rolladen einmessen erst von oben nach unten
  4. Rolladen einmessen unten nach oben
    (jewals über die Buttons des SC Moduls)

wenn ich jetzt das WF aufrufe kann ich Problemlos die Rollade von „geöffnet“ bis nach „geschlossen“ durchschalten. Auch die Zwichenhalte klappen.

Wenn ich jetzt aber von „geschlossen“ in einem Sprung nach „geöffnet“ wechsle macht die Rollade das auch, aber anstatt den Status auf „geöffnet“ zu setzten dauert es ewig und dann kommt der Fehler vom Screenshot.
Das Rolladenskript wird auch immer mit einem´rotem ! als Fehlerhaft markiert.

Ich benutze wie gesagt die HM - Rolladenaktoren und das Rolladenskript aus der Doku.

Hoffe ihr wisst da mehr

Gruß Philip

Hat denn niemand von euch das selbe Problem ? Es ist echt nervig wenn man die Rolladen nicht ordentlich steuern kann. Ich hab nicht überall Taster installiert, weil ich die Rolladen Zentral steuern wollte.

Hallo Philip,

die Meldung bekomme ich wenn ich den IPS-Dienst beende.

Kommen da nicht noch mehr Fehlermeldungen? HM-Konfigurator …

Gruß
Bruno

Hi,

nene der IPS-Dienst läuft die ganze Zeit, mehr Fehlermeldungen gibt es nicht, den HM-Konfigurator hab ich noch nie genutzt. Was soll ich denn darin tun ?

Meinte den Homematic-Konfigurator, nicht IPS.

Welchen Wert hast Du in der php.ini stehen? max_execution_time=

Gruß
Bruno

max_execution_time= 30

hab da auch nie was verändert.

Bitte mal hochsetzen auf 150, Dienst beenden, neu starten und nochmal probieren.

Gruß
Bruno

Hi, kleines Erfolgserlebnis,

die Fehlermeldung kommt immer noch ABER wenn ich Seite neu laden mache ist der Status danach richtig. Bevor ich den Wert geändert habe, wurde der Status auch nach dem neu laden nicht richtig gesetzt. Das funktioniert jetzt immerhin.

Hast Du das Timer-Script oder das Originale ?

Das Original aus der Doku:

<?
//Variables provided by ShutterControl Module
//IPS_LogMessage("InstanceID", $SC_INSTANCE); /* InstanceID */
//IPS_LogMessage("Direction", $SC_DIRECTION); /* {0..2} Stop, Up, Down */
//IPS_LogMessage("Duration", $SC_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($SC_INSTANCE);
switch($instance['ModuleInfo']['ModuleID'])
{
  case "{48FCFDC1-11A5-4309-BB0B-A0DB8042A969}": //FS20
      $running = CreateVariableByName($SC_INSTANCE, "Moving", 0);
      $value = GetValue(IPS_GetStatusVariableID($SC_INSTANCE, "StatusVariable"));
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
          if(GetValue($running))
          {
              FS20_SwitchMode($SC_INSTANCE, $value);
              SetValue($running, false);
          }
          break;
         case SC_DIRECTION_UP:
          if(!GetValue($running))
          {
              FS20_SwitchMode($SC_INSTANCE, true);
              SetValue($running, true);
          }
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              FS20_SwitchMode($SC_INSTANCE, true);
              SetValue($running, false);
          }
          break;
         case SC_DIRECTION_DOWN:
          if(!GetValue($running))
          {
              FS20_SwitchMode($SC_INSTANCE, false);
              SetValue($running, true);
          }
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              FS20_SwitchMode($SC_INSTANCE, false);
              SetValue($running, false);
          }
          break;
      }
      break;
  case "{1B7B5B7D-CAA9-4AB5-B9D8-EC805EC955AD}": //xComfort
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
          MXC_ShutterStop($SC_INSTANCE);
          break;
         case SC_DIRECTION_UP:
          MXC_ShutterMoveUp($SC_INSTANCE);
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              MXC_ShutterStop($SC_INSTANCE);
          }
          break;
         case SC_DIRECTION_DOWN:
          MXC_ShutterMoveDown($SC_INSTANCE);
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              MXC_ShutterStop($SC_INSTANCE);
          }
          break;
      }
      break;
     case "{2D871359-14D8-493F-9B01-26432E3A710F}": //LCN
    $type=LCN_GetUnit($SC_INSTANCE);
    switch($type)
    {
      case 0: //Ausgänge
        switch($SC_DIRECTION)
        {
          case SC_DIRECTION_STOP:
            LCN_SetIntensity($SC_INSTANCE,0,0);
            LCN_SetIntensity($SC_INSTANCE2,0,0);
            break;
          case SC_DIRECTION_UP:
            LCN_SetIntensity($SC_INSTANCE,100,4);
            if($SC_DURATION > 0)
            {
              IPS_Sleep($SC_DURATION);
              LCN_SetIntensity($SC_INSTANCE,0,0);
            }
            break;
          case SC_DIRECTION_DOWN:
            LCN_SetIntensity($SC_INSTANCE2,100,4);
            if($SC_DURATION > 0)
            {
              IPS_Sleep($SC_DURATION);
              LCN_SetIntensity($SC_INSTANCE2,0,0);
            }
            break;
        }
        break;
      case 2: //Reais
        switch($SC_DIRECTION)
        {
          case SC_DIRECTION_STOP:
            LCN_SwitchRelay($SC_INSTANCE,false);
            break;
          case SC_DIRECTION_UP:
            LCN_SwitchRelay($SC_INSTANCE,true);
            LCN_SwitchRelay($SC_INSTANCE2,false); // Um Relaisrichtung zu ändern bitte auf true
            if($SC_DURATION > 0)
            {
            IPS_Sleep($SC_DURATION);
            LCN_SwitchRelay($SC_INSTANCE,false);
            }
            break;
          case SC_DIRECTION_DOWN:
            LCN_SwitchRelay($SC_INSTANCE,true);
            LCN_SwitchRelay($SC_INSTANCE2,true);// Um Relaisrichtung zu ändern bitte auf false
            if($SC_DURATION > 0)
            {
            IPS_Sleep($SC_DURATION);
            LCN_SwitchRelay($SC_INSTANCE,false);
            }
            break;
        }
        break;
    }
       break;
  case "{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}": //1-Wire Shutter
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
           OneWireShutter($SC_INSTANCE, 0, $SC_DURATION);
          break;
         case SC_DIRECTION_UP:
           if($SC_DURATION == 0)
             $SC_DURATION = 120000;
           OneWireShutter($SC_INSTANCE, 0, $SC_DURATION);
          break;
         case SC_DIRECTION_DOWN:
           if($SC_DURATION == 0)
             $SC_DURATION = 120000;
           OneWireShutter($SC_INSTANCE, 1, $SC_DURATION);
          break;
      }
    break;
    case "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}": //Homematic Shutter
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
              HM_WriteValueBoolean($SC_INSTANCE, "STOP", true);
          break;
         case SC_DIRECTION_UP:
              HM_WriteValueFloat($SC_INSTANCE, "LEVEL", 1.0);
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              HM_WriteValueBoolean($SC_INSTANCE, "STOP", true);
          }
           break;
         case SC_DIRECTION_DOWN:
              HM_WriteValueFloat($SC_INSTANCE, "LEVEL", 0.0);
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              HM_WriteValueBoolean($SC_INSTANCE, "STOP", true);
          }
           break;
      }
    break;
  default:
    die("No Handler for Module ".$instance['ModuleInfo']['ModuleName']." found");
}

function OneWireShutter($ins, $dir, $sec) {
   @TMEX_F29_SetStrobe($ins, True);
   $res = ($dir * 128) + ($sec / 1000);
   @TMEX_F29_SetPort((integer)$ins, (integer)$res);
}

function CreateVariableByName($id, $name, $type)
{
   global $IPS_SELF;
   $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 #$IPS_SELF");
   }
   return $vid;
}

?>

liegt in nem Extra Ordner Skripte nicht da wo die HM Aktoren liegen, könnte das ein Problem sein ?

Wo es liegt ist egal, probier mal dieses Script :


<?

//Variables provided by ShutterControl Module
//IPS_LogMessage("InstanceID", $SC_INSTANCE); /* InstanceID */
//IPS_LogMessage("Direction", $SC_DIRECTION); /* {0..2} Stop, Up, Down */
//IPS_LogMessage("Duration", $SC_DURATION); /* ms */

switch($IPS_SENDER)
{

case "ShutterControl": //Script wurde vom Shuttermodul aufgerufen

define("SC_DIRECTION_STOP", 0);
define("SC_DIRECTION_UP", 1);
define("SC_DIRECTION_DOWN", 2);

$instance = IPS_GetInstance($SC_INSTANCE);
switch($instance['ModuleInfo']['ModuleID'])
{
  case "{48FCFDC1-11A5-4309-BB0B-A0DB8042A969}": //FS20
      $running = CreateVariableByName($SC_INSTANCE, "Moving", 0);
      $value = GetValue(IPS_GetStatusVariableID($SC_INSTANCE, "StatusVariable"));
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
          if(GetValue($running))
          {
              FS20_SwitchMode($SC_INSTANCE, $value);
              SetValue($running, false);
          }
          break;
         case SC_DIRECTION_UP:
          if(!GetValue($running))
          {
              FS20_SwitchMode($SC_INSTANCE, true);
              SetValue($running, true);
          }
          if($SC_DURATION > 999)
          {
              TimerDelay($SC_INSTANCE, $SC_DURATION, "FS20U");
          }
          if($SC_DURATION > 0 and $SC_DURATION <=999)
          {
              IPS_Sleep($SC_DURATION);
              FS20_SwitchMode($SC_INSTANCE, true);
              SetValue($running, false);
          }
          break;
         case SC_DIRECTION_DOWN:
          if(!GetValue($running))
          {
              FS20_SwitchMode($SC_INSTANCE, false);
              SetValue($running, true);
          }
          if($SC_DURATION > 999)
          {
              TimerDelay($SC_INSTANCE, $SC_DURATION, "FS20D");
          }
          if($SC_DURATION > 0 and $SC_DURATION <=999)
          {
              IPS_Sleep($SC_DURATION);
              FS20_SwitchMode($SC_INSTANCE, false);
              SetValue($running, false);
          }
          break;
      }
      break;
  case "{1B7B5B7D-CAA9-4AB5-B9D8-EC805EC955AD}": //xComfort
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
          MXC_ShutterStop($SC_INSTANCE);
          break;
         case SC_DIRECTION_UP:
          MXC_ShutterMoveUp($SC_INSTANCE);
          if($SC_DURATION > 999)
          {
              TimerDelay($SC_INSTANCE, $SC_DURATION, "XCOM");
          }
          if($SC_DURATION > 0 and $SC_DURATION <= 999)
          {
              IPS_Sleep($SC_DURATION);
              MXC_ShutterStop($SC_INSTANCE);
          }
          break;
         case SC_DIRECTION_DOWN:
          MXC_ShutterMoveDown($SC_INSTANCE);
          if($SC_DURATION > 999)
          {
              TimerDelay($SC_INSTANCE, $SC_DURATION, "XCOM");
          }
          if($SC_DURATION > 0 and $SC_DURATION <= 999)
          {
              IPS_Sleep($SC_DURATION);
              MXC_ShutterStop($SC_INSTANCE);
          }
          break;
      }
      break;
      case "{2D871359-14D8-493F-9B01-26432E3A710F}": //LCN
      $type=LCN_GetUnit($SC_INSTANCE);
        switch($type)
        {
            case 0: //Ausgänge

                switch($SC_DIRECTION)
              {
             case SC_DIRECTION_STOP:
             LCN_SetIntensity($SC_INSTANCE,0,0);
              LCN_SetIntensity($SC_INSTANCE2,0,0);
              break;
             case SC_DIRECTION_UP:
              LCN_SetIntensity($SC_INSTANCE,100,4);
              if($SC_DURATION > 999)
              {
              TimerDelay($SC_INSTANCE, $SC_DURATION, "LCNA");
              }
              if($SC_DURATION > 0 and $SC_DURATION <= 999)
              {
              IPS_Sleep($SC_DURATION);
              LCN_SetIntensity($SC_INSTANCE,0,0);
              }
              break;
             case SC_DIRECTION_DOWN:
              LCN_SetIntensity($SC_INSTANCE2,100,4);
              if($SC_DURATION > 999)
              {
              TimerDelay($SC_INSTANCE2, $SC_DURATION, "LCNA");
              }
              if($SC_DURATION > 0 and $SC_DURATION <= 999)
              {
              IPS_Sleep($SC_DURATION);
              LCN_SetIntensity($SC_INSTANCE2,0,0);
              }
              break;
              }
          break;

          case 2: //Relais
          switch($SC_DIRECTION)
              {
             case SC_DIRECTION_STOP:
             LCN_SwitchRelay($SC_INSTANCE,false);
              break;
             case SC_DIRECTION_UP:
              LCN_SwitchRelay($SC_INSTANCE,true);
              LCN_SwitchRelay($SC_INSTANCE2,false); // Um Relaisrichtung zu ändern bitte auf true
              if($SC_DURATION > 999)
              {
              TimerDelay($SC_INSTANCE, $SC_DURATION, "LCNR");
              }
              if($SC_DURATION > 0 and $SC_DURATION <= 999)
              {
              IPS_Sleep($SC_DURATION);
              LCN_SwitchRelay($SC_INSTANCE, false);
              }
              break;
             case SC_DIRECTION_DOWN:
              LCN_SwitchRelay($SC_INSTANCE,true);
              LCN_SwitchRelay($SC_INSTANCE2,true);// Um Relaisrichtung zu ändern bitte auf false
              if($SC_DURATION > 999)
              {
              TimerDelay($SC_INSTANCE, $SC_DURATION, "LCNR");
              }
              if($SC_DURATION > 0 and $SC_DURATION <= 999)
              {
              IPS_Sleep($SC_DURATION);
              LCN_SwitchRelay($SC_INSTANCE, false);
              }
              break;
              }
          break;
            }
          break;
  case "{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}": //1-Wire Shutter
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
           OneWireShutter($SC_INSTANCE, 0, $SC_DURATION);
          break;
         case SC_DIRECTION_UP:
           if($SC_DURATION == 0)
             $SC_DURATION = 120000;
           OneWireShutter($SC_INSTANCE, 0, $SC_DURATION);
          break;
         case SC_DIRECTION_DOWN:
           if($SC_DURATION == 0)
             $SC_DURATION = 120000;
           OneWireShutter($SC_INSTANCE, 1, $SC_DURATION);
          break;
      }
    break;
    case "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}": //Homematic Shutter
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
              HM_WriteValueBoolean($SC_INSTANCE, "STOP", true);
          break;
         case SC_DIRECTION_UP:
              HM_WriteValueFloat($SC_INSTANCE, "LEVEL", 1.0);
          if($SC_DURATION > 999)
          {
              TimerDelay($SC_INSTANCE, $SC_DURATION, "HOME");
          }
          if($SC_DURATION > 0 and $SC_DURATION <=999)
          {
              IPS_Sleep($SC_DURATION);
              HM_WriteValueBoolean($SC_INSTANCE, "STOP", true);
          }
           break;
         case SC_DIRECTION_DOWN:
              HM_WriteValueFloat($SC_INSTANCE, "LEVEL", 0.0);
          if($SC_DURATION > 999)
          {
              TimerDelay($SC_INSTANCE, $SC_DURATION, "HOME");
          }
          if($SC_DURATION > 0 and $SC_DURATION <=999)
          {
              IPS_Sleep($SC_DURATION);
              HM_WriteValueBoolean($SC_INSTANCE, "STOP", true);
          }
           break;
      }
    break;
  default:
    die("No Handler for Module ".$instance['ModuleInfo']['ModuleName']." found");
}
break;

case "TimerEvent": //Script wurde von einem Ereignis aufgerufen

IPS_SetEventActive($IPS_EVENT, false);    //Ereignis deaktivieren
$timer=IPS_GetName($IPS_EVENT);
$SCT_INSTANCE = intval(substr($timer,-5,5));
$bus = substr($timer,0,-5);

    switch ($bus)
    {
    case "LCNA":
    LCN_SetIntensity($SCT_INSTANCE,0,0);
    break;
    
    case "LCNR":
    LCN_SwitchRelay($SCT_INSTANCE,false);
    break;
    
    case "XCOM":
    MXC_ShutterStop($SCT_INSTANCE);
    break;
    
    case "HOME":
    HM_WriteValueBoolean($SCT_INSTANCE, "STOP", true);
    break;
    
    case "FS20U":
    $running = CreateVariableByName($SCT_INSTANCE, "Moving", 0);
        FS20_SwitchMode($SCT_INSTANCE, true);
       SetValue($running, false);
    break;

    case "FS20D":
    $running = CreateVariableByName($SCT_INSTANCE, "Moving", 0);
       FS20_SwitchMode($SCT_INSTANCE, false);
      SetValue($running, false);
    break;
    
    }



break;
}


function OneWireShutter($ins, $dir, $sec) {
   @TMEX_F29_SetStrobe($ins, True);
   $res = ($dir * 128) + ($sec / 1000);
   @TMEX_F29_SetPort((integer)$ins, (integer)$res);
}

function TimerDelay($id, $time, $bus) {
    global $IPS_SELF;
    $sekunden=intval(substr($time, 0,-3));
   $msekunden=substr($time, -3, 3);
   $timerid = IPS_GetObjectIDByName($bus.$id, $IPS_SELF);
    if ($timerid ==0)
    {
    $newtimer = IPS_CreateEvent(1);
//   IPS_SetEventScript($newtimer, $IPS_SELF); //alt Aktuelles Skript aufrufen
   IPS_SetParent($newtimer, $IPS_SELF); //ab V2_1 Aktuelles Skript aufrufen
   IPS_SetName($newtimer, $bus.$id);
   IPS_Sleep(intval($msekunden));
   IPS_SetEventCyclic($newtimer, 0, 0, 0, 0, 1, $sekunden);
    IPS_SetEventCyclicDateBounds($newtimer, 0, 0);
    IPS_SetEventCyclicTimeBounds($newtimer, time(), 0);
    IPS_SetEventActive($newtimer, true);    //Ereignis aktivieren
   }
   else
   {
   IPS_Sleep(intval($msekunden));
   IPS_SetEventCyclic($timerid, 0, 0, 0, 0, 1, $sekunden);
    IPS_SetEventCyclicDateBounds($timerid, 0, 0);
    IPS_SetEventCyclicTimeBounds($timerid, time(), 0);
    IPS_SetEventActive($timerid, true);    //Ereignis aktivieren
   }
}

function CreateVariableByName($id, $name, $type)
{
   global $IPS_SELF;
   $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 #$IPS_SELF");
   }
   return $vid;
}

?>

Funktioniert bei mir.

Gruß
Bruno

Hi,

danke für deine Hilfe ich probier morgen aus und meld mich dann mal.

Hallo Bruno,

sorry das ich mich erst jetzt melde. Mit deinem Script funktioniert es wurderbar Vielen vielen Dank ! :slight_smile:

Moin,

wenn ich das Script von Powerfreddy starte kommt folgender Fehler:

Parse error:  syntax error, unexpected T_STRING, expecting T_CASE or T_DEFAULT or '}' in [.System Instanzen\.Scripts\Shutter Control] on line 11

Rein syntaktisch sieht das Script aber in Ordnung aus. Hab ich noch etwas zu beachten?

Derzeit läuft bei mir noch das Ur-Script mit den bekannten Macken (von 16 Rollläden fährt einer sporadisch nicht komplett runter).

Gruß

Jimmy

Einfach mal Dein Skript posten.

Gruß
Bruno

<? 
 
//Variables provided by ShutterControl Module 
//IPS_LogMessage("InstanceID", $SC_INSTANCE); /* InstanceID */ 
//IPS_LogMessage("Direction", $SC_DIRECTION); /* {0..2} Stop, Up, Down */ 
//IPS_LogMessage("Duration", $SC_DURATION); /* ms */ 
 
switch($IPS_SENDER) 
{ 
 
case "ShutterControl": //Script wurde vom Shuttermodul aufgerufen 
 
define("SC_DIRECTION_STOP", 0); 
define("SC_DIRECTION_UP", 1); 
define("SC_DIRECTION_DOWN", 2); 
 
$instance = IPS_GetInstance($SC_INSTANCE); 
switch($instance['ModuleInfo']['ModuleID']) 
{ 
  case "{48FCFDC1-11A5-4309-BB0B-A0DB8042A969}": //FS20 
      $running = CreateVariableByName($SC_INSTANCE, "Moving", 0); 
      $value = GetValue(IPS_GetStatusVariableID($SC_INSTANCE, "StatusVariable")); 
      switch($SC_DIRECTION) 
      { 
         case SC_DIRECTION_STOP: 
          if(GetValue($running)) 
          { 
              FS20_SwitchMode($SC_INSTANCE, $value); 
              SetValue($running, false); 
          } 
          break; 
         case SC_DIRECTION_UP: 
          if(!GetValue($running)) 
          { 
              FS20_SwitchMode($SC_INSTANCE, true); 
              SetValue($running, true); 
          } 
          if($SC_DURATION > 999) 
          { 
              TimerDelay($SC_INSTANCE, $SC_DURATION, "FS20U"); 
          } 
          if($SC_DURATION > 0 and $SC_DURATION <=999) 
          { 
              IPS_Sleep($SC_DURATION); 
              FS20_SwitchMode($SC_INSTANCE, true); 
              SetValue($running, false); 
          } 
          break; 
         case SC_DIRECTION_DOWN: 
          if(!GetValue($running)) 
          { 
              FS20_SwitchMode($SC_INSTANCE, false); 
              SetValue($running, true); 
          } 
          if($SC_DURATION > 999) 
          { 
              TimerDelay($SC_INSTANCE, $SC_DURATION, "FS20D"); 
          } 
          if($SC_DURATION > 0 and $SC_DURATION <=999) 
          { 
              IPS_Sleep($SC_DURATION); 
              FS20_SwitchMode($SC_INSTANCE, false); 
              SetValue($running, false); 
          } 
          break; 
      } 
      break; 
  case "{1B7B5B7D-CAA9-4AB5-B9D8-EC805EC955AD}": //xComfort 
      switch($SC_DIRECTION) 
      { 
         case SC_DIRECTION_STOP: 
          MXC_ShutterStop($SC_INSTANCE); 
          break; 
         case SC_DIRECTION_UP: 
          MXC_ShutterMoveUp($SC_INSTANCE); 
          if($SC_DURATION > 999) 
          { 
              TimerDelay($SC_INSTANCE, $SC_DURATION, "XCOM"); 
          } 
          if($SC_DURATION > 0 and $SC_DURATION <= 999) 
          { 
              IPS_Sleep($SC_DURATION); 
              MXC_ShutterStop($SC_INSTANCE); 
          } 
          break; 
         case SC_DIRECTION_DOWN: 
          MXC_ShutterMoveDown($SC_INSTANCE); 
          if($SC_DURATION > 999) 
          { 
              TimerDelay($SC_INSTANCE, $SC_DURATION, "XCOM"); 
          } 
          if($SC_DURATION > 0 and $SC_DURATION <= 999) 
          { 
              IPS_Sleep($SC_DURATION); 
              MXC_ShutterStop($SC_INSTANCE); 
          } 
          break; 
      } 
      break; 
      case "{2D871359-14D8-493F-9B01-26432E3A710F}": //LCN 
      $type=LCN_GetUnit($SC_INSTANCE); 
        switch($type) 
        { 
            case 0: //Ausgänge 
 
                switch($SC_DIRECTION) 
              { 
             case SC_DIRECTION_STOP: 
             LCN_SetIntensity($SC_INSTANCE,0,0); 
              LCN_SetIntensity($SC_INSTANCE2,0,0); 
              break; 
             case SC_DIRECTION_UP: 
              LCN_SetIntensity($SC_INSTANCE,100,4); 
              if($SC_DURATION > 999) 
              { 
              TimerDelay($SC_INSTANCE, $SC_DURATION, "LCNA"); 
              } 
              if($SC_DURATION > 0 and $SC_DURATION <= 999) 
              { 
              IPS_Sleep($SC_DURATION); 
              LCN_SetIntensity($SC_INSTANCE,0,0); 
              } 
              break; 
             case SC_DIRECTION_DOWN: 
              LCN_SetIntensity($SC_INSTANCE2,100,4); 
              if($SC_DURATION > 999) 
              { 
              TimerDelay($SC_INSTANCE2, $SC_DURATION, "LCNA"); 
              } 
              if($SC_DURATION > 0 and $SC_DURATION <= 999) 
              { 
              IPS_Sleep($SC_DURATION); 
              LCN_SetIntensity($SC_INSTANCE2,0,0); 
              } 
              break; 
              } 
          break; 
 
          case 2: //Relais 
          switch($SC_DIRECTION) 
              { 
             case SC_DIRECTION_STOP: 
             LCN_SwitchRelay($SC_INSTANCE,false); 
              break; 
             case SC_DIRECTION_UP: 
              LCN_SwitchRelay($SC_INSTANCE,true); 
              LCN_SwitchRelay($SC_INSTANCE2,false); // Um Relaisrichtung zu ändern bitte auf true 
              if($SC_DURATION > 999) 
              { 
              TimerDelay($SC_INSTANCE, $SC_DURATION, "LCNR"); 
              } 
              if($SC_DURATION > 0 and $SC_DURATION <= 999) 
              { 
              IPS_Sleep($SC_DURATION); 
              LCN_SwitchRelay($SC_INSTANCE, false); 
              } 
              break; 
             case SC_DIRECTION_DOWN: 
              LCN_SwitchRelay($SC_INSTANCE,true); 
              LCN_SwitchRelay($SC_INSTANCE2,true);// Um Relaisrichtung zu ändern bitte auf false 
              if($SC_DURATION > 999) 
              { 
              TimerDelay($SC_INSTANCE, $SC_DURATION, "LCNR"); 
              } 
              if($SC_DURATION > 0 and $SC_DURATION <= 999) 
              { 
              IPS_Sleep($SC_DURATION); 
              LCN_SwitchRelay($SC_INSTANCE, false); 
              } 
              break; 
              } 
          break; 
            } 
          break; 
  case "{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}": //1-Wire Shutter 
      switch($SC_DIRECTION) 
      { 
         case SC_DIRECTION_STOP: 
           OneWireShutter($SC_INSTANCE, 0, $SC_DURATION); 
          break; 
         case SC_DIRECTION_UP: 
           if($SC_DURATION == 0) 
             $SC_DURATION = 120000; 
           OneWireShutter($SC_INSTANCE, 0, $SC_DURATION); 
          break; 
         case SC_DIRECTION_DOWN: 
           if($SC_DURATION == 0) 
             $SC_DURATION = 120000; 
           OneWireShutter($SC_INSTANCE, 1, $SC_DURATION); 
          break; 
      } 
    break; 
    case "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}": //Homematic Shutter 
      switch($SC_DIRECTION) 
      { 
         case SC_DIRECTION_STOP: 
              HM_WriteValueBoolean($SC_INSTANCE, "STOP", true); 
          break; 
         case SC_DIRECTION_UP: 
              HM_WriteValueFloat($SC_INSTANCE, "LEVEL", 1.0); 
          if($SC_DURATION > 999) 
          { 
              TimerDelay($SC_INSTANCE, $SC_DURATION, "HOME"); 
          } 
          if($SC_DURATION > 0 and $SC_DURATION <=999) 
          { 
              IPS_Sleep($SC_DURATION); 
              HM_WriteValueBoolean($SC_INSTANCE, "STOP", true); 
          } 
           break; 
         case SC_DIRECTION_DOWN: 
              HM_WriteValueFloat($SC_INSTANCE, "LEVEL", 0.0); 
          if($SC_DURATION > 999) 
          { 
              TimerDelay($SC_INSTANCE, $SC_DURATION, "HOME"); 
          } 
          if($SC_DURATION > 0 and $SC_DURATION <=999) 
          { 
              IPS_Sleep($SC_DURATION); 
              HM_WriteValueBoolean($SC_INSTANCE, "STOP", true); 
          } 
           break; 
      } 
    break; 
  default: 
    die("No Handler for Module ".$instance['ModuleInfo']['ModuleName']." found"); 
} 
break; 
 
case "TimerEvent": //Script wurde von einem Ereignis aufgerufen 
 
IPS_SetEventActive($IPS_EVENT, false);    //Ereignis deaktivieren 
$timer=IPS_GetName($IPS_EVENT); 
$SCT_INSTANCE = intval(substr($timer,-5,5)); 
$bus = substr($timer,0,-5); 
 
    switch ($bus) 
    { 
    case "LCNA": 
    LCN_SetIntensity($SCT_INSTANCE,0,0); 
    break; 
     
    case "LCNR": 
    LCN_SwitchRelay($SCT_INSTANCE,false); 
    break; 
     
    case "XCOM": 
    MXC_ShutterStop($SCT_INSTANCE); 
    break; 
     
    case "HOME": 
    HM_WriteValueBoolean($SCT_INSTANCE, "STOP", true); 
    break; 
     
    case "FS20U": 
    $running = CreateVariableByName($SCT_INSTANCE, "Moving", 0); 
        FS20_SwitchMode($SCT_INSTANCE, true); 
       SetValue($running, false); 
    break; 
 
    case "FS20D": 
    $running = CreateVariableByName($SCT_INSTANCE, "Moving", 0); 
       FS20_SwitchMode($SCT_INSTANCE, false); 
      SetValue($running, false); 
    break; 
     
    } 
 
 
 
break; 
} 
 
 
function OneWireShutter($ins, $dir, $sec) { 
   @TMEX_F29_SetStrobe($ins, True); 
   $res = ($dir * 128) + ($sec / 1000); 
   @TMEX_F29_SetPort((integer)$ins, (integer)$res); 
} 
 
function TimerDelay($id, $time, $bus) { 
    global $IPS_SELF; 
    $sekunden=intval(substr($time, 0,-3)); 
   $msekunden=substr($time, -3, 3); 
   $timerid = IPS_GetObjectIDByName($bus.$id, $IPS_SELF); 
    if ($timerid ==0) 
    { 
    $newtimer = IPS_CreateEvent(1); 
//   IPS_SetEventScript($newtimer, $IPS_SELF); //alt Aktuelles Skript aufrufen 
   IPS_SetParent($newtimer, $IPS_SELF); //ab V2_1 Aktuelles Skript aufrufen 
   IPS_SetName($newtimer, $bus.$id); 
   IPS_Sleep(intval($msekunden)); 
   IPS_SetEventCyclic($newtimer, 0, 0, 0, 0, 1, $sekunden); 
    IPS_SetEventCyclicDateBounds($newtimer, 0, 0); 
    IPS_SetEventCyclicTimeBounds($newtimer, time(), 0); 
    IPS_SetEventActive($newtimer, true);    //Ereignis aktivieren 
   } 
   else 
   { 
   IPS_Sleep(intval($msekunden)); 
   IPS_SetEventCyclic($timerid, 0, 0, 0, 0, 1, $sekunden); 
    IPS_SetEventCyclicDateBounds($timerid, 0, 0); 
    IPS_SetEventCyclicTimeBounds($timerid, time(), 0); 
    IPS_SetEventActive($timerid, true);    //Ereignis aktivieren 
   } 
} 
 
function CreateVariableByName($id, $name, $type) 
{ 
   global $IPS_SELF; 
   $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 #$IPS_SELF"); 
   } 
   return $vid; 
} 
 
?>

OK, doch nur kopiert. :smiley:

Bei mir läuft Dein Script ohne Fehler. Stimmen die Shutter-Module?
Kann Dir leider nicht weiterhelfen. :o

Gruß
Bruno