state триггер в автоматизациях Home Assistant

state — это один из триггеров которые можно использовать в автоматизациях Home Assistant (список всех триггеров).

С помощью этого триггера можно запустить автоматизацию при изменении какой-то сущности.

Если вам нужна базовая информация про автоматизации в Home Assistant — прочитайте этот текст.

Пример

automation:
  - trigger:
      platform: state
      entity_id: sensor.my
    action:
      service: system_log.write
      data:
        message: "changed"

Это автоматизация будет выполняться при изменении стейта sensor.my и при изменении любого из его атрибутов.

Параметр entity_id

Триггеру state нужно обзязательно указать entity_id. Значнеие — это либо строка в которой указана одна сущность (в этом случае автоматизация запускается при изменении стейта или атрибутов указанной сущности):

automation:
  - trigger:
      platform: state
      entity_id: input_number.n1
    action:
      service: system_log.write
      data:
        message: "input_number has changed"

либо список строк (в этом случае автоматизация запускается каждый раз когда меняется стейт или атрибуты любой из указанных сущностей):

automation:
  - trigger:
      platform: state
      entity_id:
        - sensor.0x00158d0004605ef0_humidity
        - sensor.0x00158d00045ad03f_humidity
    action:
      service: system_log.write
      data:
        message: "humidity has changed"

Так же можно перечислить несколько сущностей и другим способом — через запятую:

automation:
  - trigger:
      platform: state
      entity_id: input_text.t1, input_text.t2
    action:
      service: system_log.write
      data:
        message: "input_text has changed"

Параметры from и to

Триггеру state можно указать необязательные параметры from и to.

Значения параметров from и to всегда стоит писать в кавычках.

Если указано значение для параметра to, то автоматизация будет запускаться только если произошло изменения стейта и новое значение стейта стало такое как указано в to:

automation:
  - trigger:
      platform: state
      entity_id: vacuum.rockrobo
      to: "cleaning"
    action:
      service: system_log.write
      data:
        message: "Robot stated cleaning"

Если указано значение для параметра from, то автоматизация будет запускаться только если произошло изменение стейта и значение стейта до изменения было такое как указано в from:

automation:
  - trigger:
      platform: state
      entity_id: sensor.bathroom_temperature
      to: "unavailable"
    action:
      service: system_log.write
      data:
        message: "Bathroom sensor is available"

Значения параметров from и to может быть либо строка, либо список строк. В том случае если значение — это список, то автоматизация запустится только если состояние стейта до/после изменения такое как перечислено в списке.

automation:
  - trigger:
      platform: state
      entity_id: sensor.player
      to:
        - "stopped"
        - "paused"
    action:
      service: system_log.write
      data:
        message: "Player is not playing"

Можно одновременно указать указать оба параметра from и to. В этом случае автоматизация запустится если произошло изменение стейта и до изменения значение сущности было такое как указано в from, а стало такое как указано в to.

Параметр attribute

Триггеру state можно указать необязательный параметр attribute.

В том случае если указан параметр attribute, то автоматизация запустится только при изменении значения этого атрибута у сущности. Вот пример. Есть сенсор sensor.tv, у него есть атрибут channel — канал который сейчас работает. Вот автоматизация которая запустится при изменении канала:

automation:
  - trigger:
      platform: state
      entity_id: sensor.tv
      attribute: channel
    action:
      service: system_log.write
      data:
        message: "TV has changed channel"

В том случае если в описании триггера указан параметр attribute, то параметры from/to означают не стейт сущности, а значение атрибута. Вот автоматизация которая зпускается только когда значение атрибута bin у сущности робота пылесоса становисят full:

automation:
  - trigger:
      platform: state
      entity_id: vacuum.rockrobo
      attribute: bin
      to: "full"
    action:
      service: system_log.write
      data:
        message: "Robot bin is full"

Параметр for

Триггеру state можно указать необязательный параметр for.

Значение этого параметра — это период времени. Вот пример. Эта автоматизация запустится когда стейт сенсора будет в состоянии "ringing" в течении 5 секунд. Т.е. значение становится "rining" и через 5 секунд стреляет автоматизация. Если стейт стал "ringing", но через 4 секунды поменяся на "off", то автоматизаци не запустится.

automation:
  - trigger:
      platform: state
      entity_id: sensor.bell
      to: "ringing"
      for: "00:00:05"
    action:
      service: system_log.write
      data:
        message: "bell is ringing"

Период времени можно указать как в виде строк 'HH:MM', 'HH:MM:SS', 'HH:MM:SS.F', либо с помощью:

automation:
  - trigger:
      platform: state
      entity_id: sensor.test
      for:
        seconds: 2
    action:
      service: system_log.write
      data:
        message: "test"

Можно использовать следующие параметры:

  • days
  • hours
  • minutes
  • seconds
  • milliseconds

Но указывать слишком долгий период следует с осторожностью. Если после изменения сущности, но до истечения for сервер Home Assistnat перезагрузится, то этот запуск автоматизации не произойдет.

В том случае если указаны to и for, то автоматизация запустится если сущность будет находится в указанном статусе указанное время.

Если указаны from и for, то автоматизация запустится если сущность изменила свой статус с from на какой-то другой и за указанный период времени не было возвращения в статус from.

Ели не указан ни from, ни to, но указан for то автоматизация запустится через for времени после любого изменения (изменение атрибутов так же запускает автомтаизацию).

Если указан параметр attribute, то все работат так же, но вместо стейта сущности в логие участвет указанный атрибут.

Переменная trigger

После того как триггер сработал в блоках condition и action становится доступна специальная переменная с именем trigger. Вот пример что может находится в этой переменной:

{
    'platform': 'state',
    'entity_id': 'sensor.test',
    'from_state': <state sensor.test=one; A1=1, A2=10.0, friendly_name=test @ 2021-06-07T09:20:22.437017+00:00>,
    'to_state': <state sensor.test=two; A1=1, A2=10.0, friendly_name=test @ 2021-06-07T09:20:54.614604+00:00>,
    'for': datetime.timedelta(seconds=2),
    'attribute': None,
    'description': 'state of sensor.test',
    'id': '0'
}
Редактировать страницу на GitHub