Пару дней назад я рассказывал об интересном универсальном ИК пульте управления устройствами от компании LOOKin. Сегодня же речь пойдет о добавлении девайса в сторонние системы УД, на данный момент не предусмотренные производителем. Я на своем опыте расскажу об интеграции ресивера для мультимедиа систем.
Ресивер старый, на борту не имеет ни Ethernet гнезда, ни HDMI Arc порта. Поэтому только ИК, только хардкор.
Что Remote имеет на борту для этого?
Открыв сайт производителя, можно увидеть, что девайс поддерживает локальное (а это немаловажно) управление при помощи Rest API. Это, по сути, набор команд, используя которые, мы можем получать от устройства нужную информацию или передавать ему данные на выполнение. Найдя на сайте раздел Commands, обнаруживаем, что если нам известен ИК код конкретной команды управления, передать ее можно следующим образом:
GET /commands/IR/ProntoHEX/вашакоманда
Набор символов, кстати, может быть не только в формате ProntoHEX, но и в Raw, если у вас есть такие данные. Можно сделать и проще. В настройках пульта вы можете добавить в его память несколько собственных команд, либо сосканировав их, либо вбив известную команду вручную. В этом случае вызвать их можно так:
GET /commands/IR/saved/ID команды от 0 до 256
Добавление в Home Assistant
Почему я вообще начал этим заниматься? Да потому что мой Broadlink не умеет отправлять устройствам заранее известные команды в ProntoHEX, и это приводило к тому, что в один прекрасный момент у меня получался рассинхрон реального состояния ресивера (влкл/выкл) его виртуальным выключателем. Прошерстив в очередной раз просторы интернета, я выяснил, что для моего мультимедиа девайса есть разные коды на его включение и выключение. Это позволило бы независимо управлять ресивером и отправлять ему команду конкретно на включение и выключение.
В HA есть такая интеграция, как RESTful Switch. Она, к сожалению, не совсем подходит мне, так как требует при запросе отдавать текущее состояние девайса, но на данный момент LOOKin Remote не умеет предоставлять такие данные. Поэтому мы пойдем окольными путями, используя RESTful Command, и соберя из двух Template switch.
Для начала я добавил две команды, отдельные на включение и выключение:
rest_command: on_receiver: url: http://192.168.1.240/commands/ir/prontohex/0000 0073 0000 0011 0020 0020 0040 0040 0040 0020 0020 0020 0020 0020 0020 00A0 0020 0020 0020 0040 0020 0020 0040 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0040 0020 0AA8 off_receiver: url: http://192.168.1.240/commands/ir/prontohex/0000 0073 0000 0010 0020 0020 0040 0040 0040 0020 0020 0020 0020 0020 0020 00A0 0020 0020 0020 0040 0020 0020 0040 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0040 0040 0AC8
После перезагрузки появятся два сервиса:
- rest_command.on_receiver
- rest_command.off_receiver
Вызывая которые мы можем включать или выключать ресивер. Теперь соберем из этого переключатель:
switch: - platform: template switches: marantz_receiver: value_template: "{{ states.switch.plug_158d0001b195fd.state }}" turn_on: - service: rest_command.on_receiver turn_off: - service: rest_command.off_receiver
Да, тут надо сразу оговориться, что свитчу подобного типа необходимо в обязательном порядке указывать параметр value_template. Он определяет, какой текущий статус имеет созданный выключатель. Для подобных целей можно как использовать input boolean переменную, так и брать состояние другого устройства, как я и поступил. В качестве другого устройства я использую умную розетку Xiaomi, в которую подключен активный сабвуфер для этой же системы. Учитывая, что обе эти системы включаются и выключаются одновременно, будем считать, что ресивер включился, если включен саб. Да, возможно, это не совсем правильно в виду отсутствия обратной связи, но еще одной умной розетки у меня нет.
С удовольствием выслушаю вашу критику и комментарии по поводу модернизации данного кейса использования!