[2026-09-17] eagle: family/how-to/zont-config-compiler.md family/tech/zont-config-object-types.md
This commit is contained in:
@@ -42,7 +42,7 @@ updated: 2026-09-17e
|
||||
| 7 | Радиомодули | `address`, `name` | `radio_modules` |
|
||||
| 9 | MQTT-команды (кнопка GUI → управление реле) | `name`, `target_relay`, `value` | `relay_commands` |
|
||||
| 10 | GUI-переключатели | `name` | `gui_switches` |
|
||||
| 11 | Сценарии | `name`, `when`, `do` — **парсятся полностью, человекочитаемо** | `scenarios` |
|
||||
| 11 | Сценарии | `name`, `steps[]` — **парсятся полностью**; `trigger` выводится из тела, поле 5 не хранится (только `enabled`) | `scenarios` |
|
||||
| 14 | Реле | `name`, `address`, `state` | `relays` |
|
||||
| 16 | Отопительные контуры | `name` | `heating_circuits` |
|
||||
| 20 | Режимы отопления | `name` | `heating_modes` |
|
||||
@@ -54,20 +54,22 @@ updated: 2026-09-17e
|
||||
| 42 | GUI-вкладки | `name` | `gui_tabs` |
|
||||
| 45 | Задержка-объект (пауза в мс) в списке действий шага — `[45, ms]` | `ms` | инлайн в `steps[].then[].wait` |
|
||||
| 46 | Шаги сценариев | `[46, <flag>, <cond_id>, [<then_ids>], [<else_ids>]]` — 5 полей; в YAML `{id, flag?, if, then[], else[]}` | инлайн в `scenarios[].steps[]` |
|
||||
| **47** ⚠️ | **Лист дерева условий (конструктор логики)** — `[47, <оператор>, <объект>, <значение>, <порог>]` | ❌ **НЕ ПОДДЕРЖАН** | — |
|
||||
| **48** ⚠️ | **Группа условий И/ИЛИ** — `[48, <логика>, [<id>]]` | ❌ **НЕ ПОДДЕРЖАН** | — |
|
||||
| 49 | Условия сценариев | `relay_id`, `operator`, `value` | инлайн в `steps[].if` |
|
||||
| **50** ⚠️ | **Запуск команды/сценария по id** — `[50, 1, 0, 0, <id>]` | ❌ **НЕ ПОДДЕРЖАН** | — |
|
||||
| **47** ✅ | **Лист дерева условий (конструктор логики)** — `[47, <оператор>, <объект>, <значение>, <порог>]` | `op`, `left`, `right`, `value` | инлайн в `if` шага |
|
||||
| **48** ✅ | **Группа условий И/ИЛИ/НЕ** — `[48, <логика 0=И,1=ИЛИ,2=НЕ>, [<id>]]` | `group`, `children[]` | инлайн в `if` шага |
|
||||
| 49 | Условия сценариев | `relay_id`, `operator`, `value` | инлайн в `trigger` / `steps[].if` |
|
||||
| **50** ✅ | **Маска дней недели** — `[50, 1, 0, 0, <days_mask>]` (`109 = 0b1101101` = пн,ср,чт,сб,вс) | *raw* (семантика маски подтверждена Alex) | инлайн как объект-условие |
|
||||
| 51 | Modbus-устройства | `slave_id`, `name`, `poll_interval`, `timeout`, `registers`, `raw_params` | `modbus_devices` |
|
||||
| 52 | Modbus-регистры | `name`, `register`, `bit_width`, `repeat_period`, `num_vars`, `raw_params` | **вложены в своё устройство 51** |
|
||||
| 53 | Аналоговые выходы | `name`, `min`, `max`, `value`, `offset`, `scale`, `flags`, `address` | `analog_outputs` |
|
||||
| 57 | MQTT-топики | `topic`, `sensors` | `mqtt_topics` |
|
||||
| **59** ⚠️ | **Мини-скрипт ZONT** — `[59, '<код>', <арг1>, <арг2>, <флаг>]` | ❌ **НЕ ПОДДЕРЖАН** | — |
|
||||
| **59** ✅ | **Мини-скрипт ZONT** — `[59, '<код>', <арг1>, <арг2>, <флаг>]` | `descr`, `args[]` | инлайн в `then`/`else` |
|
||||
|
||||
> ⚠️ **Типы 47 / 48 / 50 / 59 обнаружены 2026-09-17** в локальном конфиге с контроллера
|
||||
> (`config_local_2026-09-17_14-16-35.txt`, 660 `#Z`) — это **конструктор логики** ZONT.
|
||||
> Конвертер на таком конфиге **падает** (`Ошибка: Условие 8496: не type 49`).
|
||||
> Полный разбор — [[family/tech/zont-scenario-logic-11109]] §8.
|
||||
> ✅ **Типы 47 / 48 / 50 / 59 — ПОДДЕРЖАНЫ** (раскрыты 2026-09-17, ответы Alex —
|
||||
> [[family/tech/zont-scenario-logic-11109]] §8.7): это **конструктор логики** ZONT.
|
||||
> `47` = лист сравнения (`op`/`left`/`right`/`value`), `48` = группа (`group` = `and`/`or`/`not`,
|
||||
> `children[]`), `50` = маска дней недели, `59` = мини-скрипт (`descr` + `args`).
|
||||
> В YAML они разворачиваются **инлайн** внутри `if` / `then` / `else`.
|
||||
> Операторы type 47: `0=<`, `1=>`, `2===`, `3=<=`, `4=>=`. Логика type 48: `0=И`, `1=ИЛИ`, `2=НЕ`.
|
||||
|
||||
---
|
||||
|
||||
@@ -155,10 +157,14 @@ Modbus-регистры (тип 52) в конфиге — **отдельные
|
||||
> ```
|
||||
>
|
||||
> `if` ← поле 2 (`cond_id`), `then` ← поле 3 (`[9563]`), `else` ← поле 4, `flag` ← поле 1.
|
||||
> `then`/`else`/`if`/`flag` — **имена полей записи 46**, поэтому разрешены.
|
||||
> `then`/`else`/`if`/`flag` — **имена полей записи 46**, поэтому разрешены; `then`/`else` — **пара**.
|
||||
> **`trigger:` на уровне сценария РАЗРЕШЁН** — выводится из тела (ровно один шаг 46), не подставляется.
|
||||
> `type` / `field5` / `kind` / `_f5` / `action` — **запрещены**.
|
||||
> Полностью — [[family/how-to/zont-config-compiler]] §6a.
|
||||
> Полностью — [[family/how-to/zont-config-compiler]] §6a, правки после коммита — §6d.
|
||||
>
|
||||
> ⚠️ **Питфолл (§6d):** условие для `trigger:` вынимается из шага **переносом (`pop`)**, не копией.
|
||||
> `deepcopy` даёт PyYAML-анкоры `&idNNN`/`*idNNN`; убирание `if` из `dump_step` теряет условие у ВСЕХ
|
||||
> шагов, включая manual. Проверять надо **файл на диске**, а не прогон в `/tmp`.
|
||||
|
||||
### 2.3a. ✅ `manual` vs `trigger` — РЕШЕНО (2026-09-17, финал)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user