Shutter-Control | Alle Rolläden steuern

Guten Abend Zusammen,

ich nutze das Shutter-Control-Script und es funktioniert prima.

Was ich gerne einbauen möchte ist EIN Script, in dem ich alle eingetragenen Rolläden zusammen steuere und den Status als Variable mitgeben kann.

Als Idee:


SC_Move(54514 /*[Haus\OG\Esszimmer\Shutter Control]*/, position);

SC_Move(56384 /*[Haus\OG\Küche\Rolladen\Shutter Control_links]*/, position);

SC_Move(45549 /*[Haus\OG\Küche\Rolladen\Shutter Control_rechts]*/, position);

Was funktionier ist, wenn ich den Status direkt eingebe, in diesem Fall Status „0“ für die Rolläden oben.


SC_Move(54514 /*[Haus\OG\Esszimmer\Shutter Control]*/, 0);

SC_Move(56384 /*[Haus\OG\Küche\Rolladen\Shutter Control_links]*/, 0);

SC_Move(45549 /*[Haus\OG\Küche\Rolladen\Shutter Control_rechts]*/, 0);

Kann mir jedmand helfen, wie ich anstatt 5 verschiedene Skripte anzulegen (für jede einzelne Position ein eigenes Skript) das über ein Skirpt mit einer Variable eintragen kann?

Vielen Dank im Voraus,
Marcus.

Hallo Marcus,

ich habe es bei mir so gelöst.


<?
// Rolladen Gruppensteuerung
// Für die Gruppensteuerung müssen einfach nur die Gerätelinks,
// in der Kategorie "Geräte" angelegt werden.

$Rollos = GeraeteIDS();

if($IPS_SENDER == "WebFront"){
    SetValue($IPS_VARIABLE, $IPS_VALUE);
	Rollo_fahren($Rollos, $IPS_VALUE);
    // Buttonwert zurücksetzen
    IPS_Sleep(500);
    SetValue($IPS_VARIABLE, -1);
}

if($IPS_SENDER == "TimerEvent"){
		switch ($_IPS['ACTION']) {
        case 0:		//Geschlossen
			Rollo_fahren($Rollos, 0);
                    break;
        case 1: 	//25%
			Rollo_fahren($Rollos, 25);
                    break;
        case 2: 	//50%
			Rollo_fahren($Rollos, 50);
                    break;
        case 3: 	//75%
			Rollo_fahren($Rollos, 75);
                    break;
        case 4: 	//99%
			Rollo_fahren($Rollos, 99);
                    break;
        case 5: 	//Geschlossen
			Rollo_fahren($Rollos, 100);
                    break; 
		}
}

function Rollo_fahren($Rollos, $Befehl){
	foreach ($Rollos as $Rollo){
	    IPS_RunScriptText("SC_Move(".$Rollo.",".$Befehl.");");
   	    IPS_Sleep(300);
 	}
}

function GeraeteIDS(){
    $ParentID = IPS_GetParent($_IPS['SELF']); 
    $ObjektID = @IPS_GetObjectIDByName("Geräte", $ParentID);
    if ($ObjektID === false)
        echo "Objekt nicht gefunden!";
    else
        $LinkIDS = IPS_GetChildrenIDs($ObjektID);

    for ($i=0; $i < count($LinkIDS); $i++) { 
        $GeräteID[$i] = IPS_GetLink($LinkIDS[$i])['TargetID'];
    }
    return $GeräteID;   
}

if($IPS_SENDER == "Execute"){
    Wochenplan();
}

function Wochenplan()
{
    $EreignisID = IPS_CreateEvent(2);                  //Legt ein “Wochenplan” Ereignis an
    IPS_SetEventScheduleGroup($EreignisID, 0, 1); //Mo
    IPS_SetEventScheduleGroup($EreignisID, 1, 2); //Di
    IPS_SetEventScheduleGroup($EreignisID, 2, 4); //Mi
    IPS_SetEventScheduleGroup($EreignisID, 3, 8); //Do
    IPS_SetEventScheduleGroup($EreignisID, 4, 16); //Fr
    IPS_SetEventScheduleGroup($EreignisID, 5, 32); //Sa
    IPS_SetEventScheduleGroup($EreignisID, 6, 64); //So

    IPS_SetEventScheduleAction($EreignisID, 0, "Geöffnet",  10079232, "");
    IPS_SetEventScheduleAction($EreignisID, 1, "25%", 13434879, "");
    IPS_SetEventScheduleAction($EreignisID, 2, "50%", 10930928, "");
    IPS_SetEventScheduleAction($EreignisID, 3, "75%", 3368703, "");
    IPS_SetEventScheduleAction($EreignisID, 4, "99%", 16744576, "");
    IPS_SetEventScheduleAction($EreignisID, 5, "Geschlossen",  16711680, "");


    IPS_SetParent($EreignisID, $_IPS['SELF']);         //Eregnis zuordnen
    IPS_SetEventActive($EreignisID, false);             //Ereignis aktivieren
}

?>

Rollos.JPG

Gruß Marcel

Hallo Marcel,
vielen Dank für Deine Antwort und dein Script.
Ich werde es heute Abend gleich ausprobieren.

Jedoch (bitte entschuldige meine Anfängerfrage) wo muss ich genau die Geräte-IDs der Rolläden eintragen?

Vielen Dank im Voraus,
Marcus.

Guten Abend Zusammen,

ich hatte eine neue Idee, wie ich meine Rolläden alle gemeinsam über das Shutter-Script auf eine Position stellen kann, und die Position dann auch weiterhin verfügbar ist.

<?

 SC_Move(43889 /*[Haus\OG\Wohnzimmer\Schatten\Shutter Control_balkon]*/, 25);
 SC_Move(43118 /*[Haus\OG\Wohnzimmer\Schatten\Shutter Control_rund_links]*/, 25);
 SC_Move(37151 /*[Haus\OG\Wohnzimmer\Schatten\Shutter Control_rund_mitte]*/, 25);

?>

Das Skript funktioniert eigentlich überraschend gut, wobei ich mir gerne die zu fahrenden Prozentwerte als Variable hätte, um dann nur ein Script anzulegen.

Das Problem ist jedoch, dass hier jeder Rolladen nach dem anderen angefahren wird. Bedeutet, erst wenn 43889 seine Position erreicht hat, fährt der nächste los.

Bei drei Rolläden und nur 25% geht das noch, jedoch hab ich mehr als 10 Rolläden, und bei 100%, bze geschlossen dauert das ganze dann schon eine weile, bzw habe ich dann einen Skriptabbruch wegen Zeitüberschreitung.

Hat jemand eine Idee?

Vielen Dank im Voraus,
Marcus.

Ja, suchen :wink:
Shutter Control mit Timer
Michael