HUE Toggle Skript - Wo ist mein Fehler?

Hallo,
mit Fonzos Hilfe habe ich ein Hue Skript angelegt, womit ich einen Toggle Befehl (an/aus) auslösen kann, der eine Hue Szene an- und ausschalten soll.
Leider funktioniert das Skript nicht und ich habe irgendwo einen Fehler gemacht. Wenn ich im Webfont auf den Button drücke, erscheint die Fehlermeldung:

Ich bin blutiger Anfänger und froh, wenn mir einer Schritt für Schritt zur Lösung hilft.

Bisher bin ich Fonzos Anleitung gefolgt:
Im Debug Fenster den Befehl „owner“:„abcdef-32ce-4b87-847e-97dec4b8f5bd“ herauskopiert. (Beispiel).

Skript angelegt:

Blockquote ```
// Config
$HueBridgeID = 12345; // ObjektId der HueBridge (Splitter)
$owner = „abcdef-32ce-4b87-847e-97dec4b8f5bd“;
// Config End

$scenes = PHUE_getAllScenes(31787);   
SetupScences($scenes, $HueBridgeID, $owner); 

function SetupScences($scenes, $HueBridgeID, $owner)
{
$num = count((array) $scenes);

$idCatScenes = CreateCategory("HUE_Scenes_Category", "Szenen",IPS_GetParent($_IPS['SELF']),0); 
echo "Es wurden ".$num." Szenen gefunden \n"; 

// $id = 0; 
foreach ($scenes as $key => $scene) 
 { 
// $id = $id++; 
// var_dump($key);
$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  if omitted on creation. 
// var_dump($name);     
    $myScene = @IPS_GetObjectIDByIdent($id, $idCatScenes); 
    if (!$myScene) //Neu anlegen 
        { 
            //echo $id."\n"; 
            $myScene = CreateScene($ident, $name, $id, $idCatScenes, $scene_description, $HueBridgeID, $owner);  
        } 
} 

}

function CreateScene($ident, $name, $id, $parentID, $scene_description, $HueBridgeID, $owner)
{
$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, $owner);
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."\n";
}
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."\n";
}
return $InstanceId;
}

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

function CreateScript ($Ident, $Name, $id, $ParentId, $Position=0, $HueBridgeID, $owner)
{
//$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 = $owner;
$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."\n";
}
return $ScriptId;
}


Objekt ID der Hue Bridge und mit dem Wert unter owner habe ich eingesetzt.
Bei PHUE_getAllScenes(31787); die 31787 durch die Objekt ID der Hue Bridge (Splitter) habe ich ebenfalls ersetzt.


Viele Grüße
Marvus

Postest du mal bitte Script?

Grüße,
Kai

Ist ein Spezialfall was er machen will und ein Hilfsskript. Was er an sich machen möchte ist ein Skript ausführen das toggelt zwischen einer bestimmten Hue Szene und dem ausschalten der Lampen, die in dieser Szene beteiligt sind.

Zweites „Problem“ bzw. Einschränkung ist das er diese Zustandsänderung, also Szene einschalten / Lampen ausschalten über NEO auslösen will. Hierzu kann er aber keine Bool Variable auf einen Button legen und diese durch mehrmaliges drücken togglen, sondern er muss ein Skript triggern, dies Skript muss dann abhängig vom letzten Zustand der er aufgerufen hatte den entgegengesetzten gewünschten Zustand aufrufen.

In Deinem Modul schaltet man ja einzelne Szenen einer Lampe , Gruppe über eine Variable. Folgendes Skript ließt einfach alle Hue Szenen aus und legt zu jeder Szene ein Skript an.

<?php 
    // Config 
    $HueBridgeID = 12345; // ObjektId der HueBridge (Splitter)
    $owner = "abcdef-32ce-4b87-847e-97dec4b8f5bd";
    // Config End

    $scenes = PHUE_getAllScenes($HueBridgeID);   
    SetupScences($scenes, $HueBridgeID, $owner); 



function SetupScences($scenes, $HueBridgeID, $owner) 
{ 
    $num = count((array) $scenes);

    $idCatScenes = CreateCategory("HUE_Scenes_Category", "Szenen",IPS_GetParent($_IPS['SELF']),0); 
    echo "Es wurden ".$num." Szenen gefunden \n"; 

    // $id = 0; 
    foreach ($scenes as $key => $scene) 
     { 
    // $id = $id++; 
    // var_dump($key);
    $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. 
    // var_dump($name);     
        $myScene = @IPS_GetObjectIDByIdent($id, $idCatScenes); 
        if (!$myScene) //Neu anlegen 
            { 
                //echo $id."\n"; 
                $myScene = CreateScene($ident, $name, $id, $idCatScenes, $scene_description, $HueBridgeID, $owner);  
            } 
    } 
} 

function CreateScene($ident, $name, $id, $parentID, $scene_description, $HueBridgeID, $owner) 
{ 
    $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, $owner); 
    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."\n"; 
        } 
        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."\n"; 
        } 
        return $InstanceId; 
    } 
     

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

function CreateScript ($Ident, $Name, $id, $ParentId, $Position=0, $HueBridgeID, $owner) 
 { 
    //$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 = '<?php 
$HueIP = IPS_GetProperty('.$HueBridgeID.', "Host");
$HueUserKey = $owner;  
$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."\n"; 
        } 
        return $ScriptId; 
    }     

Die Owner ID muss ja einmalig ausgehandelt werden. Diese ist in Deinem Modul als Attribut abgelegt kann aber nicht einfach ausgelesen werden. Diese sieht man erst wenn man im Debug Fenster schaut was über das Modul geschickt wird. Letztlich legt das Skript nur für jede Hue Szene ein Skript an.

Falls Du einen Weg bzw. eine Methode im Modul einbauen könntest um die ausgehandelte ownerid auszulesen wäre das Erstellen von Skripten etwas einfacher.

Falls Du irgendwie in der Instanz der Hue Brigde einen Button anbietest mit dem man einfach einzelne Skripte anlegen kann, wobei jedes Skript eine Hue Szene aufruft wäre das schön, muss aber nicht zwingend sein das kann man ja theoretisch auch per Hand durch einmaliges ausführen von so einem Skript machen.

Du hast im dem Script den PHP-Tag gelöscht.
Damit wird das Script im WebFront ausgegeben und nicht in Symcon ausgeführt.

<?php  //ich stehe immer in der ersten Zeile.

@Fonzo @KaiS Zur Info:
Ich habe weder mir den Inhalt oder Sinn der Scripte angesehen oder bei euren Beiträgen versucht das Thema zu verstehen.
Michael

An der Stelle des Skripts musst Du noch Anpassungen vornehmen bevor Du dies das erste mal ausführst.

Wenn Du in dem Skript STRG+O an der Stelle drückt, an der Du eine Objket ID einfügen willst öffnest sich der Objektbaum. Dort wählst Du die Instanz aus in dem Fall die Hue Bridge (Splitter).

Den Wert bei

$owner = „abcdef-32ce-4b87-847e-97dec4b8f5bd“;

Ist individuell und für jeden Nutzer und Hue Bridge ein eindeutig. Daher musst Du diesen einmalig im Debug Fenster von einer Hue Instanz nachschlagen und diesen Wert dort eintragen.

Statt der 31787 schreibst Du da $HueBridgeID rein.

Wenn das alles passt führst Du das Skript dann nochmals aus. Solltest Du die Werte so nicht übernommen haben musst Du nochmals die erzeugten Skripte löschen und dann nochmals neu anlegen lassen. Anschließend kannst Du so ein Skript mal testhalber ausführen. Wenn dann eine Fehlermeldung auftauchen sollte, müsstest Du diese mal posten.

Hört sich zumindest logisch an, das dies mit die Fehlerursache sein kann.

Als aller erstes musst Du mal Deine eigene owner id auslesen.

Dazu öffnets Du eine Hue Instanz mit einer Szene

Dann klickst Du ganz rechts das Käfer Symbol an mit der Bezeichnung Debug.
Anschließend klickst Du auf SZENENPROFIL AKTUALISIEREN.

Jetzt wechselst Du in das Debug Fenster dort steht an zweiter Stelle ein Eintrag. Diesen markierst Du mit der rechten Maustaste und wählst kopieren (Text).

Diese Zeile kannst Du jetzt in ein Skript kopieren das Du dann ausführen willst (Skript siehe oben).

Aus dieser Zeile brauchst die den Eintrag

sendData | {"DAmxG0aAcD7wfD5":{"name":"Entspannen","type":"GroupScene","group":"21","lights":["33","34","35","36","37"],"owner":"abcdefg-32ce-4b87-847e-97dec4b8f5bd", .........

"owner":"abcdefg-32ce-4b87-847e-97dec4b8f5bd"

Diesen trägst Du in dem Skript oben an der Stelle

$owner = "abcdef-32ce-4b87-847e-97dec4b8f5bd";

ein und ersetzt diesen mit dem Wert, den Du aus dem Debug Fenster entnommen hast.

Du kannst auch ein Skript direkt im Objektbaum öffnen mit einem Doppelklick. Das Skript kannst Du dann mit klick auf AUSFÜHREN testen.

@KaiS Gibt es bei Dir im Modul eigentlich eine Methode wie man eine Szene über deren ID aufrufen kann?
Also so was zur Übergabe

("scene" => "vmHFuig3kl1wze9")

Das würde das Ganze etwas einfacher machen. Dann muss man auch nichts aus dem Modul auslesen, weil es dann auch direkt über das Modul bzw. den Splitter verschickt würde.

Das Thema ist schnell zusammen gefast. Erstelle für alle Hue Szenen der Hue Bridge ein Skript in IP-Symcon, mit der sich jede Szene einzeln per Skript aufrufen lässt.

Ich habe das Script jetzt noch einmal komplett neu angelegt.
Es hat keine Fehler/ Hinweise ergeben.

Wenn ich nun im WebFront auf den Button klicke, erhalte ich wieder eine Fehlermeldung.

Sind in dem Foto eigentlich irgendwelche sensiblen Daten?
Ich würde sonst auch mal mein Script hier hochladen. Allerdings weiß ich nicht, ob jemand etwas mit meinen IDs anfangen kann.

Und ich bin mittlerweile bei der doppelten Variablenanzahl. Hängt das vielleicht nicht doch irgendwie damit zusammen?

Steht das hier in der ersten Zeile vom Script?

<?php

Sonst einmal einfügen.
Michael

Wenn Du im Skript selber die owner ID austauscht steht da sonst nicht drinnen was sensibel wäre.

Mit dem Skript zumindest nicht, das legt keine Variablen an. Wieviele Hue Lampen besitzt Du denn?

Hier ist das Script mit ausgeblendeter Owner ID:

<?php
    // Config 
    $HueBridgeID = 49897; // ObjektId der HueBridge (Splitter)
    $owner = "ausgeblendet";
    // Config End

    $scenes = PHUE_getAllScenes($HueBridgeID);   
    SetupScences($scenes, $HueBridgeID, $owner); 



function SetupScences($scenes, $HueBridgeID, $owner) 
{ 
    $num = count((array) $scenes);

    $idCatScenes = CreateCategory("HUE_Scenes_Category", "Szenen",IPS_GetParent($_IPS['SELF']),0); 
    echo "Es wurden ".$num." Szenen gefunden \n"; 

    // $id = 0; 
    foreach ($scenes as $key => $scene) 
     { 
    // $id = $id++; 
    // var_dump($key);
    $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. 
    // var_dump($name);     
        $myScene = @IPS_GetObjectIDByIdent($id, $idCatScenes); 
        if (!$myScene) //Neu anlegen 
            { 
                //echo $id."\n"; 
                $myScene = CreateScene($ident, $name, $id, $idCatScenes, $scene_description, $HueBridgeID, $owner);  
            } 
    } 
} 

function CreateScene($ident, $name, $id, $parentID, $scene_description, $HueBridgeID, $owner) 
{ 
    $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, $owner); 
    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."\n"; 
        } 
        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."\n"; 
        } 
        return $InstanceId; 
    } 
     

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

function CreateScript ($Ident, $Name, $id, $ParentId, $Position=0, $HueBridgeID, $owner) 
 { 
    //$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 = '<?php 
$HueIP = IPS_GetProperty('.$HueBridgeID.', "Host");
$HueUserKey = $owner;  
$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."\n"; 
        } 
        return $ScriptId; 
    }     //Start writing your code here

28 Lampen und 9 Geräte.
Das erstellte Script habe ich im Ordner abgelegt, in dem alle Hue Lampen aufgeführt sind.

Ich habe es jetzt noch einmal versucht und die Hue Bridge und alle INstanzen neu angelegt. Auch das Hue Plugin habe ich neu installiert. Wenn ich die Owner ID und die Hue Bridge ID austausche, findet das Script ohne Fehler 116 Szenen.
Wenn ich im Webfont die Szene aufrufen möchte, erhalte ich jetzt einen neuen Fehlercode:

<?php 
    // Config 
    $HueBridgeID = 59088; // ObjektId der HueBridge (Splitter)
    $owner = "ausgeblendet";
    // Config End

    $scenes = PHUE_getAllScenes($HueBridgeID);   
    SetupScences($scenes, $HueBridgeID, $owner); 



function SetupScences($scenes, $HueBridgeID, $owner) 
{ 
    $num = count((array) $scenes);

    $idCatScenes = CreateCategory("HUE_Scenes_Category", "Szenen",IPS_GetParent($_IPS['SELF']),0); 
    echo "Es wurden ".$num." Szenen gefunden \n"; 

    // $id = 0; 
    foreach ($scenes as $key => $scene) 
     { 
    // $id = $id++; 
    // var_dump($key);
    $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. 
    // var_dump($name);     
        $myScene = @IPS_GetObjectIDByIdent($id, $idCatScenes); 
        if (!$myScene) //Neu anlegen 
            { 
                //echo $id."\n"; 
                $myScene = CreateScene($ident, $name, $id, $idCatScenes, $scene_description, $HueBridgeID, $owner);  
            } 
    } 
} 

function CreateScene($ident, $name, $id, $parentID, $scene_description, $HueBridgeID, $owner) 
{ 
    $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, $owner); 
    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."\n"; 
        } 
        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."\n"; 
        } 
        return $InstanceId; 
    } 
     

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

function CreateScript ($Ident, $Name, $id, $ParentId, $Position=0, $HueBridgeID, $owner) 
 { 
    //$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 = '<?php 
$HueIP = IPS_GetProperty('.$HueBridgeID.', "Host");
$HueUserKey = $owner;  
$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."\n"; 
        } 
        return $ScriptId; 
    }     

Hallo,
dank Fonzos Unterstützung läuft das Skript nun. Eine wichtige Voraussetzung war auch noch, dass die Szenen und Räume über die originale Hue App angelegt werden. Die erstellten Szenen aus IconnectHue führen immer wieder zu dem oben genannten Fehler.

Ich kann jetzt mit Fonzos Script im Neo Creator togglen:
Wohnlicht 100% → Wohnlicht 50% → Wohnlicht (Lampen ausschalten)

<?php

// Dummy Instanz anlegen

// Variable unterhalb der Dummy Instanz anlegen Typ Boolean Profil ~Switch für Status ein /aus
// Varibale Integer für Sequenz und Varibalen profil selbstatändig festlegen

// Werte anpassen bzw. Befehl hinzufügen

// NEO importieren

$state = GetValue(45383);
//var_dump($state);
$state = $state + 1;
//var_dump($state);
if($state > 2)
{
    $state = 0;
}
//var_dump($state);
if($state == 0) // erster Wert Sequenz
{
    // Befehl einfügen drücken und Instanz auswählen
     RequestAction(37626, 0);
    SetValue(45383, 0);
}
elseif($state == 1) //zweiter Wert Sequenz
{
     RequestAction(37626, 1);
     SetValue(45383, 1);
}
elseif($state == 2) // ansonmsten wenn aus schalten
{
    // IPS_RunScript(18395); // todo testen
    // Befehl hinzufügen Szene
    RequestAction(28196, false); // Schaltet aus
    SetValue(45383, 2);
}

Jetzt habe ich versucht eine dritte Szene hinzuzufügen, die folgendes schalten soll:
Wohnlicht 100% → Wohnlicht 50% → Wohnlicht 50% ohne Strip → Wohnlicht (Lampen ausschalten)

In Anlehnung an Fonzos Script, habe ich jetzt versucht das Skript um die dritte Szene „Wohnlicht 50% ohne Strip“ zu erweitern, was leider nicht funktioniert.

<?php

// Dummy Instanz anlegen

// Variable unterhalb der Dummy Instanz anlegen Typ Boolean Profil ~Switch für Status ein /aus
// Varibale Integer für Sequenz und Varibalen profil selbstatändig festlegen

// Werte anpassen bzw. Befehl hinzufügen

// NEO importieren

$state = GetValue(45383);
//var_dump($state);
$state = $state + 1;
//var_dump($state);
if($state > 2)
{
    $state = 0;
}
//var_dump($state);
if($state == 0) // erster Wert Sequenz
{
    // Befehl einfügen drücken und Instanz auswählen
     RequestAction(37626, 0);
    SetValue(45383, 0);
}
elseif($state == 1) //zweiter Wert Sequenz
{
     RequestAction(37626, 1);
     SetValue(45383, 1);
}
elseif($state == 2) //zweiter Wert Sequenz
{
     RequestAction(37626, 2);
     SetValue(45383, 2);
}
elseif($state == 3) // ansonmsten wenn aus schalten
{
    // IPS_RunScript(18395); // todo testen
    // Befehl hinzufügen Szene
    RequestAction(28196, false); // Schaltet aus
    SetValue(45383, 3);
}

@Fonzo oder andere, wo steckt der Fehlerteufel?
Viele Grüße

Da man weder am Sckript sehen kann ob die Objekt ID passt bzw. Du nicht sagst was genau nicht geht, kann man das schlecht im Detail nachvollziehen.

Wo definitiv ein Fehler ist in der Zeile

if($state > 2)

Die letzte Zahl ist die Größte in der Reihe und dann wird der Wert wieder auf 0 gesetzt um wieder von vorne mit dem schalten zu beginnen. Wenn Du also eine Folge von 0,1,2,3 hast muss dort in der Klammer auch > 3 stehen, bei einer Folge 0,1,2,3,4,5 dann eben 5.

Ansonsten müsstest Du näher beschreiben was nicht funktioniert.-

Ja perfekt. Jetzt funktioniert alles. Hier war der Fehler.
Jetzt kann ich auch selber beliebig viele Szenen hintereinander schalten.

Gibt es denn auch die Möglichkeit ein Script zu bekommen, bei dem sich alle Lampen ausschalten und sofort anschließend eine Lichtszene eingeschaltet wird?

Ich möchte nämlich ein Abwesenheitslicht haben, wenn ich beispielsweise aus dem Haus gehe. Es schalten sich alle Lampen im Haus aus und nur die gespeicherte Lichtszene für die Abwesenheit geht an.

Viele Grüße

Das hängt ja am Schluss davon ab was für eine Beleuchtung geschaltet wird, Du wirst ja sehr wahrscheinlich nicht nur ausschließlich Hue nutzten.
Du kannst Dir ja mal Szenensteuerung installieren

und damit rumspielen.

So ein Skript kann man aber beliebig anpassen, dazu müsste man aber genau verstehen welche Lampen dann welchen Zustand haben.

Insbesondere wenn das mit Abwesenheit zu tun hat, solltest Du Dir zunächst mal eine Abwesenheitserfassung in IP-Symcon einrichten. Der Rest sollte dann mit einem Ereignis konfiguriert werden, damit das auch automatisch passiert, insofern Du das willst.