[2026-09-17] eagle: family/how-to/zont-config-compiler.md family/tech/zont-scenario-logic-11109.md
This commit is contained in:
@@ -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. Состояние: конвертер на новом конфиге ПАДАЕТ
|
||||
|
||||
|
||||
Reference in New Issue
Block a user