Dokumentation
Skripte wiederverwenden
Dies ist ein Beispiel, welches sich auch mit Ereignissen abbilden lässt. Dieser Artikel möchte eher die Systemvariablen und Wiederverwendbarkeit von Skriptabschnitten näherbringen.
In diesem Beispiel geht es um eine Flurlicht-Steuerung, die auf allen Etagen gleich ist. Diese soll möglichst nicht dreimal programmiert werden.
Ein Möglichkeit wäre es 3 Skripte anzulegen und den Inhalt von einem Skript mit Copy und Paste in die einzelnen Skripte kopieren. Dies ist für eine schnelle Lösung sicherlich Möglich. Dies führt aber auch zu einer gewissen Redundanz und wenn an einer Stelle im Skript etwas verbessert werden soll, muss dies nicht einmal sondern dreimal gemacht werden.
Als Beispiel für Code-Reusing kann zum Beispiel ein Skript mit dem Namen "Lichtsteuerung (xComfort, Flur, Bewegungsmelder, Helligkeitsregelung)" er stellt werden. Der Name sollte sprechend sein und beinhalten welche Systeme, Geräte und Status es verwendet.
Folgender Code könnte der Inhalt sein:
//Wenn keine Bewegung - siehe Dokumentation "Systemvariablen" für die Bedeutung von $_IPS['VALUE'] if(!$_IPS['VALUE']) { MXC_SwitchMode($lampenID, false); } //Wenn Bewegung festgestellt wurde else { //Nur nach Sonnenuntergang if(!GetValueBoolean($istTag)) { //Wenn es zwischen 22:30 Abends und 06:00 Morgends ist | if((time() > strtotime("22:30")) || (time() < strtotime("06:00"))) { | MXC_DimSet($lampenID, 15); } else { MXC_DimSet($lampenID, 50); } } }
Dieses Skript muss von einem Auslösenden Ereignis aufgerufen werden - hier normalerweise von einem/mehreren Bewegungsmeldern. Das Licht wird dann abhängig von der Tageszeit auf eine unterschiedliche Dimmstufe gestellt. Sobald der Bewegungsmelder keine Bewegung mehr erkennt und den FALSE Impuls sendet, schaltet das Gerät ab.
Die Logik ist somit ausgelagert und es müssen nur noch Skripte erstellt werden, welche die fehlenden Variablen setzen und von einem Ereignis aufgerufen werden. Nachfolgend ein Beispiel:
//Auslösung des Ereignis durch Bewegungsmelder Variable! //Eindeutige Geräte-ID $lampenID = 54321 /*[Erdgeschoss\Flur\Deckenlampe]*/; //Tag/Nacht Variable aus dem Location Control $istTag = 56789 /*[IstTag]*/; includeScript(12345 /*[Szenarien\Lichtsteuerung]*/); //Funktion zum Einfügen des Skriptinhalts function includeScript($scriptID) { $s = IPS_GetScript($scriptID); include($s['ScriptFile']); }
So können "Funktionsvorlagen" erstellt und diese dann mit den nötigen IDs gefüttert werden. In diesen Skripten sind dann die IDs der Geräte/ Variablen, zu denen IP-Symcon vollständige und aussagekräftige Namen erstellt (sofern die Objektbaumstruktur vernünftig erstellt wurde).
Bei Bedarf kann das Skript auch für andere Systeme angepasst und dynamisch anhand der übergebenen InstanzID die richtigen Funktion aufgerufen oder die systemspezifischen Änderungen vorgenommen werden.