Новые опыты с Yeelight

За окном снова осень, темнеть стало раньше, светать — позже, а значит, просыпаться в полседьмого утра приходится в кромешной темноте. Решил я поднять свои предыдущие наработки и, в целях придания организму стартовой бодрости по утрам, запустить-таки симулятор рассвета на smart-лампочке Yeelight.figure

В прошлый раз я пробовал посылать команды лампочке cURL’ом, добавляя их в crontab на роутере. Теперь в моём распоряжении полноценный сервер с контейнерами на борту, и можно собрать что-нибудь более приличное на Python.

Первым делом я решил разобраться, обязательно ли ставить на смартфон официальное приложение для настройки лампочки. Дело в том, что разрешений оно требует уйму — далеко за пределами разумного, и иметь при себе такой потенциально шпионский зонд вовсе неохота.

Как выяснилось (впрочем, примерно как и всегда в 2018-ом году), некоторые умные ребята уже разреверсили протокол первоначальной настройки. Тут надо напомнить, что лампочка используется в два этапа: 1) через официальное приложение нужно указать ей название и пароль домашней WiFi-сети, куда она самостоятельно подключится, а далее 2) слать ей команды, находясь в этой же WiFI-сети. И если для второго этапа есть даже официальная документация, то протокол первого этапа и нужно было расковырять.

Протокол оказался не слишком мудрёный. Неинициализированная лампочка (пять раз быстро включить и выключить для сброса) слушает UDP-порт с номером 54321. Первым делом ей нужно послать hello-пакет, в ответ на который она пришлёт свой идентификатор и специальный токен. Токен необходимо использовать для шифрования всех последующих пакетов.

Далее парой соответствующих пакетов включаем developer-режим и задаём название и пароль WiFi-сети. Как я писал в предыдущей заметке, стоит заранее обрубить на брандмауэре по MAC-адресу лампочки все исходящие соединения во внешнюю сеть. Так, на всякий случай.

Если первый этап прошёл гладко, лампочка появится в локальной сети. IP-адрес надо смотреть на роутере. Возможно, стоит завести отдельное правило для DHCP-сервера, чтобы лампочке всегда выделялся один и тот же адрес. С другой стороны, можно обращаться к ней по хосту вида примерно yeelink-light-color1_miioXXXXXXXX.lan.

Для второго этапа, то есть, собственно, эффективного использования лампочки, можно взять cURL, а можно — Python-библиотечку yeelight.

В итоге я собрал небольшой репозиторий с парой скриптов: для активации и для, так сказать, симуляции рассвета — плавного изменения яркости и цветовой температуры.figureЦветопередача на фото не очень честная.

Испытания сегодня утром прошли удачно, проспать уже не получится. Будем пользоваться дальше.

Добавить комментарий

Ваш адрес email не будет опубликован.

Поставьте галочки правильно (как бы защита от спама):

Я бот

Я не бот