Aller au contenu
gregmmat

Ampoule yeelight xiaomi

Recommended Posts

Bonjour  à tous je viens de recevoir  mon ampoule yeelight xiaomi buld color mais je n'arrive pas a l'intégrer a ma HC2 pour etre franc je pige rien au api fourni par  yeelight  https://www.yeelight.com/download/Yeelight_Inter-Operation_Spec.pdf

Modifié par gregmmat

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello,

 

J'essaye de faire actuellement un VD. J'arrive à dialoguer avec le Yeelight (on/off lunminosité, couleur).

 

Il me reste à savoir de qu'elle manière récupérer les informations de l'ampoule pour mettre à jours le VD dynamiquement.

 

@Krikroff j'aurais besoin de ton avis sur ce sujet. En fait la Yeelight communique en TCP sur un port spécifique 55443 une fois la connexion initialisé si une information vient à changé (via l'applic Xiaomi ou autre) la Yeelight communique l'infos à toutes les client connecté avec elle sur ce port. du coup on récupère l'infos de changement en "temps réél".

 

En sachant cela selon toi. Comment tu procéderais pour la récupération du retour d'infos (on peut également collecter l'infos via une requeêtes TCP qui retourne l'ensemble des caractéristique de la lampes) ? J'ai tenté dans la main loop du VD alors ça fonctionne mais lorsque l'on coupe la Yeelight la connexion TCP est perdu et je ne sais pas comment détecter lorsque je perd celle-ci et en recréer une par la suite.

 

 

Ci-dessous le code de la Main Loop :

-- Recup de l id du module 
local selfID = fibaro:getSelfId();
local ip = fibaro:get(selfID, 'IPAddress')
local port = fibaro:get(selfID, 'TCPPort')
local Name = tostring(fibaro:getName(selfID));

-- Fonction de simplification to set label Device
function setDevicePropertyValue(id, label, value)
  fibaro:call(id, "setProperty", "ui."..label..".value", value);
end

-- Initialisation du Socket TCP
if (tcpSocket == nil) then
	tcpSocket = Net.FTcpSocket(ip, tonumber(port))
  	--tcpSocket:setReadTimeout(1000);
  	fibaro:debug("Creation de la connexion avec "..Name);
end
  	
state = tcpSocket:read() or string.char();

fibaro:debug(state);

if (state ~= "") then
  State_decoded = json.decode(state); 
  -- Gestion de l état
      if State_decoded.params.power then 
              fibaro:debug("Change state to "..State_decoded.params.power)
              setDevicePropertyValue(selfID, "state", State_decoded.params.power);
      end
  
  -- Gestion de la Luminosité
       if State_decoded.params.bright then 
          fibaro:debug("Change brightness to "..State_decoded.params.bright)
          setDevicePropertyValue(selfID, "brightness", State_decoded.params.bright);
      end
else
  fibaro:debug("Connexion Impossible")
  fibaro:sleep(10000)
  tcpSocket:disconnect();
  tcpSocket=nil;
end

Avec ce code une fois la connexion perdu, il ne détecte pas la coupure et il ne se reconnecte pas si on allume à nouveau (électriquemennt) la Yeeight il faut relancé le VD pour cela.

 

Merci d'avance de ton aide ;)

Modifié par ADN182
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Mercî ADN pour ce partage.

As-tu finalement trouvé une solution à ton problème de code ?

On va quand même pas se laisser bouffer par la communauté jeedom :-)

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour info, l'ampoule est parfaitement fonctionnelle avec Homebridge.

 

Partager ce message


Lien à poster
Partager sur d’autres sites
Mercî ADN pour ce partage.
As-tu finalement trouvé une solution à ton problème de code ?
On va quand même pas se laisser bouffer par la communauté jeedom :-)
Hello@Alek6, désolé j'ai oublié de te répondre, j'ai arrêté de développer le VD yeelight car j'ai désinstallé les ampoules. Je trouve compliqué de gérer ce type d'ampoule avec la HC2, ça n'apparait pas comme un périphérique de type Lumière. Quoi qu'il en soit je peux te fournir le VD que j'avais commencé si ça te dit ?

Envoyé de mon Nexus 5X en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut @ADN182,

Je suis intéressé par ton VD pour 'jouer' avec une Yeelight Bedside.

Merci =)

Modifié par OJC

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello OJC,

 

Voici, rien d'exceptionnel, mais je pense que tu as le code "géneric" qui te permettra de créer d'autres boutons en fonction de l'api.

 

Yeelight.vfib

 

Il faut que tu renseigne l'Adresse IP dans le VD, il y a un bouton actualisation pour mettre à jour les données de la Lampes (On, Off) il faudrait pouvoir l'activer en continu si la lampe est alimenté dans la Main loop. 

 

En reprenant le code du bouton "on" et changeant les params du bouton en t'appuyant sur l'API tu devrais pouvoir ajouter des boutons facilement.

local method = "set_power"
local Action = "on"

 

5a46193671332_APIYeelight.png.9d30ab2885804d52891d3cbc17ea9028.png

 

Yeelight_Inter-Operation_Spec.pdf

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@OJC, je viens de relire ton commentaire, la Yeelight Bedside est commandable iniquement en Bluetooth :( du coup le VD ne pourra pas te servir dans ce cas.

 

Le seul moyen que je connaisse de controller la Bedside est avec Jeedom et le Plugin BLEA de @sarakha63

Partager ce message


Lien à poster
Partager sur d’autres sites

:o Ah ben je ne savais pas qu'il l'avait fais en wifi , mince ça fait longtemps ? si j'avais su j'aurais attendu :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne sais pas depuis combien de temps, les miennes sont arrivées de Chine juste avant Noël, commandées début décembre sur Gearbest.

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Nickel comme base de départ, ce VD :60:

 

Pour ceux que ça intéresse, voici ma solution pour avoir une mise à jour en continu sans passer par le Main Loop qui impose un délai de trois secondes. Code du bouton Actualisation :

 

function RefreshLoop()

-- Recup de l id du module 
local selfID = fibaro:getSelfId();
local ip = fibaro:get(selfID, 'IPAddress')
local port = fibaro:get(selfID, 'TCPPort')
local Name = tostring(fibaro:getName(selfID));

-- Fonction de simplification to set label Device
function setDevicePropertyValue(id, label, value)
  fibaro:call(id, "setProperty", "ui."..label..".value", value);
end

-- Initialisation du Socket TCP
if (tcpSocket == nil) then
	tcpSocket = Net.FTcpSocket(ip, tonumber(port))
  	--tcpSocket:setReadTimeout(1000);
  	fibaro:debug("Creation de la connexion avec "..Name);
end
  	
state, err = tcpSocket:read() or string.char();

fibaro:debug("test");
fibaro:debug(state);

if (state ~= "") then
  State_decoded = json.decode(state); 
  -- Gestion de l'état
      if State_decoded.params.power then 
              fibaro:debug("Change state to "..State_decoded.params.power)
              setDevicePropertyValue(selfID, "state", State_decoded.params.power);
      end
  
  -- Gestion de la Luminosité
       if State_decoded.params.bright then 
          fibaro:debug("Change brightness to "..State_decoded.params.bright)
          setDevicePropertyValue(selfID, "brightness", State_decoded.params.bright);
      end
else
  fibaro:debug("Connexion Impossible")
  fibaro:sleep(10000)
  tcpSocket:disconnect();
  tcpSocket=nil;
end

RefreshLoop()

end

RefreshLoop()

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut @ADN182 et bonne année :)
 

Le 28/06/2017 à 15:25, ADN182 a dit :

J'ai tenté dans la main loop du VD alors ça fonctionne mais lorsque l'on coupe la Yeelight la connexion TCP est perdu et je ne sais pas comment détecter lorsque je perd celle-ci et en recréer une par la suite.

Quand tu parles de couper, cela veut dire débrancher ou éteindre ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut @OJC bonne année à toi ;)

 

Oui quand je dis couper, c'est "débranché". Plus au sens tu coupe le courant via interrupteur du lustre suspendu. j'ai que des Yeelight douille E27, du coup l'ampoule est privé de courant et ne fonctionne plus forcement.

 

Dans ton cas la lampe de chevet et continuellement branché.

Modifié par ADN182

Partager ce message


Lien à poster
Partager sur d’autres sites

ok, merci pour la précision. Je n'ai pas encore eu le pb du coup avec des lampes de chevet.

Je pense que je vais coupler avec le Network Monitor de @Lazer pour vérifier la connexion au réseau wifi :15: et relancer le socket en cas de besoin.

Partager ce message


Lien à poster
Partager sur d’autres sites

×