[2026-09-17] eagle: family/how-to/zont-config-compiler.md family/tech/zont-config-object-types.md

This commit is contained in:
Alexey Martemyanov
2026-09-17 19:27:08 +06:00
parent 3e4dc4c8cf
commit 9b65e8f2c7
2 changed files with 186 additions and 75 deletions
+42 -21
View File
@@ -16,7 +16,7 @@ tags:
- reference
title: "\U0001F9E9 ZONT Config — типы объектов"
type: reference
updated: '2026-09-17d'
updated: 2026-09-17e
---
# 🧩 ZONT Config — типы объектов
@@ -110,25 +110,26 @@ Modbus-регистры (тип 52) в конфиге — **отдельные
> — выдумка, удалена из кода.
>
> 🔴 **Поле 5 в YAML НЕ хранится** (`type`/`field5` вырезаны Alex) — только `enabled` производное.
> **Чем отличать `manual` от `trigger` — открытый вопрос, см. §2.3a.**
> **`manual` от `trigger` отличаются наличием ключа `trigger:`** — см. §2.3a.
Тип 11 парсится **целиком** — из него собирается `steps[]` (шаги 46 со своими условиями 49), включая многошаговые сценарии и много действий в шаге.
> ✅ **АКТУАЛЬНАЯ ФОРМА (2026-09-17, конец сессии).** Секции `scenario_steps` / `scenario_conditions` /
> ✅ **АКТУАЛЬНАЯ ФОРМА (2026-09-17, финал).** Секции `scenario_steps` / `scenario_conditions` /
> `delays` / `scenario_scripts` / `scenario_raw_objects` **убраны** — тела живут только внутри
> `steps[]`. Осталась одна служебная секция `scenario_orphans`. **Ничего не поднимается на
> уровень сценария:**
> `steps[]`. Осталась одна служебная секция `scenario_orphans`.
>
> **Trigger-сценарий** (`steps` = ровно один шаг 46) — условие поднимается в `trigger:`:
>
> ```yaml
> - id: 9691
> name: 'Автомат.: Прихожая (н/п) (14/14) ВКЛ'
> enabled: true
> trigger:
> id: 9729
> object: 9495
> value: 1
> steps:
> - id: 9819
> if:
> id: 9729
> object: 9495
> value: 1
> then:
> - id: 9563
> descr: 'Включить выход 14/14: Прихожая (н/п)'
@@ -136,25 +137,45 @@ Modbus-регистры (тип 52) в конфиге — **отдельные
> value: 1
> ```
>
> **Все остальные типы** — `trigger:` отсутствует, условие шага живёт в нём как `if:`:
>
> ```yaml
> - id: 11109
> name: Передернуть Автомат Котельной
> enabled: true
> steps:
> - id: 11827
> if:
> id: 11823
> object: 11190
> value: 0
> then:
> - id: 11191
> ...
> ```
>
> `if` ← поле 2 (`cond_id`), `then` ← поле 3 (`[9563]`), `else` ← поле 4, `flag` ← поле 1.
> `then`/`else`/`if`/`flag` — **имена полей записи 46**, поэтому разрешены.
> `type` / `field5` / `kind` / `_f5` / `trigger` (на уровне сценария) / `action` — **запрещены**.
> **`trigger:` на уровне сценария РАЗРЕШЁН** — выводится из тела (ровно один шаг 46), не подставляется.
> `type` / `field5` / `kind` / `_f5` / `action` — **запрещены**.
> Полностью — [[family/how-to/zont-config-compiler]] §6a.
### 2.3a. 🔴 Открытый вопрос: `manual` vs `trigger` без `type`/`field5`
### 2.3a. `manual` vs `trigger` — РЕШЕНО (2026-09-17, финал)
**Тип сценария из тела не выводится.** Опровергнуто фактами на 70 сценариях:
Alex: «наличием поля `trigger:`». **Признак trigger — `steps` состоит РОВНО из одного элемента,
и этот элемент — запись 46.** Тогда его условие поднимается в `trigger:` на уровне сценария.
| сценарий | поле 5 | шаги в поле 2 | фактически |
|---|---|---|---|
| `11109` | `0` | `11827`, `11828` | manual |
| `8456` | `8` | 27 элементов, среди них `8863` (46) | manual, выключен |
| `9628` | `1` | `9756` (46) | trigger |
| `8547` | `9` | `8550` (46) | trigger, выключен |
| сценарий | поле 5 | шаги в поле 2 | `trigger:` наверху | фактически |
|---|---|---|---|---|
| `9691` | `1` | `[9819]` — один, 46 | ✅ есть | trigger |
| `9628` | `1` | `[9756]` — один, 46 | ✅ есть | trigger |
| `8547` | `9` | `[8550]` — один, 46 | ✅ есть | trigger, выключен |
| `11109` | `0` | `11827`, `11828` — два | ❌ нет, `if` в шаге | manual |
| `8456` | `8` | 27 элементов, среди них `8863` (46) | ❌ нет, `if` в шаге | manual, выключен |
Наличие шага 46 в `steps` **не признак trigger**: он есть и у обоих manual-сценариев.
Формула «есть шаг 46 → база 1» дала 2 расхождения (`11109`, `8456`) и откачена.
**Ждёт решения Alex.** Полный разбор — [[family/how-to/zont-config-compiler]] §6.
⚠️ **Наличие шага 46 в `steps` — НЕ признак trigger**: он есть и у обоих manual-сценариев.
Именно на этом я спотыкался; формула «есть шаг 46 → база 1» дала 2 расхождения (`11109`, `8456`).
Правильная формула — **ровно один** элемент, и он 46. Проверено round-trip'ом: 0 расхождений.
Полная структура, формат полей и разобранный боевой кейс — [[family/tech/zont-scenario-logic-11109]].