Was können wir verbessern?

Dokumentation

Wie kann ich...?

Viele dieser Skripte verwenden spezielle IP-Symcon Funktionen.
Bitte nutzen Sie die Befehlsreferenz/Modulreferenz, wenn Sie die genaue Funktionsweise verstehen wollen.

... ein Gerät einschalten und nach 60 Sekunden wieder aussschalten
... eine Liste der Modulnamen samt GUID bekommen
... eine Instanz aus PHP konfigurieren
... die Anzahl der Sekunden herausfinden, die ein ScriptTimer noch abwartet
... ein Skript per ID direkt includen
... UpdateTime in einer eigenen String Variable ausgeben (1 Skript - n Variablen)
... aus PHP einen Timer & Variable anlegen
... eine Datei aus dem Internet herunterladen
... einen Ordner rekursiv in die MediaPlayer Playlist laden
... ein Variablenprofil exportieren

... ein Gerät einschalten und nach 60 Sekunden wieder aussschalten

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
    ...
 
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
    ...
 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 60);
}

... eine Liste der Modulnamen samt GUID bekommen

foreach(IPS_GetModuleList() as $mid)
{
    $m = IPS_GetModule($mid);
    echo $mid."=".$m['ModuleName']."\n";
}

... eine Instanz aus PHP konfigurieren

//Eigenschaft verändern
WWWReader_SetPage($id,"http://www.google.de");
 
//Änderung abspeichern
IPS_ApplyChanges($id);
 
//Neue URL abrufen
WWWReader_UpdatePage($id);

... die Anzahl der Sekunden herausfinden, die ein ScriptTimer noch abwartet

echo GetTimeRemaining($_IPS['SELF']); //Von sich selbst herausfinden
 
function GetTimeRemaining($id)
{
    $eid=@IPS_GetEventIDByName("ScriptTimer", $id);
    if($eid === false) {
        return -1;
    } else {
        $e=IPS_GetEvent($eid);
        if($e['NextRun'] == 0)
        {
            return -1;
        } else {
            return $e['NextRun'] - microtime(true);
        }
    }
}

... ein Skript per ID direkt includen

//Skript mit ID 14871 einbinden
include(IPS_GetScriptFile(14871));

... UpdateTime in einer eigenen String Variable ausgeben (1 Skript - n Variablen)

//Event auswerten
if($_IPS['SENDER'] != "Variable")
    return;
 
SetValue(CreateVariableIDByName($_IPS['VARIABLE'], 'Updated', 3), date("d.m.y H:i:s"));
 
function CreateVariableIDByName($id, $name, $type)
{
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid===false) {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "This Variable was created by Script #".$_IPS['SELF']);
    }
    return $vid;
}

... aus PHP einen Timer & Variable anlegen

Wenn das Skript ausgeführt wird, legt es einen Timer an der alle sechs Stunden startet und dann eine Variable mit der jeweiligen Tageszeit als Wert zwischen 0-3 in die Variable ablegt.

//HINWEIS:
//~~~~~~~~
//Dieses Script richtet sicht automatisch ein, wenn es ausgeführt wird
//
//- Es wird abhängig von der Tageszeit eine Variable gesetzt (0-3)
// 0 = 0-6
// 1 = 6-12
// 2 = 12-18
// 3 = 19-24
 
//-----------------------------------------------------------------------------
//Ab diesem Punkt muss nichts verändert werden
//-----------------------------------------------------------------------------
if($_IPS['SENDER'] == "Execute")
{
    $eventid = @IPS_GetEventIDByName("Timer", $_IPS['SELF']);
    if($eventid === false)
    {
        $eventid = IPS_CreateEvent(1); //Cyclic
        IPS_SetEventActive($eventid, true);
        IPS_SetName($eventid, "Timer");
        IPS_SetEventScript($eventid, $_IPS['SELF']);
        IPS_SetEventCyclic($eventid, 0, 0, 0, 0, 3, 6);
    }
    $variableid = @IPS_GetVariableIDByName("Daytime", $_IPS['SELF']);
    if($variableid === false)
    {
        $variableid = IPS_CreateVariable(1);
        IPS_SetName($variableid, "Daytime");
        IPS_SetParent($variableid, $_IPS['SELF']);
    }
}
SetValue(IPS_GetVariableIDByName("Daytime", $_IPS['SELF']), floor(date("H") / 6));

... eine Datei aus dem Internet herunterladen

$remoteImage = "https://www.google.com/images/srpr/logo3w.png";
$localImage = IPS_GetKernelDir()."\\media\\bild.jpg";
 
//Downloaden
$content = @file_get_contents($remoteImage);
if((strpos($http_response_header[0], "200") === false))
{
    return;
}
 
//Speichern
file_put_contents( $localImage, $content );

... einen Ordner rekursiv in die MediaPlayer Playlist laden

function WAC_PlayDir($id, $dir)
{
    function ReadRecursive($dir, $subdir = "") {
        $result = Array();
        $files = scandir($dir."/".$subdir);
        foreach($files as $file)
        {
            if(($file != ".") && ($file != "..")) {
                if(is_dir($dir."/".$subdir."/".$file)) {
                    $res = ReadRecursive($dir, $subdir."/".$file);
                    $result = array_merge($res, $result);
                } else {
                    $filedir = $subdir."/".$file;
                    $filedir = substr($filedir, 1, strlen($filedir));
                    $result[] = $filedir;
                }
            }
        }
        return $result;
    }
 
    $allowed = Array("mp3", "wma");
    $files = ReadRecursive($dir);
 
    //Den Zufallsgenerator von PHP verwenden
    //shuffle($files);
 
    WAC_ClearPlaylist($id);
    foreach($files as $file)
    {
        $ext = pathinfo($dir."/".$file, PATHINFO_EXTENSION);
        if(in_array(strtolower($ext), $allowed))
        {
            WAC_AddFile($id, $dir."/".$file);
        }
    }
    WAC_Play($id);
}

... ein Variablenprofil exportieren

getVariableProfileCreationCode("~Temperature.FHT");
getVariableProfileCreationCode("~Temperature.FHT", "TemperatureTest");
 
// erster Funktionsparameter: Profilname, zweiter Parameter (optional): neuer Profilname
function getVariableProfileCreationCode ($profileName, $newProfileName = "")
{
    $profile = IPS_GetVariableProfile($profileName);
    if ($profile !== false)
    {
        $profileName = (strlen($newProfileName) > 0) ? $newProfileName : $profileName;
        echo 'IPS_CreateVariableProfile("'.$profileName.'", '.$profile['ProfileType'].');'."\n";
        echo 'IPS_SetVariableProfileText("'.$profileName.'", "'.$profile['Prefix'].'", "'.$profile['Suffix'].'");'."\n";
        echo 'IPS_SetVariableProfileValues("'.$profileName.'", '.$profile['MinValue'].', '.$profile['MaxValue'].', '.$profile['StepSize'].');'."\n";
        echo 'IPS_SetVariableProfileDigits("'.$profileName.'", '.$profile['Digits'].');'."\n";
        echo 'IPS_SetVariableProfileIcon("'.$profileName.'", "'.$profile['Icon'].'");'."\n";
        foreach ($profile['Associations'] as $association)
        {
            echo 'IPS_SetVariableProfileAssociation("'.$profileName.'", '.$association['Value'].', "'.$association['Name'].'", "'.$association['Icon'].'", '.$association['Color'].');'."\n";
        }
        echo "\n";
    }
}