Jalouiseaktor per HM-Software Zeiten eingestellt nun keine Funktion mehr

Hallo,

nun habe ich mal bei einem Rolladen die Zeit gemessen und per Homematic Konfiguration die Zeiten übertragen.

Leider kommt nun bei diesem Motor: Failure on line 171 beim ShutterControl Script. Und bei sonstigen Versuchen diesen zu steuern „Failure“

Jemand auch mal dieses Verhalten gehabt?

Ich habe auch schon den Rolladen wieder aus IPS gelöscht und neu angelegt, trotzdem keine Reaktion.

Per Handbedienung läufts aber noch. Und da bekommt IPS anscheind auch was von mit.

!?!?!?

Was ist das nur los?!

Gruß

:confused:

Hallo Schwubbe,

der Eintrag im HM-Konfigurator ist unabhängig von IPS. Der Eintrag begrenzt nur die Laufzeit des Aktors. :eek:

In IPS legst Du eine Instanz Homematic an, Adr. des Aktors IEQ…:1
Danach eine Instanz Shutter-Control, Sende-Instanz 1 die Instanz von HM, Abarbeitungs-Skript -> ID des Shutter-Skriptes. Die Zeiten kannst Du erstmal manuell eintragen, übernehmen …

Jetzt sollte der Rolladen bei rauf oder runter fahren.

Welches Shutter-Skript nimmst/hast Du?

Gruß
Bruno

Das habe ich gemacht. Mit allen anderen Rolladen funktioniert dies auch. Bei diesem vor dem Zeiteinstellen auch. Nun aber nicht mehr?!!??

Auch ohne Shutter-Skript funktioniert es nicht. Also mit diesem 100% Balken der automatisch angelegt wird. Auf jedenfall ist dieses Script bei mir drin:

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

?>

Gruß,

Philipp

Hallo Philipp,

gibst Du den Wert ein oder schiebst Du den Balken ?

Nimm mal dieses Shutter-Skript, ist neuer :

<?

//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_GetObjectIDByName($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;
}

?>

Ich drücke auf den Balken, z.b. ganz links = 0%
schieben kann ich dort nichts.

Das neue Script habe ich reinkopiert. Funktioniert bei allen, nur halt
nicht bei dem einen. Der verweigert sich.
Fehlermeldungen beim Anlernen im IPS:

Hoch: Failure in …ips.php on line 200
Stop: Failure in …ips.php on line 197
Runter: Failure in …ips.php on line 212

Nur liegt es wirklich am Script? Denke es muss irgendwo vorher was schief gegangen sein, da es mit der Balkensteuerung ja auch schon nicht klappt.


Was ich eben noch entdeckt habe:

Bei den Meldungen in IPS wird auch nicht aufgeführt was Rolladen links betrifft.
Wenn ich die anderen Steuere steht dort ja immer die Aktion mit drin.

Das gilt es ja raus zu finden … :smiley:

Wobei das Shutter-Skript unabhängig davon ist. Das neue ist besser (wenn dich Einzelheiten interessieren, einfach mal suchen Shutter control timer).

Demnach stimmt also irgendwas mit dem Aktor nicht. Wirf mal die Zeiten im HM-Konf. raus, geht es dann wieder? Wobei die eigentlich kein Problem sein sollten.

Gruß
Bruno

Hallo Bruno, ich melde ERFOLG!

  • alle Zeiten raus -> Kein Erfolg

  • zusätzlich noch Aktor rausgeschmissen, wollte sich nicht löschen
    lassen, dann nur „Aus Zentrale entfernen“ gewählt, obwohl ich nur den
    LAN-Adapter habe, aber gut heißt wohl nur so

  • neu angelernt

  • Zeiten eingetragen

  • IPS gestartet

  • und klasse, nun klappt alles

Danke!


Bleibt nur noch das auch schon im anderen Thema angerissene Problem mit den Zuständen die sich nicht ändern.

  • Bedienung per Hand = 0% = geschlossen

  • Bedienung per %-Balken = 0% = geschlossen

  • Bedienung per Hand aktualisiert auch den %-Balken

  • Bedienung per Hand aktualisiert nicht das ShutterControl Script bzw. deren Anzeige. So das dort dann geschlossen steht, obwohl der Balken darunter 100% ist und das steht dort für offen.


Ich werde mir nun auch mal die Einzelheiten zu dem neuen Script durchlesen, wieso weshalb das besser ist :wink:

Dank und Gruß

Super dass es klappt … :smiley:

  • Bedienung per Hand = 0% = geschlossen
  • Bedienung per %-Balken = 0% = geschlossen
  • Bedienung per Hand aktualisiert auch den %-Balken

Ändere einfach das Profil (beim Aktor oder beim Shutter), wie schon besprochen, dann klappt der obige Teil. Die gewollte Aktualisierung der Variablen geht nur über Skript.
Alternativ die Shutter-Anzeige ausblenden oder den Shutter rauswerfen und die Teile über die Zeit steuern.
Nochmals alternativ die Teile über das Beschattungs-Skript von Brownson steuern.

Entdecke die M … (Ik…)

Gruß
Bruno

Ich habe momentan das selbe Problem mit zwei Rollladen. Kann mir auch nicht erklären, wo es herkommt. Lief bis vorgestern einwandfrei und ohne Konfigurationsänderung gibt es jetzt immer einen Fehler. ich werde mal entsprechend der Anleitung hier heute abend mal rumspielen. Vielleicht bekomme ich es ja wieder in.