Antworten
Jun 22, 2019 - 13:27
Hallo,
diese "kryptische Zeichenfolge" ist der Schlüssel unter welchem die Szene in der Bridge zu finden ist.
Eine gute Erläuterung wie Du solche Daten in Erfahrung bringen kannst, findest Du hier:
https://www.tutonaut.de/anleitung-hue...
Was ich durch Deine Frage nun erst festgestellt habe ist, wie man recht einfach durch den "executeDeviceCommand" über den Namen an den Schlüssel gelangt. Allerdings wird
der Schlüssel leider abgeschnitten. Es fehlen die letzten Zeichen.
diese "kryptische Zeichenfolge" ist der Schlüssel unter welchem die Szene in der Bridge zu finden ist.
Eine gute Erläuterung wie Du solche Daten in Erfahrung bringen kannst, findest Du hier:
https://www.tutonaut.de/anleitung-hue...
Was ich durch Deine Frage nun erst festgestellt habe ist, wie man recht einfach durch den "executeDeviceCommand" über den Namen an den Schlüssel gelangt. Allerdings wird
der Schlüssel leider abgeschnitten. Es fehlen die letzten Zeichen.
Jun 22, 2019 - 15:58
Was ist jetzt eigentlich genau die Frage? Ob das krytische Zeichen sind oder nicht hängt von der App bzw. Software ab mit der die Szene erstellt worden ist. Viele Apps legen da einfach nur einen krytischen Wert ab. Wen Du eine Szene selber anlegst kannst Du da auch einen sinngebenden Namen vergeben. Möglich ist es einen ordentlichen Namen zu vergeben indem Du z.B. direkt mit der Hue API arbeitest oder z.B. mit so Apps wie iconnecthue.
Jun 23, 2019 - 05:51
Hallo Fonzo,
die Szene ist in der Hue app angelegt, und trotzdem sehe ich im Automatiom Manager nur den Zeichensalat.
Hatte noch keine Zeit den Link von hw-020 zu prüfen, vielleicht kann man ja dadurch die Werte auslesen um sie dann in Script zu benutzen.
die Szene ist in der Hue app angelegt, und trotzdem sehe ich im Automatiom Manager nur den Zeichensalat.
Hatte noch keine Zeit den Link von hw-020 zu prüfen, vielleicht kann man ja dadurch die Werte auslesen um sie dann in Script zu benutzen.
Jun 23, 2019 - 07:52
Hallo,
ja dem ist so. Du erhälst zu jeder Szene die Daten und kannst diese im Script zum Aufruf verwenden. Läuft bei mir einwandfrei...
ja dem ist so. Du erhälst zu jeder Szene die Daten und kannst diese im Script zum Aufruf verwenden. Läuft bei mir einwandfrei...
Jun 23, 2019 - 08:26
Die Hue App würde ich dafür auch nicht nutzten, diese legt eben kryptische Zeichen an mit denen kann man nichst anfagen. Entweder Du nutzt eben eine App die Szenen sauber anlegt wie iconnecthue oder Du erstellst die Szene direkt über die API.
Ich selber erstelle Szenen aus Symcon und lese bestehende Szenen mit Symcon aus.
Wie Du siehst haben die Szenen da auch normale Namen
Und lassen sich auch über die Namen wenn man will im NEO Automation Manager ansprechen
Ich selber erstelle Szenen aus Symcon und lese bestehende Szenen mit Symcon aus.
// Config
$HueBridgeID = 56171; // ObjektId der HueBridge
// Config End
$json_result = GetScences($HueBridgeID);
//var_dump($json_result);
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 \n";
$id = 0;
foreach ($result as $key => $scene)
{
$id = $id++;
$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.
$myScene = @IPS_GetObjectIDByIdent($id, $idCatScenes);
if (!$myScene) //Neu anlegen
{
//echo $id."\n";
$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."\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)
{
//$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."\n";
}
return $ScriptId;
}
Wie Du siehst haben die Szenen da auch normale Namen
Und lassen sich auch über die Namen wenn man will im NEO Automation Manager ansprechen
Jun 23, 2019 - 08:36
Hallo,
die Vorgehensweise von Fonzo ist sicher die bessere und übersichtlichere Variante. Wenn Du allerdings den Szenenschlüssel kennst, kannst Du mit folgendem Befehl die Szene direkt aus dem Script heraus aufrufen:
executeDeviceCommand( "Hue im SPA 2 (Gruppen)", "SPA-Lounge", {"value":"setScene","ext":"oLwCXJ6Y7Z8DAZQ"}, ---hier den zuvor ermitteltelten Schlüssel eintragen function(err) { err && console.error(err.message); } );
Probier es einfach mal...
die Vorgehensweise von Fonzo ist sicher die bessere und übersichtlichere Variante. Wenn Du allerdings den Szenenschlüssel kennst, kannst Du mit folgendem Befehl die Szene direkt aus dem Script heraus aufrufen:
executeDeviceCommand( "Hue im SPA 2 (Gruppen)", "SPA-Lounge", {"value":"setScene","ext":"oLwCXJ6Y7Z8DAZQ"}, ---hier den zuvor ermitteltelten Schlüssel eintragen function(err) { err && console.error(err.message); } );
Probier es einfach mal...
Jun 23, 2019 - 09:24
Danke euch beiden für die Hilfe. Ich habe jetzt den Schlüssel ausgelesen, und dann im Script gesetzt. Funktioniert einwandfrei...
Neuen Kommentar hinzufügen