Forum eedomus
http://forum.eedomus.fr/

[SCRIPT] Intégration YEELIGHT/XIAOMI
http://forum.eedomus.fr/viewtopic.php?f=50&t=7066
Page 1 sur 5  Suivant »
Auteur:  fullpower [ 23 Mai 2018 20:21 ]
Sujet du message:  [SCRIPT] Intégration YEELIGHT/XIAOMI

Aux bonne âmes de parvenir à nous faire un script ..même le + basique (ON/OFF) suffirait déjà ...
Merci mille fois d'avance !
;)
Auteur:  P@t [ 23 Mai 2018 20:57 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

Alors pour t'aider, j'aurai besoin d'accéder à une de tes lampe. Je pense que le plus simple serait de rediriger le port 55443 de ta box internet vers le même port à l'adresse IP de ta lampe... puis de me donner en message privé ton adresse IP publique.
Est-ce que tu sais faire?
Si non, quel est le modèle de ta box internet?
Auteur:  fullpower [ 23 Mai 2018 21:15 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

Pas de pb, MP envoyé, le port est ouvert ... :D
Auteur:  P@t [ 23 Mai 2018 23:39 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

Je viens de jeter un oeil, et en effet, c'est plutôt très simple à faire.
D'ailleurs, la documentation des yeelight est vraiment extrêmement clair, ce qui n'est pas souvent le cas pour d'autres périphériques.

Voici déjà un petit bout de code que tu peux copier dans un script sur ta box eedomus. Il suffit juste de mettre l'adresse IP locale de ta lampe à la place des xxx.xxx.xxx.xxx (mais en gardant les guillemets!).
Sauvegarde le script puis clique sur exécuter: tu devrais avoir un xml avec l'ensemble des paramètres de la lampe.

Code : Tout sélectionner
<?

// 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;

?>


Pour les commandes, c'est également très simple... si tu veux, ca ne me prendrais pas beaucoup de temps de créer un plugin sur le store... mais j'ai besoin de savoir de quels périphériques les gens auraient besoin (en plus du périphérique de base qui serait un dimmer de 0 à 100).
Bon, me demandez pas non plus 15 périphériques...

PS: j'ai essayé de commenter au maximum le code, afin que chacun puisse comprendre le principe...
Auteur:  merguez07 [ 24 Mai 2018 06:46 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

ouahou, tu maitrises dis donc.

perso je découvre l'histoire des sockets et c'est sympa d'expliquer le code comme tu le fais. Puis je m'en servir pour étoffer mon didacticiel ?

j'ai commandé une yeelight pour faire aussi des essais mais avec ton aide je crois que le plugin est à notre portée. :P :P
Auteur:  fullpower [ 24 Mai 2018 07:03 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

@pat : Outch ! quelle productivité !! :shock:
Alors j'ai mis le script sur ma Eedomus, juste eu le temps de faire un "executer" rapide ..mais bon le matin chez moi c'est Verdun, entre les nabots qui courent partout, le cabot qui fait des siennes etc... pfffffffffffffffiou ! bon du coup j'ai juste eu le temps de voir que j'avais juste "Yeelight" d'écrit en mauve après l’exécution de la requête (sous google chrome)... :?
Dans tous les cas les ordres ont été donnés afin que personne ne touche ce %*$&# d'interrupteur pour la lampe ... :mrgreen:
Merci p@t pour le job !

EDIT : j'ai ça à l’exécution du script :

<?xml version="1.0" encoding="ISO-8859-1"?>
<yeelight>
<result>
<power>off</power>
<bright>100</bright>
<ct>5232</ct>
<rgb>1315890</rgb>
<hue>0</hue>
<sat>100</sat>
<color_mode>2</color_mode>
<flowing>0</flowing>
<delayoff>0</delayoff>
<flow_params/>
<music_on>0</music_on>
<name/>
<bg_power/>
<bg_flowing/>
<bg_flow_params/>
<bg_ct/>
<bg_lmode/>
<bg_bright/>
<bg_rgb/>
<bg_hue/>
<nl_br/>
</result>
</yeelight>

Sinon oui quand c'est allumé et sur une couleur "violet" j'ai bien les infos qui remontent ... :D

<?xml version="1.0" encoding="ISO-8859-1"?>
<yeelight>
<result>
<power>on</power>
<bright>100</bright>
<ct>5232</ct>
<rgb>9240831</rgb>
<hue>0</hue>
<sat>100</sat>
<color_mode>1</color_mode>
<flowing>0</flowing>
<delayoff>0</delayoff>
<flow_params/>
<music_on>0</music_on>
<name/>
<bg_power/>
<bg_flowing/>
<bg_flow_params/>
<bg_ct/>
<bg_lmode/>
<bg_bright/>
<bg_rgb/>
<bg_hue/>
<nl_br/>
</result>
</yeelight>
Auteur:  anne-marie [ 24 Mai 2018 07:52 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

Mais c'est super ! Vraiment très sympa de ta part :P Je vais tester ça ce WE
En plus du dimer, ce serait bien d'aboir le blanc froid et le mode lune ainsi que quelques couleurs de base.
Ca marcherait aussi avec le plafonnier?
Auteur:  fullpower [ 24 Mai 2018 17:40 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

@ anne-marie :

le script me remonte bien aussi les infos sur mes plafonniers :

<?xml version="1.0" encoding="ISO-8859-1"?>
<yeelight>
<result>
<power>on</power>
<bright>10</bright>
<ct>2700</ct>
<rgb/>
<hue/>
<sat/>
<color_mode>2</color_mode>
<flowing>0</flowing>
<delayoff>0</delayoff>
<flow_params/>
<music_on/>
<name/>
<bg_power/>
<bg_flowing/>
<bg_flow_params/>
<bg_ct/>
<bg_lmode/>
<bg_bright/>
<bg_rgb/>
<bg_hue/>
<nl_br>0</nl_br>
</result>
</yeelight>

...c'est la même API ..
:D
Auteur:  P@t [ 24 Mai 2018 17:49 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

Voici une nouvelle version du script, qui permet d'envoyer les commandes:

Code : Tout sélectionner
<?

// 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;

?>


Quelques exemples de commandes:

Récupération des données
Code : Tout sélectionner
http://IP_BOX_EEDOMUS/script/?exec=yeelight.php&ip=IP_YEELIGHT


Allumage de la lampe:
Code : Tout sélectionner
http://IP_BOX_EEDOMUS/script/?exec=yeelight.php&ip=IP_YEELIGHT&method=set_power&params=on


Extinction de la lampe avec un fade de 500ms:
Code : Tout sélectionner
http://IP_BOX_EEDOMUS/script/?exec=yeelight.php&ip=IP_YEELIGHT&method=set_power&params=off|smooth|500


Réglage de la luminosité:
Code : Tout sélectionner
http://IP_BOX_EEDOMUS/script/?exec=yeelight.php&ip=IP_YEELIGHT&method=set_bright&params=50|smooth|500


Pour le changement de couleur, il faudra que je fasse une petite modif dans le script afin de pouvoir mettre une valeur hexadécimale de type #FFFFFF.

Pour le reste des commandes, je vous invite à consulter la documentation officielle:
https://www.yeelight.com/download/Yeeli ... n_Spec.pdf
Toutes les commandes sont censées fonctionner!
Auteur:  fullpower [ 24 Mai 2018 17:52 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

Je teste ça illico !!
:clap:

Ca fonctionne !!! C'est génial !!
Punaise c'est excellent !! j'en révais...tu l'as fait !!!
Youpiiiii !

Avec tout ça, ça devient un régal de faire des baisses de luminosité en douceur ...et tellement pleins d'autres trucs !!

Ca fonctionne pour toutes les Yeelight (RGB, plafonniers etc..)

MERCI p@t !!
Auteur:  john56 [ 24 Mai 2018 18:20 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

ahhhh pas de plugin en vue ? :o
Auteur:  fullpower [ 24 Mai 2018 18:29 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

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 !!
:mrgreen:
Auteur:  merguez07 [ 24 Mai 2018 18:34 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

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 !!


donc tu nous prépares un plugin :D
Auteur:  misterden [ 24 Mai 2018 18:36 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

Ah si je trouvais une ame charitable chez les " programmeurs " pour faire la même chose avec les HP connectés DENON HEOS .... :oops:
Auteur:  P@t [ 24 Mai 2018 19:02 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

Par curiosité, j'ai commandé une yeelight... Je ferai un vrai plugin quand je la recevrai.
Auteur:  merguez07 [ 24 Mai 2018 19:33 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

P@t a écrit:Par curiosité, j'ai commandé une yeelight... Je ferai un vrai plugin quand je la recevrai.


tu as pris laquelle ?
Auteur:  fullpower [ 24 Mai 2018 19:53 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

Bon..j'ai encore du mal meme en lisant la doc pour faire un :
allume + blanc chaud + luminosité à 20%
(histoire de ne pas en prendre plein les mirettes la nuit)

Ca me fait des enchaînement de fou ..sans trop vouloir bien le faire ... :mrgreen:

Ceci dit un simple ON/OFF déjà..c'est super, on peut le coupler à un detecteur de mvt et voilà un allumage de nuit opérationnel !

J'ai pas capté non plus si on pouvait simplement appeler un des modes pré-programmés justement (ce qui serait + simple)
Auteur:  merguez07 [ 24 Mai 2018 20:05 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

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


J'ai regardé et c'est un peu le même principe que les yeelight pour le pilotage. Donc ce doit être possible de faire un plugin. Par contre j'ai pas ce type d'enceinte. Je ne sais pas comment @pat à fait pour faire un script sans avoir le matos à disposition. y a t-il une astuce pour piloter le matos à distance ?
Auteur:  fullpower [ 25 Mai 2018 07:32 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

-> 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...
Auteur:  P@t [ 25 Mai 2018 08:32 ]
Sujet du message:  Re: [SCRIPT] Intégration YEELIGHT/XIAOMI

merguez07 a écrit:tu as pris laquelle ?

Celle là: https://www.gearbest.com/smart-lighting/pp_1664464.html
Avec le code promo FR18521001

Sinon, aucun soucis pour utiliser mon code dans ton tuto, c'est avec plaisir.

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...

Oui oui, je m'en suis servi!
Page 1 sur 5 Le fuseau horaire est UTC+1 heure