When the "start ota" command was issued from the web panel, a race
condition could occur between the main loop thread and the HTTP server
thread:
- HTTP thread: prepareForOTAStart() -> stopRedirectServer() ->
httpd_stop(_redirect_server) [blocking]
- Main thread: loop() -> ensureWebServer() -> stopRedirectServer() ->
httpd_stop(_redirect_server) [double free!]
Because stopRedirectServer() sets _redirect_server = nullptr only after
httpd_stop() returns, both threads could pass the nullptr check
simultaneously, resulting in a double free and heap corruption:
CORRUPT HEAP: Bad head at 0x3fcb1f24. Expected 0xabba1234 got 0x3fca5f34
assert failed: multi_heap_free multi_heap_poisoning.c:259 (head != NULL)
The call in ensureWebServer() was added as a safety net in commit
4b83142b, but is redundant: prepareForOTAStart() already calls
stopRedirectServer() synchronously before startOTAUpdate() occupies
port 80. Removing it eliminates the race condition.
The bug only manifested when OTA was triggered from the web panel
(HTTP thread), not from radio (main thread), because in the latter
case both calls happen on the same thread and cannot race.
Прошивка MeshCore-репитеров с WEB и MQTT
Это форк прошивки MeshCore-EastMesh, в котором поддержка австралийского сервиса телеметрии EastMesh AU заменена на поддержку сервиса MeshCoreTel, а также выполнен ряд других доработок и адаптация.
В остальном прошивка базируется на официальных версиях прошивок МеshCore. Благодарность Scott Powell / Ripple Radios и всем контрибьюторам MeshCore за оригинальную прошивку и основу проекта, а также Jared Dohrman за доработки, выполненные в рамках EastMesh.
Ключевые особенности прошивки
Дополнения ретранслятора
- поддержка Wi-Fi в клиентском режиме
- автонастройка сети через DHCP
- синхронизация времени по NTP
- поддержка MQTT-брокеров:
meshcoretelletsmesh-euletsmesh-us
- транспорт plain TCP и WSS по пути
/mqtt - JWT-аутентификация с использованием идентификации устройства для WSS
- CLI-команды для:
- учётных данных WiFi
- энергосбережения WiFi
- отчётов о заряде батареи на поддерживаемых платформах
- включения конечной точки MQTT
- отправки пакетов MQTT и публикации сырых данных
- публичного ключа владельца и адреса электронной почты
- включения локальной веб-панели
- управления вентилятором на TBeam 1W
- все сетевые процессы (включая обработку MQTT и веб-панели) вынесены на отдельное ядро и не вносят задержек в обработку LoRa-пакетов и функционирование ретранслятора
Локальная веб-панель
Дополнительно на поддерживаемых устройствах (с достаточным количеством памяти) ретранслятор может предоставлять локальную панель конфигурации по HTTPS через WiFi.
Возможности:
- доступ по паролю, используя существующий административный пароль ретранслятора
- выполнение CLI-команд
- изменение основных настроек репитера и MQTT через веб-интерфейс
- сгруппированные быстрые действия
- вся ключевая статистика по репитеру
- список последних услышанных соседий с показателями качества сигнала
- хранение истории показателей за последние несколько часов (только на устройствах с PSRAM)
- светлая и тёмная темы
- возможность отключения командой
set web off
Подробнее в документации: Использование веб-панели ретранслятора
Веб-API по HTTPS
На устройствах с поддержкой веб-панели также возможно использование встроенного API по Wi-Fi.
Возможности:
- авторизация по паролю администратора с получением временного токена
- выполнение любых CLI-команд для управления, настройки и статуса
- получение всей доступной телеметрии
Данный API может быть использован для мониторинга с хранением долгосрочной истории (например с использованием таких инструментов как Prometheus и Grafana), а также автонастройки и управления устройством с помощью скриптов.
Подробнее в документации: Использование веб-API ретранслятора
Релизы
Готовые прошивки публикуются на GitHub Releases:
А также доступны в веб-прошивальщике от MeshCoreTel:
- https://meshcoretel.ru/ru/flasher (под заголовком Прошивки наблюдателя от VBart)
Документация
Основные разделы пользовательского руководства: