Про пользу 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)


Конечный результат


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





Комментарии (10)


  1. Pentoxide
    27.10.2017 12:54

    Сделать плавное изменение цветовой температуры чтобы это не так было заметно?


    1. ekzi Автор
      27.10.2017 19:22

      Не совсем понял вопрос. Цветовая температура окружающего освещения меняется плавно, ровно как и на мониторе — это основная проблема, которую я попытался решить.


  1. LazyCrazy
    27.10.2017 14:49

    Изначально боролись со сбиванием циркадных ритмов, но как по «глухому телефончику» кто-то сказал про усталость глаз, так и идёт…
    Но если всё-таки вернуться к истокам — наверное, перед тем как начать менять освещение, стоит решить — а почему человек засиделся поздно вечером? Надо ли его готовить к скорому сну или, напротив, оставить в бодром состоянии, поскольку ему предстоит работа? Предусмотреть несколько сценариев: «проклятая бессонница», «дедлайн», "'сова'" и т.д., а не включать «желтуху» лишь потому, что модно.


    1. tmin10
      27.10.2017 15:15

      Зимой любой вечер — поздний, солнце заходит сейчас у нас уже раньше 6 вечера.


      1. Hammer250
        27.10.2017 19:18

        У нас в 16 часов :(


  1. fortyseven
    27.10.2017 15:53

    Кто-нибудь пробовал запустить веб-сервер на роутере zuxel? Было бы идеально, вместо сервера на ПК.


    1. ekzi Автор
      27.10.2017 19:20

      А что у вас за прошивка? Если есть возможность поставить туда питон, то всё заработает.


  1. Samoglas
    27.10.2017 20:54

    Слишком уж сильно по ночам выбивается из общего, тёплого света ламп накаливания, оранжевый экран монитора.

    Брал лист бумаги, закрывал экран и выравнивал ползунком цвет экрана и листа.
    Не вполне понятна цель. Солнце заходит, f.lux может в Slow в течение часа снизить цветовую температуру.
    Зачем менять цветовую температуру освещения, если можно поставить лампы с 3000K (например) и ввести это значение как целевое в флюксе?


  1. fedor1210
    28.10.2017 03:59
    +1

    Если лампочки приделать к Home Assistant, там ими можно управлять с помощью компонента flux. home-assistant.io/components/switch.flux


  1. ferreto
    30.10.2017 22:11

    Только температуру света можно менять или ещё и яркость? Было бы прикольно и полезно сделать световой будильник на основе этих лампочек