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'
}