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);
?>