Aktuelle Version des Skripts zur Steuerung einer Nanoleaf Aurora:
<?
$host="ip-adresse hier rein";
$token="---------";
$url="http://$host:16021/api/v1/$token/";
if (!Sys_Ping($host, 2)){
die("$host nicht erreichbar");
}
switch ($_IPS['SENDER']){
case "RunScript":
if(isset($_IPS['Action']))
{
switch($_IPS['Action'])
{
case "On":
$ch = curl_init($url."state/on");
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => array('Content-type: application/json') ,
CURLOPT_POSTFIELDS => '{"on":true}'
);
curl_setopt_array($ch, $options);
$login = curl_exec($ch);
curl_close($ch);
break;
case "Off":
$ch = curl_init($url."state/on");
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => array('Content-type: application/json') ,
CURLOPT_POSTFIELDS => '{"on":false}'
);
curl_setopt_array($ch, $options);
$login = curl_exec($ch);
curl_close($ch);
break;
case "Toggle":
$ch = curl_init($url."state/on");
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => array('Content-type: application/json') ,
CURLOPT_POSTFIELDS => '{"on":'.(GetValueBoolean(IPS_GetObjectIDByName("On", $_IPS["SELF"]))?"false":"true").'}'
);
curl_setopt_array($ch, $options);
$login = curl_exec($ch);
curl_close($ch);
break;
case "Brightness":
if(isset($_IPS['Value'])){
$ch = curl_init($url."state");
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => array('Content-type: application/json') ,
CURLOPT_POSTFIELDS => '{"brightness":'.((int)$_IPS['Value']).'}'
);
curl_setopt_array($ch, $options);
$login = curl_exec($ch);
curl_close($ch);
}
break;
case "Effect":
if(isset($_IPS['Effect'])){
$ch = curl_init($url."effects");
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => array('Content-type: application/json') ,
CURLOPT_POSTFIELDS => '{"select":"'.$_IPS['Effect'].'"}'
);
curl_setopt_array($ch, $options);
$login = curl_exec($ch);
curl_close($ch);
}
break;
case "Random":
$ch = curl_init($url."effects");
$result = json_decode(Sys_GetURLContent($url."effects/effectsList"),true);
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => array('Content-type: application/json') ,
CURLOPT_POSTFIELDS => '{"select":"'.$result[array_rand($result)].'"}'
);
curl_setopt_array($ch, $options);
$login = curl_exec($ch);
curl_close($ch);
break;
}
}
break;
case "Execute":
IPS_SetScriptTimer($_IPS['SELF'], 10);
$result = json_decode(Sys_GetURLContent($url."effects/effectsList"),true);
print_r($result);
break;
case "TimerEvent":
$result = json_decode(Sys_GetURLContent($url."state"),true);
CreateOrSetVar("On",(boolean)($result['on']['value']==1),0,$_IPS['SELF']);
CreateOrSetVar("Brightness",(int)($result['brightness']['value']),1,$_IPS['SELF']);
CreateOrSetVar("hue",(int)($result['hue']['value']),1,$_IPS['SELF']);
CreateOrSetVar("sat",(int)($result['sat']['value']),1,$_IPS['SELF']);
CreateOrSetVar("ct",(int)($result['ct']['value']),1,$_IPS['SELF']);
CreateOrSetVar("colorMode",(string)($result['colorMode']),3,$_IPS['SELF']);
break;
}
function CreateOrSetVar($VarName,$VarValue,$VarType,$RefID){
if ($subitem=@IPS_GetObjectIDByName($VarName,$RefID)){
setvalue($subitem,$VarValue);
}
else{
$subitem=IPS_CreateVariable($VarType);
IPS_SetName($subitem, $VarName);
IPS_SetParent($subitem, $RefID);
setvalue($subitem,$VarValue);
}
return $subitem;
}
?>
Zur „Installation“ das Skript irgendwo ablegen und einmal per Hand ausführen. Danach sollten sich die vars darunter anlegen. Einige Beispiele:
Ein: „IPS_RunScriptEx(<id des scripts>, Array(„Action“=>„On“));“
Helligkeit: IPS_RunScriptEx(18037 /[Nanoleaf Aurora]/, Array(„Action“=>„Brightness“,„Value“=>„20“);
Andere Kommandos siehe Quelltext !
Mir sind bisher nur 2 Anwender bekannt, daher alles etwas rudimentär ohne Modul oder Kommentare. Bei Fragen schickt mir am besten eine PM oder email…