Files
obsidian-vault/family/tech/zont-scenario-logic-11109.md
T

154 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
aliases:
- ZONT сценарий 11109
- Передернуть Автомат Котельной
- ZONT тип 45 задержка
- ZONT сценарная логика
created: '2026-09-17'
namespace: family
related:
- '[[family/how-to/zont-config-compiler]]'
- '[[family/tech/zont-config-object-types]]'
- '[[family/how-to/home-automation]]'
tags:
- family
- tech
- zont
- modbus
- homeautomation
title: 🔁 ZONT — сценарная логика (типы 11 / 46 / 49 / 45)
type: tech
updated: '2026-09-17'
---
# 🔁 ZONT — сценарная логика (типы 11 / 46 / 49 / 45)
Как устроены сценарии в конфиге ZONT и что именно разобрано в боевом конфиге
`config_0FA7C33CC89F_0FA7C33CC89F_2026-09-17_12-12-28.txt` (598 `#Z`, 25 `#S`, 65 сценариев).
Контекст конвертеров — [[family/how-to/zont-config-compiler]].
---
## 1. Структура сценария
Сценарий — это **4 связанных типа объектов**:
```
#Z<sid>=11,'Имя',[<шаг>,<шаг>,…],0,0,<enabled>,0,0 ← сценарий
#Z<step>=46,<prio>,<cond>,[<действие>,…],[] ← шаг
#Z<cond>=49,<relay_id>,<operator>,<value> ← условие
#Z<act>=… ← действие (тип 5, 9 или 45)
```
| Тип | Роль | Формат | Поля |
|---|---|---|---|
| **11** | Сценарий | `[11, name, [step_ids], 0, 0, enabled, 0, 0]` | **8** полей. `enabled` — поле v[5] (0/1) |
| **46** | Шаг | `[46, prio, cond_id, [action_ids], []]` | **5** полей. `prio` и последнее поле — всегда 0/`[]` |
| **49** | Условие | `[49, relay_id, operator, value]` | **4** поля. `operator`: `1`=equals, иначе not_equals |
| **45** | Задержка | `[45, <миллисекунды>]` | **2** поля |
**Каноническая форма** (99% конфига): 1 сценарий → 1 шаг → 1 условие → 1 действие.
---
## 2. Действия в шаге — три разных типа
Список действий шага (`46` поле 3) может содержать объекты **трёх** типов:
| Тип | Что это | Формат | Декодирование |
|---|---|---|---|
| **5** | Действие над выходом контроллера | `[5, name, output_ref, 1, delay, impulse_dur, [], sched_bmp, sched_time, impulse_period, value]` | 11 полей. `output_ref >> 4` = id выхода; `delay` — поле 4 (мс) |
| **9** | Команда реле | `[9, name, target_relay, '1'/'0']` | 4 поля. `value`**строка** `'1'`/`'0'`, не число |
| **45** | Пауза между действиями | `[45, ms]` | 2 поля |
> ⚠️ **Тип 45 ≠ `delay_ms` типа 5.** `delay_ms` — задержка **внутри** действия перед его выполнением.
> Тип 45 — **отдельный объект-пауза** в последовательности. Их часто путают при чтении конфига.
---
## 3. Разобранный кейс: `#Z11109` «Передернуть Автомат Котельной»
**Единственный сценарий в конфиге с нестандартной формой** — 2 шага и 7 действий в одном шаге.
```
#Z11109=11,'Передернуть Автомат Котельной',[11827,11828],0,0,0,0,0
#Z11823=49,11190,1,0 ← условие
#Z11827=46,0,11823,[11191,11030,11824,11029,11825,11192,11826],[]
#Z11828=45,0 ← шаг 2
#Z11824=45,20000 #Z11825=45,60000 #Z11826=45,0
#Z11029=9,'Включить реле «20/1 Автомат Котельная»',11028,'1'
#Z11030=9,'Выключить реле «20/1 Автомат Котельная»',11028,'0'
#Z11191=9,'Включить реле «virt. Запретить передергивание»',11190,'1'
#Z11192=9,'Выключить реле «virt. Запретить передергивание»',11190,'0'
#Z11028=14,'20/1 Автомат Котельная',175728,0
#Z11190=14,'virt. Запретить передергивание',179904,0
```
### Что происходит по шагам
**Условие:** `relay 11190 ('virt. Запретить передергивание') == 0` — т.е. передёргивание **не** запрещено.
**Шаг 1 (`11827`) — 7 действий подряд:**
| # | Объект | Действие | Пауза после |
|---|---|---|---|
| 1 | `11191` (type 9) | включить `virt. Запретить передергивание` | — |
| 2 | `11030` (type 9) | **выключить** `20/1 Автомат Котельная` | — |
| 3 | `11824` (type 45) | пауза | **20 000 мс** |
| 4 | `11029` (type 9) | **включить** `20/1 Автомат Котельная` | — |
| 5 | `11825` (type 45) | пауза | **60 000 мс** |
| 6 | `11192` (type 9) | выключить `virt. Запретить передергивание` | — |
| 7 | `11826` (type 45) | пауза | 0 |
**Шаг 2 (`11828`)**`[45, 0]`, пустая пауза-заглушка. Оставлен планировщиком ZONT, функциональной нагрузки не несёт.
### Смысл логики
Это **защита от повторного передёргивания**:
1. Виртуальное реле `virt. Запретить передергивание` (id `11190`) ставится в 1 **первым** действием.
2. Условие сценария (`11823`) требует `== 0` → пока реле в 1, сценарий повторно **не запустится**.
3. Снимается реле только **после** 20 с + 60 с пауз (действие 6), т.е. через 80 секунд после старта → минимальный интервал между передёргиваниями автомата = 80 с.
### 🔴 Проблема
`#Z11109` поле v[5] = **`0`** → **сценарий выключен в контроллере**. Защита и сама функция передёргивания не работают.
---
## 4. Полные счётчики по конфигу (для сверки после правок)
| Тип | Кол-во | Комментарий |
|---|---|---|
| 11 / 46 | 65 / 65 | все одношаговые, кроме `11109` |
| 49 | 65 | все ровно 4 поля, `op=1` (equals) у всех |
| 45 | 4 | `11824`, `11825`, `11826`, `11828` — только в `11109` |
| 9 | 42 | 21 пара ВКЛ/ВЫКЛ, `value` — строка `'1'`/`'0'` |
| 5 | 66 | действия над выходами |
| 14 | 40 | реле |
| 10 | 22 | GUI-переключатели |
| 0 / 36 | 13 / 13 | дискретные датчики + вложенные конфиги |
| 52 / 51 / 53 | 93 / 11 / 64 | Modbus-регистры / устройства / ещё один слой |
| 16 / 20 | 10 / 1 | контуры и режимы отопления |
| **Всего `#Z`** | **598** | |
> Проверка после любой правки: `grep -c '^#Z' <файл>` должен дать **598**.
---
## 5. Статус разбора конвертером
| Что | Статус |
|---|---|
| Многошаговый сценарий (`[11827,11828]`) | ✅ разбирается с 2026-09-17 |
| 7 действий в шаге `11827` | ✅ разбирается с 2026-09-17 |
| Тип 45 (4 объекта) | ✅ парсер + эмиттер, секция YAML `delays` |
| Сценарий `enabled=0` | ℹ️ факт, не баг конвертера — решается на этапе 2 (правка YAML) |
---
## 6. Связанные заметки
- [[family/how-to/zont-config-compiler]] — конвертеры `.txt ⇄ .yml`; 2 шага и тип 45 **поддержаны с 2026-09-17** (§5b)
- [[family/tech/zont-config-object-types]] — полная таблица типов объектов и `#S`-настройки
- [[family/how-to/home-automation]] — контур автоматизации, ZONT, Modbus slave ID и регистры