Funktionstüchtiges Philips HUE Modul für Szenen aus HUE Lab

Ich habe das Symcon HUE Modul von traxanos und vita2 ausprobiert. Vita2 gibt nur Fehlermeldungen, traxanos kann zwar schalten, aber die Befehle für Szenen gehen wohl nicht mehr.

Die beiden obigen Module wurden seit mehr als 1 Jahr nicht mehr aktualisiert. Ich vermute, dass diese wg. der Umstellung auf PHP7 nicht mehr voll funktionstüchtig sind.

Gibt es denn ein einfaches Modul, welche die vorhandenen Szenen auslesen und ausführen kann? Herzlichen Dank!

Szenen kannst Du im Modul einfach per Skript ergänzen
Philips HUE Modul - Seite 49
Ansonsten müsstet Du näher beschreiben was nicht geht bzw. ob eine Fehlermeldung vorliegt.

Dankeschön für dein bisher sehr hilfreiches Feedback. Ich habe mit dem Codeschnipsel die Szenen auslesen können. Was mir jedoch nicht gelingt, ist das Ausführen der Szene.

Folge Ausgabe erhalte ich z.B. für die Szene „Entspannen“:

„JFFVUu4zHJHV3u6XXXXX“
„name“:„Entspannen“
„type“:„GroupScene“
„group“:„1“
„lights“:[„1“,„2“,„3“,„4“]
„owner“:„364bdniqsrw75ttrwb47rnsaiowriutwxxxxx“
„recycle“:false,
„locked“:false,
„appdata“:{„version“:1,„data“:„aG40i_r01_d01“},
„picture“:"",
„lastupdated“:„2018-12-09T18:57:38“,
„version“:2}

Die Szene rufe ich folgendermaßen auf:

$nextScene = „Entspannen“;
HUEGroup_SetValue(12345 /[Lab\HUEScenes\Gruppen\Wohnzimmer]/, „SCENE“, „$nextScene“);

(12345 ist die ID der Bridge in den I/O Instanzen)

Beim Ausführen erhalte ich:

Fatal error: Uncaught Error: Call to undefined function HUEGroup_SetValue() in /var/lib/symcon/scripts/55129.ips.php:136 Stack trace: #0 {main} thrown in /var/lib/symcon/scripts/55129.ips.php on line 136

Was mache ich hier falsch?

Dankeschön schonmal vorab für Deine Unterstützung.

Bin jetzt gerade nicht vor dem Rechner, meine mich aber zu erinnern, das die Group Funktionen jetzt mit unter dem Prefix HUE zusammengelegt wurden. Hatte das auch mal kommentiert, finde es aber nicht. Wenn du in der Console HUE_ angibst, schau mal welche Funktionen zur Verfügung stehen.

Uli

Gesendet von iPhone mit Tapatalk

Es gibt dort verschiedene Dinge, u.a. HUE_SetSvalue bzw. HUE_SetValues

Das gibt aber noch folgende Fehlermeldung:

Fatal error: Uncaught Exception: Instance does not implement this function in /var/lib/symcon/scripts/__generated.inc.php:30 Stack trace: #0 /var/lib/symcon/scripts/55129.ips.php(136): HUE_SetValue(12345, ‚SCENE‘, ‚Entspannen‘) #1 {main} thrown in /var/lib/symcon/scripts/__generated.inc.php on line 30

(12345 ist die ID der Bridge)

Hast du das Script mal ausprobiert, war ja der Hinweis von Fonzo auf Seite 49, so wie ich das auf die schnelle sehe ist die Szenenfunktion nicht Bestandteil des Moduls… ich selber nutze das im Moment nicht. Hier nochmal das Skript:

<? 
    // Config 
    $HueBridgeID = 44625 /*[Philips Hue Bridge]*/; // ObjektId der HueBridge 
     // Config End 

    $json_result = GetScences($HueBridgeID); 
    SetupScences($json_result, $HueBridgeID); 


function GetScences($HueBridgeID) 
{ 
    $HueIP = IPS_GetProperty($HueBridgeID, "Host"); 
    $HueUserKey = IPS_GetProperty($HueBridgeID, "User"); 
    //Szenen von Hue Auslesen 
    $url = 'http://'.$HueIP.'/api/'.$HueUserKey.'/scenes'; 
    $ch = curl_init( $url ); 
    $options = array( 
                   CURLOPT_RETURNTRANSFER => true, 
                   CURLOPT_CUSTOMREQUEST => 'GET', // -X 
                   CURLOPT_HTTPHEADER => array('Content-type: application/json') , 
                   ); 
    curl_setopt_array( $ch, $options ); 
     
    // Getting results 
    $json_result =  curl_exec($ch); 
    return $json_result; 
} 

function SetupScences($json_result, $HueBridgeID) 
{ 
    $result = json_decode($json_result, true); 
    $num = count(json_decode($json_result, true)); // als array 
    $idCatScenes = CreateCategory("HUE_Scenes_Category", "Szenen",IPS_GetParent($_IPS['SELF']),0); 
    echo "Es wurden ".$num." Szenen gefunden 
"; 

    $id = 0; 
    foreach ($result as $key => $scene) 
     { 
    $id=$id+1; 
     
    $scene_description = json_encode(array ($key => $scene)); 
    $id = $key; // The id of the scene being modified or created. 
    $ident = GetIdent($id); 
    $name = $scene["name"]; // Human readable name of the scene. Is set to <id> if omitted on creation. 
         
        $myScene = @IPS_GetObjectIDByIdent($id, $idCatScenes); 
        if (!$myScene) //Neu anlegen 
            { 
                //echo $id."
"; 
                $myScene = CreateScene($ident, $name, $id, $idCatScenes, $scene_description, $HueBridgeID);  
            } 
    } 
} 

function CreateScene($ident, $name, $id, $parentID, $scene_description, $HueBridgeID) 
{ 
    $instanceid = @CreateInstance($ident, $name, $parentID, "{485D0419-BE97-4548-AA9C-C083EB82E61E}", $Position=0);  
    IPS_SetIdent ($instanceid, $ident); 
    IPS_SetInfo($instanceid, $scene_description); 
    CreateScript ($ident."_actionscript", $name, $id, $instanceid, $Position=0, $HueBridgeID); 
    return $instanceid; 
} 

function CreateCategory ($Ident, $Name, $ParentId, $Position, $Icon=null) 
 { 
        $CategoryId = @IPS_GetObjectIDByIdent($Ident, $ParentId); 
        if ($CategoryId === false) 
         { 
            $CategoryId = IPS_CreateCategory(); 
            IPS_SetName($CategoryId, $Name); 
            IPS_SetIdent($CategoryId, $Ident); 
            IPS_SetParent($CategoryId, $ParentId); 
            if ($Position!==false) { 
                IPS_SetPosition($CategoryId, $Position); 
            } 
            if ($Icon!==false) { 
                IPS_SetIcon($CategoryId, $Icon); 
            } 
            echo 'Created Category '.$Name.'='.$CategoryId."
"; 
        } 
        return $CategoryId; 
    } 
     
function CreateInstance ($Ident, $Name, $ParentId, $ModulId, $Position=0) 
 { 
        $InstanceId = @IPS_GetObjectIDByIdent($Ident, $ParentId); 
        if ($InstanceId === false) { 
            $InstanceId    = IPS_CreateInstance($ModulId); 
            IPS_SetName($InstanceId, $Name); 
            IPS_SetIdent($InstanceId, $Ident); 
            IPS_SetParent($InstanceId, $ParentId); 
            IPS_SetPosition($InstanceId, $Position); 
            echo "Created Instance ".$Name."=".$InstanceId."
"; 
        } 
        return $InstanceId; 
    } 
     

function GetIdent($id) 
{ 
    $search = "-"; 
    $replace = "_"; 
    $ident = str_replace($search, $replace, $id); 
    return $ident; 
} 

function CreateScript ($Ident, $Name, $id, $ParentId, $Position=0, $HueBridgeID) 
 { 
    //$json_url = 'http://'.$HueIP.'/api/'.$HueUserKey.'/scenes'; 
        $ScriptId = @IPS_GetObjectIDByIdent($Ident, $ParentId); 
        if ($ScriptId === false) { 
            $ScriptId = IPS_CreateScript(0); 
            IPS_SetName($ScriptId, $Name); 
            IPS_SetIdent($ScriptId, $Ident); 
            $content = '<? 
$HueIP = IPS_GetProperty('.$HueBridgeID.', "Host"); 
$HueUserKey = IPS_GetProperty('.$HueBridgeID.', "User"); 
$data = array ("scene" => "'.$id.'"); 
$client = curl_init(); 
curl_setopt($client, CURLOPT_URL, "http://".$HueIP.":80/api/".$HueUserKey."/groups/0/action"); 
curl_setopt($client, CURLOPT_USERAGENT, "SymconHUE"); 
curl_setopt($client, CURLOPT_CONNECTTIMEOUT, 5); 
curl_setopt($client, CURLOPT_TIMEOUT, 5); 
curl_setopt($client, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($client, CURLOPT_CUSTOMREQUEST, \'PUT\'); 
curl_setopt($client, CURLOPT_POSTFIELDS, json_encode($data)); 
$result = curl_exec($client); 
$status = curl_getinfo($client, CURLINFO_HTTP_CODE); 
curl_close($client);           
?>'; 
             IPS_SetScriptContent($ScriptId, $content); 
            IPS_SetParent($ScriptId, $ParentId); 
            IPS_SetPosition($ScriptId, $Position); 
            echo 'Created Script '.$Name.'='.$ScriptId."
"; 
        } 
        return $ScriptId; 
    }     
         
?>

Ja genau, exakt dieses Skript putze ich. Damit konnte ich auch die sehnen auslesen. Das Script hat auch zahlreiche Funktionen, jedoch sehe ich keine zum Abspielen einer Szene.

Über die Funktion

function CreateScript ($Ident, $Name, $id, $ParentId, $Position=0, $HueBridgeID) 

wird ja ein neues Skript erstellt, was du dann ausführen kannst, um die Szene zu schalten.

Das hat dann nix mehr direkt mit dem Hue Modul zu tun, ergo kommst du mit HUE_**** nicht weiter.

Du musst das Script ausführen, bzw. in deine Variable oder sonstiges einbinden… hast du das Skript gefunden, welches angelegt wurde? Führe das doch mal aus…

Uli

Also jetzt hat alles geklappt. Es wurden 147 Szenen importiert, dabei habe ich nur eine Hand voll. Aber irgendwas stimmt da nicht. Diese Szenen scheinen nur feste Lampen-Presets zu sein. Meine eigenen Szenen sind jedoch dynamisch und wechseln stets die Farbe. Es sind alle Farben star und es passiert nix. Wie kann ich diese Szene, z.b. aus dem Hue Lab mit Kerzenflackern, ausführen?

Die HUE-Labs Mimik erstellt für jede Lampe in einer Gruppe mehrere Szenen als Zustand und fackelt diese dann randomisiert in einer Schleife ab. Daher hast Du soviele Scripte. Jedes Script ist damit ein Zustand aus der gesamten Szene. Du müsstest dann einen Weg finden diese nacheinander auszuführen. Ich habs dann bei mir verworfen. Das ganze verbrät außerdem unwahrscheinlich viele Ressourcen auf der HUE Basis. Kann man zB mit dem HUE Inspektor ermitteln.

Loerdy

Das war nur ein Versuch wenigstens rudimentär die Szenen über das Modul auslesen zu können. Ich habe mich danach nicht weiter mit dieser Baustelle beschäftigt. Es wundert mich nicht wenn das mittlerweile nicht mehr läuft. Hatte gehofft dass jemand den Ansatz aufgreift und bei einer sauberen Integration ins Modul hilft.

Der Weg über eigene Scripte mithilfe von curl & Co. mag sicherlich zum Ziel führen aber schöner wäre es wenn die Szenen-Funktionalität direkt im Modul vorhanden wäre :slight_smile: