О пользовательских умениях
Только для продвинутых пользователей!
Иногда возможностей компонента недостаточно и хочется добавить свои функции, переключатели и регулировки.
Это можно сделать через "пользовательские умения" для каждого устройства отдельно через entity_config.
Важно! Пользовательские умения являются приоритетными и перекрывают автоматически обнаруженные
Поддерживается несколько видов пользовательских умений:
- Режимы (mode) - переключение режимов работы устройства (режим работы кондиционера, уборки, источника сигнала и т.п.). Настраиваются через словарьcustom_modes.
- Переключатели (toggle) - управление функциями, которые включаются и выключаются (пауза, вращение вентилятора, ионизация и т.п.). Настраиваются через словарьcustom_toggles.
- Выбор из диапазона (range) - управление параметрами устройства, которые имеют диапазон (яркость лампы, громкость звука, температура нагревателя). Настраиваются через словарьcustom_ranges.
В каждое умение входит ряд функций: например функция volume в умении range или функция mute в умении toggle.
У одного устройства может быть несколько функций в разных умениях (или в одном).
Дубликаты функций невозможны (т.е. volume может быть только одна для одного устройства).
Функции никак не привязаны к типу устройства, а это значит, что функцию "громкость" можно назначить, например, для выключателя или увлажнителя. Это позволяет реализовывать безумный набор умений в одном устройстве.
Пример настройки пользовательских умений
yandex_smart_home:
  entity_config:
    media_player.tv:
      custom_ranges:
        channel:
          set_value:
            action: media_player.play_media
            entity_id: media_player.tv
            data:
              media_content_type: channel
              media_content_id: '{{ value }}'
        volume:
          increase_value:
            action: script.increase_volume
          decrease_value:
            action: script.decrease_volume
    climate.room_ac:
      custom_toggles:
        backlight:
          state_entity_id: climate.room_ac
          state_attribute: backlight
        mute:
          state_template: '{{ is_state("switch.room_ac_beeper", "off") }}'
          turn_on:
            action: switch.turn_off
            entity_id: switch.room_ac_beeper
          turn_off:
            action: switch.turn_on
            entity_id: switch.room_ac_beeper
    media_player.tv:
      modes:
        input_source:
          one: 'HW1'
          two: 'HW2'
      custom_modes:
        input_source:
          state_entity_id: sensor.tv_input_source
          set_mode:
            action: script.change_tv_input_source
            data:
              input_source: '{{ mode }}'
Текущее состояние умения¶
Желательно, чтобы УДЯ знал о текущем состоянии умения. В противном случае состояние не будет отражено в приложении "Дом с Алисой", а Алиса не озвучит его на вопрос "Что с устройством". Отсутствие текущего состояния не влияет на возможность управления умением.
Способы задать источник состояния:
- state_entity_id: Объект, состояние которого содержит состояние умения
Пример использования state_entity_id
- state_entity_id+- state_attribute: Атрибут объекта- state_entity_id, значение которого содержит состояния умения
Пример использования state_entity_id + state_attribute
# Состояние функции "Скорость работы" определяется из значения атрибута water_level объекта vacuum.mop
yandex_smart_home:
  entity_config:
    vacuum.mop:
      modes:
        work_speed:
          eco: 'V1'
          medium: 'V2'
      custom_modes:
        work_speed:
          state_entity_id: vacuum.mop
          state_attribute: water_level
          set_mode: ...
Примечание: state_entity_id может быть опущен, если его значение совпадает с объектом, для которого настраивается умение. Во всех примерах state_entity_id  указывается явно для избежания путаницы.
- state_template: Для определения состояния умения используется результат вычисления шаблона
Пример использования state_template
Отключение автоматически обнаруженных умений¶
При создании пользовательских умений может возникнуть желание отключить автоматически обнаруженные умения. Для этого вместо конфигурации функции необходимо задать значение false.