Was können wir verbessern?

Dokumentation

Skripte wiederverwenden

Stelle Sie sich vor, Sie hätten eine Flurlicht-Steuerung, die auf allen Etagen gleich ist. Diese möchten Sie natürlich ungern dreimal programmieren.

Sie könnten jetzt also dreimal Ihr Skript per Copy & Paste in die einzelnen Skripte kopieren, was für den Anfang auch eine gute Lösung ist. Wenn Sie damit aber irgendwie nicht so ganz glücklich sind und zu der Kategorie User gehören, die Redundanz vermeiden wollen und/ oder ein System zum Code-Reusing zwischen Projekten brauchen, können Sie folgende Idee verwenden:

Sie haben ein Skript mit dem Namen "Lichtsteuerung (xComfort, Flur, Bewegungsmelder, Helligkeitsregelung)". Der Name sollte ausdrücken, was dieses tut und welche Systeme/ Geräte/ Stati es verwendet.

Folgender Code könnte der Inhalt sein:

if(!$_IPS['VALUE']) { //Wenn keine Bewegung - siehe Dokumentation für Spezialvariablen
    MXC_SwitchMode($lampenID, false);
} else {
    if(!GetValueBoolean($istTag)) { //Nur nach Sonnenuntergang
        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 Ereigniss" aufgerufen werden - hier normalerweise von einem/ mehreren Bewegungsmelder. 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.

Sie habe nun die Logik ausgelagert und brauchen nur noch Skripte zu erstellen, die die fehlenden Variablen setzen und von einem Ereignis aufgerufen werden. Nachfolgend ein Beispiel:

//Trigger durch Bewegungsmelder Variable!
 
//Eindeutige Geräte-ID
$lampenID = 53013 /*[Erdgeschoss\Flur\Deckenlampe]*/;
//Tag/Nacht Variable
$istTag = 31753 /*[IstTag]*/;
 
includeScript(12345 /*[Szenarien\Lichtsteuerung]*/);
 
//Copy&Paste aus dem "Wie kann ich...?" Thema der Dokumentation
function includeScript($scriptID)
{
    $s = IPS_GetScript($scriptID);
    include($s['ScriptFile']);
}

Sie können also "Funktionsvorlagen" erstellen und diese dann nur noch mit den nötigen IDs füttern. In diesen Skripten sind dann die IDs der Geräte/ Variablen, zu denen IP-Symcon aber immer vollständige und aussagekräftige Namen erstellt (sofern man seine Baumstruktur vernünftig erstellt hat).

Bei Bedarf kann das Szenario auch für FS20 angepasst und dynamisch anhand der übergebenen InstanzID die richtigen Funktion aufgerufen oder die systemabhängigen Änderungen vorgenommen werden.