[2026-09-17] eagle: family/how-to/rasputin-router.md family/how-to/zont-config-compiler.md family/tech/zont-api.md

This commit is contained in:
Alexey Martemyanov
2026-09-17 13:41:01 +06:00
parent e912b6c9db
commit 21fa0d5f9e
3 changed files with 295 additions and 11 deletions
+100 -1
View File
@@ -36,6 +36,7 @@ updated: '2026-09-17g'
| **Конфиги** | `zont_config/` — свежие · `zont_config/archive/` — историчные |
| **Типы объектов** | [[family/tech/zont-config-object-types]] |
| **ZONT в общем контуре** | [[family/how-to/home-automation]] §6 |
| **Снять живой конфиг с прибора** | 🔴 `curl -s http://192.168.0.50/config.txt`**без авторизации**, формат ровно как у парсера. См. [[family/tech/zont-api]] §6bis |
---
@@ -214,6 +215,8 @@ cd /Users/admin/Automation/HA-ZONT-Modbus
# 1. Снять текущий конфиг с контроллера → в zont_config/
# имя файла: config_<SN>_<SN>_<YYYY-MM-DD_HH-MM-SS>.txt
# ✅ Напрямую с контроллера, без авторизации (см. §5g):
curl -s http://192.168.0.50/config.txt -o zont_config/config_$(date +%Y-%m-%d_%H-%M-%S).txt
# 2. TXT → YAML
python3 config-to-yml.py zont_config/config_XXXX.txt > /tmp/zont.yml
@@ -306,7 +309,7 @@ diff A.txt B.txt # пусто = round-trip чистый
| 5 | Неизвестный тип объекта → exit 2, файл не создаётся | Смотреть stderr — там причина |
| 6 | `validate_config()` → exit 4 | Печатает `❌ VALIDATION ERRORS` + список причин; файл намеренно **не выдан** (вывод пустой) |
| 7 | Регистр без своего устройства / аналоговый выход с битой ссылкой | WARNING в stderr, конвертация продолжается — проверить ссылки вручную |
| 8 | Загрузка конфига в контроллер — **руками**, скрипты только конвертируют | Конвертер не имеет доступа к ZONT |
| 8 | Загрузка конфига в контроллер — **руками**, скрипты только конвертируют | Конвертер не имеет доступа к ZONT. ⚠️ **Снятие конфига — уже не ручное:** `http://192.168.0.50/config.txt` отдаёт весь конфиг без авторизации (§5g) |
| 9 | `INFRASTRUCTURE.md`, `docker-compose.yml`, `docker run.txt` в проекте — **исторический TrueNAS-стек** | Актуальный контур — [[family/how-to/home-automation]]. Не искать `modbus-bridge`/`mbusd` на NAS |
| 10 | Дополнительных зависимостей нет | Только `pyyaml``jsonschema`/`ruamel` не нужны |
| 11 | ✅ **ИСПРАВЛЕНО 2026-09-17** — Сценарий с >1 шагом падал (exit 2) | `config-to-yml.py` теперь цикл по всем шагам; `yml-to-config.py` пишет все `step_ids` |
@@ -498,6 +501,102 @@ scenarios:
---
## 5g. 🔴 Локальный эндпоинт контроллера: `http://192.168.0.50/config.txt`
**Факт (Alex, 2026-09-17):** контроллер отдаёт **весь конфиг** по HTTP **без авторизации**.
```
http://192.168.0.50/config.txt
```
| | |
|---|---|
| **Что отдаёт** | весь конфиг — тот же формат `#Z…` / `#S…`, что и файл из облака |
| **Авторизация** | **не требуется** |
| **Адрес** | `192.168.0.50` — локальный IP контроллера |
**Что это меняет:** снятие конфига с контроллера перестаёт быть ручной операцией через облако/UI —
его можно тянуть напрямую curl'ом из локальной сети.
```bash
# снять конфиг напрямую с контроллера
curl -s http://192.168.0.50/config.txt -o zont_config/config_$(date +%Y-%m-%d_%H-%M-%S).txt
```
> ⚠️ **Не проверено:** кодировка ответа (ожидается windows-1251, как в облачных выгрузках) и коды
> ответа при недоступности. Проверить `file`/`iconv` перед тем, как полагаться на байтовую идентичность.
>
> ⚠️ **Запись через этот эндпоинт не подтверждена.** Известно только чтение. Загрузка конфига в
> контроллер — по-прежнему руками (см. §5b питфолл 8). Не предполагать наличие POST.
---
## 5h. 🌐 API ZONT — что доступно (исследовано 2026-09-17)
Доки скачаны в проект: `zont_api_docs/` (`zont_api_docs.html` 250 KB, `zont_api_docs.txt`,
`convert.py` — воспроизводимая HTML→text сборка).
**Источник:** https://zont-online.ru/api/docs/
### 🔴 Главный вывод: конфиг через API недоступен
Публичное API — это **состояния и история**, не конфигурация.
- Слово `scenario` в доке — **0 вхождений**. `relay` — 1.
- Ни одного метода для типов `11 / 14 / 46 / 49` (сценарии, реле, шаги, условия).
- `z3k_config` (где живут Z-объекты) упоминается **только как ссылка на ID** в `load_data`.
Метода для работы с ним **нет**.
**Следствие:** конвертер `.txt ⇄ .yml`**единственный** путь правки сценариев и реле.
Переписать управление на API нельзя, переписывать нечего.
### Все методы API (11 шт.)
| Метод | Что делает | Конфиг? |
|---|---|---|
| `devices` | читает устройства + настройки (`load_io: true` → ещё и состояния) | чтение |
| `update_device` | **меняет настройки** — термостат, режимы отопления, расписание, доверенные номера, баланс SIM, OpenTherm, `custom_controls` | ⚠️ узко |
| `set_io_port` | управления состоянием: `guard-state`, `siren`, `engine-block`, `webasto` | — |
| `send_custom_command` | послать пользовательскую команду по `command_id` (ZTC/Mega SX) | — |
| `load_data` | **история** за период: `temperature`, `events`, `z3k_*` (Delta-time Array) | — |
| `raw_events` | история событий | — |
| `temperature` / `thermostat_work` | показания датчиков / работа термостата | — |
| `custom_controls` | история пользовательских статусов | — |
| `ztc_state` | питание, GSM, Wi-Fi | — |
| `generate_archive` / `download_generated_archive` | выгрузка архива | — |
**Наш H-2000 PRO** из `update_device` получает только **отопление**: `thermostat_mode`,
`thermostat_mode_temps`, `thermostat_ext_mode`, `thermostat_ext_modes_config`, `tempschedule`,
`thermometers`, `ot_*` (OpenTherm).
### Аутентификация
1. `get_authtoken` (POST, с login/password) → `token`
2. Дальше — заголовок `X-ZONT-Token: <token>` (или Basic)
3. Обязательный заголовок `X-ZONT-Client: <email>`
4. На **403** — токен отозван, получать заново
Базовый URL: `https://my.zont.online/api/<метод>`
**Легковесный вариант:** https://my.zont.online/api/widget/v3
### Что это значит практически
| Задача | Как решать |
|---|---|
| Править сценарии, реле, датчики | **только конвертер** (типы 11/14/46/49) |
| Снять конфиг | `http://192.168.0.50/config.txt` без авторизации (§5g) |
| Залить конфиг | руками (UI/облако) — API записи конфига нет |
| Смотреть состояния реле/датчиков онлайн | `devices?load_io=true`**можно** |
| История температур/событий | `load_data`**можно** |
| Менять режимы отопления | `update_device`**можно** |
**Рекомендация:** конвертер не выкидывать — он единственный путь к сценариям. API-обвязка
(мониторинг состояний + история + режимы отопления) — **отдельная задача**, которая
**дополняет** конвертер, а не заменяет его.
---
## 6. Состояние проекта (проверено 2026-09-17, вечер)
**Конвертеры закоммичены — `199f2b1`.** Рабочее дерево чистое (после этого коммита).