Stupid House

Автоматизация - Управление выключателем по датчику движения в Home Assistant


Одной из самых распространенных автоматизаций является управление освещением по датчику движения, очень удобно войти в помещение и включение света происходит автоматически, через какое-то время свет отключается сам. Рассмотрим примеры ее реализации.

 

 

Пример 1

Задействованные объекты:

  • Датчик движения - ID устройства: 0x001
  • Управляемый выключатель физически замыкающий/размыкающий электрическую линию - ID устройства: 0x002

Описываемые действия:

  • Включение освещение по датчику движения
  • Отключение освещения через 3 минуты после окончания обнаружения движения датчиком
  • Отключение освещения через 3 минуты после включения выключателя (на случай если свет был включен с выключателя, но в помещении не было обнаружено движение)

Правим файл automations.yaml или пользуемся редактором автоматизаций Configuration -> Automations -> +.

Действие 1. При переходе сенсора движения в состояние on проверяется текущее состояние выключателя, если выключатель находится в состоянии off, то освещение включается.

- id: turn_on_light_by_motion_sensor
  alias: Turn on light by motion sensor
  trigger:
  - platform: state
    entity_id: binary_sensor.0x001_occupancy
    to: 'on'
  condition:
  - condition: state
    entity_id: switch.0x002_switch
    state: 'off'
  action:
  - service: switch.turn_on
    entity_id: switch.0x002_switch
    data: {}

Действие 2. При переходе сенсора движения в состояние off через 3 минуты проверяется текущее состояние выключателя, если выключатель находится в состоянии on, то освещение выключается.

 

- id: turn_off_light_by_motion_sensor
  alias: Turn off light by motion sensor
  trigger:
  - platform: state
    entity_id: binary_sensor.0x001_occupancy
    to: 'off'
    for: 00:03:00
  condition:
  - condition: state
    entity_id: switch.0x002_switch
    state: 'on'
  action:
  - service: switch.turn_off
    entity_id: switch.0x002_switch
    data: {}

Действие 3. При включении освещения через 3 минуты проверяется состояние датчика на присутствие движения, если оно не обнаружено, то освещение выключается. Иначе, свет должен отключиться, когда сенсор движения перейдет в состояние off - действие 2.

- id: turn_off_light_after_3_min_when_switch_on
  alias: Turn off light after 3 min when switch on
  trigger:
  - platform: state
    entity_id: switch.0x002_switch
    to: 'on'
    for: 00:03:00
  condition:
  - condition: state
    entity_id: binary_sensor.0x001_occupancy
    state: 'off'
  action:
  - service: switch.turn_off
    entity_id: switch.0x002_switch
    data: {}

 

Пример 2

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

Создаем выключатель автоматики тип Toggle с наименованием auto_light_on_off в меню Configuration -> Helpers -> + или в файл configuration.yaml добавляем следующую запись:

input_boolean:
  auto_light_on_off:
    name: Auto light on

Кнопку удобно вывести на панель lovelace для быстрого доступа.

automation auto light on off

Задействованные объекты:

  • Выключатель автоматического включения/отключения освещения - ID: input_boolean.auto_light_on_off
  • Датчик движения - ID устройства: 0x001
  • Управляемый выключатель физически замыкающий/размыкающий электрическую линию - ID устройства: 0x002

Описываемые действия:

  • Включение освещения по датчику движения
  • Отключение освещения через 3 минуты после окончания обнаружения движения датчиком
  • Отключение освещения через 3 минуты после включения выключателя (на случай если свет был включен с выключателя, но в помещении не было обнаружено движение)
  • Отключение освещения через 3 минуты после включения выключателя автоматики

Действие 1. При переходе сенсора движения в состояние on проверяется текущее состояние выключателя автоматики и выключателя освещения, если первый находится в состоянии on, а второй выключатель находится в состоянии off то освещение включается.

- id: turn_on_light_by_motion_sensor
  alias: Turn on light by motion sensor
  trigger:
  - platform: state
    entity_id: binary_sensor.0x001_occupancy
    to: 'on'
  condition:
  - condition: state
    entity_id: input_boolean.auto_light_on_off
    state: 'on'
  - condition: and
    conditions:
    - condition: state
      entity_id: switch.0x002_switch
      state: 'off'
  action:
  - service: switch.turn_on
    entity_id: switch.0x002_switch
    data: {}

Действие 2. При переходе сенсора движения в состояние off через 3 минуты проверяется текущее состояние выключателя автоматики и выключателя освещения, если первый находится в состоянии on и второй выключатель находится в состоянии on, то освещение выключается.

- id: turn_off_light_by_motion_sensor
  alias: Turn off light by motion sensor
  trigger:
  - platform: state
    entity_id: binary_sensor.0x001_occupancy
    to: 'off'
    for: 00:03:00
  condition:
  - condition: state
    entity_id: input_boolean.auto_light_on_off
    state: 'on'
  - condition: and
    conditions:
    - condition: state
      entity_id: switch.0x002_switch
      state: 'on'
  action:
  - service: switch.turn_off
    entity_id: switch.0x002_switch
    data: {}

Действие 3. При включении освещения через 3 минуты проверяется состояние выключателя автоматики и датчика на присутствие движения, если автоматика включена и движение не обнаружено, то освещение отключается. Иначе, свет должен отключиться, когда сенсор движения перейдет в состояние off - действие 2.

- id: turn_off_light_after_3_min_when_switch_on
  alias: Turn off light after 3 min when switch on
  trigger:
  - platform: state
    entity_id: switch.0x002_switch
    to: 'on'
    for: 00:03:00
  condition:
  - condition: state
    entity_id: input_boolean.auto_light_on_off
    state: 'on'
  - condition: and
    conditions:
    - condition: state
      entity_id: binary_sensor.0x001_occupancy
      state: 'off'
  action:
  - service: switch.turn_off
    entity_id: switch.0x002_switch
    data: {}

Действие 4. При включении автоматического включения освещения через 3 минуты проверяется текущее состояние выключателя автоматики (может быть выключено в период ожидания), датчика движения и выключателя освещения. Если автоматика on, движение off и свет включен, то освещение отключается.

- id: turn_off_light_after_3_min_when_auto_on
  alias: Turn off light after 3 min when switch on
  trigger:
  - platform: state
    entity_id: input_boolean.auto_light_on_off
    to: 'on'
    for: 00:03:00
  condition:
  - condition: state
    entity_id: input_boolean.auto_light_on_off
    state: 'on'
  - condition: and
    conditions:
    - condition: state
      entity_id: binary_sensor.0x001_occupancy
      state: 'off'
  - condition: and
    conditions:
    - condition: state
      entity_id: switch.0x002_switch
      state: 'on'
  action:
  - service: switch.turn_off
    entity_id: switch.0x002_switch
    data: {}

 

Пример 3

В примере 2 есть недостаток в действии 4, при окончании обнаружения движения до окончания таймера отключение освещения произойдет раньше, чем ожидается, т.к. состояния устройств будут соответствовать условиям. Решить проблему перекрестных таймеров можно создав свой таймер, по которому будет происходить отключение освещения. В файле configuration.yaml описываем таймер, время отключения 180 секунд:

timer:
  light_turn_off:
    name: Light turn off timer
    duration: 180

Задействованные объекты:

  • Выключатель автоматического включения/отключения освещения - ID: input_boolean.auto_light_on_off
  • Таймер автоматического отключения освещения - ID: timer.light_turn_off
  • Датчик движения - ID устройства: 0x001
  • Управляемый выключатель физически замыкающий/размыкающий электрическую линию - ID устройства: 0x002

Описываемые действия:

  • Включение автоматического освещения
  • Выключение автоматического освещения
  • Включение освещения с выключателя
  • Выключение освещения с выключателя
  • Включение освещения по датчику движения
  • Отмена таймера при обнаружении движения
  • Датчик движения прекратил обнаружение действия
  • Таймер завершил отсчет

Действие 1. При включении выключателя автоматики происходит перезапуск таймера отключения освещения, если датчик движения в состоянии off и освещение включено.

- id: 'turn_on_auto_light'
  alias: Auto light on
  trigger:
  - platform: state
    entity_id: input_boolean.auto_light_on_off
    to: 'on'
  condition:
  - condition: state
    entity_id: binary_sensor.0x001_occupancy
    state: 'off'
  - condition: and
    conditions:
    - condition: state
      entity_id: switch.0x002_switch
      state: 'on'
  action:
  - service: timer.cancel
    entity_id: timer.light_turn_off
    data: {}
  - service: timer.start
    entity_id: timer.light_turn_off
    data: {}

Действие 2. При отключении выключателя автоматики если был запущен таймер отключения, то он отменяется.

- id: 'turn_off_auto_light'
  alias: Auto light off
  trigger:
  - platform: state
    entity_id: input_boolean.auto_light_on_off
    to: 'off'
  condition:
  - condition: state
    entity_id: timer.light_turn_off
    state: active
  action:
  - service: timer.cancel
    entity_id: timer.light_turn_off
    data: {}

Действие 3. При включении освещения с выключателя происходит перезапуск таймера отключения, если выключатель автоматики on и датчик движения off.

  - id: 'turn_on_light'
    alias: Light turn on
    trigger:
    - platform: state
      entity_id: switch.0x002_switch
      to: 'on'
    condition:
    - condition: state
      entity_id: input_boolean.auto_light_on_off
      state: 'on'
    - condition: and
      conditions:
      - condition: state
        entity_id: binary_sensor.0x001_occupancy
        state: 'off'
    action:
    - service: timer.cancel
      entity_id: timer.light_turn_off
      data: {}
    - service: timer.start
      entity_id: timer.light_turn_off
      data: {}

Действие 4. При отключении освещения с выключателя если был запущен таймер отключения, то он отменяется.

- id: 'turn_off_light'
  alias: Light turn off
  trigger:
  - platform: state
    entity_id: switch.0x002_switch
    to: 'off'
  condition:
  - condition: state
    entity_id: timer.light_turn_off
    state: active
  action:
  - service: timer.cancel
    entity_id: timer.light_turn_off
    data: {}

Действие 5. При обнаружении движения включается освещение, если выключатель автоматики on и освещение на данный момент выключено.

  - id: 'turn_on_light_by_motion'
    alias: Light turn on by motion sensor
    trigger:
    - platform: state
      entity_id: binary_sensor.0x001_occupancy
      to: 'on'
    condition:
    - condition: state
      entity_id: input_boolean.auto_light_on_off
      state: 'on'
    - condition: and
      conditions:
      - condition: state
        entity_id: switch.0x002_switch
        state: 'off'
    action:
    - service: switch.turn_on
      entity_id: switch.0x002_switch
      data: {}

Действие 6. При обнаружении движения происходит отмена таймера отключения при его активном текущем состоянии.

- id: 'cancel_timer_by_motion'
  alias: Timer cancel by motion sensor 
  trigger:
  - platform: state
    entity_id: binary_sensor.0x001_occupancy
    to: 'on'
  condition:
  - condition: state
    entity_id: timer.light_turn_off
    state: active
  action:
  - service: timer.cancel
    entity_id: timer.light_turn_off
    data: {}

Действие 7. При окончании обнаружения движения датчиком, включенном выключателе автоматики и включенном свете происходит запуск таймера на отключения освещения.

- id: 'start_timer_by_motion'
  alias: Timer start by motion sensor
  trigger:
  - platform: state
    entity_id: binary_sensor.0x001_occupancy
    to: 'off'
  condition:
  - condition: state
    entity_id: input_boolean.auto_light_on_off
    state: 'on'
  - condition: and
    conditions:
    - condition: state
      entity_id: switch.0x002_switch
      state: 'on'
  action:
  - service: timer.start
    entity_id: timer.light_turn_off
    data: {}

Действие 8. При окончании отсчета таймера происходит отключение освещения, если выключатель автоматики on, датчик движения off и освещение включено.

  - id: 'turn_off_light_by_timer'
    alias: Timer finished
    trigger:
    - platform: event
      event_type: timer.finished
      event_data:
        entity_id: timer.light_turn_off
    condition:
    - condition: state
      entity_id: input_boolean.auto_light_on_off
      state: 'on'
    - condition: and
      conditions:
      - condition: state
        entity_id: binary_sensor.0x001_occupancy
        state: 'off'
    - condition: and
      conditions:
      - condition: state
        entity_id: switch.0x002_switch
        state: 'on'
    action:
    - service: switch.turn_off
      entity_id: switch.0x002_switch
      data: {}

 

Пакеты

Для удобства управления наборы вспомогательных компонентов и автоматизаций, объединенных общим сценарием можно записать в отдельный файл с расширением yaml. Для подключения данных из этого файла его необходимо положить в папку .homeassistant/packages/ и в configuration.yaml прописать:

homeassistant:
  packages: !include_dir_named packages

Для примера выше создадим файл .homeassistant/packages/room_auto_light.yaml с сценарием управления света в помещении с содержанием:

# Переключатель автоматического вкл/откл. освещения в помещении
input_boolean:
  auto_light_on_off:
    name: Auto light on

# Таймер отключения освещения в помещении (180 секунд)
timer:
  light_turn_off:
    name: Light turn off timer
    duration: 180

# Автоматизации
automation:
  # Включение автоматического освещения
  - id: 'turn_on_auto_light'
    alias: Auto light on 
    trigger:
    - platform: state
      entity_id: input_boolean.auto_light_on_off
      to: 'on'
    condition:
    ...

  # Отключение автоматического освещения
  - id: 'turn_off_auto_light'
    alias: Auto light off
    trigger:
    - platform: state
      entity_id: input_boolean.auto_light_on_off
      to: 'off'
    condition:
    ...
    ...
    ...

После перезагрузки Home Assistant дополнительные компоненты и автоматизации будут доступны в системе.

Автор: muxa, 30.07.2020
Войдите или зарегистрируйтесь, чтобы иметь возможность оставлять комментарии