diff --git a/family/how-to/zont-config-compiler.md b/family/how-to/zont-config-compiler.md index f1748bc4..97403427 100644 --- a/family/how-to/zont-config-compiler.md +++ b/family/how-to/zont-config-compiler.md @@ -21,7 +21,7 @@ tags: - homeautomation title: ⚙️ ZONT Config Compiler — конвертеры .txt ⇄ .yml type: how-to -updated: 2026-09-17k +updated: 2026-09-17l --- # ⚙️ ZONT Config Compiler — конвертеры `.txt ⇄ .yml` @@ -388,13 +388,16 @@ diff A.txt B.txt # пусто = round-trip чистый ## 5c. 🔄 Переработка структуры YAML сценариев — ✅ СДЕЛАНО 2026-09-17 -> ✅ **СТАТУС (2026-09-17, ночь): парсер и энкодер дописаны, форма — плоский `steps[]`, +> ✅ **СТАТУС (2026-09-17, ночь, финал): парсер и энкодер дописаны, форма — плоский `steps[]`, > round-trip чистый на 6 конфигах.** Семантика типов 47/48/50/59 раскрыта (ответы Alex — > [[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 строк) — свежий -> локальный конфиг в читаемой форме, лежит в проекте (не в `/tmp`). +> 📄 **Артефакты (в проекте):** `zont_config/config_local_2026-09-17_16-02-18.yml` — **финальный** +> разобранный конфиг (686 строк, Alex пересоздал сценарий); `zont_config/config_local_2026-09-17_14-16-35.yml` +> — предыдущий (6110 строк). Оба в `zont_config/`, не в `/tmp`. + **Задача Alex (исходная):** «переписать блок парсинга/сборки сценариев чтобы он составлял синтаксис как у Home Assistant automations вместо текущей разбросанной структуры. с опциональными айдишниками у операторов». diff --git a/family/tech/zont-scenario-logic-11109.md b/family/tech/zont-scenario-logic-11109.md index 4a04d6a4..8cb239d5 100644 --- a/family/tech/zont-scenario-logic-11109.md +++ b/family/tech/zont-scenario-logic-11109.md @@ -17,9 +17,9 @@ tags: - zont - modbus - 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 -updated: '2026-09-17g' +updated: 2026-09-17e --- # 🔁 ZONT — сценарная логика и конструктор логики @@ -459,8 +459,39 @@ Alex спросил: «а по всем действиям в "Простой т | 4 | `#Z8465 = [59, 'objcmd 11907 ",,,%0";#h', 8464, 0, 0]`, где `8464` = `[49, 4099, 0, 8]` (условие) | Аргумент = **условие**. Что за `;#h`? | | 5 | `#Z8467 = [59, '3', 0, 0, 0]` | Скрипт = просто цифра `3`. Константа? Зачем отдельным действием? | | 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` — что это? | -| 8 | `#Z8457 = [9,'Установить целевую температуру 23.8...',8669,'2968']`, `#Z8470 = [9,...,8669,'8574']` | Значение `'2968'` — **отсутствующий объект**. Это «установить температуру»/«активировать режим»? | +| 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']` | → ✅ **пункт 8 ЗАКРЫТ**: type 9 = `[9, '<подпись>', , '<значение>']`. Цель — реле (14) / контур (16) / режим (20). Поле 4 — **ссылка/код, не уставка** («`'2968'`» при тексте «23.8»). Alex подтвердил: `8470` → цель `8669` = «Контур ГВС» | + +### 8.12. 🔴 Type 9 и Type 5 — модель полей (подтверждено Alex 2026-09-17, вечер) + +**Type 9 — команда (реле / контур / режим отопления):** + +```text +#Z = [9, '<подпись команды>', , '<значение>'] +``` + +| Часть | Смысл | Пример | +|---|---|---| +| поле 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 = [5, '<имя>', , , , , [], bmp, time, ] +``` + +`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[]`** — каждый элемент по порядку, тело инлайн | | 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 | | 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) > 🔴 **Урок, который стоит запомнить.** Первая реализация делила поле 2 на `blocks` (шаги 46) +