Aller au contenu

Messages recommandés

  • 4 semaines après...
Posté(e) (modifié)

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
  • 3 mois après...
Posté(e)

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
  • 1 mois après...
Posté(e)
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

  • 3 semaines après...
Posté(e) (modifié)

Salut @ADN182,

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

Merci =)

Modifié par OJC
Posté(e)

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
Posté(e)

@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

Posté(e)

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
Posté(e)

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
Posté(e)

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 ?

Posté(e) (modifié)

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
Posté(e)

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.

×
×
  • Créer...