Home Assistant: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 133: Строка 133:
   
 
trigger = причина старта automation.
 
trigger = причина старта automation.
  +
  +
=Разбор примера автоматизации=
  +
<PRE>
  +
- alias: external_door_open_logged
  +
description: "Открытие Внешней Двери (с логированием)"
  +
mode: parallel
  +
trigger:
  +
- platform: state
  +
entity_id: binary_sensor.sonoff_external_door_sensor_contact # твоя сущность
  +
from: 'off'
  +
to: 'on'
  +
variables:
  +
from: "{{ trigger.from_state.state if trigger.from_state is not none else 'none' }}"
  +
to: "{{ trigger.to_state.state if trigger.to_state is not none else 'none' }}"
  +
action:
  +
- choose:
  +
- conditions: [] # сюда твои прежние условия (если были)
  +
sequence:
  +
- service: logbook.log
  +
data:
  +
name: "door_automation"
  +
entity_id: binary_sensor.external_door
  +
message: "TRIGGERED ({{ from }} → {{ to }})"
  +
- service: system_log.write
  +
data:
  +
logger: automation.door
  +
level: info
  +
message: "[door] sending notify ({{ from }} → {{ to }})"
  +
- service: system_log.write
  +
data:
  +
logger: automation.door
  +
level: info
  +
message: "[door] notify SENT"
  +
default:
  +
- service: system_log.write
  +
data:
  +
logger: automation.door
  +
level: info
  +
message: "[door] SKIPPED: conditions not met ({{ from }} → {{ to }})"
  +
</PRE>

Версия 11:21, 26 сентября 2025

Home Assistant

Пока это заготовка статьи про домашнюю автоматизацию и реализацию некоторых фич
Пока что тут в основном ссылки


  • Прошивки

Zigbee2Tasmota

Прошивки

Термины и понятия

Когда что использовать

  • Срабатывание по условию -> automation (с trigger описывающим условие)
  • Если automation сложный, то код можно разбить на несколько скриптов

automation = логика запуска + условия + действия;

automation

Automation — правило “если-то”:

automation:
  - alias: Door opened → notify
    trigger:
      - platform: state
        entity_id: binary_sensor.external_door
        from: 'off'
        to: 'on'
    condition: []
    action:
      - service: notify.chat
        data: {message: "Дверь открыта"}

script

Script — именованная последовательность action (шагов).
Не имеет триггера, запускается вручную (кнопкой/сервисы) или из automation.


Скрипт можно так же рассматривть как процедуру (для группировки и переиспользования кода)

script:
  send_door_alert:
    alias: Send door alert
    sequence:
      - service: notify.chat
        data: {message: "Дверь открыта"}

Вызов из automation:

action:
  - service: script.send_door_alert

Пример скрипта

Помещать в файл scripts.yaml или любой другой определенный в script: !include scripts.yaml

tv_living_room_wol:
  alias: "TV Living Room: Power On (WOL)"
  sequence:
    - service: wake_on_lan.send_magic_packet
      data:
        mac: "38:8c:50:00:a3:14"

Что бы запустить скрипт можно добавить кнопку

Настройки панели --> добавить карточку (справа внизу) --> Объект (что бы вписать вкод вручную)

HA-add-button-250923154324.png

HA-add-button- 250923154402.png

HA-button-250923154153.png

type: button
name: Включить ТВ
icon: mdi:television
tap_action:
  action: call-service
  service: script.turn_on
  target:
    entity_id: script.tv_living_room_wol
hold_action:
  action: none
double_tap_action:
  action: none
show_state: false

trigger

Trigger — часть automation. Это событие, которое запускает automation: смена состояния, время, MQTT-сообщение, вебхук, нажатие кнопки и т.д. Сам по себе trigger вне automation не существует.

Примеры триггеров:

state (изменение состояния сущности) time / time_pattern event / webhook mqtt device (из интеграций) numeric_state (порог)


script = только действия;

trigger = причина старта automation.

Разбор примера автоматизации

- alias: external_door_open_logged
  description: "Открытие Внешней Двери (с логированием)"
  mode: parallel
  trigger:
    - platform: state
      entity_id: binary_sensor.sonoff_external_door_sensor_contact   # твоя сущность
      from: 'off'
      to: 'on'
  variables:
    from: "{{ trigger.from_state.state if trigger.from_state is not none else 'none' }}"
    to:   "{{ trigger.to_state.state   if trigger.to_state   is not none else 'none' }}"
  action:
    - choose:
        - conditions: []   # сюда твои прежние условия (если были)
          sequence:
            - service: logbook.log
              data:
                name: "door_automation"
                entity_id: binary_sensor.external_door
                message: "TRIGGERED ({{ from }} → {{ to }})"
            - service: system_log.write
              data:
                logger: automation.door
                level: info
                message: "[door] sending notify ({{ from }} → {{ to }})"
            - service: system_log.write
              data:
                logger: automation.door
                level: info
                message: "[door] notify SENT"
      default:
        - service: system_log.write
          data:
            logger: automation.door
            level: info
            message: "[door] SKIPPED: conditions not met ({{ from }} → {{ to }})"