Делаем домашнее освещение чуть-чуть умнее
Про пользу f.lux уже в той или иной степени несколько раз писали и на хабре, и на гиктаймсе. Попробовав в работе эту программу некоторое время назад, у меня возник вопрос — как быть с остальным освещением в комнате? Слишком уж сильно по ночам выбивается из общего, тёплого света ламп накаливания, оранжевый экран монитора.
Постараемся исправить это досадное недоразумение.
Disclaimer
Автор текста не понимает в полной мере, как устроено человеческое зрение, и будут ли описываемые ниже операции полезны или вредны для него. Так же за бортом остаются аспекты тестирования показателей светодиодных ламп на предмет их качества. Их было решено принять за «удовлетворительные», спасибо AlexeyNadezhin и Tiberius за соответствующие исследования.
Закупаемся лампами
Беглый анализ рынка показал, что выбирать есть из чего. Начиная со сверхбютжетных «ноунейм» китайских ламп, заканчивая стоящими совсем уже нескромных денег Belkin и Philips. В результате, было решено за основу взять лампочки Yeelight Smart Led Bulb, выпускаемые под брендом Xiaomi. Их плюсом является возможность функционировать без какого-либо дополнительного оборудования из категории «умный дом» и возможность автономной работы, без привязки к серверам управления компании (после некоторых ухищрений).
На момент написания статьи стоимость одной лампы составляет порядка $20.
Программная часть
Писать код для управления лампами будем на python, под него существует уже готовый модуль, позволяющий передавать управляющие команды этим лампам. Также существует документ, подробно описывающий api. Таким образом, остаётся лишь дописать небольшой веб-сервер для того, чтобы принимать команды управления от f.lux.
Однако, сперва нужно инициализировать Smart Bulb. Проводим инициализацию ламп через фирменное приложение MiHome и добиваемся появления значка Yeelight Color Bulb в интерфейсе приложения. Проблемы с подключением могут возникнуть из-за dns и выбора сервера по умолчанию. Они решаются прописыванием в dns записи 8.8.8.8 и выбором сервера China (Mainland).
Так-же требуется разблокировать возможность прямого обращения к устройствам, активировав на них Developer Mode, посредством второго приложения, Yeelight. После всех этих операций лампы появляются в сети и к ним уже можно обращаться.
В связи с нежеланием рассказывать умным лампочкам пароли от Wi-Fi, они переезжают в отдельную подсеть, с отдельным SSID и без доступа к интернету.
Итак, лампы висят в сети, в приложении они ушли в оффлайн и можно попробовать передавать на них управляющие команды.
Интеграция с f.lux
f.lux умеет отправлять данные об изменении цветовой температуры и яркости на заданный URL. Данные прилетают в виде post-запроса вида:
POST /room_1? ct=6500&bri=0.800000 HTTP/1.1
Напишем небольшой веб-сервер на bottle, обрабатывающий эти параметры:
from bottle import run, post, request
from yeelight import Bulb
@post('/room_1')
def room_handler():
post_dict = request.query.decode()
if 'ct' in post_dict and 'bri' in post_dict:
ct = int(post_dict['ct'])
bri = int(float(post_dict['bri']) * 100)
bulb.set_color_temp(ct)
bulb.set_brightness(bri)
bulb = Bulb("%lamp_ip%")
run(host='0.0.0.0', port=8080)
Конечный результат
Проработав неделю в таком режиме, мне сложно сказать, есть ли позитивные изменения и уменьшилась ли усталось глаз. Динамически подстраиваемый свет выглядит интересно и разница между монитором и окружающим освещением уже не так бросается в глаза. С другой стороны, непривычен сам факт постоянного изменения окружающего света.