[2026-09-17] eagle: family/how-to/zont-config-compiler.md family/tech/zont-scenario-logic-11109.md
This commit is contained in:
@@ -21,7 +21,7 @@ tags:
|
|||||||
- homeautomation
|
- homeautomation
|
||||||
title: ⚙️ ZONT Config Compiler — конвертеры .txt ⇄ .yml
|
title: ⚙️ ZONT Config Compiler — конвертеры .txt ⇄ .yml
|
||||||
type: how-to
|
type: how-to
|
||||||
updated: 2026-09-17k
|
updated: 2026-09-17l
|
||||||
---
|
---
|
||||||
|
|
||||||
# ⚙️ ZONT Config Compiler — конвертеры `.txt ⇄ .yml`
|
# ⚙️ ZONT Config Compiler — конвертеры `.txt ⇄ .yml`
|
||||||
@@ -388,13 +388,16 @@ diff A.txt B.txt # пусто = round-trip чистый
|
|||||||
|
|
||||||
## 5c. 🔄 Переработка структуры YAML сценариев — ✅ СДЕЛАНО 2026-09-17
|
## 5c. 🔄 Переработка структуры YAML сценариев — ✅ СДЕЛАНО 2026-09-17
|
||||||
|
|
||||||
> ✅ **СТАТУС (2026-09-17, ночь): парсер и энкодер дописаны, форма — плоский `steps[]`,
|
> ✅ **СТАТУС (2026-09-17, ночь, финал): парсер и энкодер дописаны, форма — плоский `steps[]`,
|
||||||
> round-trip чистый на 6 конфигах.** Семантика типов 47/48/50/59 раскрыта (ответы Alex —
|
> round-trip чистый на 6 конфигах.** Семантика типов 47/48/50/59 раскрыта (ответы Alex —
|
||||||
> [[family/tech/zont-scenario-logic-11109]] §8.7), операторы и логика подтверждены фактами
|
> [[family/tech/zont-scenario-logic-11109]] §8.7), операторы и логика подтверждены фактами
|
||||||
> конфига. Код реализован. **Не закоммичено** — ждёт команды Alex.
|
> конфига. **Type 9 и type 5 раскрыты из `raw` в читаемую форму.** Код реализован.
|
||||||
|
> **Не закоммичено** — ждёт команды Alex.
|
||||||
>
|
>
|
||||||
> 📄 **Артефакт:** `zont_config/config_local_2026-09-17_14-16-35.yml` (6110 строк) — свежий
|
> 📄 **Артефакты (в проекте):** `zont_config/config_local_2026-09-17_16-02-18.yml` — **финальный**
|
||||||
> локальный конфиг в читаемой форме, лежит в проекте (не в `/tmp`).
|
> разобранный конфиг (686 строк, Alex пересоздал сценарий); `zont_config/config_local_2026-09-17_14-16-35.yml`
|
||||||
|
> — предыдущий (6110 строк). Оба в `zont_config/`, не в `/tmp`.
|
||||||
|
|
||||||
|
|
||||||
**Задача Alex (исходная):** «переписать блок парсинга/сборки сценариев чтобы он составлял синтаксис как у Home Assistant automations вместо текущей разбросанной структуры. с опциональными айдишниками у операторов».
|
**Задача Alex (исходная):** «переписать блок парсинга/сборки сценариев чтобы он составлял синтаксис как у Home Assistant automations вместо текущей разбросанной структуры. с опциональными айдишниками у операторов».
|
||||||
|
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ tags:
|
|||||||
- zont
|
- zont
|
||||||
- modbus
|
- modbus
|
||||||
- homeautomation
|
- homeautomation
|
||||||
title: 🔁 ZONT — сценарная логика и конструктор (11/46/47/48/49/50/59/45)
|
title: 🔁 ZONT — сценарная логика и конструктор (11/46/47/48/49/50/59/45/9/5)
|
||||||
type: tech
|
type: tech
|
||||||
updated: '2026-09-17g'
|
updated: 2026-09-17e
|
||||||
---
|
---
|
||||||
|
|
||||||
# 🔁 ZONT — сценарная логика и конструктор логики
|
# 🔁 ZONT — сценарная логика и конструктор логики
|
||||||
@@ -459,8 +459,39 @@ Alex спросил: «а по всем действиям в "Простой т
|
|||||||
| 4 | `#Z8465 = [59, 'objcmd 11907 ",,,%0";#h', 8464, 0, 0]`, где `8464` = `[49, 4099, 0, 8]` (условие) | Аргумент = **условие**. Что за `;#h`? |
|
| 4 | `#Z8465 = [59, 'objcmd 11907 ",,,%0";#h', 8464, 0, 0]`, где `8464` = `[49, 4099, 0, 8]` (условие) | Аргумент = **условие**. Что за `;#h`? |
|
||||||
| 5 | `#Z8467 = [59, '3', 0, 0, 0]` | Скрипт = просто цифра `3`. Константа? Зачем отдельным действием? |
|
| 5 | `#Z8467 = [59, '3', 0, 0, 0]` | Скрипт = просто цифра `3`. Константа? Зачем отдельным действием? |
|
||||||
| 6 | `#Z8486`/`#Z8488` = `set var1`, arg1 = `8485`/`8487` — **type 50** | Type 50 стоит как **источник значения** для var1, а не как триггер. Это то же самое, что триггер? |
|
| 6 | `#Z8486`/`#Z8488` = `set var1`, arg1 = `8485`/`8487` — **type 50** | Type 50 стоит как **источник значения** для var1, а не как триггер. Это то же самое, что триггер? |
|
||||||
| 7 | `#Z9500 = [5,'Вкл. Рад. ванная 2эт',145728,1,0,0,[],0,0,0,512]` | Объект выхода `145728` **отсутствует** в конфиге. Поле 10 = `512` — что это? |
|
| 7 | `#Z9500 = [5,'Вкл. Рад. ванная 2эт',145728,1,0,0,[],0,0,0,512]` | Объект выхода `145728` **отсутствует** в конфиге. Поле 10 = `512` — что это? → ✅ **пункт 7 ЗАКРЫТ**: `145728` — id выхода (`output_id = 145728 >> 4 = 9108`), `512` — код. Alex: «145728 — это очевидно id». **Выводить семантику `512` из подписи не нужно** |
|
||||||
| 8 | `#Z8457 = [9,'Установить целевую температуру 23.8...',8669,'2968']`, `#Z8470 = [9,...,8669,'8574']` | Значение `'2968'` — **отсутствующий объект**. Это «установить температуру»/«активировать режим»? |
|
| 8 | `#Z8457 = [9,'Установить целевую температуру 23.8...',8669,'2968']`, `#Z8470 = [9,...,8669,'8574']` | → ✅ **пункт 8 ЗАКРЫТ**: type 9 = `[9, '<подпись>', <id цели>, '<значение>']`. Цель — реле (14) / контур (16) / режим (20). Поле 4 — **ссылка/код, не уставка** («`'2968'`» при тексте «23.8»). Alex подтвердил: `8470` → цель `8669` = «Контур ГВС» |
|
||||||
|
|
||||||
|
### 8.12. 🔴 Type 9 и Type 5 — модель полей (подтверждено Alex 2026-09-17, вечер)
|
||||||
|
|
||||||
|
**Type 9 — команда (реле / контур / режим отопления):**
|
||||||
|
|
||||||
|
```text
|
||||||
|
#Z<id> = [9, '<подпись команды>', <id цели>, '<значение>']
|
||||||
|
```
|
||||||
|
|
||||||
|
| Часть | Смысл | Пример |
|
||||||
|
|---|---|---|
|
||||||
|
| поле 2 | подпись, собранная UI | `'Установить целевую температуру 22 для контура Спальня'` |
|
||||||
|
| поле 3 | **id цели** → тип 14 (реле) / 16 (контур) / 20 (режим) | `10034` = `Спальня` (16), `8574` = `Режим отопления` (20), `9263` = `Реле 1: Конвектор кухня` (14) |
|
||||||
|
| поле 4 | **значение как строка** — `'1'`/`'0'` (вкл/выкл) **или ссылка/код** | `9826`→`'1'` (вкл реле), `8470`→`'8574'`, `8457`→`'2968'` |
|
||||||
|
|
||||||
|
🔴 **Ловушка:** поле 4 ≠ значение уставки. У `8457` подпись «температуру 23.8», а поле 4 = `'2968'`
|
||||||
|
(ссылка на отсутствующий объект). **Не выводить значение из текста подписи.**
|
||||||
|
|
||||||
|
**Type 5 — действие над выходом контроллера:**
|
||||||
|
|
||||||
|
```text
|
||||||
|
#Z<id> = [5, '<имя>', <output_ref>, <on/off>, <delay>, <impulse>, [], bmp, time, <code>]
|
||||||
|
```
|
||||||
|
|
||||||
|
`output_id = output_ref >> 4`. Пример `9500`: `output_ref=145728` → `output_id=9108`, `value=1`.
|
||||||
|
|
||||||
|
> ✅ **Ответы Alex (пересозданный сценарий):** «`8457` — поменял температуру на 22, контур на Спальня»
|
||||||
|
> (→ новый `#Z8641=9,'Установить целевую температуру 22 для контура Спальня',10034,'2950'`);
|
||||||
|
> «`8470`: `8669` это очевидно Контур ГВС. больше там полей в UI нет. добавил второе такое же действие
|
||||||
|
> но с "для Всех контуров"» (→ новый `#Z8640=9,'Включить режим «Режим отопления»',8574,'1'`).
|
||||||
|
|
||||||
|
|
||||||
**Что уже прозрачно (не переспрашивать):**
|
**Что уже прозрачно (не переспрашивать):**
|
||||||
|
|
||||||
@@ -493,7 +524,7 @@ Alex спросил: «а по всем действиям в "Простой т
|
|||||||
| 4 | Ссылки в поле 2 — допускать не-46 типы (45, 11, 3, 5, 9) | ✅ **плоский `steps[]`** — каждый элемент по порядку, тело инлайн |
|
| 4 | Ссылки в поле 2 — допускать не-46 типы (45, 11, 3, 5, 9) | ✅ **плоский `steps[]`** — каждый элемент по порядку, тело инлайн |
|
||||||
| 5 | Round-trip всех 5 конфигов | ✅ **6/6** (боевой + 3 архива + новый локальный + live) |
|
| 5 | Round-trip всех 5 конфигов | ✅ **6/6** (боевой + 3 архива + новый локальный + live) |
|
||||||
|
|
||||||
**Счётчики нового конфига (для сверки):** `660 #Z`, `25 #S`, байт — 34 907.
|
**Счётчики конфига `config_local_2026-09-17_14-16-35.txt` (для сверки):** `660 #Z`, `25 #S`, байт — 34 907.
|
||||||
|
|
||||||
| Тип | Кол-во | | Тип | Кол-во |
|
| Тип | Кол-во | | Тип | Кол-во |
|
||||||
|---|---|---|---|---|
|
|---|---|---|---|---|
|
||||||
@@ -503,6 +534,12 @@ Alex спросил: «а по всем действиям в "Простой т
|
|||||||
| 9 | 44 | | 50 | 3 |
|
| 9 | 44 | | 50 | 3 |
|
||||||
| 59 | 28 | | 0/36 | 13/13 |
|
| 59 | 28 | | 0/36 | 13/13 |
|
||||||
|
|
||||||
|
**Финальный конфиг `config_local_2026-09-17_16-02-18.txt`** (Alex пересоздал сценарий, вечер):
|
||||||
|
`686 строк`, **34 962 байт**. Сценарий `8456` полностью перегенерирован (новые id 8640–8777):
|
||||||
|
добавлены `#Z8640=9,'Включить режим «Режим отопления»',8574,'1'` и
|
||||||
|
`#Z8641=9,'Установить целевую температуру 22 для контура Спальня',10034,'2950'`.
|
||||||
|
YAML — `zont_config/config_local_2026-09-17_16-02-18.yml`, round-trip ✅.
|
||||||
|
|
||||||
### 8.11. ✅ ФИНАЛЬНАЯ YAML-форма сценария — плоский `steps[]` (2026-09-17)
|
### 8.11. ✅ ФИНАЛЬНАЯ YAML-форма сценария — плоский `steps[]` (2026-09-17)
|
||||||
|
|
||||||
> 🔴 **Урок, который стоит запомнить.** Первая реализация делила поле 2 на `blocks` (шаги 46) +
|
> 🔴 **Урок, который стоит запомнить.** Первая реализация делила поле 2 на `blocks` (шаги 46) +
|
||||||
|
|||||||
Reference in New Issue
Block a user