Mich würden mal eure „Beschattungsscripte“ interessieren, ich habe mir zwar auch was „zusammengebastelt“, aber meine php Fähigkeiten sind wirklich mehr als bescheiden.
Hier mal mein stümperhafter Ansatz : Man könnte jeden Rolladen(Zimmer) mit einem extra Modus versehen : ( bei mir gibts erst 2 )
es wird eine String Variable für die Durchläufe benötigt. Bei jedem Durchlauf wird ein Rolladen gesteuert. Script läuft bei mir alle 15 minuten.
<?
// Modus Rolladen
// 0 = Sommersteuerung
// 1 = Manuell
// 2 = noch nix
// 3 = noch nix
// 4 = noch nix
$TempAussen= GetvalueFloat(35610 /*[KS300\Temperatur]*/);
$Hell= GetValueFloat(13617 /*[Dummy\Rolladensteuerung\Helligkeitssensor\Mittelwert Helligkeit\Mittelwert Helligkeit]*/);
$Temp= GetValueFloat(52137 /*[EG\Wohnzimmer\FHT\Temperatur]*/);
$Azi=GetValueFloat(49535 /*[Dummy\Rolladensteuerung\Azimut berechen\Azimut_Sonne]*/);
$HellDA=GetValueBoolean(48427 /*[Dummy\Rolladensteuerung\Hell AN/AUS]*/);
$soll=GetValue(41862 /*[Rolladen Soll Position\Auf Position fahren]*/);
$i=GetValueString(58272 /*[Dummy\Rolladensteuerung\Durchläufe]*/);
$i=($i+1);
SetValueString(58272 /*[Dummy\Rolladensteuerung\Durchläufe]*/,$i);
If ($i < 14){
IPS_SetScriptTimer(43667 /*[Dummy\Rolladensteuerung]*/,12);
//for ($i = 1; $i <= 13; $i++) {
$num = array( '1' => '30767'.'10586'.'10567'.'Erker1', //1. Shutterinstance, 2.Modus, 3.Position 4.Instancename
'2' => '54357'.'13260'.'27449'.'Erker2',
'3' => '14501'.'12738'.'12791'.'Erker3',
'4' => '42137'.'38293'.'53452'.'Terrasse',
'5' => '10981'.'50973'.'22207'.'Wohnzimmerfenster',
'6' => '35194'.'33552'.'50459'.'Küche',
'7' => '35912'.'42009'.'54898'.'Gäste-WC',
'8' => '13145'.'39414'.'18312'.'Badezimmer',
'9' => '46916'.'17067'.'15646'.'Kind1 Erker',
'10' => '11104'.'17474'.'46150'.'Kind1 Fenster',
'11' => '14049'.'20395'.'40005'.'Kind2',
'12' => '34550'.'38830'.'34759'.'Schlaf Erker',
'13' => '47222'.'32730'.'25968'.'Schlaf Fenster');
if (array_key_exists($i, $num))
{$Zahl = $num[$i];}
$A=GetValueInteger(substr($Zahl,5,5)); //Modus
$B=GetValueInteger(substr($Zahl,10,5));//Position
//$B= (int)$b;
$C=substr($Zahl,0,5); // InstanceID in String
$Inst = (int)$C; //Umwandeln in Integer-Instance ID
$Name=Substr($Zahl,15,15); //Name Instance
//echo $Name." in Modus ".$A."
";
//echo $Name." auf Position ".$B."%
";
$Ostseite = array ( '6', '7', '8', '13' );
$Suedostseite = array ( '1' );
$Suedseite = array ( '2', '4', '9', '12' );
$Suedwestseite = array ( '3' );
$Westseite = array ( '5', '10', '11' );
if ( in_array ( $i, $Ostseite ) ) {$azi1=90; $azi2=150;}
if ( in_array ( $i, $Suedostseite ) ) {$azi1=93; $azi2=180;}
if ( in_array ( $i, $Suedseite ) ) {$azi1=99; $azi2=238;}
if ( in_array ( $i, $Suedwestseite ) ) {$azi1=150 ; $azi2=255;}
if ( in_array ( $i, $Westseite ) ) {$azi1=185; $azi2=280;}
echo $Name." Azimut1=".$azi1." Azimut2=".$azi2."
";
If ($A == 0){ // Modus des Rolladens
If ($B < 100){ //Ist Rolladen komplett geschlossen ?
If ($Temp > 20.8){ // Temperatur
If ($Hell > 56300 OR $TempAussen > 23.5 OR $Temp > 23.5){ // Scheint die Sonne ?
If ( $Azi > $azi1 AND $Azi < $azi2 ){ // ist die Sonnen denn an der Stelle
If ($B!=$soll ){
echo "fahre Instance ".$Name." auf ".$soll."% runter"; // fahre runter
//IPS_Logmessage("Azi", "fahre ".$Name." auf".$soll."% runter" );
SC_Move($Inst,$soll);
}
else { echo "ist schon auf ".$soll."%
";
IPS_SetScriptTimer(43667 /*[Dummy\Rolladensteuerung]*/,4);}
}
else
{If ($B!=0){
SC_Move($Inst,0);
echo "fahre ".$Name." hoch weil Azi woanders
";}else{echo "nix zu machen";} // wenn Sonne weg fahre hoch
//IPS_Logmessage("Azi", "fahre ".$Name." hoch" );
}
}
else{
If ($Hell < 56300 AND $Hell > 50300 AND $HellDA = TRUE){ // Scheint die Sonne ?
If ( $Azi > $azi1 AND $Azi < $azi2 ){ // ist die Sonnen denn an der Stelle
If ($B!=$soll ){
echo "fahre Instance ".$Name." auf ".$soll."% runter"; // fahre runter
//IPS_Logmessage("Azi", "fahre ".$Name." auf".$soll."% runter" );
SC_Move($Inst,$soll);
}
else
{ echo "ist schon auf ".$soll."%
";
IPS_SetScriptTimer(43667 /*[Dummy\Rolladensteuerung]*/,4);}
}
else
{If ($B!=0){
SC_Move($Inst,0);
echo "fahre ".$Name." hoch weil Azi woanders
";}
else
{echo "nix zu machen";}
//IPS_Logmessage("Azi", "fahre ".$Name." hoch" );
}
}
else{
If ($Hell < 50299){
If ($B!=0){
SC_Move($Inst,0);
echo"fahre ".$Name." hoch weil sonne weg
";
IPS_Logmessage("sonne", $Name." hoch weil sonne weg
" );
}else{echo "nix zu machen";
IPS_SetScriptTimer(43667 /*[Dummy\Rolladensteuerung]*/,4);}
}
}
} // End If Hell >
} // End If Temp und TempAussen
} // End If Position 100%
else {IPS_Logmessage("Rolladensteuerung", "Rolläden bereist in Nachtbetrieb");} // Position NICHT kleiner 100%
} // End If(modus 0)
// Nächste Modus Bedingung :
//--------------------------
If ($A == 1){echo $Name." ist in Manuell gestellt";
IPS_SetScriptTimer(43667 /*[Dummy\Rolladensteuerung]*/,4);}
//<<************************Hier gehts weiter ********!!
} // End If Zähler <14
else {IPS_SetScriptTimer(43667 /*[Dummy\Rolladensteuerung]*/,0); //Stopp Durchläufe, Script startet durch Ereigniss neu
SetValueString(58272 /*[Dummy\Rolladensteuerung\Durchläufe]*/,0); // Reset Durchlaufzähler
} //End else If Zähler <14
?>