[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
|
||||
title: ⚙️ ZONT Config Compiler — конвертеры .txt ⇄ .yml
|
||||
type: how-to
|
||||
updated: 2026-09-17
|
||||
updated: 2026-09-17g
|
||||
---
|
||||
|
||||
# ⚙️ ZONT Config Compiler — конвертеры `.txt ⇄ .yml`
|
||||
@@ -333,6 +333,8 @@ diff A.txt B.txt # пусто = round-trip чистый
|
||||
| 28 | ⚠️ **`object_display_name` нужен и раньше по файлу, чем определён** | Вложенная функция видна только ниже места вызова → `NameError` в секции type 9. Вынести на **уровень модуля** `object_display_name()`, оставить shim для вложенных вызовов |
|
||||
| 29 | ⚠️ **Удаление `raw_value` требует пересчёта кода в энкодере** | Если убрать сырьё, но оставить `value` (Цельсии), энкодер напечатает `5.2` вместо `'2782'` → round-trip падает. Нужен `_encode_type9_value()`: `True→'1'`, `False→'0'`, число → `str(round((v+273)*10))` |
|
||||
| 30 | ⚠️ **Ветки type 5 / type 9 в энкодере различать по признаку, а не по наличию удалённого поля** | Различались через `'raw_value' not in step` — после удаления признак мёртв. Теперь: type 5 — есть `value` и `target > 255` (output_ref), type 9 — нет `args` |
|
||||
| 31 | 🔴 **Один объект в двух секциях → два разных `value`** | Раскодировал `value` в `steps[]` (`5.2`), но забыл секцию `relay_commands` (осталось `'2782'`). **Round-trip зелёный** — он сравнивает строки конфига, а не смысл полей. Правило: правя декодирование, пройти **все** места, где объект отображается. Нашёл Alex глазами |
|
||||
| 32 | 🔴🔴 **Поле 5 типа 11 — модель `TRIGGER_KINDS` ОШИБОЧНА (выдумка)** | Сопоставление `1=manual, 8=расписание, 9=триггер, 10=интервал` **опровергнуто** Alex: `9628` с `1` — по триггеру; `8456` с `8` — ручной+disabled; `8547`/`8551` оба `9`, но это «по времени» и «по триггеру». Разбор — [[family/tech/zont-scenario-logic-11109]] §8.16. **`TRIGGER_KINDS` подлежит удалению** |
|
||||
|
||||
### Ограничения конвертера (найдено 2026-09-17) — ВСЕ ЗАКРЫТЫ
|
||||
|
||||
@@ -403,6 +405,12 @@ diff A.txt B.txt # пусто = round-trip чистый
|
||||
> **Подстановки `target_name`/`target_type`/`raw_value` удалены** — поля YAML = поля строки конфига.
|
||||
> **YAML стал вдвое короче: 6093 → 5452 строки.** **Не закоммичено** — ждёт команды Alex.
|
||||
>
|
||||
> 🔴 **ОТКРЫТЫЙ БЛОКЕР (конец сессии):** модель `trigger` **опровергнута** Alex —
|
||||
> `TRIGGER_KINDS` (`1=manual`, `8=расписание`, `9=триггер`) **выдумка**, поле 5 работает иначе.
|
||||
> Подробности и факты — [[family/tech/zont-scenario-logic-11109]] §8.16(а).
|
||||
> Также открыт вопрос Alex про саму форму YAML («не script editing language ли это») — §8.16(в).
|
||||
> Код не тронут, ждём решения.
|
||||
>
|
||||
> 📄 **Артефакты (в проекте):** `zont_config/config_local_2026-09-17_16-13-28.yml` — **финальный**
|
||||
> разобранный конфиг (5452 строки, уставка 5.2 + «Температура Детская»);
|
||||
> `zont_config/config_local_2026-09-17_16-02-18.yml` — предыдущий.
|
||||
@@ -499,6 +507,28 @@ Alex: «ЕСЛИ БЛЯДЬ В КОНФИГЕ `#Z8817=9,'…',10034,'2782'` ТО
|
||||
> либо через явный проход. Убрать секцию из `TYPE_ORDER` ≠ «объект пропадёт» — он пропадёт
|
||||
> **молча**, и это видно только по счётчику round-trip.
|
||||
|
||||
### 5d. 🔴 Незакрытые задачи конца сессии 2026-09-17 (ждать Alex)
|
||||
|
||||
| # | Задача | Статус |
|
||||
|---|---|---|
|
||||
| 1 | **`TRIGGER_KINDS` — удалить.** Модель поля 5 типа 11 опровергнута фактами | ⏸ код не тронут, нужен ответ Alex про UI |
|
||||
| 2 | **Форма YAML** — Alex усомнился, что получился не конфиг, а «script editing language» | ⏸ решение не принято |
|
||||
| 3 | `git commit` правок парсера/энкодера | ⏸ не закоммичено, ждёт команды |
|
||||
| 4 | YAML `16-13-28` — перегенерировать после последней правки (`relay_commands` decode) | ⏸ на диске старая версия |
|
||||
| 5 | Раскрыть `8195` (type 3 SMS) из YAML-якоря | ⏸ отложено |
|
||||
|
||||
**Уроки методологии этой сессии** (проверять в следующих):
|
||||
|
||||
1. **Round-trip ≠ корректность.** Зелёный round-trip уживается с:
|
||||
- одним объектом с разными `value` в двух секциях (условие 31);
|
||||
- выдуманной таблицей `trigger` (условие 32).
|
||||
Он проверяет **байты**, не **смысл**. Главный кейс смотреть глазами (питфолл 21).
|
||||
2. **Не подставлять производные поля.** `target_name`/`target_type` — дорисовка; Alex потребовал
|
||||
убрать. В YAML должны быть **поля строки конфига**, ничего сверх.
|
||||
3. **Не кодировать формулу по 2 точкам.** `(t+273)*10` вшита только после третьей точки от Alex.
|
||||
4. **Не переносить данные между сценариями.** Расписание `61,3354` принадлежит `8597`, я приписал
|
||||
его `8456` (у которого нули) — Alex поймал.
|
||||
|
||||
**Задача Alex (исходная):** «переписать блок парсинга/сборки сценариев чтобы он составлял синтаксис как у Home Assistant automations вместо текущей разбросанной структуры. с опциональными айдишниками у операторов».
|
||||
|
||||
### 🔴 Правка постановки Alex'ом (ключевое — не повторять ошибку)
|
||||
|
||||
Reference in New Issue
Block a user