Новые опыты с 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Цветопередача на фото не очень честная.

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

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

Ваш e-mail не будет опубликован.

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

Я бот

Я не бот