From a2b2eaf769685745f45024300d6d29d6697cacf5 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Thu, 17 Sep 2026 11:59:16 +0600 Subject: [PATCH] [2026-09-17] eagle: family/how-to/zont-config-compiler.md family/tech/zont-config-object-types.md --- family/how-to/zont-config-compiler.md | 44 +++++++++++++++++++++++-- family/tech/zont-config-object-types.md | 7 ++-- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/family/how-to/zont-config-compiler.md b/family/how-to/zont-config-compiler.md index 61283ca1..19562e8f 100644 --- a/family/how-to/zont-config-compiler.md +++ b/family/how-to/zont-config-compiler.md @@ -19,7 +19,7 @@ tags: - homeautomation title: ⚙️ ZONT Config Compiler — конвертеры .txt ⇄ .yml type: how-to -updated: '2026-09-17' +updated: '2026-09-17c' --- # ⚙️ ZONT Config Compiler — конвертеры `.txt ⇄ .yml` @@ -91,6 +91,20 @@ updated: '2026-09-17' > Неизвестный тип объекта — **падение с ошибкой**, а не тихий пропуск. Сделано намеренно: молча потерять объект хуже, чем не отдать файл. +### Проверено против исходников (2026-09-17) + +| Факт | Где в коде | +|---|---| +| `config-to-yml.py` exit-коды {1, 2} | `sys.exit(1)` — argc; `sys.exit(2)` — `ParseError` | +| `yml-to-config.py` exit-коды {1, 2, 3, 4} | argc / `FileNotFoundError` / `ConversionError` / общее / validation | +| `validate_config()` вызывается **до** вывода | стр. 913 `validation_errors = validate_config(data, lines)` | +| Вход YAML — UTF-8, выход — windows-1251 | стр. 907 `open(…, encoding='utf-8')`; стр. 921 `stdout.reconfigure(encoding='windows-1251', errors='replace')` | +| Дефолт типа 0 (16 полей) | `add_z_line(obj['id'], 0, register_ref, name, 0, 0, 1000, 2000, 7424, [], 20, [], [], 1, config_id, 0, 0)` | +| Дефолт типа 36 | `add_z_line(config_id, 36, [], [], [], 10, 0)` | +| README перечисляет 23 типа; код обрабатывает 25 | README пропускает `0` и `36` | + +> 📌 `validate_config()` дополнительно проверяет кодируемость каждой строки в windows-1251 (символ вне CP1251 → ошибка валидации). + --- ## 3. Как пользоваться @@ -171,7 +185,33 @@ grep -c '^#Z' A.txt B.txt # счётчик объектов --- -## 6. Связанные заметки +## 6. Состояние проекта (проверено 2026-09-17) + +Репозиторий `/Users/admin/Automation/HA-ZONT-Modbus` — **рабочее дерево грязное**, разгребание ждёт отдельной команды Alex: + +| Файл | Статус | +|---|---| +| `zont_config/H2000_PRO_config_actual-2.txt` / `-2.yml` | удалены из индекса (целы в `zont_config/archive/`) | +| `zont_config/H2000_PRO_config_actual-3.txt` / `-3.yml` | то же | +| `zont_config/H2000_PRO_config_actual-4.txt` / `-4.yml` | то же | +| `zont_config/archive/` | не добавлена в git | +| `zont_config/config_0FA7C33CC89F_…_2026-09-17_12-12-28.txt` | 32 689 байт — свежеснятый конфиг с контроллера, не закоммичен | +| одноимённый `.yml` | **0 байт** — конвертация запускалась и не завершилась | + +> 🔴 **Пустой `.yml` (0 байт) рядом с непустым `.txt`** — признак незавершённой конвертации. Пересобрать шагом 2 из §3 перед использованием. + +**Содержимое проекта, не относящееся к конвертерам:** + +- `INFRASTRUCTURE.md` (342 стр.), `docker-compose.yml`, `docker run.txt` — **исторический TrueNAS-стек** (docker-контейнеры `homeassistant`, `mbusd`, `modbus-bridge`, `mosquitto`, `zigbee2mqtt`, `nodered`, `caddy`, `immich`, `transmission`, `webdav`, `inpxer`, `cups-splix`, `portainer`, `watchtower`, `rclone`). Стек **декомиссирован**, автоматизация живёт на t610 — актуальное: [[family/how-to/home-automation]]. +- `modbus_ha_bridge.py`, `modbus_mqtt_bridge.py` — исходники мостов (исторические, для TrueNAS). +- `nodered-flows-backup.json`, `nodered-flows-updated.json` — дампы потоков Node-RED (Node-RED остановлен). +- `homeassistant/`, `floorplan/` — снапшоты конфига HA и планировки (исторические, там же workflow «fetch from NAS → edit → deploy»). +- `README_converters.md` — исходное описание конвертеров (типы: 23, без `0` и `36`). +- `.gitignore` — исключает `*.cur`, логи, `__pycache__`, `.venv`, `.DS_Store`, **`project_home.pdf`** (крупный бинарь). + +--- + +## 7. Связанные заметки - [[family/tech/zont-config-object-types]] — таблица типов объектов (0, 1…57, 36) и `#S`-настройки - [[family/how-to/home-automation]] — контур автоматизации, ZONT, Modbus slave ID и регистры (§6) diff --git a/family/tech/zont-config-object-types.md b/family/tech/zont-config-object-types.md index 67c933aa..fb5314e0 100644 --- a/family/tech/zont-config-object-types.md +++ b/family/tech/zont-config-object-types.md @@ -16,15 +16,16 @@ tags: - reference title: "\U0001F9E9 ZONT Config — типы объектов" type: reference -updated: '2026-09-17' +updated: '2026-09-17b' --- # 🧩 ZONT Config — типы объектов > Справочник по типам объектов конфига ZONT (первое поле в `#Z=,…`). > **Инструкция по конвертерам:** [[family/how-to/zont-config-compiler]] -> **Источник:** `config-to-yml.py` / `yml-to-config.py` в `/Users/admin/Automation/HA-ZONT-Modbus`, `README_converters.md` -> ⚠️ Таблица ниже — по README; колонка «Что реально делает скрипт» — по коду. Расхождения помечены. +> **Источник:** код `config-to-yml.py` / `yml-to-config.py` в `/Users/admin/Automation/HA-ZONT-Modbus`; инструкция по запуску — [[family/how-to/zont-config-compiler]]. +> ✅ Таблица сверена с кодом (2026-09-17): перечислены **все 25 обрабатываемых типов**, включая `0` и `36`, которых нет в `README_converters.md` (там 23). +> 🔴 Для каждого типа указаны только те поля, которые скрипт **реально декодирует**; остальное лежит в `raw` / `raw_params` и при сборке пишется как есть. Ссылка вроде «README → поле X» не должна вводить в заблуждение: если поля нет в таблице, оно не декодировано. ---