SCratORS / SmartIntercom

Умный домофон на ESP

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Управление домофоном через Алису (второй вариант)

xakepShilo opened this issue · comments

Умный Дом Яндекс, как я писал в прошлом подключении управления через Алису, накладывает некоторые ограничения на функционал. Ну и поступила жалоба, что в предыдущих настройках при выключенной функции "Однократного открытия домофона" в программе "Умный дом с Алисой" все переключатели заблокированы. Голосом они управляются, а вот в программе нет.

Будем избавляться от этого недостатка...

Примечание: создание настроек описано с нуля
smartintercom
Для управления домофоном при помощи Умного дома Яндекс должна быть установлена и настроена интеграция 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, в умном доме Яндекс состояние "Открыто\Закрыто" будет отображаться при любом изменении настроек домофона.

Пришла небольшая претензия, что мол неудобно произносить "Разблокировать домофон". Пришлось напомнить о такой замечательной вещи в Умном Доме Яндекс, как создание сценариев.

Создаем сценарий, обзываем его как больше нравится, задаем фразу "Открыть домофон" и в качестве действия "Блокировка управления"->"Выключить" и пользуемся.

На любые другие действия с домофоном можно точно так же настроить сценарии. Даже несколько с действий в одном сценарии. Например на команду "Открыть домофон без звука": первое действие - "Без звука" (включить), второе - "Блокировка управления (выключить)", третье - подождать пять секунд, четвертое - "Блокировка управления (включить)", пятое - "Без звука" (выключить).