Управление домофоном через Алису (второй вариант)
xakepShilo opened this issue · 2 comments
Умный Дом Яндекс, как я писал в прошлом подключении управления через Алису, накладывает некоторые ограничения на функционал. Ну и поступила жалоба, что в предыдущих настройках при выключенной функции "Однократного открытия домофона" в программе "Умный дом с Алисой" все переключатели заблокированы. Голосом они управляются, а вот в программе нет.
Будем избавляться от этого недостатка...
Примечание: создание настроек описано с нуля

Для управления домофоном при помощи Умного дома Яндекс должна быть установлена и настроена интеграция yandex_smart_home. Если это уже сделано - пропускаем этот шаг и идем дальше.
Создаем следующий скрипт, который будет устанавливать нужный режим на домофоне:
script:
smartintercom_mode_set:
alias: Домофон (установка режима)
sequence:
- service: select.select_option
entity_id: select.smartintercom_modes
data:
option: >
{% if mode == "normal" %}
Не активен
{% elif mode == "auto" %}
Открывать всегда
{% else %}
Сброс вызова
{% endif %}
mode: queued
Создаем сенсоры:
sensor:
- platform: template
sensors:
smartintercom_modes:
value_template: >
{% if is_state('select.smartintercom_modes', 'Не активен') %}
normal
{% elif is_state('select.smartintercom_modes', 'Открывать всегда') %}
auto
{% else %}
quiet
{% endif %}
smartintercom_sound_invert:
value_template: >
{% if is_state("switch.smartintercom_sound", "on") %}
off
{% else %}
on
{% endif %}
smartintercom_accept_call_invert:
value_template: >
{% if is_state("switch.smartintercom_accept_call", "on") %}
off
{% else %}
on
{% endif %}
Первый сенсор "smartintercom_modes" - преобразует режим домофона в режим Умного дома Яндекс, второй - инвертирует состояние переключателя "switch.smartintercom_sound".
Под звуком подразумевается произношение фразы при открытии!
Третий сенсор "smartintercom_accept_call_invert" инвертирует состояние однократного открытия.
Инвертирование сделано по причине того, что имеется различие в состоянии на Яндексе и состоянии домофона.
Создаем бинарный сенсор состояния домофона на основе "switch.smartintercom_accept_call"
template:
- binary_sensor:
- name: "smartintercom state"
device_class: "door"
state: '{{ states("switch.smartintercom_accept_call") }}'
Именно этот сенсор и будет показывать текущее состояние домофона.
В комментарии есть еще одна настройка этого сенсора. Какой вам больше нравится - тот и используйте.
Следом в настройках интеграции "yandex_smart_home", если у вас настроены фильтры, вставляем созданный бинарный сенсор:
filter:
include_entities:
- binary_sensor.smartintercom_state # домофон
В разделе настроек интеграции " entity_config:" вносим следующие строки:
binary_sensor.smartintercom_state:
name: Домофон
room: Прихожая
type: devices.types.openable
modes:
program:
normal: [normal]
quiet: [quiet]
auto: [auto]
custom_modes:
program:
state_entity_id: sensor.smartintercom_modes
set_mode:
service: script.smartintercom_mode_set
data:
mode: '{{ mode }}'
custom_toggles:
controls_locked:
state_entity_id: sensor.smartintercom_accept_call_invert
turn_on:
service: switch.turn_off
entity_id: switch.smartintercom_accept_call
turn_off:
service: switch.turn_on
entity_id: switch.smartintercom_accept_call
backlight:
state_entity_id: switch.smartintercom_led
turn_on:
service: switch.turn_on
entity_id: switch.smartintercom_led
turn_off:
service: switch.turn_off
entity_id: switch.smartintercom_led
mute:
state_entity_id: sensor.smartintercom_sound_invert
turn_on:
service: switch.turn_off
entity_id: switch.smartintercom_sound
turn_off:
service: switch.turn_on
entity_id: switch.smartintercom_sound
Установленный тип датчика "type: devices.types.openable" - не влияет ни на что, кроме иконки устройства
Проверяем конфигурацию и если все в порядке, то перегружаем Home Assistant.
После этого идем в установленный на смарте "Умный дом с Алисой" и там добавляем новое устройство. Если было сделано по предыдущему руководству, то предварительно удаляем старое устройство.
Пользуемся! Все функции управления черед программу разблокированы всегда.
Теперь по поводу команд!
Вместо команды "Открыть/Закрыть домофон", придется говорить "Разблокировать домофон" и соответственно "Заблокировать домофон". Остальные команды не претерпели никаких изменений.
Небольшое изменение в настройке отображения состояния домофона.
Бинарный сенсор отслеживал только "однократное открытие домофона". Если нужно чтобы в умном доме Яндекс сенсор показывал состояние домофона и в случае установленного режима "Открывать всегда", бинарный сенсор "smartintercom state" заменить на вот такую настройку:
template:
- binary_sensor:
- name: "smartintercom state"
device_class: "door"
state: >
{% if is_state("switch.smartintercom_accept_call", "on") or is_state("select.smartintercom_modes", "Открывать всегда") %}
on
{% else %}
off
{% endif %}
После перезагрузки Home Assistant, в умном доме Яндекс состояние "Открыто\Закрыто" будет отображаться при любом изменении настроек домофона.
Пришла небольшая претензия, что мол неудобно произносить "Разблокировать домофон". Пришлось напомнить о такой замечательной вещи в Умном Доме Яндекс, как создание сценариев.
Создаем сценарий, обзываем его как больше нравится, задаем фразу "Открыть домофон" и в качестве действия "Блокировка управления"->"Выключить" и пользуемся.
На любые другие действия с домофоном можно точно так же настроить сценарии. Даже несколько с действий в одном сценарии. Например на команду "Открыть домофон без звука": первое действие - "Без звука" (включить), второе - "Блокировка управления (выключить)", третье - подождать пять секунд, четвертое - "Блокировка управления (включить)", пятое - "Без звука" (выключить).