Skip to content

v1.9.1 — фикс зацикливания OTA

Choose a tag to compare

@github-actions github-actions released this 04 Aug 15:12
· 6 commits to master since this release

🔁 Исправлено зацикливание OTA — устройство обновлялось по кругу, скачивая один и тот же файл.

🐞 Почему это происходило

Telegram удаляет сообщение из очереди только когда бот запросит следующий пакет с бо́льшим offset. Две причины сложились:

  1. .gz-OTA перезагружался мгновенно — подтверждения серверу не отправлялось, и после старта прилетало то же сообщение с прошивкой. (Штатный .bin-OTA библиотеки этого избегает: он ждёт следующего getUpdates и только потом перезагружается.)
  2. 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.