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"
Можно использовать следующие параметры:
Но указывать слишком долгий период следует с осторожностью. Если после изменения сущности,
но до истечения 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'
}