🚀 OTA — обзор
🔁 Поток (упрощённо)
1. Сборка (локально или CI) ↓2. latest.json + manifest.json + firmware.bin на сервере (MinIO S3) ↓3. Устройство: HTTP GET latest.json ↓4. Сравнение текущей и доступной версии ↓5. Если новая: HTTPS GET firmware.bin → OTA flash → reboot🧱 Два слоя
- ESPHome (на устройстве) — в шаблоне есть блок
ota:(частоesphome+http_request), скрипты проверки URL манифеста и кнопкиOTA: проверить / установитьв HA. - Инфраструктура (на сервере) — CI кладёт артефакты на диск (nginx) и зеркалит в MinIO; манифесты и ссылки в
latest.jsonуказывают на публичный S3 (ota-s3.m3zold-lab.tech/firmware/<channel>/). Кодом отвечаютscripts/generate_metadata.pyи.github/workflows/ota-pipeline.yml.
📁 Полезные пути в репо
ДиректорияesphomeFlasher/
Директория.github/workflows/
- ota-pipeline.yml сборка матрицы + SCP на сервер + MinIO mirror
Директорияfirmwares/
- ota-pipeline-matrix.json матрица OTA каналов (1 запись = 1 firmware × board)
Директорияota-server/ примеры сгенерированных latest.json / manifest.json
- …
Директорияscripts/
- generate_metadata.py latest.json, manifest.json, MD5 hash, changelog
- flasher.py локально: -a ota
📚 Дальше
🚀 GitHub OTA — быстрый старт Пошагово: версия → сборка → манифест → проверка с устройства.
Шаблоны Jinja2 (раздел OTA) Как parserить latest.json на устройстве + версия в прошивке.
Структура YAML ESPHome (ota:) Обычный блок ota: в YAML — основа любой OTA-конфигурации.