Valentin V. Bartenev 918c839e09 Web: fix crash/deadlock when disabling web panel via HTTP command
Calling `set web off` through the web panel caused the device to either
hang permanently or crash with a Guru Meditation Error (LoadProhibited).

Root cause: the HTTP command handler runs inside the httpd task and
synchronously called `setWebEnabled(false)`, which called
`_panel.stop()` -> `httpd_ssl_stop()` on the very connection that was
serving the request. This is unsafe in two ways:

1. `httpd_ssl_stop()` blocks waiting for the httpd task to finish, but
   the httpd task is the one executing the handler — a self-deadlock.

2. Even if the stop proceeds, closing the active TLS connection from
   within its own handler triggers lwIP teardown (esp_netif_down_api ->
   dhcp_stop -> TCP RST) while the WiFi driver is in an inconsistent
   state, causing a null-pointer dereference in ieee80211_output_do.

The deadlock was further compounded by a second concurrent call:
while the httpd task was stuck in httpd_ssl_stop(), the main loop kept
running, called ensureWebServer(), saw _server != nullptr (never cleared
because httpd_ssl_stop() never returned), and issued a second
httpd_ssl_stop() on the same handle — blocking the main loop as well
and stopping all radio packet processing until reboot.

The explicit start/stop calls in setWebEnabled() were redundant:
WebService::loop() already calls ensureWebServer() on every iteration,
which starts the server when enabled and WiFi is up, and stops it
otherwise.  Remove the block entirely and let loop() handle both
transitions safely from the main loop context, outside the httpd task.
2026-05-08 02:28:19 +03:00
2025-01-13 14:07:48 +11:00
2025-01-13 14:07:48 +11:00
2025-06-05 20:35:40 +12:00
2026-03-20 10:23:51 +11:00
2026-03-23 14:26:56 +01:00
2025-01-25 23:09:09 +11:00
2026-05-02 21:43:36 +03:00
2026-04-10 18:01:38 +10:00
2026-04-23 09:49:51 +10:00
2026-04-10 18:01:38 +10:00

Прошивка MeshCore-репитеров с WEB и MQTT

Это форк прошивки MeshCore-EastMesh, в котором поддержка австралийского сервиса телеметрии EastMesh AU заменена на поддержку сервиса MeshCoreTel, а также выполнен ряд других доработок и адаптация.

В остальном прошивка базируется на официальных версиях прошивок МеshCore. Благодарность Scott Powell / Ripple Radios и всем контрибьюторам MeshCore за оригинальную прошивку и основу проекта, а также Jared Dohrman за доработки, выполненные в рамках EastMesh.

Ключевые особенности прошивки

Дополнения ретранслятора

  • поддержка Wi-Fi в клиентском режиме
  • автонастройка сети через DHCP
  • синхронизация времени по NTP
  • поддержка MQTT-брокеров:
    • meshcoretel
    • letsmesh-eu
    • letsmesh-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:

Документация

Основные разделы пользовательского руководства:

S
Description
Клон репозитория от VBart с моими добавлениями касательно устройств
Readme
11 MiB
Languages
C 55.2%
C++ 43.5%
Python 0.7%
Shell 0.3%
CSS 0.2%
Other 0.1%