fullpower a écrit:Y'a plus qu'à attendre que tu reçoives ta Yeelight !
<?
// Récupération des arguments
$ip = getArg('ip');
$commands = array();
foreach ($_GET as $prop => $value)
{
if (preg_match('/^method(\d*)$/', $prop, $match) and !empty($_GET['params'.$match[1]]))
{
$commands[] = array(
'method' => $_GET['method'.$match[1]],
'params' => explode('|', $_GET['params'.$match[1]]),
);
}
}
// Liste des propriétées yeelight
$properties = array(
'power', // on: smart LED is turned on / off: smart LED is turned off
'bright', // Brightness percentage. Range 1 ~ 100
'ct', // Color temperature. Range 1700 ~ 6500(k)
'rgb', // Color. Range 1 ~ 16777215
'hue', // Hue. Range 0 ~ 359
'sat', // Saturation. Range 0 ~ 100
'color_mode', // 1: rgb mode / 2: color temperature mode / 3: hsv mode
'flowing', // 0: no flow is running / 1:color flow is running
'delayoff', // The remaining time of a sleep timer. Range 1 ~ 60 (minutes)
'flow_params', // Current flow parameters (only meaningful when 'flowing' is 1)
'music_on', // 1: Music mode is on / 0: Music mode is off
'name', // The name of the device set by “set_name” command
'bg_power', // Background light power status
'bg_flowing', // Background light is flowing
'bg_flow_params', // Current flow parameters of background light
'bg_ct', // Color temperature of background light
'bg_lmode', // 1: rgb mode / 2: color temperature mode / 3: hsv mode
'bg_bright', // Brightness percentage of background light
'bg_rgb', // Color of background light
'bg_hue', // Hue of background light
'nl_br', // Brightness of night mode light
);
// Si l'arument method n'est pas présent, on récupère l'état de la lampe (méthode get_prop)
// On utilise l'ensemble des paramètres par défaut ($properties)
if (empty($commands))
{
$commands[] = array(
'method' => 'get_prop',
'params' => $properties,
);
}
// Création du socket
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Connexion à la lampe
socket_connect($sock, $ip, '55443');
// On génère le XML
$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$xml .= '<yeelight>';
// On lance les commandes
foreach ($commands as $command)
{
// On convertit la couleur hexadécimale
if ($command['method'] == 'set_rgb' and preg_match('/^[0-9a-fA-F]{6}$/', $command['params'][0]))
{
$command['params'][0] = hexdec($command['params'][0]);
}
if ($command['method'] == 'set_scene' and $command['params'][0] == 'color' and preg_match('/^[0-9a-fA-F]{6}$/', $command['params'][1]))
{
$command['params'][1] = hexdec($command['params'][1]);
}
// On ajoute les guillemets pour les chaines de caractères (pour la commande json)
// Si le paramètre contient autre chose que des chiffres, on ajoute les guillemets
foreach ($command['params'] as $key => &$param)
{
if (!preg_match('/^\d*$/', $param))
{
$command['params'][$key] = '"'.$param.'"';
}
}
$command_id = rand();
$method = $command['method'];
$params = implode(',',$command['params']);
// Commande pour récupérer les propriété de la lampe (json)
$json = '{"id":'.$command_id.',"method":"'.$method.'","params":['.$params.']}';
// Envoi de la commande
socket_write($sock, $json."\r\n");
// Lecture de la réponse
while ($response = sdk_json_decode(socket_read( $sock, 4096 )) and !isset($response['error']) and !isset($response['result'])) {}
// Affichage des résultats pour le polling
if ($method == 'get_prop' and isset($response['result']))
{
foreach ($properties as $key => $property)
{
$xml .= '<'.$property.'>'.$response['result'][$key].'</'.$property.'>';
}
}
// Affichage de la réponse après l'envoi d'une commande
else if (isset($response['result']) and $response['result'][0] == 'ok')
{
// Affichage de la réponse
$xml .= '<command id="'.$command_id.'">';
$xml .= '<method>'.$method.'</method>';
$xml .= '<params>'.$params.'</params>';
$xml .= '<result>ok</result>';
$xml .= '</command>';
}
// Affichage du code et message d'erreur
else if (isset($response['error']))
{
$xml .= '<command id="'.$command_id.'">';
$xml .= '<method>'.$method.'</method>';
$xml .= '<params>'.$params.'</params>';
$xml .= '<error>';
$xml .= '<code>'.$response['error']['code'].'</code>';
$xml .= '<message>'.$response['error']['message'].'</message>';
$xml .= '</error>';
$xml .= '</command>';
}
// Affichage d'une erreur en cas de non réponse
else
{
$xml .= '<error>Une erreur est survenue</error>';
}
}
$xml .= '</yeelight>';
// Envoi du header
sdk_header('text/xml');
// On écrit le XML
echo $xml;
?>
http://localhost/script/?exec=yeelight.php&ip=[VAR1]&method=set_scene¶ms=ct|2700|10
http://localhost/script/?exec=yeelight.php&ip=[VAR1]&method=set_scene¶ms=color|FF0000|50
http://localhost/script/?exec=yeelight.php&ip=[VAR1]&method=set_scene¶ms=ct|2700|10
http://localhost/script/?exec=yeelight.php&ip=[VAR1]&method1=set_power¶ms1=on|smooth|500&method2=set_ct_abx¶ms2=2700|smooth|500&method3=set_bright¶ms3=10|smooth|500
http://localhost/script/?exec=yeelight.php&ip=[VAR1]&method=set_scene¶ms=nightlight|10
http://localhost/script/?exec=yeelight.php&ip=[VAR1]&method=set_power¶ms=on|smooth|500|5
Retour vers Scripts & Périphériques du store
Utilisateurs parcourant ce forum : Google [Bot] et 15 invité(s)