Умный дом в котором я живу. Лампы  Xiaomi или дело  об исчезнувшем Lan control

Привет, я  давненько не писал про умный дом.  Причина - я  решаю  задачки, которые не интересны  большинству (биодинамическое освещение, оптимизация работы  вентиляции и кондиционирования).

Но  тут  без объявления  войны  yeelight  отрубил  в последней  прошивке ( v2.0.6_0041)  lan  control  у моей настольной  лампы Xiaomi Mi Smart LED Desk Lamp Pro.


Соответственно пропало управление  лампой через Home Assistant.

Сделано  это разумеется "для  безопасности  пользователей и по  настоятельной  просьбе Xiaomi"
Саппорт на форуме пишет, что выпустил версию прошивки, которая решает проблему для написавших им  в личку пользователей, но этот квест я не прошел.

Умный дом в котором я живу. Лампы  Xiaomi или дело  об исчезнувшем Lan control Умный дом, Home Assistant, Xiaomi, Длиннопост

Судя  по отзывам  в интернете это  же касается Yeelight Bedside Lamp 2

Умный дом в котором я живу. Лампы  Xiaomi или дело  об исчезнувшем Lan control Умный дом, Home Assistant, Xiaomi, Длиннопост

Если у вас все работает и  вы используете  локальное  управление  -  решение  простое.

Отрубаем  доступ  в интернет  лампам (приведет  к потере контроля лампочек в Yeelight и Mihome)
Отрубить  лампочкам доступ в  интернет (я думаю,  это  справедливо  для всех  лампочек Yeelight). Для  этого  надо  знать  айпи  лампочки и  прописать в  файрволе правило,  запрещающее  лампам выход в инетрнрет.
Для  микротика  это выглядит так :

/ip firewall filter add chain=forward src-address=192.168.x.x action=reject

Далее  решение проблемы (проверенs  лично на Xiaomi Mi Smart LED Desk Lamp Pro).

1.  Без потрошения лампочки  и доработки  напильником.
1.1 Сбросить  лампу (кнопка снизу подставки).

Умный дом в котором я живу. Лампы  Xiaomi или дело  об исчезнувшем Lan control Умный дом, Home Assistant, Xiaomi, Длиннопост

1.2 Сопрягаем лампочку заново в yeelight
1.3 В HA  прилетит  сообщение, что  обнаружено устройство  HomeKit  и надо  его сопрячь.

Умный дом в котором я живу. Лампы  Xiaomi или дело  об исчезнувшем Lan control Умный дом, Home Assistant, Xiaomi, Длиннопост

1.4 Теперь по  коду - на подставке  лампы  ищем вот такой штрихкод

Умный дом в котором я живу. Лампы  Xiaomi или дело  об исчезнувшем Lan control Умный дом, Home Assistant, Xiaomi, Длиннопост

1.5 И вводим циферки в формате  xxx-xx-xxxДля  нашего примера  это 123-45-678


Все, лампа  залетела в HA.
Можно  закрыть лампе  доступ в интернеты  во избежание

Вариант 2  (на свой страх и риск и только Xiaomi Mi Smart LED Desk Lamp Pro)

В  лампочке стоит  контроллер ESP32 (фотки сперты с форума Нome-Аssistant)

Умный дом в котором я живу. Лампы  Xiaomi или дело  об исчезнувшем Lan control Умный дом, Home Assistant, Xiaomi, Длиннопост
Умный дом в котором я живу. Лампы  Xiaomi или дело  об исчезнувшем Lan control Умный дом, Home Assistant, Xiaomi, Длиннопост

Соотвественно  цепляем  RXD, TXD и GND к USB-UART контроллеру (в моем случае  классика cp2102)

Проверяем,  что  подпаялись  правильно:

esptool flash_id

Делаем  дамп  прошивки

esptool.py -b 115200 --port /dev/ttyUSB0 read_flash 0x00000 0x400000 lamp_backup_4M.bin


В ESPHome cоздаем проект, в котором  дописываем  в проект  прошивки из репозитория https://github.com/richardklingler/yeelight
(на всякий  случай оставлю копию  здесь)

sensor:
- platform: rotary_encoder
id: rotation
pin_a: GPIO26
pin_b: GPIO27
resolution: 2
on_value:
then:
- if:
condition:
# Провекрка  нажатия  клавиши при вращении
lambda: 'return id(button).state;'
then:
# Корректировка цветовой  температуры
- lambda: |-
auto min_temp = id(light1).get_traits().get_min_mireds();
auto max_temp = id(light1).get_traits().get_max_mireds();
auto cur_temp = id(light1).current_values.get_color_temperature();
auto new_temp = max(min_temp, min(max_temp, cur_temp + (x*20)));
auto call = id(light1).turn_on();
call.set_color_temperature(new_temp);
call.perform();
else:
#  Регулировка яркости
- light.dim_relative:
id: light1
relative_brightness: !lambda |-
return x / 10.0;
# Сброс энкодера
- sensor.rotary_encoder.set_value:
id: rotation
value: 0
binary_sensor:
- platform: gpio
id: button
pin:
number: GPIO33
inverted: True
mode: INPUT_PULLDOWN
on_click:
then:
# Установка полной яркости
- if:
condition:
light.is_on: light1
then:
- light.turn_off:
id: light1
else:
- light.turn_on:
id: light1
brightness: 100%
color_temperature: 2700 K
output:
- platform: ledc
pin: GPIO2
id: output_cw
min_power: 0.03
power_supply: power
- platform: ledc
pin: GPIO4
id: output_ww
min_power: 0.03
power_supply: power
power_supply:
- id: power
pin: GPIO12
enable_time: 0s
keep_on_time: 0s
light:
- platform: cwww
id: light1
default_transition_length: 0s
constant_brightness: true
name: "Xiaomi Mi Smart LED Desk Lamp Pro"
cold_white: output_cw
warm_white: output_ww
cold_white_color_temperature: 5000 K
warm_white_color_temperature: 2600 K
Ну  и шьемя  как  обычно  - 1-й  раз по проводу,  далее по  OTA

Благодарю  форум Нome-Аssistant  https://community.home-assistant.io/t/hacking-yeelight-fw-en...
За  кучу полезной  информации  для  написания прошивки.
Кто-то  даже грозился  выложить  проект на  гитхаб,  но что-то беглый  гуглеж не  показывает ответа.
Репозиторий  найден,  ссылка в  посте

Отдельное  спасибо  хочется  выразить Xiaomi  и Yeelight за стимул к  написанию свободных прошивок для  их продукции.

Умный дом

138 постов2.2K подписчиков

Добавить пост