<?
// Adresse IP de la lampe
$ip = 'xxx.xxx.xxx.xxx';
// 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
);
// Création du socket
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Connexion à la lampe
socket_connect($sock, $ip, '55443');
// Commande pour récupérer les propriété de la lampe (json)
$command = '{"id":'.rand().',"method":"get_prop","params":["'.implode('","',$properties).'"]}';
// Envoi de la commande
socket_write($sock, $command."\r\n");
// Lecture de la réponse
$data = socket_read( $sock, 4096 );
// Décodage de la réponse json
$response = sdk_json_decode($data);
// On génère le XML
$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$xml .= '<yeelight>';
// Affichage du code et message d'erreur
if (isset($response['error']))
{
$xml .= '<error>';
$xml .= '<code>'.$response['error']['code'].'</code>';
$xml .= '<message>'.$response['error']['message'].'</message>';
$xml .= '</error>';
}
// Affichage des résultats
if (isset($response['result']))
{
$xml .= '<result>';
foreach ($properties as $key => $property)
{
$xml .= '<'.$property.'>'.$response['result'][$key].'</'.$property.'>';
}
$xml .= '</result>';
}
$xml .= '</yeelight>';
// Envoi du header
sdk_header('text/xml');
// On écrit le XML
echo $xml;
?>
<?
// Récupération des arguments
$ip = getArg('ip');
$method = getArg('method', false);
$params = getArg('params', false);
// 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($method))
{
$method = 'get_prop';
$params = $properties;
}
else
{
$params = explode('|', $params);
}
// Création du socket
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Connexion à la lampe
socket_connect($sock, $ip, '55443');
// 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 ($params as $key => $param)
{
if (!preg_match('/^\d*$/', $param))
{
$params[$key] = '"'.$param.'"';
}
}
// Commande pour récupérer les propriété de la lampe (json)
$command = '{"id":'.rand().',"method":"'.$method.'","params":['.implode(',',$params).']}';
// Envoi de la commande
socket_write($sock, $command."\r\n");
// Lecture de la réponse
$data = socket_read( $sock, 4096 );
// Décodage de la réponse json
$response = sdk_json_decode($data);
// On génère le XML
$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$xml .= '<yeelight>';
// Affichage des résultats pour la 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')
{
$xml .= '<result>ok</result>';
}
// Affichage du code et message d'erreur
else if (isset($response['error']))
{
$xml .= '<error>';
$xml .= '<code>'.$response['error']['code'].'</code>';
$xml .= '<message>'.$response['error']['message'].'</message>';
$xml .= '</error>';
}
// 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://IP_BOX_EEDOMUS/script/?exec=yeelight.php&ip=IP_YEELIGHT
http://IP_BOX_EEDOMUS/script/?exec=yeelight.php&ip=IP_YEELIGHT&method=set_power¶ms=on
http://IP_BOX_EEDOMUS/script/?exec=yeelight.php&ip=IP_YEELIGHT&method=set_power¶ms=off|smooth|500
http://IP_BOX_EEDOMUS/script/?exec=yeelight.php&ip=IP_YEELIGHT&method=set_bright¶ms=50|smooth|500
fullpower a écrit:Bah pour moi le + gros du taf est fait...
Un capteur http avec les différentes commandes et autant de valeurs qu'on le souhaite pour nos lampes et roule !!
P@t a écrit:Par curiosité, j'ai commandé une yeelight... Je ferai un vrai plugin quand je la recevrai.
misterden a écrit:Ah si je trouvais une ame charitable chez les " programmeurs " pour faire la même chose avec les HP connectés DENON HEOS
merguez07 a écrit:tu as pris laquelle ?
fullpower a écrit:-> je lui ai donné l'adresse dynamique de ma lampe avec l'ouverture du port NAT/PAT sur ma livebox.
Mais je ne sais pas si ça lui a été utile finalement...
Retour vers Scripts & Périphériques du store
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 45 invité(s)