v1.9.1 — фикс зацикливания OTA
🔁 Исправлено зацикливание OTA — устройство обновлялось по кругу, скачивая один и тот же файл.
🐞 Почему это происходило
Telegram удаляет сообщение из очереди только когда бот запросит следующий пакет с бо́льшим offset. Две причины сложились:
.gz-OTA перезагружался мгновенно — подтверждения серверу не отправлялось, и после старта прилетало то же сообщение с прошивкой. (Штатный.bin-OTA библиотеки этого избегает: он ждёт следующегоgetUpdatesи только потом перезагружается.)skipUpdates()при старте очередь не чистит — по API Telegram отрицательный offset возвращает последний апдейт, то есть ровно то сообщение с файлом, которое и вызвало перезагрузку.
✨ Как исправлено
- Позиция очереди сохраняется в EEPROM (следующий ожидаемый
update_id) и восстанавливается при старте — переживает перезагрузку и даже пропадание питания посреди обновления. - Позиция фиксируется до начала прошивки — и для
.bin, и для.gz, и перед перезагрузкой из меню. - Перед рестартом после
.gz-OTA дополнительно вызываетсяtickManual()— подтверждает очередь серверу немедленно.
Защита получилась двухуровневой: сервер подтверждается сразу, а если связь оборвётся — правильная позиция восстановится из EEPROM.
📦 Файлы релиза
| Файл | Размер | Для чего |
|---|---|---|
DripIrrigation.ino.bin |
1.30 МБ | классический OTA |
DripIrrigation.ino.bin.gz |
0.81 МБ | сжатый OTA |
Собрано в GitHub Actions для ESP32 Dev Module (
esp32:esp32:esp32), схема разделов по умолчанию.
Полный список — в CHANGELOG.md.