[2026-09-16] eagle: family/how-to/ha-automations.md family/tech/zigbee-t610-z2m-i-zha.md

This commit is contained in:
Alexey Martemyanov
2026-09-16 20:43:07 +06:00
parent 61bd507a1f
commit 1a9ee16174
2 changed files with 105 additions and 3 deletions
+29
View File
@@ -560,6 +560,35 @@ curl -s -H "$H" "$B/api/logbook/$T+00:00?entity=automation.<alias>"
```
Без этого легко «найти» баг автоматизации там, где был ручной тестовый вызов.
### 13.5.5. 🔴 `mode` автоматизации действует ТОЛЬКО внутри неё (2026-09-16, вечер)
**Взаимной блокировки между автоматизациями в HA НЕТ.** Запуск одной не останавливает другую, даже если обе управляют одной сущностью. Две автоматизации душевой (ВКЛ `single` + ВЫКЛ `restart`) реагируют на одни и те же события presence/lux и тянут свет в противоположные стороны — побеждает тот `turn_*`, что выполнился последним. Это **гонка**, а не логический конфликт условий.
| `mode` | Поведение при новом триггере во время работы |
|---|---|
| `single` | новое событие **игнорируется** |
| `restart` | текущий запуск **убивается** (включая `delay`/`wait_for_trigger`), стартует новый |
| `queued` | встаёт в очередь, выполнится после |
> ⚠️ **`single` + `delay` — скрытая потеря срабатываний.** Пока идёт `delay`, новый триггер молча отбрасывается: «зашёл, свет не зажёгся, потому что сценарий был занят».
> ✅ **`restart` — правильный выбор, когда нужен ровно один прогон.** Он структурно лечит дрожание датчика: сколько бы раз радар ни флипнул, параллельных выполнений не бывает.
**`trigger.id` — как сценарий узнаёт, какой триггер сработал:**
- каждый триггер получает метку `id`; в `actions` доступно `trigger.id` / `trigger.platform`;
- доступен **только сработавший сейчас** триггер — проверить оба состояния можно лишь через `condition: state`, не через `trigger`;
- **`automation.trigger` без `skip_condition` даёт пустой `trigger.id`** — ветки `condition: trigger` уходят в `default`, так тестировать нельзя;
- у триггера без `id` значение будет `null`, а не имя.
> 📌 **Триггер по освещённости `type: illuminance` с `below`/`above` = `numeric_state`** — срабатывает только на **пересечение порога**. Изменение `1 → 2` сценарий не запускает. (Alex проговаривал это отдельно как требование.)
### 13.5.6. 🧠 Процессный питфолл: вопрос ≠ команда действовать
Дважды за сессию Alex резко реагировал («какого хуя ты пошел чето делать», «хули ты полез делать») на попытку **проверить систему вместо ответа на вопрос**. Вопросы вида «могут ли два сценария взаимоисключаться?», «знает ли сценарий свой триггер?» — это **теоретические вопросы**, ответ на них даётся словами, из уже известных фактов.
Правило: **пока нет явного «делай/применяй» — только текст.** Чтение живого конфига/сенсоров/истории = действие, требует команды.
**Связанный питфолл:** не переобъяснять Alex устройство его же системы. Рассуждение «подсветка засвечивает датчик освещённости» он дважды отклонил как irrelevant — он это знает. Если он говорит «олень»/«нихуя не понял» — значит ответ был **не на его вопрос**, а не то, что он не понимает тему.
---
## Связанные заметки