Rolladensteuerung fürn Sommer

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 :slight_smile: )
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


?>