Zur besten Antwort gewählt
Apr 14, 2021 - 17:13
Öffne irgendeine Hue Instanz im Objektbaum in IP-Symcon und öffne dort das Debug Fenster (das Käfer Symbol).
Drücke dann auf Szenenprofil aktualisieren
Jetzt siehst Du im Debug Fenster eine Mitteilung die grob so aussieht
sendData | {"abc9u5HQoHtqMY":{"name":"Entspannen","type":"GroupScene","group":"29","lights
":["33","35"],"owner":"abcdef-32ce-4b87-847e-97dec4b8f5bd", ......
Hier kopierst Du Dir den Wert von
"owner":"abcdef-32ce-4b87-847e-97dec4b8f5bd"
raus.
Jetzt erstellst Du Dir ein leeres Skript und kopierst da folgenden Inhalt rein
// 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;
}
Die ersten beiden Zeilen sind zu ergänzen, mit der Objekt ID der Hue Bridge und mit dem Wert unter owner den Du zuvor aufgeschrieben hattest.
Jetzt drückst Du auf AUSFÜHREN
dann wird das Skript ausgeführt und legt Dir für jede einzelne Szene die in der Heu Bridge vorhanden ist ein eigenes Skript an das Du dann z.B. in NEO importieren kannst.
Jetzt ist dann nur noch die Frage welche Szene geschaltet werden soll wenn Du den Button in NEO drückst. Es sollten ja mindestens zwei Szenen sein, Du kannst aber wie gesagt auch mehrere Szenen mit einem Button Druck nacheinander durchschalten.
Von
Danke. Das probiere ich morgen mal aus :)
Und wo finde ich die Szenen bzw. finde heraus welche Szene welchen Wert hat?
Kann ich meine bereits vorhandenen Szenen abgreifen oder muss ich mit dem Szene Plugin alle Lampen wieder zu neuen Szenen zusammenfügen?
Von
Naja Szenen erstellst Du am besten mit irgendeiner App für Hue oder eben der Hue App von Philips selber. Der Szene gibst Du einen aussagekräftigen eindeutigen Namen. Wenn Du die Szenen dann abrufst entspricht der Name des Skripts dem Szenennamen den Du z.B. in der Hue App vergeben hast. Du weist dann also welche Skript mit dem passenden Namen welche Szene der Hue Bridge aufruft.
Was ist denn jetzt am Schluss Dein genaues Ziel mit dem Button in NEO eine Szene aufzurufen und mit erneuten Druck auf den Button in NEO die Zone bzw. Gruppe komplett auszuschalten?
Oder möchtest Du mit einem Druck auf den Knopf eine Szene aufrufen (z.B. Fernsehen) und mit einem erneuten Druck auf den gleichen Button eine andere Szene wechseln z.B. Abenddämmerung?
Die dritte Möglichkeit wäre eben mit dem wiederholten Druck auf den Button eine andere Szene aufzurufen. So habe ich das mir selber gelöst. Das Verhalten entspricht dann in NEO analog den Lichtschaltern, dort kann ich auch durch mehrmaliges Drücken eine definierte Szene nach der anderen durchschalten
Von
Oben im Skript musst Du übrigens noch bei
PHUE_getAllScenes(31787);
die 31787 durch die Objekt ID der Hue Bridge (Splitter) ersetzten, das habe ich vergessen zu Ändern vor beim posten.
Von
"Was ist denn jetzt am Schluss Dein genaues Ziel mit dem Button in NEO eine Szene aufzurufen und mit erneuten Druck auf den Button in NEO die Zone bzw. Gruppe komplett auszuschalten?"
Genau, ich möchte einfach nur die Szene mit dem gleichen Knopf an und ausschalten. Ich hoffe ich komme morgen dazu dein Skrpt mit deiner Anleitung zu testen. Danke für die Unterstützung!
Von
So, ich konnte jetzt nach deiner Anleitung das Skript ausführen und sehe jetzt auch im Neo Creator die einzelnen Szenen. Das war schon einmal ein riesen Schritt für mich, da ich jetzt alle meine angelegten Szenen sehen und auswählen kann.
Wenn der Button in Neo erstellt und eine Szene zugewiesen ist, geht die Lampe aber leider nicht an.
Muss ich vielleicht noch das Skript, dass du in dem anderen Kommentar gepostet hast irgendwo einfügen oder hat sich das mit dem langen Skript erübrigt?
Oder hängt es vielleicht damit zusammen, dass durch den Import der Hue Lampen jetzt 439/250 Variablen und damit mehr als meine Lizenz zulässt habe?
Von
Das musst Du wohl in IP-Symcon selber testen indem Du dort das Skript einmal ausführst. Wenn das dort funktioniert, dann sollte das Skript auch aus NEO funktionieren.
Da Du Dir ja das Hue Plugin für NEO erworben hast, kannst Du ja auch doppelt fahren. Du steuerst das über das Hue Plugin in NEO an was eben geht bzw. was Du nutzten willst.
Um dann Dinge zusätzlich zu nutzten, die sonst nicht so einfach gehen, kannst Du dann ja Skripte aus IP-Symcon triggern. Skripte nehmen ja keine Variablen weg.
Die Szenen kannst Du aber dennoch aufrufen auch wenn nicht für jede Lampe eine Instanz in IP-Symcon besteht. Wenn Du die gleiche Lampe also so oder so schon einzeln über das Hue Plugin ansteuerst, kannst Du diese Instanz auch theoretisch in IP-Symcon löschen, das reduziert die Variablenanzahl.
Je nachdem was Du auf Dauer an Geräten aus IP-Symcon ansteuern willst oder bei wieviel Systemen Du auf Dauer Daten aufzeichnen willst wirst Du sehr wahrscheinlich auch über die 250 Variablen kommen. Fürs erste kannst Du aber ja alle Instanzen in IP-Symcon löschen, die Du zur Zeit nicht einzeln so auf dem Weg ansteuerst, wenn Du diese schon auf anderem Weg aus NEO ansteuerst.
Skripte selber sind wie gesagt unabhängig von der Variablenanzahl.
Von
Anscheinend gibt es einen Fehler. Vielleicht sagt dir dieser etwas.
Ansonsten werde ich es wie von dir vorgeschlagen erstmal über das Mediola Hue Plugin machen und mir die wieder zurückgewonnenen Variablen in IP-Symcon für die Instar Kamera aufheben, die ich in naher Zukunft noch anschaffen möchte.
Hier ein Bild vom Fehler. Leider kann man hier ja keine Fotos hochladen.
https://ibb.co/3NGn16k
Von
Bilder kannst Du bei einer Antwort hochladen nicht in einem Kommentar. Da das aber auch ein Thema ist, was dann spezifisch IP-Symcon anbelangt, ist dies auch definitiv im IP-Symcon Forum besser aufgeboben als hier.
Neuen Kommentar hinzufügen