yandex_smart_home icon indicating copy to clipboard operation
yandex_smart_home copied to clipboard

Хелперы в пользовательских умениях

Open dext0r opened this issue 10 months ago • 0 comments

Типичный сценарий для пользовательских умений - подключить switch или number в качество toggle или range соответственно. При этом приходится описывать вручную сервисы включения/выключения/увеличения/уменьшения. В итоге это выглядит монструозно:

yandex_smart_home:
  entity_config:
    switch.foo:
      custom_toggles:
        ionization:
          state_entity_id: switch.ion
          turn_on:
            action: switch.turn_on
            entity_id: switch.ion
          turn_off:
            action: switch.turn_off
            entity_id: switch.ion
      custom_ranges:
        temperature:
          state_entity_id: input_number.bar
          set_value:
            action: input_number.set_value
            entity_id: input_number.bar
            data:
              value: '{{ value }}'
          increase_value:
            action: input_number.increment
            entity_id: input_number.bar
          decrease_value:
            action: input_number.decrement
            entity_id: input_number.bar
          range:
            min: 0
            max: 1000
            precision: 0.1

Для многих доменов мы уже знаем сервисы для управления ими и параметры. Например для number, мы знаем не только сервисы для set/increase/decrease, но и даже range! Для упрощения конфигурирования пользовательских умений можно просто передавать объект, которым хочется управлять, а компонент должен сам определить сервисы и параметры. В конфиге это может выглядеть как-то так:

yandex_smart_home:
  entity_config:
    switch.foo:
      custom_toggles:
        ionization:
          entity_id: switch.ion
      custom_ranges:
        temperature:
          entity_id: input_number.bar

Важно: при таком сокращении нужно запрещать конфигурировать остальные параметры, так как это усложнит понимание результирующей конфигурации. То есть возможны два пути: либо короткий через entity_id, либо длинный через state_* + сервисы (как сейчас).

dext0r avatar Jan 21 '25 10:01 dext0r