Home Assistant: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
| Строка 195: | Строка 195: | ||
* <code>alias: external_door_open_logged</code> По этом |
* <code>alias: external_door_open_logged</code> По этом |
||
* <code> description: "Открытие Внешней Двери (с логированием)"</code> |
* <code> description: "Открытие Внешней Двери (с логированием)"</code> |
||
| ⚫ | |||
| − | * <code> mode: parallel</code> |
||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| + | |||
| ⚫ | |||
* <code> trigger:</code> |
* <code> trigger:</code> |
||
* <code> - platform: state</code> |
* <code> - platform: state</code> |
||
| Строка 229: | Строка 235: | ||
* <code> level: info</code> |
* <code> level: info</code> |
||
* <code> message: "[door] SKIPPED: conditions not met ({{ from }} → {{ to }})"</code> |
* <code> message: "[door] SKIPPED: conditions not met ({{ from }} → {{ to }})"</code> |
||
| − | |||
| − | |||
| − | |||
| − | mode: parallel |
||
| − | |||
| ⚫ | |||
| − | |||
| ⚫ | |||
| − | |||
| ⚫ | |||
| − | |||
| ⚫ | |||
| − | |||
| ⚫ | |||
| − | |||
| ⚫ | |||
Версия 12:15, 26 сентября 2025
Home Assistant
Пока это заготовка статьи про домашнюю автоматизацию и реализацию некоторых фич
Прежде чем начать
Для удобства работы (что б меньше возиться c UI) удобно выпустить токен и читать данные через API
- Профиль (снизу справа)
- Безопасность
- Долгосрочные токены доступа
Токен выглядит как-то так
eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp <пропущенно-много-букав> sImlhdCI6MTcyMTkwNzUzNywiZXhwIjoyMDM3MjY3NTM3fQ.YDLTNoOFebK4BVHFo-V1q7a84Cs78Z0b3H2e-F5mBpk"
Сразу сохранить, в открытом виде он показывается один раз
Ссылки
Пока что тут в основном ссылки
- WebOS : https://www.home-assistant.io/integrations/webostv/
- ModKam Реле https://www.youtube.com/watch?v=u3zDXNGVbgo
- (рус) Базовая установка в контейнерах https://habr.com/ru/articles/731110/
- (рус) Тут кой-какие примеры ручного добавления в конфиги - https://sprut.ai/article/home-assistant-statya-3-dobavlyaem-ustroystva (но качество статьи спорное)
- Прошивки
Zigbee2Tasmota
- Тут вроде бы должно быть описание как интегрироваться с ХА ноя ничего не понял https://thehelpfulidiot.com/how-to-use-zigbee2tasmota-with-home-assistant
Прошивки
- Tasmota https://zigbee.blakadder.com/Sonoff_ZBBridge-P.html
- Еще одна инструкция по прошивке бриджа https://dialedin.com.au/blog/sonoff-zbbridge-p-setup
- Ещ инструкция (по-моему самая полная и правильная) https://notenoughtech.com/home-automation/tasmota-on-sonoff-zb-bridge-pro/#flash
Термины и понятия
Когда что использовать
- Срабатывание по условию -> 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"
Что бы запустить скрипт можно добавить кнопку
Настройки панели --> добавить карточку (справа внизу) --> Объект (что бы вписать вкод вручную)
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 }})"
alias: external_door_open_loggedПо этомdescription: "Открытие Внешней Двери (с логированием)"mode: parallelРежим выполнения автоматики при повторном запуске до завершения предыдущего- single — новый запуск игнорируется.
- restart — оборвать текущий, начать заново.
- queued — поставить в очередь (можно max).
- parallel — запустить ещё один экземпляр параллельно.
Для дверного датчика чаще хватает single (или queued). parallel нужен редко.
trigger:- platform: stateentity_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.logdata:name: "door_automation"entity_id: binary_sensor.external_doormessage: "TRIGGERED (Шаблон:From → Шаблон:To)"- service: system_log.writedata:logger: automation.doorlevel: infomessage: "[door] sending notify (Шаблон:From → Шаблон:To)"- service: system_log.writedata:logger: automation.doorlevel: infomessage: "[door] notify SENT"default:- service: system_log.writedata:logger: automation.doorlevel: infomessage: "[door] SKIPPED: conditions not met (Шаблон:From → Шаблон:To)"