FS20 Rolladenskript

Hi zusammen,

auf mehrfache Nachfrage, mein Alternativscrip zum Shuttercontrol!

// ****************************************************************************************************
// *                                      DEKLARATION                                                 *
// ****************************************************************************************************
$Aktor = 57430 ; //FS20 Aktor
$Bewegung = 38669 ; //Variable für Bewegung bei Rolladenfahrt

$IDAktPos = 53975 ; //aktueller Rolladenstand
$IDSollPos = 52771 ; //Sollposition

// ****************************************************************************************************
// *                                      PROGRAMMTEIL                                                *
// ****************************************************************************************************
//Rolladenfahrzeiten von (0) oben nach (5) unten
$Auf0 = 26; $Ab0=0;// ganz oben
$Auf1 = 22; $Ab1=4;// 1/4 unten
$Auf2 = 18; $Ab2=8;// halb
$Auf3 = 14;  $Ab3=13;// 3/4 unten
$Auf4 = 6;  $Ab4=20;// Luke
$Auf5 = 0;  $Ab5=26;// ganz unten

// Ausrechnen der Fahrzeiten
$FZ01 = $Ab1-$Ab0;
$FZ12 = $Ab2-$Ab1;
$FZ23 = $Ab3-$Ab2;
$FZ34 = $Ab4-$Ab3;
$FZ45 = $Ab5-$Ab4;

$FZ54 = $Auf4-$Auf5;
$FZ43 = $Auf3-$Auf4;
$FZ32 = $Auf2-$Auf3;
$FZ21 = $Auf1-$Auf2;
$FZ10 = $Auf0-$Auf1;

$AktPos = getvalue($IDAktPos);
$SollPos = getvalue($IDSollPos);
// Timerabfrage
// Hier wird die Boolean Variable Bewegung zurückgesetzt = Keine Bewegung
// Der Rolladen darf wieder beweg werden, und das Skript wird nochmal von oben abgearbeitet
if($IPS_SENDER == "TimerEvent")
{
SetValueBoolean($Bewegung, false);
IPS_SetScriptTimer($IPS_SELF,0);
}

// undefinierter Rolladenstand
if ($AktPos == 99)
{
  switch ($SollPos)
  {
      case 0:
         $Fahrzeit = $Auf0;
             SetValueBoolean($Bewegung, true);
         IPS_SetScriptTimer($IPS_SELF,$Fahrzeit+5); // Das Script wird später aufgerufen um die Bewegung auf False zu setzen
          Sleep(1);
             FS20_SwitchDuration($Aktor, false, $Fahrzeit);
             SetValue($IDAktPos, 0);
             break;
      case 1:
         $Fahrzeit = $Auf0;
             SetValueBoolean($Bewegung, true);
         IPS_SetScriptTimer($IPS_SELF,$Fahrzeit+5); // Das Script wird später aufgerufen um die Bewegung auf False zu setzen
          Sleep(1);
             FS20_SwitchDuration($Aktor, false, $Fahrzeit);
             SetValue($IDAktPos, 0);
             break;
      case 2:
         $Fahrzeit = $Auf0;
             SetValueBoolean($Bewegung, true);
         IPS_SetScriptTimer($IPS_SELF,$Fahrzeit+5); // Das Script wird später aufgerufen um die Bewegung auf False zu setzen
          Sleep(1);
             FS20_SwitchDuration($Aktor, false, $Fahrzeit);
             SetValue($IDAktPos, 0);
             break;
        case 3:
         $Fahrzeit = $Ab5;
             SetValueBoolean($Bewegung, true);
         IPS_SetScriptTimer($IPS_SELF,$Fahrzeit+5); // Das Script wird später aufgerufen um die Bewegung auf False zu setzen
          Sleep(1);
             FS20_SwitchDuration($Aktor, true, $Fahrzeit);
             SetValue($IDAktPos, 5);
             break;
        case 4:
         $Fahrzeit = $Ab5;
             SetValueBoolean($Bewegung, true);
         IPS_SetScriptTimer($IPS_SELF,$Fahrzeit+5); // Das Script wird später aufgerufen um die Bewegung auf False zu setzen
          Sleep(1);
             FS20_SwitchDuration($Aktor, true, $Fahrzeit);
             SetValue($IDAktPos, 5);
             break;

         case 5:
             $Fahrzeit = $Ab5;
             SetValueBoolean($Bewegung, true);
         IPS_SetScriptTimer($IPS_SELF,$Fahrzeit+5); // Das Script wird später aufgerufen um die Bewegung auf False zu setzen
          Sleep(1);
             FS20_SwitchDuration($Aktor, true, $Fahrzeit);
            SetValue($IDAktPos, 5);
             break;
  }
return;
}
else
// definierter Rolladenstand
{
    if ($SollPos > $AktPos) //Abfahrt
      {
      switch ($AktPos)
         {
         case 0:
            switch ($SollPos)
             {
             case 1: $Fahrzeit = $FZ01;
                        $AktPos = 1;
                      break;
             case 2: $Fahrzeit = $FZ01+$FZ12;
                        $AktPos = 2;
                        break;
             case 3: $Fahrzeit = $FZ01+$FZ12+$FZ23;
                        $AktPos = 3;
                     break;
             case 4: $Fahrzeit = $FZ01+$FZ12+$FZ23+$FZ34;
                        $AktPos = 4;
                        break;
             case 5: $Fahrzeit = $FZ01+$FZ12+$FZ23+$FZ34+$FZ45+2;
                        $AktPos = 5;
                     break;
             }
             break;
          case 1:
            switch ($SollPos)
             {
             case 2: $Fahrzeit = $FZ12;
                        $AktPos = 2;
                        break;
             case 3: $Fahrzeit = $FZ12+$FZ23;
                        $AktPos = 3;
                     break;
             case 4: $Fahrzeit = $FZ12+$FZ23+$FZ34;
                        $AktPos = 4;
                        break;
             case 5: $Fahrzeit = $FZ12+$FZ23+$FZ34+$FZ45+2;
                        $AktPos = 5;
                     break;
             }
             break;
         case 2:
             switch ($SollPos)
             {
             case 3: $Fahrzeit = $FZ23;
                        $AktPos = 3;
                     break;
             case 4: $Fahrzeit = $FZ23+$FZ34;
                        $AktPos = 4;
                        break;
             case 5: $Fahrzeit = $FZ23+$FZ34+$FZ45+2;
                        $AktPos = 5;
                     break;
             }
             break;
         case 3:
             switch ($SollPos)
             {
             case 4: $Fahrzeit = $FZ34;
                        $AktPos = 4;
                        break;
             case 5: $Fahrzeit = $FZ34+$FZ45+2;
                        $AktPos = 5;
                     break;
             }
             break;
         case 4:
            switch ($SollPos)
             {
             case 5: $Fahrzeit = $FZ45+2;
                        $AktPos = 5;
                     break;
             }
             break;
              }
     SetValueBoolean($Bewegung, true);
     IPS_SetScriptTimer($IPS_SELF,$Fahrzeit+5); // Das Script wird später aufgerufen um die Bewegung auf False zu setzen
      Sleep(1);
      FS20_SwitchDuration($Aktor, true, $Fahrzeit);

      }

        if ($SollPos < $AktPos)
          {
          switch ($AktPos)
        {
         case 1: Switch ($SollPos)
                    {
                    case 0: $Fahrzeit = $FZ10 +3;
                              $AktPos = 0;
                                break;
                    }
                    break;

         case 2: Switch ($SollPos)
                    {
                    case 0: $Fahrzeit = $FZ21 + $FZ10 +3;
                        $AktPos = 0;
                                break;
                    case 1: $Fahrzeit = $FZ21;
                            $AktPos = 1;
                             break;
                    }
                    break;
         case 3: Switch ($SollPos)
                    {
                    case 0: $Fahrzeit = $FZ32 + $FZ21 + $FZ10+3;
                        $AktPos = 0;
                                break;
                    case 1: $Fahrzeit = $FZ32 + $FZ21;
                        $AktPos = 1;
                                break;
                    case 2: $Fahrzeit = $FZ32;
                        $AktPos = 2;
                             break;
                    }
                    break;
         case 4: Switch ($SollPos)
                    {
                    case 0: $Fahrzeit = $FZ43 + $FZ32 + $FZ21 + $FZ10+3;
                            $AktPos = 0;
                                break;
                    case 1: $Fahrzeit = $FZ43 + $FZ32 + $FZ21;
                        $AktPos = 1;
                                break;
                    case 2: $Fahrzeit = $FZ43 + $FZ32;
                        $AktPos = 2;
                             break;
                    case 3: $Fahrzeit = $FZ43;
                        $AktPos = 3;
                             break;
                    }
                    break;
         case 5: Switch ($SollPos)
                    {
                    case 0: $Fahrzeit = $FZ54 + $FZ43 + $FZ32 + $FZ21 + $FZ10 +3;
                            $AktPos = 0;
                                break;
                    case 1: $Fahrzeit = $FZ54 + $FZ43 + $FZ32 + $FZ21;
                            $AktPos = 1;
                                break;
                    case 2: $Fahrzeit = $FZ54 + $FZ43 + $FZ32;
                        $AktPos = 2;
                             break;
                    case 3: $Fahrzeit = $FZ54 + $FZ43;
                        $AktPos = 3;
                             break;
                case 4: $Fahrzeit = $FZ54;
                        $AktPos = 4;
                             break;
                    }
        }

      Echo $Fahrzeit;
     SetValueBoolean($Bewegung, true);
     IPS_SetScriptTimer($IPS_SELF,$Fahrzeit+5);
      Sleep(1);
      FS20_SwitchDuration($Aktor, false, $Fahrzeit);
      }
    }

    SetValue($IDAktPos, $AktPos);

?>

Klasse !

Ein wenig Doku (ich hab ein wenig gebraucht um herauszufinden WAS für Variablen ich anlegen muss) und ein „<?“ am Anfang und es funktioniert pergfekt mit FS20MS Rolläden Steuerungen…

Vielen Dank !