Skip to content

Releases: akprof2000/DripIrrigation

v1.9.3 — логи отключены, освобождено 11.3 КБ

Choose a tag to compare

@github-actions github-actions released this 07 Aug 08:17

🗜️ Освобождение флеша: логи отключены полностью. 99 % → 98 % раздела приложения.

🔧 Сборка

  • LOG_LEVEL = LOG_LEVEL_NONE (было LOG_LEVEL_ERROR): вырезаны последние 9 вызовов LOG_E вместе со строками форматов, реализация logPrintf (весь log.cpp под #if LOG_LEVEL > LOG_LEVEL_NONE) и Serial.begin в setup() — значит линкер выбрасывает и UART-стек.
  • 1 303 685 → 1 292 149 байт, экономия 11.3 КБ. Свободно 18.5 КБ из 1.31 МБ.

⚠️ Что меняется в эксплуатации

Диагностики по Serial теперь нет вообще. Отказы железа по-прежнему видны в чате — реестр неисправностей (faults.h) и отчёты бота от логгера не зависят. Для отладки на стенде вернуть LOG_LEVEL_DEBUG в log.h и пересобрать.

📌 Про место всерьёз

11 КБ — это отсрочка, а не решение: раздел всё ещё занят на 98 %. Радикальный вариант — схема разделов min_spiffs (1.96 МБ под приложение с сохранением OTA, те же байты дадут ~65 %). Она не применяется через OTA: смена таблицы разделов требует однократной прошивки по кабелю.

📦 OTA

DripIrrigation.ino.bin можно сразу отправить боту.

v1.9.2 — замер потока на капельных расходах

Choose a tag to compare

@github-actions github-actions released this 07 Aug 08:07

💧 Датчик потока не показывал расход при капельном поливе: пороги замера были рассчитаны на «шланговые» скорости. Добавлена диагностика самого датчика.

🐞 Исправления

  • замер потока на капельных расходах: окно замера длилось 30 с при пороге значимости FM_MIN_PULSES = 40 импульсов. При 450 имп/л это означало отсечку на 0.18 л/мин суммарно по всем каналам — то есть любой настоящий капельный полив (0.05–0.1 л/мин на канал) уходил в ветку «почти нет потока — пустой бак/сухой ход», и контроль засора фильтра не работал вовсе. Окно увеличено до 120 с, порог снижен до 10 импульсов — отсечка стала 0.011 л/мин.
  • ложная стабилизация потока: подынтервал ожидания 20 с при капельном расходе давал ~7 импульсов, шаг квантования ~14 % — больше порога FM_SETTLE_STABLE_PCT (10 %), и детектор «поток перестал падать» срабатывал на шуме округления. Подынтервал увеличен до 60 с.

✨ Новые возможности

  • 🩺 диагностика датчика потока в /WaterFlow: время с последнего импульса, мгновенная скорость (по интервалу между двумя последними импульсами, без ожидания окна) в л/мин и мл/с, калибровочный коэффициент и число открытых клапанов. Явное сообщение «импульсов не было ни разу», если крыльчатка не вращалась с момента включения.

⚠️ Если импульсов нет вовсе

Дело в датчике, а не в прошивке: YF-S201 (450 имп/л) рассчитан на 1–30 л/мин и на капельных расходах физически не страгивается. Нужен YF-S402 (980 имп/л, от 0.3 л/мин) или лепестковый датчик; коэффициент правится в FLOW_PULSES_PER_LITER (objects.h).

📦 OTA

DripIrrigation.ino.bin можно сразу отправить боту. Флеш: 99 % от 1.31 МБ (схема разделов по умолчанию).

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

Choose a tag to compare

@github-actions github-actions released this 04 Aug 15:12

🔁 Исправлено зацикливание 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.

v1.9.0 — аварийный режим при неисправном железе

Choose a tag to compare

@github-actions github-actions released this 04 Aug 07:12

🩺 Аппаратные ошибки больше не вешают систему молча — неисправность приходит в чат, а бот переходит в аварийный режим.

🐞 Что было сломано

Отсутствие RTC или SD-карты вешало прошивку в бесконечном while ещё до старта loop(): бот не поднимался, сообщений не было, и понять причину можно было, только подключившись к устройству кабелем.

✨ Как теперь

  • Неблокирующая инициализация RTC, SD-карты и платы клапанов (PCF8574): несколько попыток, и загрузка продолжается в любом случае.
  • Отчёт в чат со списком неисправностей и пояснением последствий. Если в момент старта связи не было — отчёт уйдёт позже, как только связь появится.
  • Аварийный режим бота: обычный интерфейс скрыт, на любую команду показывается отчёт и единственная кнопка «Перезагрузка» — починив контакт, систему можно поднять прямо из чата.
  • Безопасное гашение нагрузок: насос, дренаж и залив бака выключаются напрямую по пинам (не через возможно мёртвый PCF8574); клапаны закрываются, только если расширитель отвечает.
  • Полив останавливается — работать с неисправным оборудованием опасно. Бот и watchdog при этом продолжают жить.

📦 Файлы релиза

Файл Размер Для чего
DripIrrigation.ino.bin 1.30 МБ классический OTA
DripIrrigation.ino.bin.gz 0.81 МБ сжатый OTA

Собрано в GitHub Actions для ESP32 Dev Module (esp32:esp32:esp32), схема разделов по умолчанию.

Полный список — в CHANGELOG.md.

v1.8.0 — токен бота в EEPROM

Choose a tag to compare

@github-actions github-actions released this 01 Aug 12:29

🔐 Токен бота переехал из прошивки в EEPROM — бинарники из этого релиза рабочие и не содержат секретов.

🐞 Что было сломано

Бинарники предыдущих релизов собирались в CI с заглушкой PUT-YOUR-BOT-TOKEN-HERE вместо токена (он компилировался внутрь образа). После такой прошивки устройство не выходило на связь, OTA становился недоступен — восстановление только по проводу. Релизы v1.6.0–v1.7.2 помечены соответствующим предупреждением.

✨ Как теперь

  • Токен хранится в EEPROM и вводится на странице настройки WiFi. Порядок разрешения: EEPROM → secrets.h → портал, поэтому сборки со своим secrets.h продолжают работать без изменений.
  • Портал только для токена. Если токена нет ни в EEPROM, ни в прошивке, устройство поднимает страницу настройки исключительно для его ввода: сеть, список пользователей, калибровки и параметры полива сохраняются, после ввода работа продолжается с того же места — без сброса.
  • Поле «Токен» можно оставить пустым при перенастройке WiFi — сохранённое значение не изменится.
  • Без токена полив работает автономно — бот не запустится, но автоматика продолжит поливать.

📥 Как обновиться

Ситуация Что делать
У вас прошивка со своим secrets.h Просто обновитесь через OTA — токен подхватится из прошивки, портал не появится
Прошиваете бинарник отсюда После старта подключитесь к точке ESPCfg_DripIrrigation и введите токен от @Botfather

📦 Файлы релиза

Файл Размер Для чего
DripIrrigation.ino.bin 1.29 МБ классический OTA
DripIrrigation.ino.bin.gz 0.80 МБ сжатый OTA

Собрано в GitHub Actions для ESP32 Dev Module (esp32:esp32:esp32), схема разделов по умолчанию.

Полный список — в CHANGELOG.md.

v1.7.2 — имена файлов-копий и повторы OTA

Choose a tag to compare

@github-actions github-actions released this 01 Aug 11:25

⛔ НЕ ПРОШИВАЙТЕ эти бинарники

Файлы .bin / .bin.gz в этом релизе собраны в CI с заглушкой вместо токена бота (PUT-YOUR-BOT-TOKEN-HERE). Токен компилируется внутрь прошивки, поэтому такое устройство не сможет подключиться к Telegram — бот не ответит, и OTA станет недоступен: восстановление только по проводу.

Собирайте прошивку сами со своим secrets.h — см. раздел «Установка» в README. Бинарники здесь пригодны только как проверка того, что код компилируется.

📎 Удобство вокруг OTA — по итогам обновления на боевом устройстве.

✨ Что нового

  • Имена файлов-копий. Windows при повторном скачивании добавляет « (2)» перед расширением. Теперь принимаются DripIrrigation.ino.bin (2).gz и DripIrrigation.ino (2).bin — переименовывать не нужно. Вместо точного сравнения имени проверяются префикс (защита от прошивки случайным документом) и расширение; регистр игнорируется.
  • Повторы скачивания .gz — до 3 попыток с паузой.
  • Понятный отказ. Если имя не подошло, бот писал «Только владелец может отправлять обновления» — теперь отвечает «Это не похоже на прошивку: <имя>» и напоминает ожидаемые имена.

🔁 Про «OTA Fetch Error»

Это сообщение означает, что файл не удалось скачать — до записи во flash дело не дошло, прошивка не пострадала. Обычно причина в нехватке памяти на защищённое соединение после долгой работы (куча фрагментирована). Лечится повторной отправкой, а если повторяется — перезагрузкой системы через меню. Для .gz теперь есть автоматические повторы.

📦 Файлы релиза

Файл Размер Для чего
DripIrrigation.ino.bin 1.29 МБ классический OTA
DripIrrigation.ino.bin.gz 0.80 МБ сжатый OTA

Собрано в GitHub Actions для ESP32 Dev Module (esp32:esp32:esp32), схема разделов по умолчанию.

Полный список — в CHANGELOG.md.

v1.7.1 — фикс .gz-OTA

Choose a tag to compare

@github-actions github-actions released this 01 Aug 08:46

⛔ НЕ ПРОШИВАЙТЕ эти бинарники

Файлы .bin / .bin.gz в этом релизе собраны в CI с заглушкой вместо токена бота (PUT-YOUR-BOT-TOKEN-HERE). Токен компилируется внутрь прошивки, поэтому такое устройство не сможет подключиться к Telegram — бот не ответит, и OTA станет недоступен: восстановление только по проводу.

Собирайте прошивку сами со своим secrets.h — см. раздел «Установка» в README. Бинарники здесь пригодны только как проверка того, что код компилируется.

🐞 Исправление .gz-OTA из 1.7.0 — на боевом устройстве обновление не применялось.

Что было не так

Распаковка шла напрямую из сетевого потока, а StreamReader::readBytes() уменьшает счётчик остатка до фактического чтения. Если сокет отдавал меньше запрошенного (обычная пауза мобильного канала), поток рассинхронизировался и распаковка обрывалась.

Как исправлено

Обновление теперь в два этапа:

  1. архив скачивается на SD-карту штатным буферизованным writeTo() библиотеки;
  2. распаковка идёт с карты — локальное чтение не зависит от качества связи.

Временный /update.gz удаляется после обновления и при любой ошибке.

🔍 Диагностика

Если .gz всё же не применится, бот пришлёт причину: код распаковки uzlib, ошибку Update и сколько байт распаковано. В рабочей прошивке логи выключены — без этого причину не установить.

📦 Файлы релиза

Файл Размер Для чего
DripIrrigation.ino.bin 1.29 МБ классический OTA
DripIrrigation.ino.bin.gz 0.80 МБ сжатый OTA

⚠️ На устройстве сейчас 1.7.0, которая .gz ещё не умеет — этот апдейт ставьте обычным .bin. Проверить .gz можно будет уже со следующего обновления.

Полный список — в CHANGELOG.md.

v1.7.0 — OTA из сжатого .gz

Choose a tag to compare

@github-actions github-actions released this 31 Jul 17:37

⛔ НЕ ПРОШИВАЙТЕ эти бинарники

Файлы .bin / .bin.gz в этом релизе собраны в CI с заглушкой вместо токена бота (PUT-YOUR-BOT-TOKEN-HERE). Токен компилируется внутрь прошивки, поэтому такое устройство не сможет подключиться к Telegram — бот не ответит, и OTA станет недоступен: восстановление только по проводу.

Собирайте прошивку сами со своим secrets.h — см. раздел «Установка» в README. Бинарники здесь пригодны только как проверка того, что код компилируется.

🗜️ OTA теперь принимает сжатый .gz — распаковка gzip идёт прямо на ESP32, файл для отправки в ~1.6 раза меньше.

✨ Новое

  • OTA из DripIrrigation.ino.bin.gz (≈0.8 МБ вместо 1.3 МБ) — удобно по мобильному интернету. Раньше .gz формально принимался, но прошить его было нельзя: FastBot2 на ESP32 пишет байты во flash как есть, без распаковки
  • Потоковый распаковщик — библиотека uzlib (zlib-лицензия): gzip разбирается на лету, LZ-окно 32 КБ, выход пишется в Update кусками; вся прошивка в память не грузится

🛡️ Безопасность

Распаковка идёт в неактивный OTA-раздел, загрузка переключается только при валидном образе (Update.end) + сверка CRC32 из gzip-трейлера. Сбой распаковки → отказ OTA с понятным сообщением, устройство остаётся на прежней прошивке.

📦 Файлы релиза

Файл Размер Для чего
DripIrrigation.ino.bin 1.28 МБ классический OTA
DripIrrigation.ino.bin.gz 0.80 МБ сжатый OTA (новое)

⚠️ Путь .gz-OTA новый — перед боевым применением проверьте на стенде. Обычный .bin работает как прежде.

Полный список — в CHANGELOG.md.

v1.6.0 — Версия прошивки в чате

Choose a tag to compare

@akprof2000 akprof2000 released this 31 Jul 07:41

⛔ НЕ ПРОШИВАЙТЕ эти бинарники

Файлы .bin / .bin.gz в этом релизе собраны в CI с заглушкой вместо токена бота (PUT-YOUR-BOT-TOKEN-HERE). Токен компилируется внутрь прошивки, поэтому такое устройство не сможет подключиться к Telegram — бот не ответит, и OTA станет недоступен: восстановление только по проводу.

Собирайте прошивку сами со своим secrets.h — см. раздел «Установка» в README. Бинарники здесь пригодны только как проверка того, что код компилируется.

🏷️ Версия прошивки теперь видна в чате — при старте и в /status. Так сразу понятно, применилась ли OTA-прошивка.

✨ Новое

  • Версия прошивки в чате — при запуске приходит «🚀 Система запущена! Прошивка vX.Y.Z», версия также в шапке /status
  • Единая точка версии — номер вынесен в version.h (FW_VERSION), совпадает с git-тегом релиза

Полный список — в CHANGELOG.md.

v1.5.0 — Полевой релиз

Choose a tag to compare

@akprof2000 akprof2000 released this 31 Jul 07:41

🌾 Полевой релиз: исправлены проблемы, всплывшие при реальной эксплуатации (насос не выключался, ложные тревоги о засоре, залипшая кнопка «ДАЛЕЕ»), добавлена авто-калибровка границ датчиков. Проект переехал на GitHub.

✨ Новое

  • Авто-калибровка границ датчиков влажности — диапазон сам расширяется под реальные условия; разовые выбросы АЦП отсекаются подтверждением (3 замера подряд); при калибровке функция отключается
  • Состояние насоса в /status — работает ли и почему (пусковой режим / порог клапанов / дренаж)
  • Название культуры в диалогах калибровки — видно, какой датчик настраивается

🐞 Исправления

  • Насос не выключался (таймаут переведён с unix-времени на millis())
  • Пусковой режим насоса прерывался проливом дренажа
  • Ложная тревога о засоре при заполнении труб (адаптивное ожидание стабилизации)
  • Кнопка «➡️ ДАЛЕЕ» не реагировала (сравнение reply-кнопок по тексту без эмодзи)
  • Переполнение буфера при переименовании датчика, выходы за границы массивов
  • Меню «Настройка» не открывалось после текстовых ответов

⚡ Улучшения

  • Таймаут связи с Telegram 150 → 180 с (меньше ложных «связь потеряна»)
  • Датчик влажности: медиана из 9 замеров
  • Миграция настроек без сброса при добавлении полей в конфиг
  • Полная пользовательская инструкция и SVG-схемы процессов

Полный список — в CHANGELOG.md.