Полгода прошло с тех пок, как я писал про управляемую светодиодную подсветку на базе диммируемого контроллера MagicHome. В конце того опуса было опубликовано, что хотелось бы с помощью такого контроллера оживить симпатичный букхолдер, подаренный мне супругой на новогодние праздники и собранный в течение оных.
Полгода прошло, несмотря на то, что RGBW-контроллер был куплен примерно тогда же, когда я опубликовал статью, и даже собран домик был собран ещё в конце весны. Но.
Лень была. Не статью написать, нет. Букхолдер довести до ума.
Началось всё с того, что контроллер работает от 5 вольт. Светодиоды столько не едят. Поэтому они сгорели - сначала фонрь у кафе, потом уличный фонарь в глубине. И если первый починить недолго - благо радиомагазинчик находится в соседнем с моим офисом здании, то с красивыми миниатюрными фонарями как-то не заладилось. В итоге задачка была отложена на неопределённое время.
Где-то в середине лета я вновь вытащил эту тему из бэклога, пошарился на алиэкспрессе и заказал упаковку фонарей. Букхолдер пришлось разобрать, чтобы перепротянуть провода и поставить новые огни. Проблему перевольтажа решил "наскоком" - снизил максимальную яркость на каждом канале. Собрал, запустил - проработало с месяц и снова сгорел фонрь над кафе. Тогда я задумался над резисторами. И снова одолела лень.
В сентябе заказал десяток резисторов на 100 ом, недельку помариновал на своём рабочем столе и наконец-то взялся за паяльник, попутно выяснив, что уличный фонарь в глубине тоже когда-то успел сгореть. Почему ни разу не сгорела лампа под "потолком" - загадка. Но ладно.
Домик снова разобран, уличный фонарь заменен, лампа у кафе тоже, на каждый канал припаян резистор - работает. Вот уже две недели как работает. Букхолдер поставлен на своё место, хотя так и не собран обратно на 100% - жду, может опять начнут лампы перегорать и снова надо будет разбирать и перетягивать.
Надеюсь нет.
Подключение
Для организации трёх отдельных источников света был выбран контроллер RGBW MagicHome, так же питающийся от блока питания в 5 вольт. Протянуты провода из-под потолка (шкаф высотой 2,5 метра, 220в находится в небольшом зазоре между шкафом и потолком) по дальней стенке шкафа, выведены на полку, где стоит букхолдер. В качестве блока питания взята обычная старая зарядка от телефона с USB на 1A. Можно было поискать и н 0,5А, но по сусекам такого не нашлось.
На гребёнку контроллера на + припаяны все три "красные" провода от светодиодов, к - через резисторы подпаяны "чёрные" провода. Ничего экстраординарного, всё на уровне школьного кружка радиолюбителей (хотя, полагаю, сейчас есть кружки и покруче, со всякими программируемыми ардуинами).
Контроллер подключен в приложение MagicHome, проверен, и прокинут в Home Assistant точно так же, как и предыдущий. Свойств у устройства будет побольше:
Методом научного тыка найдены рабочие парааметры Operation Mode и Wiring.
Помимо простого вкл/выкл можно управлять цветом и задавать эффекты:
Но нас эффекты не интересуют, поскольку у нас не единая цветная подсветка, а три разных канала, припаянных к R, G и B. Поэтому включать ту или иную лампочку мы будем непосредственно изменяя уровень одного из этих каналов.
Автоматизация
Самой большой сложностью в оживлении игрушечного кусочка улицы стали именно алгоритмы. Когда и что должно включаться. Хотелось именно живой жизни.
В первом варианте было сделано так:
- фонарь под потолком включается при наступлении темноты;
- лампа у кафе включается, когда горит свет на кухне;
- уличный фонарь включается, когда горит свет в детской комнате;
- и всё это выключается, когда все уходят спать, чтобы не горело впустую всю ночь.
При таких условиях действительно имтируется какая-то жизнь, зависимая от происходящего вокруг. Но не сильно, потому что в реальной жизни, конечно, все фонари просто горят когда темно. Кроме кафе, которое закроется, ну, например, в полночь. И тогда этот кусочек пространства будет чуть менее статичен чем просто полностью.
Поэтому в финальном варианте подход к огням был пересмотрен в пользу практичности: лампа у кафе горит при включенном свете в детской, лампа под потолком зависит от света в санузле, а уличный фонарь завязан на спальню. Связи выбраны чисто по направлениям. Глядя на огни в гостиной можно понять, в каких помещениях, которые из гостиной не видны, горит свет. И заодно понять - нужен ли он там и не пора ли его выключить. Практично и удобно. И красиво.
Как это реализовано?
Для каждого светодиода создан input_number с неким максимальным значением, с помощью которого ограничивалась максимальная яркость:
Был написан скрипт, который собирает значения всех этих элементов и включает RGBW-контроллер с этими значениями:
Создана управляющая автоматизация, срабатывающая при изменении одного из этих значений и выполняющего скрипт.
Если все три значения меньше 1, то RGBW-модуль просто выключается:
Теперь можно управлять огнями вручную, передвигая ползунки:
Осталось добавить жизнь: отслеживаем состояние интересующих нас объектов:
Никакие состояния не мониторим, просто факт что что-то изменилось. И превращаем статус каждого из этих устройств в 0 или 1, помноженные на 100 (которое на текущий момент является максимальным значением каждого из input_number):
Всё. Когда включается или выключается свет в одной из комнат, включенных в мониторинг, срабатывает эта автоматизация и превращает вкл в 100, а выкл в 0 соответствующего ползунка.
Предыдущая управляющая автоматизация тут же срабатывает на изменении одного из ползунков и выполняет скрипт установки значений RGBW по этим ползункам. Загораются или гаснут лампы.
Улица оживает.
Магия.