В процессе раздумывания над управлением светом заказал на распродаже с Aliexpress универсальный пульт для домашней техники. В результате просмотра обзоров и отзывов выбор пал на треугольник Broadlink RM2 Pro - относительно недорогой "все в одном". Поскольку изначально думал менять выключатели с обычных кнопочных на управляемые по радиоканалу, то и пульт взял "с запасом" - ИК и RF.
Работает пульт просто - нужно разместить треугольник со всенаправленными излучателями в удобном месте, откуда открывается прямой обзор до всех устройств, которыми планируется управлять, затем пульт обучается с родных пультов и готово - можно через фирменное приложение или из HomeAssistant управлять всей техникой в пределах прямой видимости. Можно так же привязать пульт к голосовым ассистентам и управлять голосом.
С помощью этого пульта я управляю люстрой Navigator (дневной/ночной свет, регулировка яркости) и своим "медиакомплексом", состоящим из телевизора без смарт-функций, саундбаром и медиаприставкой на Android.
Подключение к HomeAssistant
Интеграция Broadlink поставляется в HomeAssistant "из коробки" - не надо искать его в магазине HACS или устанавливать откуда-то ещё, достаточно добавить в файле secrets.yaml IP-адрес и MAC своего устройства (я посмотрел их в настройках роутера, в списке подключенных устройств):
broadlink_ip: 192.168.1.XXX
broadlink_mac: 'XX:XX:XX:XX:XX:XX'
И прописать configuration.yaml секцию remote:
remote:
- platform: broadlink
host: !secret broadlink_ip
mac: !secret broadlink_mac
После перезапуска HomeAssistant пульт управления готов к работе, но пока ещё ничего не умеет. Надо его обучить. Переходим в Панель разработчика, на вкладку Службы и находим службу remote.learn_command, указываем наш новый объект remote.broadlink и в окне Данные службы в формате yaml добавляем параметры device и command:
Где device и command - это название устройства и название команды для этого устройства, которые нужны для удобного вызова команд в дальнейшем, называете на свой вкус. Например для потолочной люстры (device: Light) я обучил команды Daylight, Nightmode, Lighter и Darker.
Нажимаем для каждой команды Вызвать службу, на устройстве Broadlink загорается красная лампочка, направляем на него наш пульт и нажимаем нужную кнопку. Красная лампочка погасла, команда запомнена.
Теперь эти команды выучены и ими можно пользоваться. Проверяем: очищаем службу, находим remote.send_command и вводим наши параметры:
Нажимаем "Вызвать службу" и проверяем, что действие выполнилось. Если что-то пошло не так - переобучаем команду.
Когда все команды настроены, можно использовать их для управления и автоматизации.
Управление из HomeAssistant
Когда все команды обучены, можно их повесить на кнопки: переходим на главную страницу или другую заранее созданную панель управления и нажимаем в правом верхнем углу кнопку с тремя точками, выбираем "Настройка интерфейса" - переходим в режим редактирования.
В этом режиме нам доступна кнопка с плюсом - добавить новый элемент на панель. Начиная с версии HomeAssistant 0.108 все встроенные компоненты сразу отображаются в виде превью. Находим элемент "Кнопка" и настраиваем, например, кнопку "Дневной свет":
- Объект: remote.broadlink
- Название: Дневной свет
- Значок: mdi:white-balance-sunny (справочник значков мы заранее настроили, теперь достаточно легко подобрать нужный)
- При нажатии: call-service (будем вызывать службу)
- Служба: remote.send_command
Теперь для нашей службы надо прописать дополнительные параметры: device и command. В графическом режиме это недоступно, поэтому переключаемся в режим Текстового редактора и под записью service: remote.send_command прописываем параметры:
service_data:
entity_id: remote.broadlink
device: Light
command: Daylight
Внимательно следим за отступами, иначе будут предупреждения об ошибках и кнопка работать не будет:
Сразу можно проверить работу кнопки нажав на превью справа.
С помощью элемента "Горизонтальный массив" можно выстроить в ряд несколько кнопок:
Если планируется использовать кнопку в нескольких местах на панелях, то, чтобы каждый раз не набирать параметры службы, можно заранее записать один скрипт, а потом вызывать его. Переходим в Настройки - Сценарии и добавляем новый сценарий для вызова службы с теми же параметрами, с которыми мы кнопку делали:
(Обратите внимание на кнопку Добавить действие - в скрипте можно перечислить несколько действий, которые выполнятся последовательно, например сценарий для просмотра фильмов: выключить люстру, включить торшер, включить подсветку телевизора, переключить телевизор в нужный режим.)
Сохраняем скрипт и проверяем правильность всех настроек: Настройки - Сервер - Начать проверку конфигурации, если обошлось без ошибок - перезагружаем сценарии.
Теперь создание кнопки обойдётся без доработок в текстовом режиме, достаточно просто создать кнопку и выбрать нужный скрипт в качестве объекта:
Остётся только назначить нужную иконку и, при необходимости, поменять название:
Недостатком создания скрипта через интерфейс является непонятное название скрипта: script.1588429222216. Но можно поменять это через Конфигуратор (я предпочитаю написать сразу такой скрипт в текстовом редакторе как мне надо):
На скриншоте два одинаковых скрипта, один из которых будет выглядеть как script.1588429222216, а второй как script.lamp_plus, так гораздо удобнее.
Настройка автоматизации
Автоматизация - это выполнение разных действий (в том числе скриптов) автоматически при достижении заданных условий. Примеры: включить свет при движении (нужен датчик движения) или поменять цветовую температуру в зависимости от времени суток. У меня настроен сценарий приглушить свет, когда запускается фильм или сериал, для чего должен быть подключен и настроен медиаплеер в HomeAssistant. Несмотря на то, что медиаплеер мы ещё не подключали, скрипт автоматизации, я думаю, будет понятен и так.
Во-первых, создаём скрипт для приглушения света. В моей лампочке есть режим "ночной свет", но использовать его для автоматизации нельзя, потому что он не только уменьшает яркость до минимума, но и при повторном нажатии меняет цветовую температуру, чего нам не нужно. Поэтому я использую скрипт нажатия кнопки уменьшения яркости с параметром "повторять 10 раз":
ceiling_cinema:
sequence:
- service: remote.send_command
data:
entity_id: remote.broadlink
device: Ceiling
command: Darker
num_repeats: 10
Теперь нужно настроить автоматизацию вызова этого скрипта при запуске медиаплеера в файле automations.conf (опять же в текстовом режиме, поскольку создание через интерфейс редко получается сделать как надо, особенно когда начнутся сложные автоматизации):
- alias: Время для фильма
trigger:
- platform: state
entity_id: media_player.kodi
to: 'playing'
condition:
- condition: state
entity_id: sun.sun
state: 'below_horizon'
action:
- service: script.ceiling_cinema
Здесь:
- alias - понятное название автоматизации
- trigger - условие, которое должно сработать, в нашем случае состояние элемента media_player.kodi должно поменяться с любого на "проигрывает"
- condition - дополнительные условия, которые должны быть соблюдены для запуска автоматизации, в нашем случае элемент sun.sun (базовый элемент HomeAssistant, указывающий на положение солнца) должен поменять своё состояние на "ушло за горизонт"
- action - то, что должно выполниться при соблюдении всех условий, в нашем случае должен выполниться скрипт, который мы создали ранее script.ceiling_cinema
Сохраняем автоматизацию, проверяем на ошибки в Настройки - Сервер - Начать проверку и перезагружаем автоматизации, если всё хорошо.
Всё, автоматизация создана и при соблюдении всех условий она должна выполниться. Но можно запустить автоматизацию вручную и проверить независимо от условий: переходим в Настройки - Автоматизация, находим нашу автоматизацию и нажимаем "Запуск". Там же можно, при необходимости, выключить автоматизацию, и тогда она не будет выполняться даже при выполнении всех условий.
Дальше можно обучить пульт на все свои устройства и задавать различные сценарии.
Заключение
У меня, кроме управления светом, настроено ещё управление медиасистемой: регулировка громкости, управление приставкой, переключение аудиовхода для проигрывания музыки через саундбар.
Единственное, что мне не пригодилось в моём Broadlink - это управление по радиоканалу. Чем глубже погружался тему управления светом, тем яснее становилось, что радиовыключатели - это совсем не то, что мне нужно, поскольку они не имеют обратной связи (не отдают своё состояние в систему много дома) и полноценного управления ими организовать не получится. В итоге все выключатели я выбрал на Wi-Fi и функция радиоуправления оказалась попросту ненужной. Исходя из этого, сейчас я бы взял ИК-пульт попроще и подешевле.