Yeelight GU10 W1 Wifi : Erreur Bulb closed the connection

Bonjour,

Je viens d’acheter des Xiaomi GU10 W1 en Wifi (2 ampoules). Et elle ne s’intègre pas très bien dans Xiaomi Home, elles ont été correctement détectées, mais les contrôles sont très aléatoires et j’ai régulièrement des erreurs qui remontent dans les logs


[2023-02-03 17:34:35]DEBUG : execute : action yeelight off
[2023-02-03 17:34:36]DEBUG : execute : action yeelight off
[2023-02-03 17:34:36]DEBUG : Envoi : {"apikey":"4nhGyPVkwQQC97e8cG7FVI2bKtgjDT20","type":"yeelight","cmd":"send","dest":"192.168.1.206","model":"colorc","sid":"0x000000001b3d9121","short_id":"16","command":"turn off","option":"","id":"192.168.1.206","sup":""}
[2023-02-03 17:34:42.012]ERROR : SOCKET-READ------Exception on socket : Bulb closed the connection.
[2023-02-03 17:34:45]DEBUG : Equipement Yeelight déconnecté : colorc 0x000000001b3d7653
[2023-02-03 17:35:04]DEBUG : Rafraîchissement de Yeelight : colorc 0x000000001b3d7653
[2023-02-03 17:35:04]DEBUG : Envoi : {"apikey":"4nhGyPVkwQQC97e8cG7FVI2bKtgjDT20","type":"yeelight","cmd":"refresh","model":"colorc","dest":"192.168.1.183","token":"","devtype":"16","serial":"0x000000001b3d7653","id":"192.168.1.183"}
[2023-02-03 17:35:10.304]ERROR : SOCKET-READ------Exception on socket : Bulb closed the connection.
Jeedom Core : 4.3.14
DNS Jeedom : non
Version Plugn : 2022-06-06 01:02:25

Les Ampoules fonctionnent correctement via l’application Yeelight.

N’hesitez pas si vous avez besoin d’information ou de test supplémentaire.

J’ai fait quelque test avec la librairy python yeelight :

  04/02/2023   14:11.55   /home/mobaxterm  python3
Python 3.6.8 (default, Feb 15 2019, 01:54:23)
[GCC 7.4.0] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from yeelight import discover_bulbs
>>> discover_bulbs()
[{'ip': '192.168.1.53', 'port': 55443, 'capabilities': {'id': '0x00000000036ee3e1', 'model': 'color', 'fw_ver': '76', 'support': 'get_prop set_default set_power toggle set_bright start_cf stop_cf set_scene cron_add cron_get cron_del set_ct_abx set_rgb set_hsv set_adjust adjust_bright adjust_ct adjust_color set_music set_name', 'power': 'off', 'bright': '60', 'color_mode': '2', 'ct': '5000', 'rgb': '16711680', 'hue': '0', 'sat': '100', 'name': ''}}, {'ip': '192.168.1.183', 'port': 55443, 'capabilities': {'id': '0x000000001b3d7653', 'model': 'colorc', 'fw_ver': '16', 'support': 'get_prop set_default set_power toggle set_bright set_scene cron_add cron_get cron_del start_cf stop_cf set_ct_abx adjust_ct set_name set_adjust adjust_bright adjust_color set_rgb set_hsv set_music udp_sess_new udp_sess_keep_alive udp_chroma_sess_new', 'power': 'on', 'bright': '100', 'color_mode': '2', 'ct': '4432', 'rgb': '16760429', 'hue': '33', 'sat': '57', 'name': ''}}, {'ip': '192.168.1.56', 'port': 55443, 'capabilities': {'id': '0x0000000012aa4dd4', 'model': 'color', 'fw_ver': '76', 'support': 'get_prop set_default set_power toggle set_bright start_cf stop_cf set_scene cron_add cron_get cron_del set_ct_abx set_rgb set_hsv set_adjust adjust_bright adjust_ct adjust_color set_music set_name', 'power': 'off', 'bright': '60', 'color_mode': '2', 'ct': '5000', 'rgb': '16713999', 'hue': '359', 'sat': '96', 'name': ''}}, {'ip': '192.168.1.55', 'port': 55443, 'capabilities': {'id': '0x0000000012ac5324', 'model': 'stripe', 'fw_ver': '73', 'support': 'get_prop set_default set_power toggle set_bright start_cf stop_cf set_scene cron_add cron_get cron_del set_ct_abx set_rgb set_hsv set_adjust adjust_bright adjust_ct adjust_color set_music set_name', 'power': 'off', 'bright': '100', 'color_mode': '1', 'ct': '4000', 'rgb': '13434879', 'hue': '180', 'sat': '20', 'name': ''}}, {'ip': '192.168.1.52', 'port': 55443, 'capabilities': {'id': '0x000000000361a7f9', 'model': 'stripe', 'fw_ver': '50', 'support': 'get_prop set_default set_power toggle set_bright start_cf stop_cf set_scene cron_add cron_get cron_del set_ct_abx set_rgb set_hsv set_adjust adjust_bright adjust_ct adjust_color set_music set_name', 'power': 'off', 'bright': '100', 'color_mode': '2', 'ct': '4000', 'rgb': '16711680', 'hue': '0', 'sat': '100', 'name': ''}}, {'ip': '192.168.1.206', 'port': 55443, 'capabilities': {'id': '0x000000001b3d9121', 'model': 'colorc', 'fw_ver': '16', 'support': 'get_prop set_default set_power toggle set_bright set_scene cron_add cron_get cron_del start_cf stop_cf set_ct_abx adjust_ct set_name set_adjust adjust_bright adjust_color set_rgb set_hsv set_music udp_sess_new udp_sess_keep_alive udp_chroma_sess_new', 'power': 'on', 'bright': '40', 'color_mode': '2', 'ct': '4432', 'rgb': '16760429', 'hue': '33', 'sat': '57', 'name': ''}}, {'ip': '192.168.1.54', 'port': 55443, 'capabilities': {'id': '0x00000000036ef9b0', 'model': 'color', 'fw_ver': '76', 'support': 'get_prop set_default set_power toggle set_bright start_cf stop_cf set_scene cron_add cron_get cron_del set_ct_abx set_rgb set_hsv set_adjust adjust_bright adjust_ct adjust_color set_music set_name', 'power': 'off', 'bright': '50', 'color_mode': '2', 'ct': '6500', 'rgb': '16711680', 'hue': '359', 'sat': '100', 'name': ''}}, {'ip': '192.168.1.51', 'port': 55443, 'capabilities': {'id': '0x000000000361a982', 'model': 'stripe', 'fw_ver': '50', 'support': 'get_prop set_default set_power toggle set_bright start_cf stop_cf set_scene cron_add cron_get cron_del set_ct_abx set_rgb set_hsv set_adjust adjust_bright adjust_ct adjust_color set_music set_name', 'power': 'off', 'bright': '100', 'color_mode': '2', 'ct': '4000', 'rgb': '16711680', 'hue': '0', 'sat': '100', 'name': ''}}]
>>> from yeelight import Bulb
>>> bulb = Bulb("192.168.1.206");
>>> bulb.turn_off()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<decorator-gen-8>", line 2, in turn_off
  File "/usr/lib/python3.6/site-packages/yeelight/main.py", line 114, in _command
    result = self.send_command(method, params).get("result", [])
  File "/usr/lib/python3.6/site-packages/yeelight/main.py", line 441, in send_command
    raise BulbException(response["error"])
yeelight.main.BulbException: Bulb closed the connection.
>>> bulb.turn_on()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<decorator-gen-7>", line 2, in turn_on
  File "/usr/lib/python3.6/site-packages/yeelight/main.py", line 114, in _command
    result = self.send_command(method, params).get("result", [])
  File "/usr/lib/python3.6/site-packages/yeelight/main.py", line 441, in send_command
    raise BulbException(response["error"])
yeelight.main.BulbException: Bulb closed the connection.
>>> bulb2 = Bulb("192.168.1.183");
>>> bulb2.turn_off()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<decorator-gen-8>", line 2, in turn_off
  File "/usr/lib/python3.6/site-packages/yeelight/main.py", line 114, in _command
    result = self.send_command(method, params).get("result", [])
  File "/usr/lib/python3.6/site-packages/yeelight/main.py", line 441, in send_command
    raise BulbException(response["error"])
yeelight.main.BulbException: Bulb closed the connection.
>>> bulb3 = Bulb("192.168.1.53");
>>> bulb3.turn_off()
'ok'
>>> bulb3.turn_on()
'ok'
>>>

J’ai plusieurs versions de yeelight et il n’y a que le modèle 'colorc" qui cause une erreur dans le retour. (de plus, les actions sont exécutées, mais au bout de un à deux secondes.)

Je ne sais pas si l’application s’appuie sur ce genre de librairie, mais en tout cas, on voit que le fonctionnement de ces ampoules est différent

Edit : Après update de la lib python de 0.5.0 à 0.7.10, les lampe fonctionne correctement en python
et après vérification, c’est bien la version installée sur mon Jeedom

Cette issue à l’air en rapport : "Bulb closed the connection" for yeelight screen bar light (#61) · Issues · Stavros Korokithakis / python-yeelight · GitLab
Cela permettra peut être d’apporter une solution.

Aucune solution disponible ?

Je n’ai pas envie de notifier le développeur, je vais me faire taper sur les doigts :smiley:

Salut Lutty,

As tu résolu ton problème je m’intéresse à ces Yeelight aussi.

Pas vraiment, j’ai l’impression que même la lib python « Yeelight » à des soucis avec ces ampoules…

Niveau plugin Xiaomi, ça fonctionne une fois sur 10 donc pas réellement utilisable…

J’ai essayé de m’appuyer sur la lib Yeelight python via des scripts comme :

TurnOnYeelight.sh :

#!/bin/bash
python3 -c "from yeelight import Bulb;print(Bulb('$1').$2($3));quit();";

et

YeelightSetRGB.sh :

#!/bin/bash
hex="$3"
python3 -c "from yeelight import Bulb;print(Bulb('$1').$2($(printf "%d,%d,%d" 0x${hex:1:2} 0x${hex:3:2} 0x${hex:5:2})));"

Cela fonctionne 9 fois sur 10 ce qui est mieux, cependant parfois la commande python ne se termine jamais et je me retrouve avec des processus python qui tourne en boucle et sature mon CPU :

jeedom@jeedom:~$ ps -aux | grep yeelight
www-data  3123  0.0  0.1  23904 16612 ?        S    17:33   0:00 python3 -c from yeelight import Bulb;print(Bulb('192.168.1.57').set_color_temp(5000));quit();
www-data  3126  0.0  0.1  23904 16568 ?        S    17:33   0:00 python3 -c from yeelight import Bulb;print(Bulb('192.168.1.57').set_brightness(13));quit();
www-data  3130  0.0  0.1  23904 16684 ?        S    17:33   0:00 python3 -c from yeelight import Bulb;print(Bulb('192.168.1.58').set_brightness(13));quit();
www-data  3151  0.0  0.0  14968  8132 ?        R    17:33   0:00 python3 -c from yeelight import Bulb;print(Bulb('192.168.1.58').get_properties(["bright"]).get('bright'));quit();

Bien que je ne sois pas un expert du langage Python, ça me parait anormal que les process ne se termine jamais. (j’ai même forcé avec un quit(); qui en théorie est inutile, mais ça ne s’améliore pas)

À l’heure actuelle ma seule solution pour les utiliser sans exploser mon CPU c’est d’avoir ça en crontab :

0 * * * *  /usr/bin/pkill -9 -f yeelight

J’ai réussi a fixé les problemes de commande zombie en definissant un délai avant d’actualiser les infos suite à une action (en secondes) de 2 secondes.

Merci de ton retour Lutty.

J’ai commandé une ampoule pour faire mes tests.

1 « J'aime »