docs: обновлена документация под 2026.10.2 (веб-панель, данные, CLI, дисплей)
This commit is contained in:
1 parent
f6c9089446
commit
d3393a88fe
6 files changed
+413
-143
No files matched your search
@@ -33,7 +33,7 @@ PosadMesh — форк проекта EastMesh, который, в свою оч
|
||||
| MQTT-мост | нет | передача raw-пакетов mesh между репитерами через ваш собственный peer-брокер (трек `repeater-mqtt-bridge`) |
|
||||
| Wi-Fi | нет | Wi-Fi на репитерах: подключение, энергосбережение, watchdog шлюза, автоматическое переподключение, команды `wifi.*` |
|
||||
| Веб-интерфейс | нет | локальная HTTPS-панель: вход по паролю администратора, выполнение CLI-команд, настройки репитера/радио/MQTT, регионы, чёрные списки, обновление прошивки (OTA), управление сертификатом панели |
|
||||
| Телеметрия | нет | история метрик в PSRAM и архив на SD: батарея, загрузка ядра, память, пакеты, ошибки, уровень сигнала и шума, датчики, GPS; страница `/stats` с графиками и списком соседей/событий |
|
||||
| Телеметрия | нет | история метрик в PSRAM и архив на SD: батарея, загрузка ядра, память, пакеты, ошибки, уровень сигнала и шума, датчики, GPS; экран `/stats` с графиками и событиями и отдельный экран соседей с таблицей и картой OSM |
|
||||
| CLI | базовый набор MeshCore | дополнительно `mqtt.*`, `wifi.*`, `web.*`, `blacklist path\|chan`, `region`, `stats-*`, `time` и `time.force`, режим Ghost Node, лимит пересылки flood, отчёт о батарее платы, управление вентилятором T-Beam 1W |
|
||||
| Сборки | companion (USB/BLE), repeater, room server, sensor | только MQTT-таргеты: `*_repeater_mqtt`, `*_repeater_mqtt_espnow`, `*_repeater_mqtt_bridge` |
|
||||
| Платы | базовый список MeshCore | добавлены свои варианты (Meshadventurer, самодельные ESP32-S3 + E22, Xiao S3 + LoRa2021F33, RAK3112, Station G2/G3, ThinkNode и другие) |
|
||||
@@ -295,7 +295,10 @@ get bridge.enabled
|
||||
Возможности:
|
||||
|
||||
- доступ с проверкой пароля по существующему паролю администратора репитера
|
||||
- выполнение CLI только из белого списка
|
||||
- выполнение CLI-команд репитера из браузера после входа
|
||||
- экраны «Общие», «Статистика», «CLI», «Прошивка» и «Соседи»
|
||||
- экран соседей с таблицей и картой OSM
|
||||
- индикатор батареи вверху страницы и история статистики с графиками
|
||||
- сгруппированные быстрые действия
|
||||
- светлая и тёмная темы
|
||||
- опциональное отключение через `set web off`
|
||||
@@ -333,9 +336,9 @@ Workflow upstream MeshCore (`.github/workflows/build-*.yml`, `firmware-builder.y
|
||||
|
||||
```bash
|
||||
git tag repeater-bridge-espnow-v1.15.0
|
||||
git tag repeater-mqtt-v2026.5.1
|
||||
git tag repeater-mqtt-espnow-v2026.5.1
|
||||
git tag repeater-mqtt-bridge-v2026.7.0
|
||||
git tag repeater-mqtt-v2026.10.2
|
||||
git tag repeater-mqtt-espnow-v2026.10.2
|
||||
git tag repeater-mqtt-bridge-v2026.10.2
|
||||
```
|
||||
|
||||
`repeater-bridge-espnow` использует в теге версию upstream MeshCore.
|
||||
@@ -351,7 +354,39 @@ MQTT-репитер использует:
|
||||
|
||||
Правило ведения: после любых правок проекта сюда дописывается короткая запись о том, что изменилось.
|
||||
|
||||
### 2026.10.0 (текущая разработка)
|
||||
### 2026.10.2
|
||||
|
||||
**Веб-панель репитера**
|
||||
|
||||
- панель разделена на экраны с переключением на клиенте: «Общие» (`/app`), «Статистика» (`/stats`, отдельный маршрут), «CLI», «Прошивка» и «Соседи»; активна ровно одна кнопка, на `/stats` — «Статистика»; группа «Анонс / Обновить / Перезагрузить / тема / Выйти» прижата к правому краю;
|
||||
- на экранах «CLI», «Прошивка» и «Соседи» скрыты «Анонс» и «Обновить»; на «Соседях» «Обновить» оставлен и перечитывает данные экрана;
|
||||
- интерфейс переведён на русский: заголовки экранов, разделов и кнопок, `Trends` стал «Графики»; технические сокращения (CLI, MQTT, IATA, RSSI, SNR, IP, SSID, hex, dB, UTC, PEM, TLS, RSA) и названия сервисов MQTT `MeshCoreTel` / `MeshCoreTel RU` не переводятся;
|
||||
- экран «Соседи»: таблица (Имя, ID, SNR, Широта/Долгота, Слышно, Анонс), кнопки «Найти соседей» (`discover.neighbors`) и «Очистить» (`neighbor.clear`), строка статуса «Команда отправлена: … (ответ смотрите в журнале CLI)»; имя и координаты соседа берутся из его анонса, у кого их нет — прочерк вместо имени и `0.0000 / 0.0000`;
|
||||
- карта OSM на экране «Соседи»: тайлы `tile.openstreetmap.org` обычными `<img>`, поверх — SVG-слой; центр всегда на координатах нашего узла, линии к соседям с координатами окрашены и утолщены по SNR, подписи «имя · dB»; зум кнопками `+` / `−` / `⌂` и колесом мыши, карта перетаскивается мышью; соседи без координат или с нулями на карту не попадают;
|
||||
- индикатор батареи вверху страницы: иконка с заполнением, процент и напряжение в милливольтах; обновляется раз в минуту и при загрузке страницы, на экранах «CLI», «Прошивка» и «Соседи» скрыт;
|
||||
- страницы панели сжимаются gzip при сборке (`arch/esp32/extra_scripts/gzip_web_panel.py`), отдаются с `Content-Encoding: gzip` и распаковываются браузером; пост-проверка `check_app_size.py` роняет сборку, если образ больше своего app-раздела;
|
||||
- поле ввода CLI-команды получило подсказки (`datalist`) по типовым командам репитера.
|
||||
|
||||
**Внешние данные перенесены на meshinfo.ru**
|
||||
|
||||
- панель больше не обращается к `api.vbart.ru` и `meshcore.hackru.ru`; пресеты радио и коды IATA (38 записей) — `https://meshinfo.ru/flasher/meshcore-data/conf.json`, дерево регионов — `https://meshinfo.ru/flasher/meshcore-data/regions.json`, чёрные списки по IATA — `https://meshinfo.ru/flasher/meshcore-data/blacklist/<КОД>.json` (реальные данные есть только для `MOW`, для остальных 37 кодов лежат пустые шаблоны);
|
||||
- для `/flasher/meshcore-data/` на сервере (nginx) настроен CORS `Access-Control-Allow-Origin: *`; исходники данных лежат в репозитории — [`posadmesh-tools/meshcore-data/`](./posadmesh-tools/meshcore-data).
|
||||
|
||||
**Защита эфира**
|
||||
|
||||
- `set advert.jail on|off` — «тюрьма анонсов» (AdvertJail): слишком частые анонсы от одного отправителя не пересылаются, по умолчанию включена;
|
||||
- `set channel.budget <0..1000>` — бюджет каналов (ChannelBudget): лимит flood-пакетов групповых каналов на канал за 10 минут, по умолчанию выключен (`0`);
|
||||
- `neighbor.clear` очищает таблицу соседей, `discover.neighbors` запускает поиск соседей (`neighbor.remove <hex>` остаётся для удаления одного соседа).
|
||||
|
||||
**Дисплей репитера**
|
||||
|
||||
- в верхней строке главного экрана (`renderStatus`) справа появилась графическая иконка батареи с заполнением по проценту и напряжение (`4.01V`); имя узла обрезается по доступной ширине с `..`, а если вместе с вольтажом не помещается — вольтаж скрывается, иконка остаётся всегда; отдельный экран `Battery` в меню не изменился.
|
||||
|
||||
**Релиз**
|
||||
|
||||
- `v2026.10.2` для треков `repeater-mqtt`, `repeater-mqtt-espnow` и `repeater-mqtt-bridge`.
|
||||
|
||||
### 2026.10.0
|
||||
|
||||
**Ребрендинг в PosadMesh**
|
||||
|
||||
|
||||
+62
-34
@@ -8,12 +8,12 @@
|
||||
|
||||
Параметры запуска:
|
||||
|
||||
- `firmware_version` — версия upstream MeshCore для метаданных (например `v1.17.1`);
|
||||
- `posadmesh_version` — версия релиза PosadMesh (например `v2026.10.0`);
|
||||
- `firmware_version` — версия upstream MeshCore для метаданных (например `v1.18.0`);
|
||||
- `posadmesh_version` — версия релиза PosadMesh (например `v2026.10.2`);
|
||||
- `group` — что собирать: `all` (все MQTT-таргеты), `uplink`, `espnow`, `bridge` или `single`;
|
||||
- `target` — имя окружения PlatformIO, если `group=single` (например `heltec_v4_repeater_mqtt`);
|
||||
- `publish` — `true`, чтобы создать релиз Gitea и загрузить в него файлы (`false` по умолчанию — только артефакты сборки);
|
||||
- `tag` — тег релиза при `publish=true` (например `repeater-mqtt-v2026.10.0`).
|
||||
- `tag` — тег релиза при `publish=true` (например `repeater-mqtt-v2026.10.2`).
|
||||
|
||||
Для публикации в репозитории должен быть задан секрет `GITEA_TOKEN` (personal access token с правом `write:repository`).
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
```bash
|
||||
GITEA_TOKEN=<token> posadmesh-tools/publish-gitea-release.sh \
|
||||
repeater-mqtt-v2026.10.0 out "Repeater MQTT v2026.10.0"
|
||||
repeater-mqtt-v2026.10.2 out "Repeater MQTT v2026.10.2"
|
||||
```
|
||||
|
||||
Скрипт создаёт релиз, если его ещё нет, и повторный запуск не дублирует уже загруженные файлы. Адрес инстанса и репозиторий можно переопределить переменными `GITEA_URL` и `GITEA_REPO`.
|
||||
@@ -36,14 +36,14 @@ GITEA_TOKEN=<token> posadmesh-tools/publish-gitea-release.sh \
|
||||
|
||||
## Версии сборки
|
||||
|
||||
- `FIRMWARE_VERSION` — версия upstream MeshCore, на которой основана сборка (например `v1.15.0`)
|
||||
- `POSADMESH_VERSION` — версия релиза PosadMesh (например `v2026.5.1`)
|
||||
- `FIRMWARE_VERSION` — версия upstream MeshCore, на которой основана сборка (например `v1.18.0`)
|
||||
- `POSADMESH_VERSION` — версия релиза PosadMesh (например `v2026.10.2`)
|
||||
|
||||
Обе задаются переменными окружения перед запуском сборки:
|
||||
|
||||
```bash
|
||||
export FIRMWARE_VERSION=v1.15.0
|
||||
export POSADMESH_VERSION=v2026.5.1
|
||||
export FIRMWARE_VERSION=v1.18.0
|
||||
export POSADMESH_VERSION=v2026.10.2
|
||||
bash posadmesh-build.sh build-firmware heltec_v4_repeater_mqtt
|
||||
```
|
||||
|
||||
@@ -52,14 +52,14 @@ bash posadmesh-build.sh build-firmware heltec_v4_repeater_mqtt
|
||||
Один или несколько тегов следующих форматов помечают релиз соответствующего трека:
|
||||
|
||||
- `repeater-bridge-espnow-v1.15.0`
|
||||
- `repeater-mqtt-espnow-v2026.5.1`
|
||||
- `repeater-mqtt-bridge-v2026.7.0`
|
||||
- `repeater-mqtt-v2026.5.1`
|
||||
- `repeater-mqtt-espnow-v2026.10.2`
|
||||
- `repeater-mqtt-bridge-v2026.10.2`
|
||||
- `repeater-mqtt-v2026.10.2`
|
||||
|
||||
В `repeater-bridge-espnow-v1.15.0` используется версия upstream MeshCore.
|
||||
В `repeater-mqtt-espnow-v2026.5.1` используется версия релиза PosadMesh.
|
||||
В `repeater-mqtt-bridge-v2026.7.0` используется версия релиза PosadMesh.
|
||||
В `repeater-mqtt-v2026.5.1` используется версия релиза PosadMesh.
|
||||
В `repeater-mqtt-espnow-v2026.10.2` используется версия релиза PosadMesh.
|
||||
В `repeater-mqtt-bridge-v2026.10.2` используется версия релиза PosadMesh.
|
||||
В `repeater-mqtt-v2026.10.2` используется версия релиза PosadMesh.
|
||||
|
||||
Соответствие тегов и треков:
|
||||
|
||||
@@ -70,6 +70,33 @@ bash posadmesh-build.sh build-firmware heltec_v4_repeater_mqtt
|
||||
|
||||
Сборка выполняется локально для нужного таргета; тегов на одном коммите может быть несколько.
|
||||
|
||||
## Выпуск v2026.10.2
|
||||
|
||||
Версия `v2026.10.2` выпускается тремя треками:
|
||||
|
||||
- `repeater-mqtt` — тег `repeater-mqtt-v2026.10.2`
|
||||
- `repeater-mqtt-espnow` — тег `repeater-mqtt-espnow-v2026.10.2`
|
||||
- `repeater-mqtt-bridge` — тег `repeater-mqtt-bridge-v2026.10.2`
|
||||
|
||||
База — upstream MeshCore `v1.18.0`: при сборке `FIRMWARE_VERSION=v1.18.0`, `POSADMESH_VERSION=v2026.10.2`.
|
||||
|
||||
Состав:
|
||||
|
||||
- веб-панель: экраны «Общие», «Статистика», «CLI», «Прошивка», «Соседи» с переключением на клиенте; русский интерфейс; экран «Соседи» с таблицей и картой OSM; индикатор батареи вверху страницы; gzip-страницы и пост-проверка размера образа; подсказки CLI-команд;
|
||||
- внешние данные (пресеты радио и 38 кодов IATA, дерево регионов, чёрные списки) перенесены на `https://meshinfo.ru/flasher/meshcore-data/`;
|
||||
- CLI: `set advert.jail on|off`, `set channel.budget <0..1000>`, `neighbor.clear`, `discover.neighbors`;
|
||||
- дисплей: иконка батареи с заполнением и напряжение в верхней строке экрана состояния; отдельный экран `Battery` не менялся.
|
||||
|
||||
Что проверить перед публикацией:
|
||||
|
||||
1. Собрать хотя бы по одной цели из каждой группы (`uplink`, `espnow`, `bridge`) и убедиться, что пост-проверка `check_app_size.py` не падает.
|
||||
2. На ESP32-плате открыть панель и переключить все пять экранов: активна ровно одна кнопка, на `/stats` — «Статистика»; на «CLI», «Прошивке» и «Соседях» нет «Анонса», на «Соседях» работает «Обновить»; индикатор батареи виден на «Общих» и «Статистике» и скрыт на остальных трёх.
|
||||
3. Экран «Соседи»: таблица заполняется, команды «Найти соседей» и «Очистить» уходят, карта строит тайлы OSM с центром на узле, рисует линии и подписи по SNR, работают зум и перетаскивание; соседи без координат не рисуются.
|
||||
4. Проверить, что страницы панели отдаются с `Content-Encoding: gzip`.
|
||||
5. Проверить в CLI: `set advert.jail off` и `on` дают соответствующие ответы; `set channel.budget 100` отвечает `... 100 packets per 10 min`, `set channel.budget 0` — `... OFF`; `neighbor.clear` отвечает `OK`; `discover.neighbors` — `OK - Discover sent`.
|
||||
6. Загрузить пресеты, регионы и чёрный список по адресам `meshinfo.ru` — без ошибок CORS.
|
||||
7. На плате с дисплеем убедиться, что в верхней строке есть иконка батареи и напряжение, а длинное имя обрезается с `..`.
|
||||
|
||||
## Итоговая версия прошивки
|
||||
|
||||
- `repeater-bridge-espnow` использует версию из тега как `FIRMWARE_VERSION`
|
||||
@@ -80,46 +107,47 @@ bash posadmesh-build.sh build-firmware heltec_v4_repeater_mqtt
|
||||
Итоговая строка версии зависит от трека:
|
||||
|
||||
- `repeater-bridge-espnow`: `v1.15.0-<commit>`
|
||||
- `repeater-mqtt-espnow`: `v1.15.0-posadmesh-v2026.5.1-<commit>`
|
||||
- `repeater-mqtt-bridge`: `v1.15.0-posadmesh-v2026.7.0-<commit>`
|
||||
- `repeater-mqtt`: `v1.15.0-posadmesh-v2026.5.1-<commit>`
|
||||
- `repeater-mqtt-espnow`: `v1.18.0-posadmesh-v2026.10.2-<commit>`
|
||||
- `repeater-mqtt-bridge`: `v1.18.0-posadmesh-v2026.10.2-<commit>`
|
||||
- `repeater-mqtt`: `v1.18.0-posadmesh-v2026.10.2-<commit>`
|
||||
|
||||
Пример:
|
||||
|
||||
- тег: `repeater-mqtt-v2026.5.1`
|
||||
- переменные: `FIRMWARE_VERSION=v1.15.0`, `POSADMESH_VERSION=v2026.5.1`
|
||||
- итоговая версия сборки: `v1.15.0-posadmesh-v2026.5.1-abcdef`
|
||||
- тег: `repeater-mqtt-v2026.10.2`
|
||||
- переменные: `FIRMWARE_VERSION=v1.18.0`, `POSADMESH_VERSION=v2026.10.2`
|
||||
- итоговая версия сборки: `v1.18.0-posadmesh-v2026.10.2-abcdef`
|
||||
|
||||
## Типичный порядок выпуска
|
||||
|
||||
1. Обновите `release-notes.yml` в ветке `develop` — добавьте записи о релизе, которые должны войти в помечаемый тегом коммит.
|
||||
2. Откройте и смерджите релизный PR из `develop` в `main`.
|
||||
3. Соберите нужные прошивки локально с подходящими `FIRMWARE_VERSION` и `POSADMESH_VERSION`.
|
||||
4. Создайте нужные теги релиза на целевом коммите в `main`.
|
||||
5. Запушьте теги в git.meshinfo.ru.
|
||||
6. Создайте релиз в веб-интерфейсе git.meshinfo.ru и приложите собранные файлы из `out/`.
|
||||
1. Обновите `release-notes.yml` в ветке `main` — добавьте записи о релизе, которые должны войти в помечаемый тегом коммит.
|
||||
2. Соберите нужные прошивки локально с подходящими `FIRMWARE_VERSION` и `POSADMESH_VERSION`.
|
||||
3. Создайте нужные теги релиза на целевом коммите в `main`.
|
||||
4. Запушьте теги в git.meshinfo.ru.
|
||||
5. Создайте релиз в веб-интерфейсе git.meshinfo.ru и приложите собранные файлы из `out/`.
|
||||
|
||||
Если `release-notes.yml` должен отражать помеченный тегом релиз прошивки в репозитории, внесите это изменение до PR в `main`, чтобы помечаемый коммит уже содержал соответствующие примечания к релизу.
|
||||
Если `release-notes.yml` должен отражать помеченный тегом релиз прошивки в репозитории, внесите это изменение до коммита в `main`, чтобы помечаемый коммит уже содержал соответствующие примечания к релизу.
|
||||
|
||||
Пример:
|
||||
|
||||
```bash
|
||||
export FIRMWARE_VERSION=v1.15.0
|
||||
export POSADMESH_VERSION=v2026.5.1
|
||||
export FIRMWARE_VERSION=v1.18.0
|
||||
export POSADMESH_VERSION=v2026.10.2
|
||||
bash posadmesh-build.sh build-repeater-mqtt-firmwares
|
||||
|
||||
git tag repeater-mqtt-v2026.5.1
|
||||
git push origin repeater-mqtt-v2026.5.1
|
||||
git tag repeater-mqtt-v2026.10.2
|
||||
git push origin repeater-mqtt-v2026.10.2
|
||||
```
|
||||
|
||||
## Поддерживаемые теги
|
||||
|
||||
- `repeater-bridge-espnow-v1.15.0`
|
||||
- `repeater-mqtt-espnow-v2026.5.1`
|
||||
- `repeater-mqtt-bridge-v2026.7.0`
|
||||
- `repeater-mqtt-v2026.5.1`
|
||||
- `repeater-mqtt-espnow-v2026.10.2`
|
||||
- `repeater-mqtt-bridge-v2026.10.2`
|
||||
- `repeater-mqtt-v2026.10.2`
|
||||
|
||||
## Планы на следующий релиз
|
||||
|
||||
**Статус на `v2026.10.2`: не выполнено, пункт переносится.** Мёртвые префы вентилятора остаются в коде: класс `FanPrefs` и поля `fan_mode` / `fan_timeout_secs` в `NodePrefs`, чтение старых полей из NVS (смещения 512/513), ограничения при загрузке и значения по умолчанию в `MyMesh`.
|
||||
|
||||
- убрать мёртвые префы вентилятора: класс `FanPrefs`, поля `fan_mode` и `fan_timeout_secs`, чтение старых полей из NVS (смещения 512/513), ограничения при загрузке и значения по умолчанию в `MyMesh`, а также `def("fan", fan)` в `NodePrefs`. После слияния с upstream 1.18.0 вентилятором владеет сама плата: `board.attachDynamicPrefs(_prefs.getCustom())`, команды `get fan`, `set fan on|off|auto`, `set fan.lo`, `set fan.hi`, TX-кулдаун 15 секунд. Наши поля больше ни на что не влияют, но продолжают писаться в JSON и NVS. В README и release notes отметить, что сохранённые ранее `fan_mode` и `fan_timeout_secs` перестают учитываться — вентилятор пойдёт по логике платы.
|
||||
|
||||
@@ -179,6 +179,22 @@ OK
|
||||
|
||||
В сборках MQTT-репитеров `flood.max.unscoped` по умолчанию равен `64`. Меньшие значения могут ограничить, как далеко повторяется неограниченный flood-трафик, тогда как пересылка scoped/region flood остаётся под управлением `flood.max`.
|
||||
|
||||
### Соседи и их поиск
|
||||
|
||||
- `neighbors`: показывает таблицу соседей. Каждая строка — `id:секунд_назад:snr`, где `id` — первые 4 байта публичного ключа в hex; строки идут от самого свежего приёма к самому старому. Если соседей нет, ответ `-none-`.
|
||||
- `neighbor.remove <hex>`: удаляет одного соседа по hex-префиксу публичного ключа; при ошибке разбора ключа отвечает `ERR: bad pubkey`.
|
||||
- `neighbor.clear`: очищает таблицу соседей целиком и отвечает `OK`.
|
||||
- `discover.neighbors`: отправляет в эфир запрос обнаружения соседей и отвечает `OK - Discover sent`; параметров не принимает (`Err - discover.neighbors has no options`). Результат приходит в таблицу соседей по мере ответов.
|
||||
|
||||
### Защита эфира: тюрьма анонсов и бюджет каналов
|
||||
|
||||
Обе настройки применяются при обработке flood-пакетов в MQTT-репитере на ESP32.
|
||||
|
||||
- `set advert.jail on|off`: «тюрьма анонсов» (AdvertJail). Анонс, пришедший от отправителя чаще, чем раз в интервал advert узла (`advert.interval`, а при `0` — раз в 60 минут), считается нарушением; после 6 нарушений отправитель попадает в «тюрьму», и его досрочные анонсы не пересылаются. Анонс, выдержавший интервал, снимает одно нарушение, а ниже двух нарушений отправитель из «тюрьмы» выходит. По умолчанию включена. Ответ — `OK - advert jail is now ON` или `OK - advert jail is now OFF`.
|
||||
- `set channel.budget <0..1000>`: бюджет каналов (ChannelBudget) — сколько flood-пакетов группового канала (`GRP_TXT`, `GRP_DATA`) узел готов пропустить за 10 минут на каждый канал. Значение считается по 1-байтовому хэшу канала: канал может отправить до `<N>` пакетов подряд, дальше пакеты идут не чаще одного за `600 / N` секунд. `0` выключает бюджет; значения вне диапазона обрезаются до `0..1000`. По умолчанию выключен (`0`). Ответ — `OK - channel budget is now OFF` или `OK - channel budget is now <N> packets per 10 min`.
|
||||
|
||||
Отдельных `get`-команд у этих настроек нет: текущее значение хранится в prefs и задаётся только командами `set`.
|
||||
|
||||
### Отчётность о батарее платы
|
||||
|
||||
- В сборках MQTT-репитеров фоновый опрос батареи, используемый для истории MQTT/статуса, ограничен примерно одним разом в минуту. Явные запросы статуса и телеметрии по-прежнему обновляют показание сразу.
|
||||
@@ -219,9 +235,9 @@ OK
|
||||
- это предназначено для локального административного использования в доверенной сети
|
||||
- `start ota` освобождает локальный слушатель HTTP-редиректа на порту `80`, чтобы слушатель OTA HTTP мог занять его, не останавливая остальные службы репитера, независимо от того, выполнена ли команда из веб-панели, последовательного CLI или удалённого сеанса CLI
|
||||
- если старый слушатель редиректа не освободил порт `80` полностью, слушатель OTA повторяет попытки примерно до 30 секунд, после чего сдаётся
|
||||
- кнопка `Purge SD` в веб-интерфейсе выполняет `purge sd` после подтверждения в браузере
|
||||
- `purge sd` можно выполнить и из терминала на экране «CLI»; отдельной кнопки в панели нет
|
||||
- `start ota` использует существующий Wi-Fi-адрес репитера, если он уже подключён, или запускает точку доступа `MeshCore-OTA`, если Wi-Fi не подключён
|
||||
- ярлык Regions в `/app` последовательно выполняет команды регионов MeshCore: `region put` и `region allowf` для базового региона и вложенного, затем `region save`
|
||||
- ярлык «Регионы» на экране «Общие» последовательно выполняет команды регионов MeshCore: `region put` и `region allowf` для базового региона и вложенного, затем `region save`
|
||||
|
||||
## Скрипт проверки состояния heap
|
||||
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
| --- | --- | --- |
|
||||
|  |  |  |
|
||||
|
||||
В верхней строке экрана состояния справа показана графическая иконка батареи с заполнением по проценту и напряжение (`4.01V`). Имя узла выводится слева и обрезается по доступной ширине с `..`; если имя вместе с напряжением не помещается, напряжение скрывается, а иконка батареи остаётся всегда. Отдельный пункт меню `Battery` по-прежнему показывает напряжение, процент, полоску и множитель ADC. На снимке экрана состояния выше иконки батареи ещё нет — он сделан в более ранней сборке.
|
||||
|
||||
## Что настраивается
|
||||
|
||||
Мастер меняет только то, что нужно для быстрого ввода узла в сеть:
|
||||
|
||||
+137
-101
@@ -24,13 +24,14 @@
|
||||
|
||||
Она предоставляет:
|
||||
|
||||
- локальную страницу администратора за паролем по адресу `/app`
|
||||
- отдельную страницу статистики и трендов по адресу `/stats`
|
||||
- быстрые команды `get` для типовых проверок репитера и MQTT
|
||||
- панель CLI в стиле терминала для полного доступа к CLI репитера
|
||||
- редактируемые настройки репитера
|
||||
- редактируемые настройки MQTT
|
||||
- просмотр исторической статистики с трендами, соседями и последними событиями
|
||||
- экран «Общие» (`/app`) с настройками репитера и MQTT за паролем администратора
|
||||
- отдельный экран «Статистика» (маршрут `/stats`) с историей и графиками
|
||||
- экран «CLI» с быстрыми командами `get` и терминалом для полного доступа к CLI репитера
|
||||
- экран «Прошивка» с обновлением прошивки (OTA) и сертификатом панели
|
||||
- экран «Соседи» с таблицей соседей, их поиском на карте OSM
|
||||
- индикатор батареи вверху страницы
|
||||
|
||||
Интерфейс панели переведён на русский: заголовки экранов, разделов и кнопок, названия полей и подсказки. Технические сокращения остаются латиницей — CLI, MQTT, IATA, RSSI, SNR, IP, SSID, hex, dB, UTC, PEM, TLS, RSA. Названия сервисов MQTT `MeshCoreTel` и `MeshCoreTel RU` не переводятся.
|
||||
|
||||
Рекомендации по эксплуатации:
|
||||
|
||||
@@ -43,26 +44,27 @@
|
||||
### Проверить Wi-Fi и MQTT
|
||||
|
||||
1. Откройте панель.
|
||||
2. Нажмите `wifi.status` в Quick `get` Commands.
|
||||
3. Нажмите `mqtt.status` в Quick `get` Commands.
|
||||
4. Откройте `/stats` из верхней навигации для просмотра исторической статистики.
|
||||
2. Перейдите на экран «CLI».
|
||||
3. Нажмите `wifi.status` в «Быстрых get-командах».
|
||||
4. Нажмите `mqtt.status` там же.
|
||||
5. Откройте «Статистику» (`/stats`) для просмотра исторической статистики.
|
||||
|
||||
### Изменить имя устройства
|
||||
|
||||
1. Отредактируйте `Device Name`.
|
||||
2. Нажмите `Save`.
|
||||
1. На экране «Общие» отредактируйте поле «Имя устройства».
|
||||
2. Нажмите «Сохранить».
|
||||
3. Подтвердите сгенерированную команду и ответ в поле терминала CLI.
|
||||
|
||||
### Обновить владельца или email MQTT
|
||||
|
||||
1. Перейдите в `MQTT Settings`.
|
||||
2. Введите новое значение.
|
||||
3. Нажмите `Save`.
|
||||
1. Перейдите к разделу «Настройки MQTT» на экране «Общие».
|
||||
2. Введите новое значение в поле «Владелец (MQTT)» или «Почта (MQTT)».
|
||||
3. Нажмите «Сохранить».
|
||||
4. Используйте кнопку обновления, если хотите перечитать сохранённое значение из репитера.
|
||||
|
||||
## Обзор скриншотов
|
||||
|
||||
Скриншоты ниже показывают текущее разделение между более лёгкой страницей администратора `/app` и отдельной страницей статуса `/stats`.
|
||||
Скриншоты ниже сделаны в более ранней сборке: на них ещё английские подписи, навигация `App`/`Stats` и кнопка `Start OTA`. В текущих сборках интерфейс русский, экранов пять, а обновление прошивки выполняется на экране «Прошивка»; снимки оставлены только как общий обзор компоновки карточек.
|
||||
|
||||
### Скриншот `/app`
|
||||
|
||||
@@ -108,7 +110,7 @@
|
||||
- соединение идёт по HTTPS, но сертификат самоподписанный
|
||||
- браузеры будут предупреждать при первом подключении
|
||||
- после входа панель открывает доступ к CLI репитера
|
||||
- браузер сохраняет токен сессии при переключении между `/app` и `/stats`; страница переключает представления на месте до выхода, блокировки по бездействию или перезапуска устройства
|
||||
- браузер сохраняет токен сессии при переключении между экранами; панель переключает экраны на месте до выхода, блокировки по бездействию или перезапуска устройства
|
||||
- кратковременные пропадания Wi-Fi могут прервать загрузку страницы, но не должны требовать нового входа при перезапуске веб-панели
|
||||
- после перезапуска или перепрошивки устройства приложение проверяет сохранённый токен перед загрузкой настроек и возвращается к экрану входа, если сессия устарела
|
||||
|
||||
@@ -118,6 +120,8 @@
|
||||
|
||||
Панель спроектирована так, чтобы загружаться мягче, чем более ранние версии. При входе она теперь запрашивает разделы последовательно, а не запрашивает сразу один большой bootstrap payload.
|
||||
|
||||
Страницы панели сжимаются gzip во время сборки (`arch/esp32/extra_scripts/gzip_web_panel.py`): в прошивке лежат уже сжатые HTML, а сервер отдаёт их с заголовком `Content-Encoding: gzip`, поэтому браузер распаковывает страницы сам. Отдельная пост-проверка сборки (`arch/esp32/extra_scripts/check_app_size.py`) роняет сборку, если образ не влезает в свой app-раздел.
|
||||
|
||||
Даже с этим изменением панель по-прежнему использует HTTPS и внутренний heap. На платах с одним или двумя брокерами WSS MQTT открытие панели уменьшает запас MQTT на время активной сессии.
|
||||
|
||||
Рекомендуемая практика для развёртываний репитера:
|
||||
@@ -126,49 +130,73 @@
|
||||
- используйте её снова для редких проверок или диагностики
|
||||
- отключайте её командой `set web off` по завершении, чтобы у MQTT было максимально возможное свободное место
|
||||
|
||||
## Навигация и действия
|
||||
## Экраны и навигация
|
||||
|
||||
У веб-консоли теперь две основные страницы:
|
||||
Панель — это одна страница, которая переключает экраны на клиенте; `/app` и `/stats` — её маршруты, а остальные экраны открываются кнопками без смены адреса:
|
||||
|
||||
- `/app`: более лёгкое представление для управления и настройки
|
||||
- `/stats`: текущий статус, тренды, соседи и последние события
|
||||
| Экран | Как открывается | Что показывает |
|
||||
| --- | --- | --- |
|
||||
| «Общие» | кнопка «Общие», маршрут `/app` | информация, настройки репитера и радио, настройки MQTT, чёрный список, регионы |
|
||||
| «Статистика» | кнопка «Статистика», маршрут `/stats` | сводка состояния, «Графики», «События» |
|
||||
| «CLI» | кнопка «CLI» | «Быстрые get-команды» и терминал CLI |
|
||||
| «Прошивка» | кнопка «Прошивка» | обновление прошивки по файлу `.bin` и TLS-сертификат панели |
|
||||
| «Соседи» | кнопка «Соседи» | таблица соседей и карта OSM |
|
||||
|
||||
Обе страницы используют одну и ту же верхнюю навигацию и служебные действия.
|
||||
Кнопки экранов находятся в верхней панели действий, активна ровно одна — текущий экран. На маршруте `/stats` активна «Статистика», на остальных экранах — соответствующая кнопка.
|
||||
|
||||
### `/app`
|
||||
Справа в той же панели — «Анонс», «Обновить» с кнопкой автообновления `↻`, «Перезагрузить», переключатель темы и «Выйти»; эта группа прижата к правому краю. На экранах «CLI» и «Прошивка» кнопки «Анонс» и «Обновить» скрыты. На экране «Соседи» скрыт только «Анонс», а «Обновить» остаётся и заново читает таблицу и карту.
|
||||
|
||||
Страница `/app` — это основная область администрирования и настройки.
|
||||
Вверху страницы — индикатор батареи: иконка с заполнением по проценту, процент и напряжение в милливольтах. Он обновляется раз в минуту и при загрузке страницы, а на экранах «CLI», «Прошивка» и «Соседи» скрыт.
|
||||
|
||||
Она включает:
|
||||
### «Общие» (`/app`)
|
||||
|
||||
- переход к `App` и `Stats`
|
||||
- `Advert`
|
||||
- `Start OTA`
|
||||
- `Reboot`
|
||||
- переключатель темы
|
||||
- `Logout`
|
||||
Основная область администрирования и настройки. На этом экране видны карточки «Информация», «Настройки репитера», «Настройки MQTT», «Чёрный список» и «Регионы»; карточки CLI и обновления прошивки живут на своих экранах и здесь скрыты.
|
||||
|
||||
Используйте `Start OTA` только тогда, когда собираетесь обновить прошивку.
|
||||
### «Статистика» (`/stats`)
|
||||
|
||||
Если браузер может получить манифест прошивки PosadMesh flasher, страница приложения сверяет версию релиза PosadMesh из `mqtt.client_version` с опубликованными релизами MeshCore-Posadmesh. Когда доступен более новый тег релиза PosadMesh, в верхней части страницы появляется уведомление об обновлении прошивки.
|
||||
Отдельный маршрут для текущего статуса и исторического обзора: сводка состояния, «Графики» (бывший раздел `Trends`) и «События». Страница открывается отдельной загрузкой, поэтому основная страница администратора остаётся легче.
|
||||
|
||||
Для сборок, включающих `CLIENT_ENV`, уведомление может показывать `Update now`. Это скачивает соответствующий не объединённый `.bin` с зеркала прошивок PosadMesh flasher, показывает прогресс в баннере, загружает прошивку через веб-панель HTTPS и позволяет устройству перезагрузиться. Для этого требуются заголовки CORS на путях `/firmwares/` flasher.
|
||||
### «CLI»
|
||||
|
||||
### `/stats`
|
||||
Здесь собраны «Быстрые get-команды» и терминал «Выполнить CLI-команду». Кнопки сохранения на других экранах выводят сгенерированную команду и ответ именно в этот терминал.
|
||||
|
||||
Страница `/stats` — это основное место для текущего статуса и исторического обзора.
|
||||
### «Прошивка»
|
||||
|
||||
Она включает:
|
||||
Карточка «Обновление прошивки» принимает файл `.bin`: после подтверждения панель загружает его через `/api/ota`, показывает прогресс, а после успешной прошивки устройство перезагружается и панель возвращает на экран входа.
|
||||
|
||||
- переход к `App` и `Stats`
|
||||
- `Refresh`
|
||||
- `Reboot`
|
||||
- переключатель темы
|
||||
- `Logout`
|
||||
Во второй карточке загружается TLS-сертификат самой панели — файл PEM с цепочкой сертификатов и закрытым ключом RSA размером до 12 КБ. Кнопка «Встроенный» возвращает самоподписанный сертификат, после чего браузер снова предупредит о нём.
|
||||
|
||||
## Быстрые команды "get"
|
||||
## Экран «Соседи»
|
||||
|
||||
Этот раздел выполняет типовые команды только для чтения для:
|
||||
### Таблица соседей
|
||||
|
||||
Таблица показывает:
|
||||
|
||||
| Колонка | Значение |
|
||||
| --- | --- |
|
||||
| Имя | имя из анонса соседа, у кого имени нет — прочерк |
|
||||
| ID | короткий ID соседа |
|
||||
| SNR | последний SNR в dB |
|
||||
| Широта / Долгота | координаты из анонса в формате `0.0000`; если сосед их не передал — `0.0000 / 0.0000` |
|
||||
| Слышно | сколько времени прошло с последнего приёма |
|
||||
| Анонс | сколько времени прошло с последнего анонса |
|
||||
|
||||
Над таблицей — кнопки «Найти соседей» (отправляет `discover.neighbors`) и «Очистить» (отправляет `neighbor.clear`). Строка статуса подтверждает отправку: «Команда отправлена: … (ответ смотрите в журнале CLI)» — сам ответ устройства появляется в терминале на экране «CLI».
|
||||
|
||||
### Карта соседей
|
||||
|
||||
Карта показывает наше положение и соседей, у которых есть координаты:
|
||||
|
||||
- подложка — тайлы `tile.openstreetmap.org`, которые загружаются обычными `<img>`; поверх них рисуется SVG-слой с линиями и подписями;
|
||||
- центр карты всегда на координатах нашего узла; если у узла координаты не заданы, карта скрыта и подсказывает задать их через `set lat` / `set lon`;
|
||||
- линии идут от нашего узла к соседям с координатами: цвет по SNR (зелёный от `8 dB`, жёлтый от `0 dB`, красный ниже), толщина растёт с SNR, для соседа без SNR — серая линия;
|
||||
- рядом с точкой соседа подпись «имя · dB»;
|
||||
- зум — кнопками `+`, `−` и `⌂` (сброс) или колесом мыши, карта перетаскивается мышью;
|
||||
- соседи без координат или с нулевыми координатами на карту не попадают; сколько их попало и сколько загружено тайлов, написано под картой.
|
||||
|
||||
## Быстрые get-команды
|
||||
|
||||
На экране «CLI» этот раздел выполняет типовые команды только для чтения для:
|
||||
|
||||
- Wi-Fi
|
||||
- MQTT
|
||||
@@ -177,13 +205,14 @@
|
||||
|
||||
## Выполнить команду CLI
|
||||
|
||||
Это небольшой терминал для CLI репитера.
|
||||
Это небольшой терминал для CLI репитера на экране «CLI».
|
||||
|
||||
- нажмите `Enter`, чтобы выполнить команду
|
||||
- история команд отображается в поле терминала ниже
|
||||
- кнопки сохранения в других частях страницы также показывают здесь сгенерированную команду и ответ
|
||||
- `clock` доступна здесь, если вы хотите проверить текущее время платы репитера
|
||||
- аутентифицированные сессии могут выполнять те же команды CLI, которые принимает репитер
|
||||
- в поле ввода работают подсказки: браузер предлагает типовые команды репитера из встроенного списка (`datalist`), в том числе `get`/`set` для радио, анонсов, соседей, веб-панели и MQTT
|
||||
|
||||
Это позволяет легко увидеть, что именно панель отправила репитеру.
|
||||
|
||||
@@ -191,40 +220,52 @@
|
||||
|
||||
В этот раздел входят:
|
||||
|
||||
- Device Name
|
||||
- Clock UTC
|
||||
- Latitude
|
||||
- Longitude
|
||||
- Guest Password
|
||||
- Private Key
|
||||
- Advert Interval
|
||||
- Flood Interval
|
||||
- Scoped Flood Max
|
||||
- Unscoped Flood Max
|
||||
- Owner Info
|
||||
- Имя устройства
|
||||
- Часы (UTC)
|
||||
- Широта
|
||||
- Долгота
|
||||
- Приватный ключ
|
||||
- Информация о владельце
|
||||
- Пароль администратора и пароль гостя (подраздел «Доступ»)
|
||||
- Интервал анонсов (минуты)
|
||||
- Интервал флуда (часы)
|
||||
- Лимит флуда
|
||||
- Режим хэша пути
|
||||
|
||||
Примечания:
|
||||
|
||||
- `Latitude` и `Longitude` по умолчанию равны `0.0` как заполнители
|
||||
- «Широта» и «Долгота» по умолчанию равны `0.0` как заполнители
|
||||
- изменение приватного ключа требует перезагрузки для применения
|
||||
- кнопки обновления загружают текущее значение из репитера
|
||||
- кнопки сохранения немедленно отправляют соответствующую команду CLI
|
||||
|
||||
## Настройки радио и регионы
|
||||
## Настройки радио, регионы и чёрный список
|
||||
|
||||
Раздел `Radio Settings` включает селектор community-пресета радио, режим path hash и работу с деревом регионов узла. Список регионов строится из уже разрешённых на узле регионов; нажатие `Save` разрешает выбранный регион вместе с его базовым регионом и сохраняет карту регионов командой `region save`.
|
||||
Группа «Настройки радио» в карточке «Настройки репитера» включает селектор пресета радио и режим хэша пути; кнопка «Сохранить» рядом с пресетом отправляет `set radio` с параметрами выбранного пресета, а режим хэша пути сохраняется командой `set path.hash.mode`.
|
||||
|
||||
Карточка «Регионы» показывает текущее дерево регионов узла. «Применить (добавить)» разрешает выбранный регион вместе с его базовым регионом и сохраняет карту командой `region save`, а «Заменить все» переписывает карту выбранным набором. Удаление региона из списка выполняется тут же, в разделе текущих регионов.
|
||||
|
||||
Пресеты радио и коды IATA, дерево регионов и чёрные списки панель берёт с нашего сервера, а не со сторонних API:
|
||||
|
||||
- `https://meshinfo.ru/flasher/meshcore-data/conf.json` — пресеты радио и коды IATA (38 записей);
|
||||
- `https://meshinfo.ru/flasher/meshcore-data/regions.json` — дерево регионов;
|
||||
- `https://meshinfo.ru/flasher/meshcore-data/blacklist/<КОД>.json` — чёрный список по коду IATA.
|
||||
|
||||
Поле URL в разделах «Загрузить из сети» можно заменить своим адресом. Реальные данные чёрного списка сейчас заполнены только для `MOW`, для остальных 37 кодов в репозитории лежат пустые шаблоны. Исходники этих файлов — [`posadmesh-tools/meshcore-data/`](https://git.meshinfo.ru/shade/MeshCore-Posadmesh/src/branch/main/posadmesh-tools/meshcore-data); для каталога `/flasher/meshcore-data/` на сервере включён CORS (`Access-Control-Allow-Origin: *`), поэтому браузер может загрузить их напрямую.
|
||||
|
||||
Чёрный список на экране «Общие» состоит из двух частей — «Чёрный список путей» (hex-префиксы хэша узла) и «Чёрный список каналов» (hex-префикс или `#ИмяКанала`); обе загружаются кнопкой «Загрузить из сети» по указанному URL.
|
||||
|
||||
## Информация
|
||||
|
||||
Этот раздел показывает:
|
||||
Карточка «Информация» показывает:
|
||||
|
||||
- `Version`: версия прошивки с датой сборки
|
||||
- `Client Version`: строка версии MQTT-клиента
|
||||
- `Public Key`
|
||||
- «Оборудование»: имя платы
|
||||
- «Прошивка»: версия прошивки с датой сборки
|
||||
- «Публичный ключ»
|
||||
|
||||
## Режим Ghost Node
|
||||
|
||||
Режим Ghost Node — это удобное управление на странице `/app` для репитера, который должен оставаться в Wi-Fi и MQTT, но не должен активно вести себя как ещё один репитер поблизости.
|
||||
Режим Ghost Node (в панели подписан как «Режим призрак») — это удобное управление на экране «Общие» для репитера, который должен оставаться в Wi-Fi и MQTT, но не должен активно вести себя как ещё один репитер поблизости.
|
||||
|
||||
Типичный сценарий использования:
|
||||
|
||||
@@ -250,45 +291,46 @@
|
||||
|
||||
В этот раздел входят:
|
||||
|
||||
- `mqtt.iata`: выбирается из подготовленного списка восточного побережья/юго-востока.
|
||||
- `mqtt.owner`: публичный ключ владельца.
|
||||
- `mqtt.email`: контактный email владельца.
|
||||
- Брокеры MQTT: переключатель **MeshCoreTel RU** и переключатель **Custom broker**, каждый включает или отключает свой брокер. Одновременно можно включить не более двух брокеров.
|
||||
- поля custom MQTT `host:port`, транспорт TCP/WSS, имя пользователя и пароль.
|
||||
- «MQTT IATA»: код выбирается из подготовленного списка (38 записей).
|
||||
- «Владелец (MQTT)»: публичный ключ владельца.
|
||||
- «Почта (MQTT)»: контактный email владельца.
|
||||
- «MQTT-серверы»: переключатель **MeshCoreTel RU** и переключатель **Свой брокер**, каждый включает или отключает свой брокер. Одновременно можно включить не более двух брокеров.
|
||||
- поля своего брокера: «Хост:порт», «Транспорт» (tcp или wss), «Логин» и «Пароль».
|
||||
|
||||
`UNSET - To be configured` — значение по умолчанию для новых установок MQTT-репитера, пока не появится реальное сохранённое значение.
|
||||
|
||||
Примечания:
|
||||
|
||||
- когда `mqtt.iata` имеет значение `UNSET`, панель показывает в верхней части баннер с напоминанием задать его в MQTT Settings
|
||||
- когда `mqtt.iata` имеет значение `UNSET`, панель показывает в верхней части баннер с напоминанием задать его в настройках MQTT
|
||||
- пока `mqtt.iata` имеет значение `UNSET`, включённые брокеры MQTT не пытаются подключиться
|
||||
- текущие состояния серверов MQTT загружаются при открытии страницы
|
||||
- вы можете включать или отключать каждый сервер MQTT из этой панели
|
||||
- custom MQTT использует настроенные имя пользователя и пароль, а не аутентификацию JWT
|
||||
- custom MQTT по умолчанию использует TCP; выберите WSS для MQTT через защищённые WebSockets с фиксированным websocket-путём `/mqtt` и корневым CA-бандлом x509 из ESP-IDF
|
||||
- свой брокер использует настроенные имя пользователя и пароль, а не аутентификацию JWT
|
||||
- свой брокер по умолчанию использует TCP; выберите WSS для MQTT через защищённые WebSockets с фиксированным websocket-путём `/mqtt` и корневым CA-бандлом x509 из ESP-IDF
|
||||
- отключение подключённого сервера MQTT публикует retained-статус offline до отключения клиента
|
||||
- изменение `mqtt.iata` с настроенного значения публикует retained-статус offline в старый топик статуса, перезапускает подключённых клиентов брокера и переподключается по новому пути топика
|
||||
- одновременно можно включить не более двух брокеров MQTT
|
||||
|
||||
## Обзор `/stats`
|
||||
|
||||
Страница статистики загружается отдельно от `/app` и предназначена для того, чтобы основная страница администратора оставалась легче.
|
||||
Экран статистики загружается отдельно от «Общих» и предназначен для того, чтобы основная страница администратора оставалась легче.
|
||||
|
||||
Страница `/stats` сейчас показывает:
|
||||
Экран `/stats` сейчас показывает:
|
||||
|
||||
- `Services`: MQTT, web, архив, число соседей и, когда смонтирована, ёмкость карты и архива
|
||||
- необязательная сводная карточка `Environment` на всю ширину на платах, которые передают телеметрию GPS или параметров окружающей среды
|
||||
- `Trends`: батарея, свободный heap, активность пакетов, сигнал, уровень шума и, когда GPS активен, спутники
|
||||
- `Neighbours`: текущая таблица соседей с ID, SNR, давностью последнего приёма и давностью advert
|
||||
- `Events`: текущие события загрузки/сессии
|
||||
- «Сервисы»: MQTT, web, архив, число соседей и, когда смонтирована, ёмкость карты и архива
|
||||
- необязательная сводная карточка «Окружение» на всю ширину на платах, которые передают телеметрию GPS или параметров окружающей среды
|
||||
- «Графики» (бывшие `Trends`): батарея, свободный heap, активность пакетов, сигнал, уровень шума и, когда GPS активен, спутники
|
||||
- «События»: текущие события загрузки/сессии
|
||||
|
||||
Таблица соседей и карта вынесены на отдельный экран «Соседи».
|
||||
|
||||
Запланированные ротации MQTT JWT показываются как события `mqtt_token_refreshed` вместо короткой пары `mqtt_disconnected` / `mqtt_connected`.
|
||||
|
||||
Для плат, которые предоставляют дополнительную телеметрию, необязательная сводная карточка `Environment` может показывать текущие значения, такие как состояние активности/fix GPS, широта, долгота, высота по GPS, напряжение, температура датчика, влажность, барометр, высота по давлению и температура MCU.
|
||||
Для плат, которые предоставляют дополнительную телеметрию, необязательная сводная карточка «Окружение» может показывать текущие значения, такие как состояние активности/fix GPS, широта, долгота, высота по GPS, напряжение, температура датчика, влажность, барометр, высота по давлению и температура MCU.
|
||||
|
||||
Метрики без текущего значения скрываются, а не отображаются строками-заполнителями, поэтому карточки различаются в зависимости от платы и текущего состояния датчиков.
|
||||
|
||||
Индикатор батареи `Core` предпочитает процент батареи, сообщаемый платой, когда таргет его предоставляет. На таких платах детализация индикатора показывает только текущее значение напряжения батареи в милливольтах. В противном случае он масштабирует отображаемый процент из настроенного для платы диапазона напряжения батареи и показывает этот диапазон в тексте детализации, а не предполагает фиксированную однобаночную сборку `3000-4200 mV`.
|
||||
Индикатор батареи в карточке «Ядро» предпочитает процент батареи, сообщаемый платой, когда таргет его предоставляет. На таких платах детализация индикатора показывает только текущее значение напряжения батареи в милливольтах. В противном случае он масштабирует отображаемый процент из настроенного для платы диапазона напряжения батареи и показывает этот диапазон в тексте детализации, а не предполагает фиксированную однобаночную сборку `3000-4200 mV`.
|
||||
|
||||
Графики трендов загружаются последовательно, а не одним большим payload:
|
||||
|
||||
@@ -341,36 +383,30 @@
|
||||
- кнопки быстрых команд сворачиваются в двухколоночную раскладку
|
||||
- верхняя навигация и группы действий остаются компактными и удобными для касания
|
||||
- строки ввода остаются пригодными для взаимодействия касанием
|
||||
- карточки трендов при необходимости перестраиваются в одноколоночные секции
|
||||
- карточки графиков при необходимости перестраиваются в одноколоночные секции
|
||||
|
||||
## Дополнительные задачи
|
||||
|
||||
### Start OTA
|
||||
### Обновление прошивки на экране «Прошивка»
|
||||
|
||||
1. Нажмите `Start OTA`.
|
||||
2. Подтвердите действие.
|
||||
3. Панель запускает OTA, ждёт, пока HTTP-слушатель OTA займёт порт `80`, а затем открывает возвращённый URL `http://.../update`.
|
||||
4. Локальный HTTP-слушатель перенаправления на порту `80` освобождается, чтобы OTA мог занять этот порт.
|
||||
5. Продолжите по обычному сценарию OTA.
|
||||
1. Откройте экран «Прошивка».
|
||||
2. Выберите файл прошивки `.bin`.
|
||||
3. Нажмите «Загрузить» и подтвердите: панель предупредит, что после прошивки устройство перезагрузится.
|
||||
4. Дождитесь прогресса загрузки; после успешной прошивки панель перезагружает страницу и возвращает на экран входа.
|
||||
|
||||
Если репитер уже подключён к Wi-Fi, OTA использует существующий адрес в локальной сети. Если Wi-Fi не подключён, репитер запускает точку доступа `MeshCore-OTA` и возвращает вместо этого адрес OTA.
|
||||
Если старый слушатель перенаправления не полностью освободил порт `80`, слушатель OTA повторяет попытки примерно до 30 секунд, после чего сдаётся.
|
||||
Если загрузка не удалась, панель покажет текст ошибки и снова разрешит выбрать файл.
|
||||
|
||||
Если более старая сборка отправляет вас на странное перенаправление после `start ota`, используйте веб-кнопку `Start OTA` для запуска обновления. В актуальных сборках эта проблема с перенаправлением исправлена.
|
||||
### Сертификат панели
|
||||
|
||||
### Purge SD
|
||||
|
||||
`Purge SD` отображается красным встроенным текстом рядом с `Archive Used` в карточке Services на `/stats`. Запрашивает подтверждение, а затем выполняет аутентифицированную команду `purge sd`.
|
||||
|
||||
Это удаляет файлы и каталоги из архива на смонтированной SD-карте, после чего заново создаёт пустой каталог архива `/stats` для продолжения записи во время работы. Это не стирает внутреннюю файловую систему репитера, идентичность, prefs, регионы, настройки радио или настройки MQTT.
|
||||
В той же карточке «Обновление прошивки» загружается TLS-сертификат панели: файл PEM с цепочкой сертификатов и закрытым ключом RSA, не больше 12 КБ. После установки панель перезапускается с новым сертификатом. Кнопка «Встроенный» возвращает встроенный самоподписанный сертификат, и браузер снова предупредит о нём.
|
||||
|
||||
### Использовать историческую статистику
|
||||
|
||||
1. При необходимости включите статистику командой `set web.stats on`.
|
||||
2. Откройте `/stats` из верхней навигации.
|
||||
3. Просмотрите `Services` для состояния архива и работы.
|
||||
4. Просмотрите `Trends` для недавней истории графиков.
|
||||
5. Используйте `Refresh`, чтобы перезагрузить страницу статистики.
|
||||
2. Откройте экран «Статистика» кнопкой в верхней панели (маршрут `/stats`).
|
||||
3. Просмотрите карточку «Сервисы» для состояния архива и работы.
|
||||
4. Просмотрите «Графики» для недавней истории.
|
||||
5. Используйте «Обновить», чтобы перезагрузить страницу статистики.
|
||||
|
||||
## Диагностика
|
||||
|
||||
@@ -412,7 +448,7 @@
|
||||
Попробуйте:
|
||||
|
||||
- обновить вкладку браузера
|
||||
- использовать `Refresh` на `/stats`
|
||||
- использовать «Обновить» на экране статистики или соседей
|
||||
- выйти и войти снова
|
||||
- проверить стабильность Wi-Fi с помощью `get wifi.status`
|
||||
|
||||
|
||||
@@ -1021,3 +1021,156 @@ releases:
|
||||
area: release
|
||||
text: "Прошивальщик в браузере (<https://meshinfo.ru/flasher/>) получил прошивки этого релиза: файлы разбиты по версиям, свежая версия показывается выше предыдущей."
|
||||
breaking_changes: []
|
||||
|
||||
- track: repeater-mqtt-bridge
|
||||
version: "2026.10.2"
|
||||
tag: "repeater-mqtt-bridge-v2026.10.2"
|
||||
date: "2026-10-22"
|
||||
previous_version: "2026.10.1"
|
||||
summary: "Веб-панель репитера разделена на экраны «Общие», «Статистика», «CLI», «Прошивка» и «Соседи» и переведена на русский. На экране «Соседи» появились таблица с поиском и карта OSM, вверху страницы — индикатор батареи. Внешние данные (пресеты радио, регионы, чёрные списки) перенесены на meshinfo.ru, страницы панели сжимаются gzip. Добавлены «тюрьма анонсов», бюджет каналов и команды соседей, на экране состояния дисплея — иконка батареи."
|
||||
changes:
|
||||
- type: added
|
||||
area: web
|
||||
text: "Панель разделена на экраны с переключением на клиенте: «Общие» (`/app`), «Статистика» (`/stats`, отдельный маршрут), «CLI», «Прошивка» и «Соседи». Активна ровно одна кнопка, на `/stats` — «Статистика»; группа «Анонс / Обновить / Перезагрузить / тема / Выйти» прижата к правому краю."
|
||||
- type: changed
|
||||
area: web
|
||||
text: "На экранах «CLI», «Прошивка» и «Соседи» скрыты кнопки «Анонс» и «Обновить»; на «Соседях» «Обновить» оставлен и перечитывает таблицу и карту."
|
||||
- type: changed
|
||||
area: web
|
||||
text: "Интерфейс панели переведён на русский: заголовки экранов, разделов и кнопок, `Trends` стал «Графики». Технические сокращения (CLI, MQTT, IATA, RSSI, SNR, IP, SSID, hex, dB, UTC, PEM, TLS, RSA) и названия сервисов `MeshCoreTel` / `MeshCoreTel RU` не переводятся."
|
||||
- type: added
|
||||
area: web
|
||||
text: "Экран «Соседи»: таблица (Имя, ID, SNR, Широта/Долгота, Слышно, Анонс), кнопки «Найти соседей» (`discover.neighbors`) и «Очистить» (`neighbor.clear`), строка статуса «Команда отправлена: … (ответ смотрите в журнале CLI)». Имя и координаты соседа берутся из его анонса; у соседа без них — прочерк вместо имени и `0.0000 / 0.0000`."
|
||||
- type: added
|
||||
area: web
|
||||
text: "Карта OSM на экране «Соседи»: тайлы `tile.openstreetmap.org` обычными `<img>` и SVG-слой поверх. Центр всегда на координатах нашего узла, линии к соседям с координатами окрашены и утолщены по SNR, подписи «имя · dB», зум кнопками `+` / `−` / `⌂` и колесом, перетаскивание мышью. Соседи без координат или с нулями на карту не попадают."
|
||||
- type: added
|
||||
area: web
|
||||
text: "Индикатор батареи вверху страницы: иконка с заполнением по проценту, процент и напряжение в милливольтах. Обновляется раз в минуту и при загрузке страницы, на экранах «CLI», «Прошивка» и «Соседи» скрыт."
|
||||
- type: changed
|
||||
area: web
|
||||
text: "Страницы панели сжимаются gzip при сборке (`arch/esp32/extra_scripts/gzip_web_panel.py`) и отдаются с `Content-Encoding: gzip`; пост-проверка `check_app_size.py` роняет сборку, если образ больше своего app-раздела."
|
||||
- type: added
|
||||
area: web
|
||||
text: "Поле ввода CLI-команды получило подсказки (`datalist`) по типовым командам репитера."
|
||||
- type: changed
|
||||
area: web
|
||||
text: "Внешние данные больше не берутся с `api.vbart.ru` и `meshcore.hackru.ru`: пресеты радио и коды IATA (38 записей) — `https://meshinfo.ru/flasher/meshcore-data/conf.json`, дерево регионов — `https://meshinfo.ru/flasher/meshcore-data/regions.json`, чёрные списки по IATA — `https://meshinfo.ru/flasher/meshcore-data/blacklist/<КОД>.json`. Реальные данные есть только для `MOW`, остальные 37 кодов — пустые шаблоны. Для каталога настроен CORS `Access-Control-Allow-Origin: *`."
|
||||
- type: added
|
||||
area: cli
|
||||
text: "`set advert.jail on|off` — «тюрьма анонсов» (AdvertJail): слишком частые анонсы от одного отправителя не пересылаются. По умолчанию включена."
|
||||
- type: added
|
||||
area: cli
|
||||
text: "`set channel.budget <0..1000>` — бюджет каналов (ChannelBudget): лимит flood-пакетов группового канала за 10 минут на каждый канал. По умолчанию выключен (`0`)."
|
||||
- type: added
|
||||
area: cli
|
||||
text: "`neighbor.clear` очищает таблицу соседей, `discover.neighbors` запускает поиск соседей; `neighbor.remove <hex>` остаётся для удаления одного соседа."
|
||||
- type: added
|
||||
area: ui
|
||||
text: "Экран состояния дисплея: справа в верхней строке — графическая иконка батареи с заполнением по проценту и напряжение (`4.01V`). Имя узла обрезается по доступной ширине с `..`; если вместе с вольтажом не помещается — вольтаж скрывается, иконка остаётся всегда. Отдельный экран `Battery` в меню не изменился."
|
||||
- type: docs
|
||||
area: docs
|
||||
text: "Обновлены `README.md`, страницы «Веб-панель» и «Пользовательские команды CLI», а также `RELEASE.md` под новую версию."
|
||||
breaking_changes: []
|
||||
|
||||
- track: repeater-mqtt-espnow
|
||||
version: "2026.10.2"
|
||||
tag: "repeater-mqtt-espnow-v2026.10.2"
|
||||
date: "2026-10-22"
|
||||
previous_version: "2026.10.1"
|
||||
summary: "Веб-панель репитера разделена на экраны «Общие», «Статистика», «CLI», «Прошивка» и «Соседи» и переведена на русский. На экране «Соседи» появились таблица с поиском и карта OSM, вверху страницы — индикатор батареи. Внешние данные (пресеты радио, регионы, чёрные списки) перенесены на meshinfo.ru, страницы панели сжимаются gzip. Добавлены «тюрьма анонсов», бюджет каналов и команды соседей, на экране состояния дисплея — иконка батареи."
|
||||
changes:
|
||||
- type: added
|
||||
area: web
|
||||
text: "Панель разделена на экраны с переключением на клиенте: «Общие» (`/app`), «Статистика» (`/stats`, отдельный маршрут), «CLI», «Прошивка» и «Соседи». Активна ровно одна кнопка, на `/stats` — «Статистика»; группа «Анонс / Обновить / Перезагрузить / тема / Выйти» прижата к правому краю."
|
||||
- type: changed
|
||||
area: web
|
||||
text: "На экранах «CLI», «Прошивка» и «Соседи» скрыты кнопки «Анонс» и «Обновить»; на «Соседях» «Обновить» оставлен и перечитывает таблицу и карту."
|
||||
- type: changed
|
||||
area: web
|
||||
text: "Интерфейс панели переведён на русский: заголовки экранов, разделов и кнопок, `Trends` стал «Графики». Технические сокращения (CLI, MQTT, IATA, RSSI, SNR, IP, SSID, hex, dB, UTC, PEM, TLS, RSA) и названия сервисов `MeshCoreTel` / `MeshCoreTel RU` не переводятся."
|
||||
- type: added
|
||||
area: web
|
||||
text: "Экран «Соседи»: таблица (Имя, ID, SNR, Широта/Долгота, Слышно, Анонс), кнопки «Найти соседей» (`discover.neighbors`) и «Очистить» (`neighbor.clear`), строка статуса «Команда отправлена: … (ответ смотрите в журнале CLI)». Имя и координаты соседа берутся из его анонса; у соседа без них — прочерк вместо имени и `0.0000 / 0.0000`."
|
||||
- type: added
|
||||
area: web
|
||||
text: "Карта OSM на экране «Соседи»: тайлы `tile.openstreetmap.org` обычными `<img>` и SVG-слой поверх. Центр всегда на координатах нашего узла, линии к соседям с координатами окрашены и утолщены по SNR, подписи «имя · dB», зум кнопками `+` / `−` / `⌂` и колесом, перетаскивание мышью. Соседи без координат или с нулями на карту не попадают."
|
||||
- type: added
|
||||
area: web
|
||||
text: "Индикатор батареи вверху страницы: иконка с заполнением по проценту, процент и напряжение в милливольтах. Обновляется раз в минуту и при загрузке страницы, на экранах «CLI», «Прошивка» и «Соседи» скрыт."
|
||||
- type: changed
|
||||
area: web
|
||||
text: "Страницы панели сжимаются gzip при сборке (`arch/esp32/extra_scripts/gzip_web_panel.py`) и отдаются с `Content-Encoding: gzip`; пост-проверка `check_app_size.py` роняет сборку, если образ больше своего app-раздела."
|
||||
- type: added
|
||||
area: web
|
||||
text: "Поле ввода CLI-команды получило подсказки (`datalist`) по типовым командам репитера."
|
||||
- type: changed
|
||||
area: web
|
||||
text: "Внешние данные больше не берутся с `api.vbart.ru` и `meshcore.hackru.ru`: пресеты радио и коды IATA (38 записей) — `https://meshinfo.ru/flasher/meshcore-data/conf.json`, дерево регионов — `https://meshinfo.ru/flasher/meshcore-data/regions.json`, чёрные списки по IATA — `https://meshinfo.ru/flasher/meshcore-data/blacklist/<КОД>.json`. Реальные данные есть только для `MOW`, остальные 37 кодов — пустые шаблоны. Для каталога настроен CORS `Access-Control-Allow-Origin: *`."
|
||||
- type: added
|
||||
area: cli
|
||||
text: "`set advert.jail on|off` — «тюрьма анонсов» (AdvertJail): слишком частые анонсы от одного отправителя не пересылаются. По умолчанию включена."
|
||||
- type: added
|
||||
area: cli
|
||||
text: "`set channel.budget <0..1000>` — бюджет каналов (ChannelBudget): лимит flood-пакетов группового канала за 10 минут на каждый канал. По умолчанию выключен (`0`)."
|
||||
- type: added
|
||||
area: cli
|
||||
text: "`neighbor.clear` очищает таблицу соседей, `discover.neighbors` запускает поиск соседей; `neighbor.remove <hex>` остаётся для удаления одного соседа."
|
||||
- type: added
|
||||
area: ui
|
||||
text: "Экран состояния дисплея: справа в верхней строке — графическая иконка батареи с заполнением по проценту и напряжение (`4.01V`). Имя узла обрезается по доступной ширине с `..`; если вместе с вольтажом не помещается — вольтаж скрывается, иконка остаётся всегда. Отдельный экран `Battery` в меню не изменился."
|
||||
- type: docs
|
||||
area: docs
|
||||
text: "Обновлены `README.md`, страницы «Веб-панель» и «Пользовательские команды CLI», а также `RELEASE.md` под новую версию."
|
||||
breaking_changes: []
|
||||
|
||||
- track: repeater-mqtt
|
||||
version: "2026.10.2"
|
||||
tag: "repeater-mqtt-v2026.10.2"
|
||||
date: "2026-10-22"
|
||||
previous_version: "2026.10.1"
|
||||
summary: "Веб-панель репитера разделена на экраны «Общие», «Статистика», «CLI», «Прошивка» и «Соседи» и переведена на русский. На экране «Соседи» появились таблица с поиском и карта OSM, вверху страницы — индикатор батареи. Внешние данные (пресеты радио, регионы, чёрные списки) перенесены на meshinfo.ru, страницы панели сжимаются gzip. Добавлены «тюрьма анонсов», бюджет каналов и команды соседей, на экране состояния дисплея — иконка батареи."
|
||||
changes:
|
||||
- type: added
|
||||
area: web
|
||||
text: "Панель разделена на экраны с переключением на клиенте: «Общие» (`/app`), «Статистика» (`/stats`, отдельный маршрут), «CLI», «Прошивка» и «Соседи». Активна ровно одна кнопка, на `/stats` — «Статистика»; группа «Анонс / Обновить / Перезагрузить / тема / Выйти» прижата к правому краю."
|
||||
- type: changed
|
||||
area: web
|
||||
text: "На экранах «CLI», «Прошивка» и «Соседи» скрыты кнопки «Анонс» и «Обновить»; на «Соседях» «Обновить» оставлен и перечитывает таблицу и карту."
|
||||
- type: changed
|
||||
area: web
|
||||
text: "Интерфейс панели переведён на русский: заголовки экранов, разделов и кнопок, `Trends` стал «Графики». Технические сокращения (CLI, MQTT, IATA, RSSI, SNR, IP, SSID, hex, dB, UTC, PEM, TLS, RSA) и названия сервисов `MeshCoreTel` / `MeshCoreTel RU` не переводятся."
|
||||
- type: added
|
||||
area: web
|
||||
text: "Экран «Соседи»: таблица (Имя, ID, SNR, Широта/Долгота, Слышно, Анонс), кнопки «Найти соседей» (`discover.neighbors`) и «Очистить» (`neighbor.clear`), строка статуса «Команда отправлена: … (ответ смотрите в журнале CLI)». Имя и координаты соседа берутся из его анонса; у соседа без них — прочерк вместо имени и `0.0000 / 0.0000`."
|
||||
- type: added
|
||||
area: web
|
||||
text: "Карта OSM на экране «Соседи»: тайлы `tile.openstreetmap.org` обычными `<img>` и SVG-слой поверх. Центр всегда на координатах нашего узла, линии к соседям с координатами окрашены и утолщены по SNR, подписи «имя · dB», зум кнопками `+` / `−` / `⌂` и колесом, перетаскивание мышью. Соседи без координат или с нулями на карту не попадают."
|
||||
- type: added
|
||||
area: web
|
||||
text: "Индикатор батареи вверху страницы: иконка с заполнением по проценту, процент и напряжение в милливольтах. Обновляется раз в минуту и при загрузке страницы, на экранах «CLI», «Прошивка» и «Соседи» скрыт."
|
||||
- type: changed
|
||||
area: web
|
||||
text: "Страницы панели сжимаются gzip при сборке (`arch/esp32/extra_scripts/gzip_web_panel.py`) и отдаются с `Content-Encoding: gzip`; пост-проверка `check_app_size.py` роняет сборку, если образ больше своего app-раздела."
|
||||
- type: added
|
||||
area: web
|
||||
text: "Поле ввода CLI-команды получило подсказки (`datalist`) по типовым командам репитера."
|
||||
- type: changed
|
||||
area: web
|
||||
text: "Внешние данные больше не берутся с `api.vbart.ru` и `meshcore.hackru.ru`: пресеты радио и коды IATA (38 записей) — `https://meshinfo.ru/flasher/meshcore-data/conf.json`, дерево регионов — `https://meshinfo.ru/flasher/meshcore-data/regions.json`, чёрные списки по IATA — `https://meshinfo.ru/flasher/meshcore-data/blacklist/<КОД>.json`. Реальные данные есть только для `MOW`, остальные 37 кодов — пустые шаблоны. Для каталога настроен CORS `Access-Control-Allow-Origin: *`."
|
||||
- type: added
|
||||
area: cli
|
||||
text: "`set advert.jail on|off` — «тюрьма анонсов» (AdvertJail): слишком частые анонсы от одного отправителя не пересылаются. По умолчанию включена."
|
||||
- type: added
|
||||
area: cli
|
||||
text: "`set channel.budget <0..1000>` — бюджет каналов (ChannelBudget): лимит flood-пакетов группового канала за 10 минут на каждый канал. По умолчанию выключен (`0`)."
|
||||
- type: added
|
||||
area: cli
|
||||
text: "`neighbor.clear` очищает таблицу соседей, `discover.neighbors` запускает поиск соседей; `neighbor.remove <hex>` остаётся для удаления одного соседа."
|
||||
- type: added
|
||||
area: ui
|
||||
text: "Экран состояния дисплея: справа в верхней строке — графическая иконка батареи с заполнением по проценту и напряжение (`4.01V`). Имя узла обрезается по доступной ширине с `..`; если вместе с вольтажом не помещается — вольтаж скрывается, иконка остаётся всегда. Отдельный экран `Battery` в меню не изменился."
|
||||
- type: docs
|
||||
area: docs
|
||||
text: "Обновлены `README.md`, страницы «Веб-панель» и «Пользовательские команды CLI», а также `RELEASE.md` под новую версию."
|
||||
breaking_changes: []
|
||||
Reference in new issue
Block a user