8.3 KiB
aliases, created, namespace, related, tags, title, type, updated
| aliases | created | namespace | related | tags | title | type | updated | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
2026-09-17 | family |
|
|
🔁 ZONT — сценарная логика (типы 11 / 46 / 49 / 45) | tech | 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, функциональной нагрузки не несёт.
Смысл логики
Это защита от повторного передёргивания:
- Виртуальное реле
virt. Запретить передергивание(id11190) ставится в 1 первым действием. - Условие сценария (
11823) требует== 0→ пока реле в 1, сценарий повторно не запустится. - Снимается реле только после 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 и регистры