36. Виртуальный выключатель и его сенсор.

В данной статье рассмотрим подробно задачу по реализации выключателя и сенсора, для определения работы нескольких объектов и управления ими.
Как всегда для начала вводные данные, чтобы было понятно что, почему и зачем.

Имеется несколько автоматизаций (назовём их 1, 2, и 3).
1. Выключает устройство1 в помещении1 в определённое время по утрам в рабочие дни.
2. Включает устройство2 в помещении2 в другое время по утрам в рабочие дни.
3. Выключает устройство2 в помещении2, в определённое время вечером в рабочие дни.

Автоматизации работают отлично, и к ним претензий нет. НО!
Когда выпадают праздничные дни и накладываются на рабочие, или есть отпуск, то работа этих трёх автоматизаций не нужна. 

Вариант решения напрашивающийся сам собой: зайти в настройки автоматизаций, выбрать во всём списке нужные и отключить их. Потом так же включить, когда надо будет.
Решение хорошее, но в виду большого количества автоматизаций это не совсем удобно искать их каждый раз в списке.

Основываясь на знаниях и примерах из предыдущих статей, можно сделать следующее.
1. Создать бинарный сенсор, показывающий состояние всех нужных автоматизаций. Они же всё равно все три должны быть либо вместе включены, либо вместе выключены.
2. Создать виртуальный выключатель, который будет включать или выключать нужные автоматизации. При этом иконка выключателя будет меняться в зависимости от состояния сенсора. Т.е. по факту - в зависимости от того включены ли сейчас автоматизации или нет.
3. Сущность выключателя выводится в интерфейс для отображения и управления состоянием автоматизаций.  

Забегая вперёд, следует сказать, что при желании можно добавить в ХА календарь, который будет синхронизироваться с календарём в смартфоне. И когда в календаре определённый день будет отмечен каким либо кодовым словом, то другая автоматизация будет выключать этот виртуальный выключатель самостоятельно. И соответственно включать в дни, которые не отмечены этим кодовым словом, на случай если этот свитч оказался в выключенном состоянии. Но для начала обойдёмся более лайтовым вариантом.

Итак, в файле configuration.yaml  имеются следующие строки:
switch: !include includes/switches.yaml
template: !include includes/templates.yaml

Для начала добавим бинарный сенсор (п.1 решения). Т.к. это будет сенсор написанный на платформе шаблонов, то и указан он будет в файле относящимся к этой платформе. (подробнее о бинарных сенсорах - здесь)
- binary_sensor:
    - name: "имя по желанию"
      state: >
        {{ is_state('automation.1', 'on') or
         is_state('automation.2', 'on') or
         is_state('automation.3', 'on') }}

Казалось бы теперь можно перейти к созданию выключателя. Но т.к. выключатель будет смотреть на статус нового сенсора, желательно чтобы на момент создания выключателя, этот сенсор уже присутствовал в системе. Поэтому сохраняем файл, делаем проверку кода в панели разработчика, и если всё ок, то перезапускаем систему. Крайне важно после загрузки системы убедится что нужный сенсор создался и работает.

Теперь создаём выключатель (п. 2 решения).
Открываем или создаём файл указанный в домене свичей в главном конфиге, и пишем там примерно следующее:
  - platform: template
    switches:
      automations:
        value_template: "{{ is_state('binary_sensor.имя_сенсора', 'on') }}"
        turn_on:
          - service: automation.turn_on
            target:
              entity_id: automation.1
          - service: automation.turn_on
            target:
              entity_id: automation.2
          - service: automation.turn_on
            target:
              entity_id: automation.3
        turn_off:
          - service: automation.turn_off
            target:
              entity_id: automation.1
          - service: automation.turn_off
            target:
              entity_id: automation.2
          - service: automation.turn_off
            target:
              entity_id: automation.3
        icon_template: >-
          {% if is_state('binary_sensor.имя_сенсора', 'on') %}
            mdi:robot-outline
          {% else %}
            mdi:robot-off-outline
          {% endif %}

Перевод этого кода на человеческий:
На платформе шаблонов, создадим выключатель, с названием "автоматизации". Значение работает или нет брать от бинарного сенсора.
При включении вызвать службу включения автоматизаций, и выбрать автоматизацию с именем таким-то.
Этот пункт повторяется для каждой автоматизации.
При выключении вызвать службу выключения автоматизаций, и выбрать автоматизацию с именем таким-то.
Этот пункт повторяется для каждой автоматизации.
Шаблон иконки: Основан на состоянии соответствующего бинарного сенсора. Если сенсор в положении ВКЛ, то показывать одну иконку, Если в любом другом - то другую.
Сохраняем файл, делаем проверку кода в панели разработчика, и если всё ок, то перезапускаем систему.

Так выглядит этот переключатель в виде кнопки в интерфейсе mushroom. Положение когда автоматизации включены, и выключены. 

Комментарии