[2026-09-17] eagle: family/how-to/zont-config-compiler.md family/tech/zont-scenario-logic-11109.md

This commit is contained in:
Alexey Martemyanov
2026-09-17 15:07:37 +06:00
parent 0d41ddf2e5
commit c223f5f500
2 changed files with 66 additions and 21 deletions
+44 -6
View File
@@ -19,7 +19,7 @@ tags:
- homeautomation
title: 🔁 ZONT — сценарная логика и конструктор (11/46/47/48/49/50/59/45)
type: tech
updated: '2026-09-17d'
updated: '2026-09-17e'
---
# 🔁 ZONT — сценарная логика и конструктор логики
@@ -420,19 +420,57 @@ Alex по тесту `8456` описал: «если (условие И: …) Т
| Файл | Назначение |
|---|---|
| `read_scenarios.py` | 🆕 **читаемый дамп любого сценария** — дерево если/то/иначе с именами объектов. `python3 read_scenarios.py <config> <id>` |
| `dump_new_types.py` | дамп типов 11/45/46/47/48/49/50/59 целиком |
| `probe_types.py` | распределение поля 5 у type 11; тело контейнера; блок 8450–8560 |
| `trace_scenarios.py` | трассировка сценарных графов, поиск сценариев с новыми типами |
| `probe_sched.py` | 🆕 проверка расписания: маска дней + время |
| `verify_answers.py` | 🆕 кросс-проверка ответов Alex против фактов конфига |
| `check_ops.py` | 🆕 проверка таблицы операторов type 47 |
| `audit_8456.py`, `audit2.py` | 🆕 аудит прозрачности элементов сценария 8456 |
```bash
cd /Users/admin/Automation/HA-ZONT-Modbus
python3 probe_types.py # → семантика поля 5, тестовый блок
python3 dump_new_types.py # все сценарные объекты
python3 read_scenarios.py zont_config/config_local_2026-09-17_14-16-35.txt 8456 # дерево сценария
python3 read_scenarios.py zont_config/config_local_2026-09-17_14-16-35.txt # все сценарии
python3 probe_types.py # семантика поля 5, тестовый блок
python3 dump_new_types.py # все сценарные объекты
```
> ⚠️ `trace_scenarios.py` падает на `TypeError: unhashable type: 'list'` (шаг `8457` — type 9,
> у него `cond` = `[16, 'Контур ГВС', …]`, а скрипт ждёт скаляр). Не критично — `probe_types.py`
> даёт те же данные. Чинить при следующем заходе.
> ✅ **Токенайзер починен.** Старый `read_scenarios.py` рвал строки со скриптами на запятых
> внутри кавычек (`objcmd 9102 "6,%0";#a` разваливалось). Новый `split_top()` учитывает
> кавычки, экранирование `\` и вложенные `[]` — теперь скрипты печатаются как есть.
### 8.10. ⏳ НЕПРОЗРАЧНЫЕ ЭЛЕМЕНТЫ СЦЕНАРИЯ 8456 (вопросы заданы Alex 2026-09-17, ответа нет)
Alex спросил: «а по всем действиям в "Простой тестовый сценарий" — тебе всё кристально прозрачно?»
Ответ — **нет**. Ниже ровно то, что не выводится из конфига. **Не строить гипотезы — ждать ответа.**
| # | Элемент | Что неясно |
|---|---|---|
| 1 | `#Z8456` поле 5 = `8` (расписание), но поле 4 = `0`, поле 6 = `0` | **Как запускается 8456?** Расписание не задано. Что значит `8` без маски/времени? Ручной запуск? |
| 2 | `#Z8458 = [59, 'objcmd 8700 "1 %0"', 10.5, 0, 1]` | Единственный скрипт с **нецелым** `%0` (`10.5`) и **флагом `1`** в поле 4 (у всех остальных `0`). Что за инструкция в UI? |
| 3 | `#Z8463 = [59, 'objcmd 9102 "6,%0";#a', 8462, 0, 0]`, где `8462` = скрипт `expr "%0 + %1"` | Аргумент = **ссылка на другой скрипт**. Что за суффикс `;#a`? |
| 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× `set var1` и их источники: `8450`(Температура подачи, тип 27), `9864`(Статус 13/9, тип 0),
`8560`(Контур газ котла, тип 16), `9263`(Реле 1 конвектор, тип 14), `8254`(Погода из интернета, тип 1),
`4098`(Адаптер газ. котла, тип 6), `8382`(Температура Zigbee, тип 1) ✅
- `#8466` `puts "Отладка"`, `#8468` `storeev I "z"`, `#8469` `storeev A "asdf"` — вывод/события ✅
- `#8489` пауза 5 суток (`432000000` мс), дерево `#8506``#8505` (И/ИЛИ/НЕ + ИНАЧЕ) ✅
- `#8195` SMS `CMC оповещение``8192` (2 номера) ✅
- `#11109` как **вложенный сценарий** внутри 8456 ✅
- `#8507` — ссылка на **отсутствующий объект** (хвост поля 2) ✅
**Почему неясные элементы не блокируют парсер:** стратегия — сохранять их **дословно**
(type 59 как сырые строки с `arg1..arg3`, отсутствующие id — как есть). Round-trip останется
байт-точным независимо от того, понята семантика или нет.
### 8.9. Состояние: конвертер на новом конфиге ПАДАЕТ