Rolladensteuerung mit Shutter

Hallo,

ich habe immer noch Probleme meine Rollläden per webfront zu bedienen
folgende Konfiguration :

KNX Anbindung mit IP-Schnittstelle
Rolladenaktor ohne Positionsfahrt - nur AUF/AB eine Gruppenadresse und STOP eine Gruppenadresse

Wenn ich die Gruppenadresse Auf/Ab als KNX Instance anlege kann ich AUF und AB fahren

Bei der Betätigung der Gruppenadresse Stop als KNX Instance Stop die Fahrt des Rolladens

Was muss ich einstellen um eine klassische AUF-STOP-AB Tastensteuerung zu bekommen ?

Mit Shutter habe ich es schon probiert bekomme aber immer Fehlermeldungen

mfg :slight_smile:

Wenn das noch interessant ist:

Ich habe das Shutter Script um eine KNX Rubrik erweitert.
Dieses Script funktioniert bei mir mir einem Rolladen Aktor der folgende Anforderungen erfüllt:

1 GA für Hoch (FALSE) / Runter (TRUE)
1 GA für Stop

Die AUF/AB Ga wird als erste Sendeinstanz eingetragen, die STOP GA als zweite.

Hier das Script:

<?
//Variables provided by ShutterControl Module
//IPS_LogMessage("InstanceID", $SC_INSTANCE); /* InstanceID */
//IPS_LogMessage("InstanceID2", $SC_INSTANCE2); /* 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);
//IPS_LogMessage("ID", $instance['ModuleInfo']['ModuleID']);
switch($instance['ModuleInfo']['ModuleID'])
{
  case "{D62B95D3-0C5E-406E-B1D9-8D102E50F64B}": //KNX
      $running = CreateVariableByName($SC_INSTANCE, "Moving", 0);
      $value = GetValue(IPS_GetStatusVariableID($SC_INSTANCE, "Value"));
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
          if(GetValue($running))
          {
              Eib_Switch($SC_INSTANCE2, $value);
              SetValue($running, false);
          }
          break;
         case SC_DIRECTION_UP:
          if(!GetValue($running))
          {
              Eib_Switch($SC_INSTANCE, false);
              SetValue($running, true);
          }
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              Eib_Switch($SC_INSTANCE2, false);
              SetValue($running, false);
          }
          break;
         case SC_DIRECTION_DOWN:
          if(!GetValue($running))
          {
              Eib_Switch($SC_INSTANCE, true);
              SetValue($running, true);
          }
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              Eib_Switch($SC_INSTANCE2, true);
              SetValue($running, false);
          }
          break;
      }
      break;

	
  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;
}

?>

Hi KrasserMann, geiler Name auch…,

welche Vorteile hat es das mit Switch zu machen? Hatte es damals anders realisiert und läuft auch.

Gruß Imho

Hi :slight_smile:

Danke für deinen Tip mit der Warteschlange.

Ich hab Switch genommen da mein Aktor bei DriveMove Nix gemacht hat.

Gruß Martin