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

11 KiB
Raw Blame History

aliases, created, namespace, related, tags, title, type, updated
aliases created namespace related tags title type updated
ZONT сценарий 11109
Передернуть Автомат Котельной
ZONT тип 45 задержка
ZONT сценарная логика
ZONT поле 2 сценария
2026-09-17 family
family/how-to/zont-config-compiler
family/tech/zont-config-object-types
family/how-to/home-automation
family
tech
zont
modbus
homeautomation
🔁 ZONT — сценарная логика (типы 11 / 46 / 49 / 45) tech 2026-09-17b

🔁 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 «Передернуть Автомат Котельной»

Единственный сценарий в конфиге с нестандартной формой — 7 действий в шаге и задержка (45) прямо в поле 2 сценария (11828) вместо второго шага. См. §5 «Уточнение семантики поля 2».

#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] прямо в поле 2 сценария: пустая пауза-заглушка. Оставлена планировщиком 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
Round-trip всех 4 конфигов чисто (test_roundtrip.py, коммит 199f2b1)
Сценарий enabled=0 факт, не баг конвертера

🔴 Уточнение семантики поля 2 (важно)

Поле 2 сценария — не «список шагов», а последовательность ссылок, куда попадают объекты разных типов. Полный список: шаг (46) и задержка (45).

В #Z11109 поле 2 = [11827, 11828], где:

  • 11827 — настоящий шаг (46) с условием и 7 действиями;
  • 11828задержка (45,0), т.е. «шаг-ожидание» без условия.

Поэтому формулировка «2 шага» неточна: шаг один, вторым элементом идёт задержка-заглушка. Отсюда же — extra_links в YAML (см. family/how-to/zont-config-compiler §2.1): не-46 ссылки сохраняются дословно, чтобы round-trip остался байт-точным.

⚠️ Не путать с типом 45 внутри шага. В 11827 задержки 11824/11825/11826 — это действия внутри шага. 11828ссылка в поле 2 сценария, т.е. элемент верхнего уровня.


6. План переработки YAML-структуры (2026-09-17, ждёт апрува)

Сценарии в YAML переписываются в нативную ZONT-форму вложенных инструкций «если … то …»без HA-синтаксиса (triggers, platform: state). Alex: «нет структура должна быть как в zont. триггеров нет.»

Предлагаемая форма для 11109:

scenarios:
  - id: 11109
    name: 'Передернуть Автомат Котельной'
    enabled: false
    blocks:
      - id: 11827
        if: {id: 11823, relay: 11190, operator: equals, value: 0}
        then:
          - {id: 11191, action: relay_on,  relay: 11190}
          - {id: 11030, action: relay_off, relay: 11028}
          - {id: 11824, action: wait, ms: 20000}
          - {id: 11029, action: relay_on,  relay: 11028}
          - {id: 11825, action: wait, ms: 60000}
          - {id: 11192, action: relay_off, relay: 11190}
          - {id: 11826, action: wait, ms: 0}
    tail:
      - {id: 11828, action: wait, ms: 0}   # задержка из поля 2 сценария

Полный план и открытые вопросы — family/how-to/zont-config-compiler §5c.


7. Связанные заметки