feat: manual Gitea build workflow, release publishing, README and docs update

- добавлен ручной workflow Gitea Actions (.gitea/workflows/build-mqtt-firmwares.yml):
  сборка MQTT-прошивок на сервере и публикация релиза
- добавлен posadmesh-tools/publish-gitea-release.sh для выгрузки собранных файлов
  в релиз Gitea (идемпотентно, фильтр по треку)
- README: происхождение проекта переписано (форк EastMesh, доработка энтузиастов
  из Сергиева Посада, ориентация на meshcoretel.ru), добавлены раздел
  «Отличия от upstream MeshCore» и журнал «Изменения в проекте»
- убраны упоминания Австралии, ссылки на eastmesh.au и региональные материалы;
  руководство по прошивке переведено на файлы релизов и esptool.py
- posadmesh-build.sh: вывод PlatformIO очищается от \r — на Windows групповые
  команды сборки не находили ни одной цели; companion-команды удалены,
  добавлены build-mqtt-firmwares и list-mqtt
- release-notes.yml: треки repeater-mqtt*, запись 2026.10.0 дополнена удалением
  companion и исправлением сборки, companion-wifi помечен как снятый с выпуска
- AGENTS.md: правило дописывать изменения в README
- .gitignore: .pio-home
This commit is contained in:
2026-10-11 17:20:05 +03:00
parent c86ae584ab
commit 26b724c0f0
19 changed files with 735 additions and 616 deletions
+126
View File
@@ -0,0 +1,126 @@
# Ручная сборка MQTT-прошивок PosadMesh на сервере (Gitea Actions).
#
# Требования к раннеру (act_runner):
# - Linux, Docker, доступ в интернет;
# - python3 >= 3.11, git, curl;
# - свободного места >= 20 ГБ: PlatformIO скачает тулчейны ESP32 (~1 ГБ) при первой сборке;
# - кэш ~/.platformio между запусками сильно ускоряет сборку (шаг cache ниже).
#
# Запуск: Actions -> "Build MQTT firmwares" -> Run workflow.
# Полная сборка всех 109 MQTT-таргетов идёт долго — удобнее запускать по группам
# (uplink / espnow / bridge) или по одному таргету (group=single).
#
# Публикация в релиз Gitea требует секрета репозитория GITEA_TOKEN
# (personal access token с правом write:repository).
name: Build MQTT firmwares
on:
workflow_dispatch:
inputs:
firmware_version:
description: "Версия upstream MeshCore для метаданных (например v1.17.1)"
required: true
default: "v1.17.1"
posadmesh_version:
description: "Версия релиза PosadMesh (например v2026.10.0)"
required: true
default: "v2026.10.0"
group:
description: "Что собирать: all | uplink | espnow | bridge | single"
required: true
default: "all"
target:
description: "Имя окружения PlatformIO для group=single (например heltec_v4_repeater_mqtt)"
required: false
default: ""
publish:
description: "Создать релиз в Gitea и загрузить файлы: true | false"
required: true
default: "false"
tag:
description: "Тег релиза при publish=true (например repeater-mqtt-v2026.10.0)"
required: false
default: ""
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 360
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install uv
run: |
python3 -m pip install --upgrade pip
python3 -m pip install uv
- name: Cache PlatformIO
uses: actions/cache@v3
with:
path: ~/.platformio
key: platformio-${{ hashFiles('platformio.ini', 'variants/**/platformio.ini') }}
restore-keys: platformio-
- name: Build MQTT firmwares
env:
FIRMWARE_VERSION: ${{ github.event.inputs.firmware_version }}
POSADMESH_VERSION: ${{ github.event.inputs.posadmesh_version }}
GROUP: ${{ github.event.inputs.group }}
TARGET: ${{ github.event.inputs.target }}
run: |
set -euo pipefail
echo "FIRMWARE_VERSION=$FIRMWARE_VERSION POSADMESH_VERSION=$POSADMESH_VERSION GROUP=$GROUP TARGET=$TARGET"
case "$GROUP" in
all) bash posadmesh-build.sh build-mqtt-firmwares ;;
uplink) bash posadmesh-build.sh build-repeater-mqtt-firmwares ;;
espnow) bash posadmesh-build.sh build-repeater-mqtt-espnow-firmwares ;;
bridge) bash posadmesh-build.sh build-repeater-mqtt-bridge-firmwares ;;
single)
if [ -z "$TARGET" ]; then
echo "group=single requires the target input" >&2
exit 1
fi
bash posadmesh-build.sh build-firmware "$TARGET"
;;
*)
echo "unknown group: $GROUP (expected all|uplink|espnow|bridge|single)" >&2
exit 1
;;
esac
- name: Upload build artifacts
uses: actions/upload-artifact@v3
with:
name: mqtt-firmwares-${{ github.event.inputs.group }}
path: out
if-no-files-found: error
- name: Publish Gitea release
if: ${{ github.event.inputs.publish == 'true' }}
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
GITEA_URL: ${{ github.server_url }}
TAG: ${{ github.event.inputs.tag }}
GROUP: ${{ github.event.inputs.group }}
run: |
set -euo pipefail
if [ -z "$TAG" ]; then
echo "publish=true requires the tag input" >&2
exit 1
fi
if [ -z "${GITEA_TOKEN:-}" ]; then
echo "secret GITEA_TOKEN is not configured" >&2
exit 1
fi
case "$GROUP" in
uplink) export ASSET_GLOB='*_repeater_mqtt-v*' ;;
espnow) export ASSET_GLOB='*_repeater_mqtt_espnow-v*' ;;
bridge) export ASSET_GLOB='*_repeater_mqtt_bridge-v*' ;;
*) unset ASSET_GLOB || true ;;
esac
bash posadmesh-tools/publish-gitea-release.sh "$TAG" out "$TAG"
@@ -32,7 +32,7 @@ body:
attributes:
label: Firmware Target
description: Firmware environment or binary name, if known.
placeholder: e.g. Heltec_v3_repeater_observer
placeholder: e.g. Heltec_v3_repeater_mqtt
validations:
required: false
@@ -41,19 +41,19 @@ runs:
echo "$GITHUB_WORKSPACE/.venv/bin" >> "$GITHUB_PATH"
# Active release tag formats:
# companion-wifi-v1.15.0
# repeater-bridge-espnow-v1.15.0
# observer-posadmesh-bridge-espnow-v2026.5.1
# observer-posadmesh-bridge-mqtt-v2026.7.0
# observer-posadmesh-v2026.5.1
# repeater-mqtt-espnow-v2026.5.1
# repeater-mqtt-bridge-v2026.7.0
# repeater-mqtt-v2026.5.1
# with OFFICIAL_MESHCORE_VERSION=v1.15.0 configured as a GitHub variable.
#
# This exports:
# companion-wifi-v1.15.0 -> FIRMWARE_VERSION=v1.15.0, RELEASE_VERSION=v1.15.0
# repeater-bridge-espnow-v1.15.0 -> FIRMWARE_VERSION=v1.15.0, RELEASE_VERSION=v1.15.0
# observer-posadmesh-bridge-espnow-v2026.5.1 -> FIRMWARE_VERSION=v1.15.0, POSADMESH_VERSION=v2026.5.1,
# repeater-mqtt-espnow-v2026.5.1 -> FIRMWARE_VERSION=v1.15.0, POSADMESH_VERSION=v2026.5.1,
# RELEASE_VERSION=v1.15.0-posadmesh-v2026.5.1
# observer-posadmesh-v2026.5.1 -> FIRMWARE_VERSION=v1.15.0, POSADMESH_VERSION=v2026.5.1,
# repeater-mqtt-bridge-v2026.7.0 -> FIRMWARE_VERSION=v1.15.0, POSADMESH_VERSION=v2026.7.0,
# RELEASE_VERSION=v1.15.0-posadmesh-v2026.7.0
# repeater-mqtt-v2026.5.1 -> FIRMWARE_VERSION=v1.15.0, POSADMESH_VERSION=v2026.5.1,
# RELEASE_VERSION=v1.15.0-posadmesh-v2026.5.1
- name: Extract Version Info
shell: bash
@@ -74,26 +74,24 @@ runs:
POSADMESH_VERSION=""
FIRMWARE_VERSION="$STATIC_OFFICIAL_VERSION"
if [[ "$GIT_TAG_NAME" =~ ^observer-posadmesh-(v[[:alnum:]._-]+)$ ]]; then
if [[ "$GIT_TAG_NAME" =~ ^repeater-mqtt-(v[[:alnum:]._-]+)$ ]]; then
if [[ -z "$STATIC_OFFICIAL_VERSION" ]]; then
echo "OFFICIAL_MESHCORE_VERSION must be set for PosadMesh release tags" >&2
exit 1
fi
POSADMESH_VERSION="${BASH_REMATCH[1]}"
elif [[ "$GIT_TAG_NAME" =~ ^observer-posadmesh-bridge-espnow-(v[[:alnum:]._-]+)$ ]]; then
elif [[ "$GIT_TAG_NAME" =~ ^repeater-mqtt-espnow-(v[[:alnum:]._-]+)$ ]]; then
if [[ -z "$STATIC_OFFICIAL_VERSION" ]]; then
echo "OFFICIAL_MESHCORE_VERSION must be set for PosadMesh release tags" >&2
exit 1
fi
POSADMESH_VERSION="${BASH_REMATCH[1]}"
elif [[ "$GIT_TAG_NAME" =~ ^observer-posadmesh-bridge-mqtt-(v[[:alnum:]._-]+)$ ]]; then
elif [[ "$GIT_TAG_NAME" =~ ^repeater-mqtt-bridge-(v[[:alnum:]._-]+)$ ]]; then
if [[ -z "$STATIC_OFFICIAL_VERSION" ]]; then
echo "OFFICIAL_MESHCORE_VERSION must be set for PosadMesh release tags" >&2
exit 1
fi
POSADMESH_VERSION="${BASH_REMATCH[1]}"
elif [[ "$GIT_TAG_NAME" =~ ^companion-wifi-(v[[:alnum:]._-]+)$ ]]; then
FIRMWARE_VERSION="${BASH_REMATCH[1]}"
elif [[ "$GIT_TAG_NAME" =~ ^repeater-bridge-espnow-(v[[:alnum:]._-]+)$ ]]; then
FIRMWARE_VERSION="${BASH_REMATCH[1]}"
else
+1
View File
@@ -1,5 +1,6 @@
.direnv
.pio
.pio-home
.vscode/.browse.c_cpp.db*
.vscode/c_cpp_properties.json
.vscode/launch.json
+33 -33
View File
@@ -7,8 +7,7 @@
**По умолчанию:** сохраняем поведение upstream.
Изменяем код только для чётко ограниченных возможностей PosadMesh:
- `*_repeater_observer`
- `*_companion_radio_wifi`
- `*_repeater_mqtt`
- MQTT-аплинк/брокер
- веб-панель репитера
- документация, релизы, автоматизация
@@ -87,10 +86,10 @@ bash posadmesh-build.sh list
Собрать один таргет:
```bash
uv run pio run -e heltec_v4_repeater_observer
uv run pio run -e T_Beam_S3_Supreme_SX1262_repeater_observer
uv run pio run -e heltec_v4_companion_radio_wifi
uv run pio run -e T_Beam_S3_Supreme_SX1262_companion_radio_wifi
uv run pio run -e heltec_v4_repeater_mqtt
uv run pio run -e T_Beam_S3_Supreme_SX1262_repeater_mqtt
uv run pio run -e heltec_v4_repeater_mqtt_espnow
uv run pio run -e T_Beam_S3_Supreme_SX1262_repeater_mqtt_bridge
```
Сборка с релизными метаданными:
@@ -98,15 +97,15 @@ uv run pio run -e T_Beam_S3_Supreme_SX1262_companion_radio_wifi
```bash
export FIRMWARE_VERSION=v1.15.0
export POSADMESH_VERSION=v2026.5.1
bash posadmesh-build.sh build-firmware heltec_v4_repeater_observer
bash posadmesh-build.sh build-firmware T_Beam_S3_Supreme_SX1262_repeater_observer
bash posadmesh-build.sh build-firmware heltec_v4_repeater_mqtt
bash posadmesh-build.sh build-firmware T_Beam_S3_Supreme_SX1262_repeater_mqtt
```
Прошить таргет:
```bash
uv run pio run -e heltec_v4_repeater_observer -t upload --upload-port /dev/tty.usbmodemXXXX
uv run pio run -e T_Beam_S3_Supreme_SX1262_repeater_observer -t upload --upload-port /dev/tty.usbmodemXXXX
uv run pio run -e heltec_v4_repeater_mqtt -t upload --upload-port /dev/tty.usbmodemXXXX
uv run pio run -e T_Beam_S3_Supreme_SX1262_repeater_mqtt -t upload --upload-port /dev/tty.usbmodemXXXX
```
## Ключевые файлы
@@ -123,14 +122,22 @@ uv run pio run -e T_Beam_S3_Supreme_SX1262_repeater_observer -t upload --upload-
## Принадлежность workflow
Репозиторий живёт на <https://git.meshinfo.ru/shade/MeshCore-Posadmesh>. Собственные workflow GitHub Actions (`posadmesh-*.yml`) удалены при переезде: релизы собираются локально через `posadmesh-build.sh`, теги и релизы создаются вручную в веб-интерфейсе git.meshinfo.ru.
Репозиторий живёт на <https://git.meshinfo.ru/shade/MeshCore-Posadmesh>.
Workflow upstream MeshCore остаются под исходными именами файлов ради чистоты слияний. Не адаптируйте их под поведение PosadMesh; держите их близко к upstream. Они не используются для релизов PosadMesh.
Собственные workflow:
- `.gitea/workflows/build-mqtt-firmwares.yml` — ручная сборка MQTT-прошивок на сервере Gitea Actions (`workflow_dispatch`): собирает группу или один таргет, умеет создавать релиз Gitea и загружать в него файлы. Публикация использует секрет репозитория `GITEA_TOKEN`.
Кроме workflow прошивки собираются локально через `posadmesh-build.sh`, а теги и релизы создаются в веб-интерфейсе git.meshinfo.ru. Выгрузка собранных файлов в релиз — через `posadmesh-tools/publish-gitea-release.sh`.
Workflow upstream MeshCore в `.github/workflows/` остаются под исходными именами файлов ради чистоты слияний. Не адаптируйте их под поведение PosadMesh; держите их близко к upstream. Они не используются для релизов PosadMesh.
## Требования к синхронизации документации
Если вы меняете что-либо из перечисленного, обновляйте документацию в том же PR, когда это возможно:
- Любые изменения в проекте:
- дописать запись о них в раздел «Изменения в проекте» файла `README.md`
- Команды веб-панели:
- обновить `posadmesh-docs/custom-cli.md`
- Пользовательское поведение, разделы, элементы управления или диагностика веб-панели:
@@ -142,48 +149,41 @@ Workflow upstream MeshCore остаются под исходными имена
- Руководство по прошивке и файлам релиза:
- обновить `posadmesh-docs/releases.md`
## Замечания по обсерверам
## Замечания по MQTT-репитерам
Сборки `*_repeater_observer` могут включать локальную HTTPS-веб-панель на поддерживаемых таргетах ESP32.
Сборки `*_repeater_mqtt` могут включать локальную HTTPS-веб-панель на поддерживаемых таргетах ESP32.
Эксплуатационные рекомендации уже отражены в документации:
- использовать для первичной настройки и диагностики
- после этого предпочитать `set web off` для максимального запаса heap
## Замечания по companion WiFi
## Границы продукта
Таргеты `*_companion_radio_wifi` поддерживают сохраняемые команды восстановления Wi-Fi через последовательный `CLI Rescue`.
Проект собирает и поставляет только MQTT-прошивки (`*_repeater_mqtt`, `*_repeater_mqtt_espnow`, `*_repeater_mqtt_bridge`). Связанные с этим правила:
Не документируйте команды восстановления companion в документации репитера. Не предполагайте, что поведение веб-панели применимо.
Правило версий companion:
- теги companion используют только официальную версию релиза upstream MeshCore
- текущая официальная версия MeshCore — `v1.15.0`
- companion-релизы выпускаются только когда `meshcore-dev/MeshCore` сделал официальный релиз
- не придумывайте отдельные номера версий PosadMesh для companion
- линия companion-прошивок удалена из проекта: окружения `*_companion_radio_*` и код `examples/companion_radio` остаются в upstream-оверлеях, PosadMesh их не собирает и не документирует
- не придумывайте отдельные номера версий PosadMesh для треков, которых нет в `release-notes.yml`
## Процесс релиза
Текущие форматы тегов:
```bash
git tag companion-wifi-v1.15.0
git tag repeater-bridge-espnow-v1.15.0
git tag observer-posadmesh-bridge-espnow-v2026.5.1
git tag observer-posadmesh-bridge-mqtt-v2026.7.0
git tag observer-posadmesh-v2026.5.1
git tag repeater-mqtt-espnow-v2026.5.1
git tag repeater-mqtt-bridge-v2026.7.0
git tag repeater-mqtt-v2026.5.1
```
Правила:
- теги `companion-wifi` используют версию upstream MeshCore напрямую
- теги `repeater-bridge-espnow` используют версию upstream MeshCore напрямую
- теги `observer-posadmesh-bridge-espnow` используют версию релиза PosadMesh в теге
- теги `observer-posadmesh-bridge-mqtt` используют версию релиза PosadMesh в теге
- теги `observer-posadmesh` используют версию релиза PosadMesh в теге
- переменная `FIRMWARE_VERSION` при локальной сборке задаёт базовую версию upstream для релизных сборок треков `observer-posadmesh`, `observer-posadmesh-bridge-espnow` и `observer-posadmesh-bridge-mqtt`
- теги `repeater-mqtt-espnow` используют версию релиза PosadMesh в теге
- теги `repeater-mqtt-bridge` используют версию релиза PosadMesh в теге
- теги `repeater-mqtt` используют версию релиза PosadMesh в теге
- переменная `FIRMWARE_VERSION` при локальной сборке задаёт базовую версию upstream для релизных сборок треков `repeater-mqtt`, `repeater-mqtt-espnow` и `repeater-mqtt-bridge`
- переменная `POSADMESH_VERSION` при локальной сборке задаёт версию релиза PosadMesh
- если версия релиза upstream MeshCore изменилась, обновите `FIRMWARE_VERSION` при сборке и в документации
@@ -191,7 +191,7 @@ git tag observer-posadmesh-v2026.5.1
1. Обновить `release-notes.yml` в ветке `develop`.
2. Смерджить релизный PR из `develop` в `main`.
3. Собрать нужные прошивки локально с подходящими `FIRMWARE_VERSION` и `POSADMESH_VERSION`.
3. Собрать нужные прошивки — локально или ручным workflow в Gitea Actions — с подходящими `FIRMWARE_VERSION` и `POSADMESH_VERSION`.
4. Создать нужный тег или теги релиза на целевом коммите в `main`.
5. Запушить теги в git.meshinfo.ru и создать релиз в его веб-интерфейсе.
+94 -58
View File
@@ -1,29 +1,46 @@
# MeshCore-Posadmesh
MeshCore-Posadmesh основан на upstream-проекте MeshCore:
PosadMesh — форк проекта EastMesh, который, в свою очередь, основан на официальной прошивке MeshCore:
- <https://github.com/meshcore-dev/MeshCore>
Прошивку дорабатывают энтузиасты из Сергиева Посада; проект ориентирован на работу с сайтом <https://meshcoretel.ru>.
Благодарность Scott Powell / Ripple Radios и участникам MeshCore за оригинальную прошивку и основу проекта.
PosadMesh — это mesh-сеть, развиваемая сообществом на востоке Австралии. Этот репозиторий предоставляет адаптированные сборки MeshCore, включая прошивку WiFi companion с дополнительными инструментами CLI и прошивку обсервера, которая интегрируется с нашей платформой телеметрии CoreScope.
Этот репозиторий предоставляет адаптированные сборки MeshCore: прошивку MQTT-репитера, которая публикует телеметрию в mesh-сеть MeshCoreTel.
CoreScope (<https://core.eastmesh.au>) обеспечивает видимость сети, включая состояние репитеров, обсерверов и данные картографирования.
**Сборки обсервера передают телеметрию в PosadMesh Core и предназначены только для репитеров Восточной Австралии**; запуск их в других местах может исказить общие данные сети.
**Сборки MQTT-репитера передают телеметрию на <https://meshcoretel.ru>** — укажите координаты узла и радиопараметры своего региона, чтобы узел появился на карте и в связях. Для Москвы (MOW) это 868,731 МГц, полоса 62,5 кГц, SF7, CR7, хэш пути 2 байта.
## Что добавляет этот репозиторий
- таргеты прошивки `*_repeater_observer` с:
- таргеты прошивки `*_repeater_mqtt` с:
- встроенным WiFi
- MQTT-аплинком к курируемому брокеру MeshCoreTel и дополнительно опциональным собственным брокером (TCP или WSS)
- опциональной локальной панелью конфигурации HTTPS на поддерживаемых таргетах ESP32
- таргеты прошивки `*_repeater_observer_espnow`, добавляющие локальный мост ESP-NOW mesh
- таргеты прошивки `*_repeater_mqtt_espnow`, добавляющие локальный мост ESP-NOW mesh
- таргеты прошивки `*_repeater_bridge_espnow` для обычного ESP-NOW-моста репитера в стиле upstream, без MQTT-аплинка и веб-панели PosadMesh
- таргеты прошивки `*_companion_radio_wifi` для companion-устройств с подключением по WiFi
- специфичные для PosadMesh процесс релизов и версионирование поверх релизов upstream MeshCore
- документация и руководство по релизам для пользователей PosadMesh вместо полного набора документации upstream MeshCore
## Отличия от upstream MeshCore
Ядро проекта — mesh-стек, радио, протокол и работа с платами — остаётся upstream-кодом MeshCore. PosadMesh добавляет поверх него транспорт, телеметрию и веб-интерфейс:
| Область | upstream MeshCore | PosadMesh |
| --- | --- | --- |
| Транспорт | нет MQTT; репитер работает только по радио и через последовательный порт | MQTT-аплинк: курируемый брокер `meshcoretel` и опциональный собственный брокер (TCP или WSS по пути `/mqtt`); публикация статуса, пакетов и raw-данных |
| MQTT-мост | нет | передача raw-пакетов mesh между репитерами через ваш собственный peer-брокер (трек `repeater-mqtt-bridge`) |
| Wi-Fi | нет | Wi-Fi на репитерах: подключение, энергосбережение, watchdog шлюза, автоматическое переподключение, команды `wifi.*` |
| Веб-интерфейс | нет | локальная HTTPS-панель: вход по паролю администратора, выполнение CLI-команд, настройки репитера/радио/MQTT, регионы, чёрные списки, обновление прошивки (OTA), управление сертификатом панели |
| Телеметрия | нет | история метрик в PSRAM и архив на SD: батарея, загрузка ядра, память, пакеты, ошибки, уровень сигнала и шума, датчики, GPS; страница `/stats` с графиками и списком соседей/событий |
| 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 и другие) |
| Релизы | upstream-процесс | свои треки и теги `repeater-mqtt*`, локальная сборка через [`posadmesh-build.sh`](./posadmesh-build.sh), публикация релизов в Gitea |
Что **не** меняется: поведение mesh-сети, радиоконфигурации, протокол и совместимость с MeshCore; upstream-код сохраняется в репозитории и синхронизируется из `meshcore-dev/MeshCore` (см. [AGENTS.md](./AGENTS.md)).
## Релизы
Готовые прошивки публикуются в разделе Releases на git.meshinfo.ru:
@@ -34,9 +51,9 @@ CoreScope (<https://core.eastmesh.au>) обеспечивает видимост
- [posadmesh-docs/releases.md](./posadmesh-docs/releases.md)
Сайт прошивальщика кастомной прошивки:
Веб-прошивальщик MeshCoreTel (в том числе прошивки наблюдателя и настройка радиопараметров):
- <https://flasher.eastmesh.au/>
- <https://meshcoretel.ru/ru/flasher>
## Установка uv
@@ -83,8 +100,8 @@ bash posadmesh-build.sh list
Сборка одного таргета:
```bash
uv run pio run -e heltec_v4_repeater_observer
uv run pio run -e heltec_v4_companion_radio_wifi
uv run pio run -e heltec_v4_repeater_mqtt
uv run pio run -e T_Beam_S3_Supreme_SX1262_repeater_mqtt
```
Сборка с релизными метаданными версии:
@@ -92,13 +109,13 @@ uv run pio run -e heltec_v4_companion_radio_wifi
```bash
export FIRMWARE_VERSION=v1.15.0
export POSADMESH_VERSION=v2026.5.1
bash posadmesh-build.sh build-firmware heltec_v4_repeater_observer
bash posadmesh-build.sh build-firmware heltec_v4_repeater_mqtt
```
Прошивка таргета:
```bash
uv run pio run -e heltec_v4_repeater_observer -t upload --upload-port /dev/tty.usbmodemXXXX
uv run pio run -e heltec_v4_repeater_mqtt -t upload --upload-port /dev/tty.usbmodemXXXX
```
Открыть последовательный монитор:
@@ -126,15 +143,13 @@ uv run --group docs zensical build
- [`platformio.ini`](./platformio.ini)
- корневой конфиг PlatformIO и вспомогательные скрипты ESP32
- [`variants/posadmesh_mqtt/platformio.ini`](./variants/posadmesh_mqtt/platformio.ini)
- общие определения окружений обсервера PosadMesh
- общие определения окружений MQTT-репитера PosadMesh
- [`examples/simple_repeater/MyMesh.cpp`](./examples/simple_repeater/MyMesh.cpp)
- подключение CLI репитера, набор MQTT-команд и интеграция с белым списком веб-панели
- [`src/helpers/bridges/MQTTBridge.cpp`](./src/helpers/bridges/MQTTBridge.cpp)
- двунаправленный MQTT-мост mesh (peer-брокер TCP, топик `meshcore/bridge/packets`)
- [`src/helpers/mqtt/MQTTUplink.cpp`](./src/helpers/mqtt/MQTTUplink.cpp)
- реализация MQTT-аплинка, веб-панель HTTPS, поддержка собственного брокера (TCP/WSS) и управление WiFi репитера
- [`examples/companion_radio`](./examples/companion_radio)
- реализация прошивки companion
- [`RELEASE.md`](./RELEASE.md)
- форматы тегов и порядок выпуска релизов
- [`posadmesh-docs/`](./posadmesh-docs)
@@ -158,38 +173,38 @@ uv run --group docs zensical build
- публичного ключа и email владельца
- включения локальной веб-панели
### MQTT-мост mesh (обсервер)
### MQTT-мост mesh (MQTT-репитер)
Трек релиза `observer-posadmesh-bridge-mqtt` (`*_repeater_observer_mqtt_bridge`) выполняет мостовую передачу **raw-пакетов mesh** между репитерами через **peer-брокер MQTT, который запускаете вы сами** (например, Mosquitto на ПК в локальной сети). Это **не** то же самое, что MQTT-аплинк к курируемому брокеру MeshCoreTel:
Трек релиза `repeater-mqtt-bridge` (`*_repeater_mqtt_bridge`) выполняет мостовую передачу **raw-пакетов mesh** между репитерами через **peer-брокер MQTT, который запускаете вы сами** (например, Mosquitto на ПК в локальной сети). Это **не** то же самое, что MQTT-аплинк к курируемому брокеру MeshCoreTel:
| | MQTT-аплинк (обсервер) | MQTT-мост mesh |
| | MQTT-аплинк (MQTT-репитер) | MQTT-мост mesh |
| --- | --- | --- |
| Назначение | Публикация JSON-телеметрии в курируемые брокеры | Передача зашифрованных пакетов mesh между радиоустройствами |
| Брокеры | `meshcoretel`, собственный брокер | Ваш peer-брокер (`host:port`, TCP) |
| Топик | `meshcore/<iata>/...` (по IATA) | `meshcore/bridge/packets` (фиксированный) |
| По умолчанию в bridge-сборках | Выключено по умолчанию (включается в веб-панели / CLI) | Включено, когда включён `bridge.enabled` |
**Первый поддерживаемый таргет:** `Xiao_S3_WIO_repeater_observer_mqtt_bridge`
**Первый поддерживаемый таргет:** `Xiao_S3_WIO_repeater_mqtt_bridge`
**Связанный трек:** `observer-posadmesh-bridge-espnow` (`*_repeater_observer_espnow`) использует ESP-NOW вместо MQTT для локальной мостовой передачи.
**Связанный трек:** `repeater-mqtt-espnow` (`*_repeater_mqtt_espnow`) использует ESP-NOW вместо MQTT для локальной мостовой передачи.
Пример сборки:
```bash
uv run pio run -e Xiao_S3_WIO_repeater_observer_mqtt_bridge
uv run pio run -e Xiao_S3_WIO_repeater_mqtt_bridge
```
Прошивка (обновление):
```bash
uv run pio run -e Xiao_S3_WIO_repeater_observer_mqtt_bridge -t upload --upload-port COM10
uv run pio run -e Xiao_S3_WIO_repeater_mqtt_bridge -t upload --upload-port COM10
```
После **полного стирания флеш-памяти** прошивайте объединённый образ по адресу `0x0`, а не только `firmware.bin`:
```bash
uv run pio run -e Xiao_S3_WIO_repeater_observer_mqtt_bridge -t mergebin
uv run pio pkg exec -p tool-esptoolpy -- esptool.py --chip esp32s3 --port COM10 write_flash 0x0 .pio/build/Xiao_S3_WIO_repeater_observer_mqtt_bridge/firmware-merged.bin
uv run pio run -e Xiao_S3_WIO_repeater_mqtt_bridge -t mergebin
uv run pio pkg exec -p tool-esptoolpy -- esptool.py --chip esp32s3 --port COM10 write_flash 0x0 .pio/build/Xiao_S3_WIO_repeater_mqtt_bridge/firmware-merged.bin
```
#### Peer-брокер Mosquitto (локальная сеть)
@@ -275,7 +290,7 @@ get bridge.enabled
### Локальная веб-панель
На поддерживаемых таргетах ESP32 `*_repeater_observer` репитер может предоставлять локальную панель конфигурации HTTPS по WiFi.
На поддерживаемых таргетах ESP32 `*_repeater_mqtt` репитер может предоставлять локальную панель конфигурации HTTPS по WiFi.
Возможности:
@@ -285,64 +300,85 @@ get bridge.enabled
- светлая и тёмная темы
- опциональное отключение через `set web off`
Рекомендуется использовать для первичной настройки и периодической диагностики. При развёртывании обсерверов отключайте панель по завершении, если нужен максимальный запас heap для MQTT.
### Дополнения Companion WiFi
Таргеты `*_companion_radio_wifi` теперь поддерживают сохраняемые команды восстановления WiFi:
- откройте последовательный монитор на скорости `115200` бод
- перезагрузите устройство
- удерживайте пользовательскую кнопку в течение первых 8 секунд после загрузки, чтобы войти в `CLI Rescue`
- дождитесь `========= CLI Rescue =========`
- отправьте команды из последовательного монитора
Эти команды восстановления доступны только после входа в `CLI Rescue`:
- `get wifi.status`
- `get wifi.ssid`
- `get wifi.powersaving`
- `set wifi.ssid <ssid>`
- `set wifi.pwd <password>`
- `set wifi.powersaving none|min|max`
Рекомендуется использовать для первичной настройки и периодической диагностики. При развёртывании MQTT-репитеров отключайте панель по завершении, если нужен максимальный запас heap для MQTT.
## Сборка и релизы
Репозиторий живёт на <https://git.meshinfo.ru/shade/MeshCore-Posadmesh>.
Собственные workflow GitHub Actions (сборка релизов, проверки сборки и публикация доков) удалены при переезде: релизы собираются локально через [`posadmesh-build.sh`](./posadmesh-build.sh), а теги и релизы создаются вручную в веб-интерфейсе git.meshinfo.ru.
Собственные workflow GitHub Actions (сборка релизов, проверки сборки и публикация доков) удалены при переезде. Сейчас прошивки собираются локально через [`posadmesh-build.sh`](./posadmesh-build.sh) или на сервере ручным workflow [`.gitea/workflows/build-mqtt-firmwares.yml`](./.gitea/workflows/build-mqtt-firmwares.yml) (Actions → Build MQTT firmwares → Run workflow); теги и релизы создаются в веб-интерфейсе git.meshinfo.ru, а собранные файлы выгружаются в релиз скриптом [`posadmesh-tools/publish-gitea-release.sh`](./posadmesh-tools/publish-gitea-release.sh). Подробности — в [RELEASE.md](./RELEASE.md).
Workflow upstream MeshCore (`.github/workflows/build-*.yml`, `firmware-builder.yml`, `pr-build-check.yml`, `run-unit-tests.yml`, `stale-bot.yml`) сохранены под исходными именами файлов для уменьшения конфликтов слияния. Они не являются частью процесса релизов PosadMesh и не используются.
Текущие треки релизов:
- `companion-wifi`
- `repeater-bridge-espnow`
- `observer-posadmesh`
- `observer-posadmesh-bridge-espnow`
- `observer-posadmesh-bridge-mqtt`
- `repeater-mqtt`
- `repeater-mqtt-espnow`
- `repeater-mqtt-bridge`
## Теги релизов
Текущие теги релизов:
```bash
git tag companion-wifi-v1.14.1
git tag repeater-bridge-espnow-v1.15.0
git tag observer-posadmesh-v2026.5.1
git tag observer-posadmesh-bridge-espnow-v2026.5.1
git tag observer-posadmesh-bridge-mqtt-v2026.7.0
git tag repeater-mqtt-v2026.5.1
git tag repeater-mqtt-espnow-v2026.5.1
git tag repeater-mqtt-bridge-v2026.7.0
```
Companion WiFi использует в теге версию upstream MeshCore.
`repeater-bridge-espnow` использует в теге версию upstream MeshCore.
Обсервер использует:
MQTT-репитер использует:
- `FIRMWARE_VERSION` — версия upstream MeshCore, задаётся при локальной сборке
- `POSADMESH_VERSION` — версия релиза PosadMesh из тега
Полный процесс релиза см. в [RELEASE.md](./RELEASE.md).
## Изменения в проекте
Правило ведения: после любых правок проекта сюда дописывается короткая запись о том, что изменилось.
### 2026.10.0 (текущая разработка)
**Ребрендинг в PosadMesh**
- папки и скрипты: `eastmesh-docs` → `posadmesh-docs`, `eastmesh-tools` → `posadmesh-tools`, `eastmesh-build.sh` → `posadmesh-build.sh`;
- цели сборки: `*_repeater_observer*` → `*_repeater_mqtt*`;
- треки и теги релизов: `repeater-mqtt`, `repeater-mqtt-espnow`, `repeater-mqtt-bridge` (ранее `observer-eastmesh*`);
- переменная версии релиза `EASTMESH_VERSION` → `POSADMESH_VERSION`, суффикс версии сборки `-posadmesh-`;
- `posadmesh-docs/*`, `README.md`, `RELEASE.md` и `AGENTS.md` переведены на русский язык; команды, их вывод, код, пути и идентификаторы оставлены без перевода.
**Удалено**
- брокеры `waev`, `meshmapper`, `letsmesh-eu` и `letsmesh-us` — из прошивки, веб-панели и документации; остались `mqtt.meshcoretel` и `mqtt.custom`. Сохранённые выборы удалённых брокеров сбрасываются один раз при обновлении;
- линия companion-прошивок: трек `companion-wifi`, команды сборки companion и разделы документации. Проект собирает только MQTT-прошивки.
**Переименование observer → mqtt**
- цели: `*_repeater_mqtt`, `*_repeater_mqtt_espnow`, `*_repeater_mqtt_bridge`;
- команды сборки: `build-repeater-mqtt-firmwares`, `build-repeater-mqtt-espnow-firmwares`, `build-repeater-mqtt-bridge-firmwares`; добавлены `build-mqtt-firmwares` (все MQTT-треки) и `list-mqtt`;
- из документации, `release-notes.yml` и шаблонов issue убраны старые имена (историю релизов с реальными git-тегами не переписывали).
**Исправлено**
- `set mqtt.meshcoretel on|off` не срабатывал: обработчик сравнивался со строкой `set mqtt.mqtt.meshcoretel `. Алиас `set mqtt.meshcoretel.ru on|off` читает значение по правильному смещению;
- `setEndpointEnabled` маскировал сохранённую маску брокеров значением `0x07` и терял бит собственного брокера при переключении любого другого;
- на странице логина веб-панели незакрытый тег `</div` съедал абзац-подсказку про пароль администратора;
- разбор дерева регионов срезал завершающую букву `F` в имени региона, из-за чего `region allowf`, `region denyf` и `region remove` не работали для таких имён;
- групповые команды сборки не собирали ничего: использовались устаревшие суффиксы `_repeater_observer*`, а на Windows имена окружений приходили с символом `\r`. Теперь используются реальные суффиксы, а вывод PlatformIO очищается от `\r`.
**Инфраструктура и релизы**
- репозиторий переехал на <https://git.meshinfo.ru/shade/MeshCore-Posadmesh>; собственные workflow GitHub Actions удалены, upstream-оверлеи сохранены под исходными именами;
- добавлен ручной workflow Gitea Actions [`.gitea/workflows/build-mqtt-firmwares.yml`](./.gitea/workflows/build-mqtt-firmwares.yml) — сборка MQTT-прошивок на сервере и публикация релиза;
- добавлен скрипт [`posadmesh-tools/publish-gitea-release.sh`](./posadmesh-tools/publish-gitea-release.sh) для выгрузки собранных файлов в релиз Gitea;
- в README добавлен раздел «Отличия от upstream MeshCore»;
- собран полный набор MQTT-прошивок (109 целей) с версией `v1.17.1-posadmesh-v2026.10.0` для публикации в релизах `repeater-mqtt`, `repeater-mqtt-espnow` и `repeater-mqtt-bridge`;
- проект и документация переориентированы на meshcoretel.ru: в README переписано происхождение проекта и заведён этот журнал изменений; из документации убраны прежние региональные материалы, ссылки на сторонние сервисы, примеры радиопресетов и коды регионов других стран; руководство по прошивке переведено на файлы из раздела релизов и `esptool.py`, вместо раздела региональных материалов добавлен раздел материалов MeshCoreTel.
## Документация
Отдельный сайт документации больше не публикуется: страницы лежат в каталоге [`posadmesh-docs/`](./posadmesh-docs) и читаются прямо в веб-интерфейсе git.meshinfo.ru:
+56 -30
View File
@@ -1,6 +1,38 @@
# Выпуск прошивок
Репозиторий живёт на <https://git.meshinfo.ru/shade/MeshCore-Posadmesh>. Автоматической сборки релизов в CI нет: прошивки собираются локально через [`posadmesh-build.sh`](./posadmesh-build.sh), а теги и релизы создаются вручную в веб-интерфейсе git.meshinfo.ru.
Репозиторий живёт на <https://git.meshinfo.ru/shade/MeshCore-Posadmesh>. Прошивки собираются локально через [`posadmesh-build.sh`](./posadmesh-build.sh) или на сервере ручным workflow Gitea Actions; теги и релизы создаются в веб-интерфейсе git.meshinfo.ru.
## Сборка на сервере (Gitea Actions)
Ручной workflow [`.gitea/workflows/build-mqtt-firmwares.yml`](./.gitea/workflows/build-mqtt-firmwares.yml) запускается из веб-интерфейса: **Actions → Build MQTT firmwares → Run workflow**.
Параметры запуска:
- `firmware_version` — версия upstream MeshCore для метаданных (например `v1.17.1`);
- `posadmesh_version` — версия релиза PosadMesh (например `v2026.10.0`);
- `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`).
Для публикации в репозитории должен быть задан секрет `GITEA_TOKEN` (personal access token с правом `write:repository`).
Требования к раннеру: Linux с Docker, интернет, `python3` ≥ 3.11, `git`, `curl` и не меньше 20 ГБ свободного места — PlatformIO скачивает тулчейны ESP32 при первой сборке (шаг кэша `~/.platformio` ускоряет последующие запуски). Полная сборка всех MQTT-таргетов идёт долго, поэтому удобнее запускать по группам.
## Ручная выгрузка в релиз
Если прошивки собраны локально (каталог `out/`), файлы можно загрузить в релиз Gitea скриптом:
```bash
GITEA_TOKEN=<token> posadmesh-tools/publish-gitea-release.sh \
repeater-mqtt-v2026.10.0 out "Repeater MQTT v2026.10.0"
```
Скрипт создаёт релиз, если его ещё нет, и повторный запуск не дублирует уже загруженные файлы. Адрес инстанса и репозиторий можно переопределить переменными `GITEA_URL` и `GITEA_REPO`.
Тег удобнее создать заранее на нужном коммите (см. порядок выпуска ниже): тогда релиз привяжется к существующему тегу. Если тега нет, Gitea создаст его сам от HEAD ветки по умолчанию — для релизов этого лучше избегать.
Каждый трек публикуется в свой релиз: соберите группу (`uplink`, `espnow` или `bridge`) и выгрузите её файлы под тегом этого трека. Каталог `out/` очищается в начале каждой сборки, поэтому в релиз попадут файлы только одной группы.
## Версии сборки
@@ -12,54 +44,49 @@
```bash
export FIRMWARE_VERSION=v1.15.0
export POSADMESH_VERSION=v2026.5.1
bash posadmesh-build.sh build-firmware heltec_v4_repeater_observer
bash posadmesh-build.sh build-firmware heltec_v4_repeater_mqtt
```
## Теги релизов PosadMesh
Один или несколько тегов следующих форматов помечают релиз соответствующего трека:
- `companion-wifi-v1.15.0`
- `repeater-bridge-espnow-v1.15.0`
- `observer-posadmesh-bridge-espnow-v2026.5.1`
- `observer-posadmesh-bridge-mqtt-v2026.7.0`
- `observer-posadmesh-v2026.5.1`
- `repeater-mqtt-espnow-v2026.5.1`
- `repeater-mqtt-bridge-v2026.7.0`
- `repeater-mqtt-v2026.5.1`
В `companion-wifi-v1.15.0` используется версия upstream MeshCore.
В `repeater-bridge-espnow-v1.15.0` используется версия upstream MeshCore.
В `observer-posadmesh-bridge-espnow-v2026.5.1` используется версия релиза PosadMesh.
В `observer-posadmesh-bridge-mqtt-v2026.7.0` используется версия релиза PosadMesh.
В `observer-posadmesh-v2026.5.1` используется версия релиза PosadMesh.
В `repeater-mqtt-espnow-v2026.5.1` используется версия релиза PosadMesh.
В `repeater-mqtt-bridge-v2026.7.0` используется версия релиза PosadMesh.
В `repeater-mqtt-v2026.5.1` используется версия релиза PosadMesh.
Соответствие тегов и треков:
- `companion-wifi-v*` — прошивка companion WiFi
- `repeater-bridge-espnow-v*` — прошивка ESP-NOW-моста репитера
- `observer-posadmesh-bridge-espnow-v*` — прошивка обсервера с ESP-NOW
- `observer-posadmesh-bridge-mqtt-v*` — прошивка обсервера с MQTT-мостом
- `observer-posadmesh-v*` — прошивка обсервера
- `repeater-mqtt-espnow-v*` — прошивка MQTT-репитера с ESP-NOW
- `repeater-mqtt-bridge-v*` — прошивка MQTT-репитера с MQTT-мостом
- `repeater-mqtt-v*` — прошивка MQTT-репитера
Сборка выполняется локально для нужного таргета; тегов на одном коммите может быть несколько.
## Итоговая версия прошивки
- `companion-wifi` использует версию из тега как `FIRMWARE_VERSION`
- `repeater-bridge-espnow` использует версию из тега как `FIRMWARE_VERSION`
- `observer-posadmesh-bridge-espnow` использует `FIRMWARE_VERSION` upstream MeshCore, а версию PosadMesh из тега — как `POSADMESH_VERSION`
- `observer-posadmesh-bridge-mqtt` использует `FIRMWARE_VERSION` upstream MeshCore, а версию PosadMesh из тега — как `POSADMESH_VERSION`
- `observer-posadmesh` использует `FIRMWARE_VERSION` upstream MeshCore, а версию PosadMesh из тега — как `POSADMESH_VERSION`
- `repeater-mqtt-espnow` использует `FIRMWARE_VERSION` upstream MeshCore, а версию PosadMesh из тега — как `POSADMESH_VERSION`
- `repeater-mqtt-bridge` использует `FIRMWARE_VERSION` upstream MeshCore, а версию PosadMesh из тега — как `POSADMESH_VERSION`
- `repeater-mqtt` использует `FIRMWARE_VERSION` upstream MeshCore, а версию PosadMesh из тега — как `POSADMESH_VERSION`
Итоговая строка версии зависит от трека:
- `companion-wifi`: `v1.15.0-<commit>`
- `repeater-bridge-espnow`: `v1.15.0-<commit>`
- `observer-posadmesh-bridge-espnow`: `v1.15.0-posadmesh-v2026.5.1-<commit>`
- `observer-posadmesh-bridge-mqtt`: `v1.15.0-posadmesh-v2026.7.0-<commit>`
- `observer-posadmesh`: `v1.15.0-posadmesh-v2026.5.1-<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>`
Пример:
- тег: `observer-posadmesh-v2026.5.1`
- тег: `repeater-mqtt-v2026.5.1`
- переменные: `FIRMWARE_VERSION=v1.15.0`, `POSADMESH_VERSION=v2026.5.1`
- итоговая версия сборки: `v1.15.0-posadmesh-v2026.5.1-abcdef`
@@ -79,16 +106,15 @@ bash posadmesh-build.sh build-firmware heltec_v4_repeater_observer
```bash
export FIRMWARE_VERSION=v1.15.0
export POSADMESH_VERSION=v2026.5.1
bash posadmesh-build.sh build-observer-firmwares
bash posadmesh-build.sh build-repeater-mqtt-firmwares
git tag observer-posadmesh-v2026.5.1
git push origin observer-posadmesh-v2026.5.1
git tag repeater-mqtt-v2026.5.1
git push origin repeater-mqtt-v2026.5.1
```
## Поддерживаемые теги
- `companion-wifi-v1.15.0`
- `repeater-bridge-espnow-v1.15.0`
- `observer-posadmesh-bridge-espnow-v2026.5.1`
- `observer-posadmesh-bridge-mqtt-v2026.7.0`
- `observer-posadmesh-v2026.5.1`
- `repeater-mqtt-espnow-v2026.5.1`
- `repeater-mqtt-bridge-v2026.7.0`
- `repeater-mqtt-v2026.5.1`
+51 -80
View File
@@ -28,48 +28,36 @@ sh posadmesh-build.sh <command> [target]
Commands:
help|usage|-h|--help: Shows this message.
list|-l: List firmwares available to build.
list-mqtt: List only the PosadMesh MQTT build targets.
build-firmware <target>: Build the firmware for the given build target.
build-firmwares: Build all firmwares for all targets.
build-firmwares: Build all PosadMesh MQTT firmwares.
build-mqtt-firmwares: Build all MQTT firmwares (uplink, ESP-NOW bridge and MQTT bridge).
build-matching-firmwares <build-match-spec>: Build all firmwares for build targets containing the string given for <build-match-spec>.
build-companion-firmwares: Build all companion firmwares for all build targets.
build-companion-wifi-firmwares: Build all companion WiFi firmwares for all build targets.
build-repeater-firmwares: Build all repeater firmwares for all build targets.
build-repeater-bridge-espnow-firmwares: Build all repeater ESP-NOW bridge firmwares for all build targets.
build-observer-firmwares: Build all observer firmwares for all build targets.
build-observer-espnow-firmwares: Build all observer ESP-NOW firmwares for all build targets.
build-observer-mqtt-bridge-firmwares: Build all observer MQTT bridge firmwares for all build targets.
build-room-server-firmwares: Build all chat room server firmwares for all build targets.
build-repeater-mqtt-firmwares: Build the MQTT uplink firmwares.
build-repeater-mqtt-espnow-firmwares: Build the MQTT uplink firmwares that also run a local ESP-NOW bridge.
build-repeater-mqtt-bridge-firmwares: Build the MQTT bridge firmwares.
build-repeater-firmwares: Build all upstream repeater firmwares.
build-repeater-bridge-espnow-firmwares: Build all repeater ESP-NOW bridge firmwares.
build-room-server-firmwares: Build all chat room server firmwares.
Examples:
Build firmware for the "RAK_4631_repeater" device target
$ sh posadmesh-build.sh build-firmware RAK_4631_repeater
Build firmware for the "heltec_v4_repeater_mqtt" device target
$ sh posadmesh-build.sh build-firmware heltec_v4_repeater_mqtt
Build all firmwares for device targets containing the string "RAK_4631"
$ sh posadmesh-build.sh build-matching-firmwares <build-match-spec>
Build all MQTT firmwares
$ sh posadmesh-build.sh build-mqtt-firmwares
Build all companion firmwares
$ sh posadmesh-build.sh build-companion-firmwares
Build the MQTT uplink firmwares
$ sh posadmesh-build.sh build-repeater-mqtt-firmwares
Build all companion WiFi firmwares
$ sh posadmesh-build.sh build-companion-wifi-firmwares
Build the MQTT uplink firmwares with the local ESP-NOW bridge
$ sh posadmesh-build.sh build-repeater-mqtt-espnow-firmwares
Build all repeater firmwares
$ sh posadmesh-build.sh build-repeater-firmwares
Build the MQTT bridge firmwares
$ sh posadmesh-build.sh build-repeater-mqtt-bridge-firmwares
Build all repeater ESP-NOW bridge firmwares
$ sh posadmesh-build.sh build-repeater-bridge-espnow-firmwares
Build all observer firmwares
$ sh posadmesh-build.sh build-observer-firmwares
Build all observer ESP-NOW firmwares
$ sh posadmesh-build.sh build-observer-espnow-firmwares
Build all observer MQTT bridge firmwares
$ sh posadmesh-build.sh build-observer-mqtt-bridge-firmwares
Build all chat room server firmwares
$ sh posadmesh-build.sh build-room-server-firmwares
Build all firmwares for device targets containing the string "Xiao"
$ sh posadmesh-build.sh build-matching-firmwares Xiao
Environment Variables:
DISABLE_DEBUG=1: Disables all debug logging flags (MESH_DEBUG, MESH_PACKET_LOGGING, etc.)
@@ -96,7 +84,7 @@ import sys
for section, _options in json.load(sys.stdin):
if section.startswith('env:'):
print(section[4:])
"
" | tr -d '\r'
}
# Catch cries for help before doing anything else.
@@ -111,6 +99,12 @@ case $1 in
get_pio_envs
exit 0
;;
list-mqtt)
require_uv
sync_python_tooling
get_pio_envs | grep -E '_(repeater_mqtt|repeater_mqtt_espnow|repeater_mqtt_bridge)$' | sort
exit 0
;;
esac
# cache project config json for use in get_platform_for_env()
@@ -157,7 +151,7 @@ for section, options in data:
if match:
print(match.group(1))
sys.exit(0)
"
" | tr -d '\r'
}
# disable all debug logging flags if DISABLE_DEBUG=1 is set
@@ -171,15 +165,13 @@ get_firmware_build_date() {
local env_name="$1"
local header="examples/simple_repeater/MyMesh.h"
if [[ "$env_name" == *companion_radio* ]]; then
header="examples/companion_radio/MyMesh.h"
elif [[ "$env_name" == *room_server* ]]; then
if [[ "$env_name" == *room_server* ]]; then
header="examples/simple_room_server/MyMesh.h"
elif [[ "$env_name" == *sensor* ]]; then
header="examples/simple_sensor/SensorMesh.h"
fi
sed -n 's/^[[:space:]]*#define[[:space:]][[:space:]]*FIRMWARE_BUILD_DATE[[:space:]][[:space:]]*"\([^"]*\)".*/\1/p' "$header" | head -n 1
sed -n 's/^[[:space:]]*#define[[:space:]][[:space:]]*FIRMWARE_BUILD_DATE[[:space:]][[:space:]]*"\([^"]*\)".*/\1/p' "$header" | head -n 1 | tr -d '\r'
}
# build firmware for the provided pio env in $1
@@ -293,47 +285,30 @@ build_repeater_bridge_espnow_firmwares() {
}
build_companion_firmwares() {
build_repeater_mqtt_firmwares() {
# # build specific companion firmwares
# build_firmware "Heltec_v2_companion_radio_usb"
# build_firmware "Heltec_v2_companion_radio_ble"
# build_firmware "Heltec_v3_companion_radio_usb"
# build_firmware "Heltec_v3_companion_radio_ble"
# build_firmware "Xiao_S3_WIO_companion_radio_ble"
# build_firmware "LilyGo_T3S3_sx1262_companion_radio_usb"
# build_firmware "LilyGo_T3S3_sx1262_companion_radio_ble"
# build_firmware "RAK_4631_companion_radio_usb"
# build_firmware "RAK_4631_companion_radio_ble"
# build_firmware "t1000e_companion_radio_ble"
# build all companion firmwares
build_all_firmwares_by_suffix "_companion_radio_usb"
build_all_firmwares_by_suffix "_companion_radio_ble"
build_all_firmwares_by_suffix "_repeater_mqtt"
}
build_companion_wifi_firmwares() {
build_repeater_mqtt_espnow_firmwares() {
build_all_firmwares_by_suffix "_companion_radio_wifi"
build_all_firmwares_by_suffix "_repeater_mqtt_espnow"
}
build_repeater_observer_firmwares() {
build_repeater_mqtt_bridge_firmwares() {
build_all_firmwares_by_suffix "_repeater_observer"
build_all_firmwares_by_suffix "_repeater_mqtt_bridge"
}
build_repeater_observer_espnow_firmwares() {
# every MQTT firmware track: uplink, uplink with ESP-NOW bridge, and MQTT bridge
build_mqtt_firmwares() {
build_all_firmwares_by_suffix "_repeater_observer_espnow"
}
build_repeater_observer_mqtt_bridge_firmwares() {
build_all_firmwares_by_suffix "_repeater_observer_mqtt_bridge"
build_repeater_mqtt_firmwares
build_repeater_mqtt_espnow_firmwares
build_repeater_mqtt_bridge_firmwares
}
@@ -349,9 +324,7 @@ build_room_server_firmwares() {
}
build_firmwares() {
build_companion_firmwares
build_repeater_firmwares
build_room_server_firmwares
build_mqtt_firmwares
}
# clean build dir
@@ -378,20 +351,18 @@ elif [[ $1 == "build-matching-firmwares" ]]; then
fi
elif [[ $1 == "build-firmwares" ]]; then
build_firmwares
elif [[ $1 == "build-companion-firmwares" ]]; then
build_companion_firmwares
elif [[ $1 == "build-companion-wifi-firmwares" ]]; then
build_companion_wifi_firmwares
elif [[ $1 == "build-mqtt-firmwares" ]]; then
build_mqtt_firmwares
elif [[ $1 == "build-repeater-firmwares" ]]; then
build_repeater_firmwares
elif [[ $1 == "build-repeater-bridge-espnow-firmwares" ]]; then
build_repeater_bridge_espnow_firmwares
elif [[ $1 == "build-observer-firmwares" ]]; then
build_repeater_observer_firmwares
elif [[ $1 == "build-observer-espnow-firmwares" ]]; then
build_repeater_observer_espnow_firmwares
elif [[ $1 == "build-observer-mqtt-bridge-firmwares" ]]; then
build_repeater_observer_mqtt_bridge_firmwares
elif [[ $1 == "build-repeater-mqtt-firmwares" ]]; then
build_repeater_mqtt_firmwares
elif [[ $1 == "build-repeater-mqtt-espnow-firmwares" ]]; then
build_repeater_mqtt_espnow_firmwares
elif [[ $1 == "build-repeater-mqtt-bridge-firmwares" ]]; then
build_repeater_mqtt_bridge_firmwares
elif [[ $1 == "build-room-server-firmwares" ]]; then
build_room_server_firmwares
fi
+2 -2
View File
@@ -1,6 +1,6 @@
# Веб-API репитера
Эта страница описывает локальный HTTPS API, который предоставляют сборки PosadMesh `*_repeater_observer` с поддержкой веб-панели.
Эта страница описывает локальный HTTPS API, который предоставляют сборки PosadMesh `*_repeater_mqtt` с поддержкой веб-панели.
Он предназначен для:
@@ -34,7 +34,7 @@ curl -sk https://<repeater-ip>/api/command \
API доступен только когда:
- вы запускаете поддерживаемую сборку прошивки `*_repeater_observer`
- вы запускаете поддерживаемую сборку прошивки `*_repeater_mqtt`
- веб-панель репитера включена и работает
- репитер доступен из локальной сети
- вы прошли аутентификацию с паролем администратора репитера
+14 -57
View File
@@ -4,33 +4,25 @@
## С чего начать
Если вы новичок в железе MeshCore и просто хотите разумную отправную точку, сначала решите, будет устройство companion-радио или репитером.
Для companion-радио думайте о Wi-Fi-эндпоинте автоматизации:
- используйте сборки companion Wi-Fi, когда другой системе — например, Home Assistant, RemoteTerm или вашему собственному инструментарию — нужно подключаться к MeshCore по Wi-Fi
- обычно это не устройства для повседневной ручной работы, поэтому экран здесь скорее опция, чем обязательное требование
- платы без экрана или простые платы часто подходят, когда companion-радио будет стоять рядом с питанием и управляться из другого приложения или системы автоматизации
- смотрите таблицы companion-радио ниже, если вам всё же нужен дисплей, GPS или более полный набор на плате
Если вы новичок в железе MeshCore и просто хотите разумную отправную точку, сначала решите, каким будет устройство: MQTT/веб-репитером или репитером-мостом.
Для MQTT/веб-репитеров думайте о Wi-Fi, видимости в брокере и достаточном запасе для локальной веб-панели:
- обычные отправные точки — `Heltec_v3` и `heltec_v4`
- `heltec_v4_repeater_observer` — сильный универсальный выбор обсервера с GPS, PSRAM и 16 MB флеш-памяти
- `heltec_v4_repeater_mqtt` — сильный универсальный выбор MQTT-репитера с GPS, PSRAM и 16 MB флеш-памяти
- выбирайте платы с большим объёмом флеш-памяти и PSRAM, если вам нужны MQTT вместе с локальной веб-панелью, статистика или больше запаса под будущие функции
- экраны не являются важным требованием, потому что у обсерверов есть локальная веб-панель для настройки и диагностики
- экраны не являются важным требованием, потому что у MQTT-репитеров есть локальная веб-панель для настройки и диагностики
- репитеры без экрана часто оказываются самым чистым решением, когда устройство будет жить на крыше, в корпусе или в стационарной установке, а настраивать вы будете его из веб-панели, последовательной консоли или приложения
Для репитеров-мостов думайте о локальном радиосвязывании между близко расположенными репитерами:
- используйте прошивку моста, когда двум локальным репитерам нужно обмениваться трафиком между разными радиоконфигурациями MeshCore, например `Australia (Narrow)` и `Australia (Mid)`
- используйте прошивку моста, когда двум локальным репитерам нужно обмениваться трафиком между разными радиоконфигурациями MeshCore — например, с разной полосой пропускания и SF
- чистым репитерам-мостам ESP-NOW не нужны ни MQTT, ни веб-панель PosadMesh, ни экран
- ставьте на первое место стабильное питание, подходящие антенны и размещение, а не возможности дисплея
- используйте `observer-posadmesh-bridge-espnow` только когда тому же репитеру нужны ещё и MQTT-аплинк, и локальный мост ESP-NOW; иначе `repeater-bridge-espnow` делает роль проще
- используйте `repeater-mqtt-espnow` только когда тому же репитеру нужны ещё и MQTT-аплинк, и локальный мост ESP-NOW; иначе `repeater-bridge-espnow` делает роль проще
Другие примечания:
- экраны важнее для companion-радио или стендовых/полевых устройств, чем для стационарных репитеров
- если вам действительно нужен встроенный экран, которым люди будут пользоваться, предпочитайте платы с TFT
- если нужен экран состояния с низким энергопотреблением, предпочитайте платы с электронной бумагой
- если важно определение местоположения или мобильное использование, предпочитайте платы с поддержкой GPS, например семейство T-Beam, `heltec_tracker_v2`, `Heltec_v3`, `heltec_v4` или `ThinkNode_M5`
@@ -40,7 +32,7 @@
Таблицы ниже построены на основе метаданных плат PlatformIO из репозитория и флагов сборки вариантов.
- `Target` — краткое имя платы, используемое на этой странице сравнения. Имена файлов релизов и локальные команды сборки по-прежнему используют полные имена env, например `heltec_v4_repeater_observer`.
- `Target` — краткое имя платы, используемое на этой странице сравнения. Имена файлов релизов и локальные команды сборки по-прежнему используют полные имена env, например `heltec_v4_repeater_mqtt`.
- `MCU` показывает только семейство чипа. Фактовая рабочая частота может различаться в зависимости от env и конфигурации платы.
- `RAM` — встроенная память RAM микроконтроллера.
- `PSRAM` — дополнительная память на некоторых платах. Больше PSRAM обычно означает больше запаса для интерфейса, MQTT и будущих функций.
@@ -49,11 +41,10 @@
## Примечания по трекам
- Платы `companion-wifi` предназначены для companion-устройств, подключаемых к приложению.
- Платы `observer-posadmesh` предназначены для Wi-Fi-репитеров, публикующих данные в MQTT.
- Платы `repeater-bridge-espnow` и `observer-posadmesh-bridge-espnow` предназначены для использования в качестве локального моста ESP-NOW между близко расположенными репитерами с разными радиоконфигурациями MeshCore.
- Платы `repeater-mqtt` предназначены для Wi-Fi-репитеров, публикующих данные в MQTT.
- Платы `repeater-bridge-espnow` и `repeater-mqtt-espnow` предназначены для использования в качестве локального моста ESP-NOW между близко расположенными репитерами с разными радиоконфигурациями MeshCore.
Прошивка моста — это не MQTT через WAN и не мост через VPN. Используйте её, когда двум локальным репитерам нужно обмениваться трафиком между радиоконфигурациями, такими как `Australia (Narrow)` и `Australia (Mid)`.
Прошивка моста — это не MQTT через WAN и не мост через VPN. Используйте её, когда двум локальным репитерам нужно обмениваться трафиком между разными радиоконфигурациями, например с разной полосой пропускания и SF.
## Дополнительные признаки
@@ -106,9 +97,9 @@
\* Эти таргеты используют PA или RF-фронтенд, поэтому фактическая выходная мощность может быть заметно выше заданной в `LORA_TX_POWER`.
## Платы `repeater_observer`
## Платы `repeater_mqtt`
В таблице перечислены все обсервер-таргеты, определённые сейчас в `variants/posadmesh_mqtt/platformio.ini`.
В таблице перечислены все MQTT-таргеты, определённые сейчас в `variants/posadmesh_mqtt/platformio.ini`.
| Target | MCU | RAM | PSRAM | Flash | LoRa | Display | GPS | SD |
| ------------------------ | ------- | ------ | ----- | ----- | ------ | --------------- | --- | --- |
@@ -155,42 +146,8 @@
- `🧪` — аппаратно плата, скорее всего, поддерживает TF/microSD, но интеграцию для конкретной платы в PosadMesh ещё нужно проверить, прежде чем считать её поддерживаемой.
- Для текущего архива статистики карты microSD `4 GB` `FAT32` более чем достаточно. Карты большего объёма тоже поддерживаются.
## Платы `companion_radio_wifi` с дисплеем
Это Wi-Fi companion-таргеты, у которых настроен дисплей для локального статуса, подсказок при настройке или эпизодического прямого взаимодействия.
| Target | MCU | RAM | PSRAM | Flash | LoRa | Display | GPS |
| ------------------------ | ------- | ------ | ----- | ----- | ------ | --------------- | --- |
| Heltec_v2 | ESP32 | 520 KB | No | 8 MB | SX1276 | OLED (SSD1306) | |
| Heltec_v3 | ESP32S3 | 512 KB | No | 8 MB | SX1262 | OLED (SSD1306) | ✅ |
| heltec_tracker_v2 | ESP32S3 | 512 KB | No | 8MB | SX1262 | TFT (ST7735) | ✅ |
| heltec_v4 | ESP32S3 | 512 KB | 2 MB | 16MB | SX1262 | OLED (SSD1306) | ✅ |
| heltec_v4_tft | ESP32S3 | 512 KB | 2 MB | 16MB | SX1262 | TFT (ST7789) | ✅ |
| LilyGo_TBeam_1W | ESP32S3 | 512 KB | 8 MB | 16MB | SX1262 | OLED (SH1106) | ✅ |
| LilyGo_TLora_V2_1_1_6 | ESP32 | 520 KB | No | 4 MB | SX1276 | OLED (SSD1306) | ✅ |
| nibble_screen_connect | ESP32S3 | 512 KB | No | 4MB | SX1262 | OLED (SSD1306) | |
| Station_G2 | ESP32S3 | 512 KB | 8 MB | 16MB | SX1262 | OLED (SH1106) | ✅ |
| T_Beam_S3_Supreme_SX1262 | ESP32S3 | 512 KB | 8 MB | 8MB | SX1262 | OLED (SH1106) | ✅ |
| ThinkNode_M2 | ESP32S3 | 512 KB | No | 4MB | SX1262 | OLED (SH1106) | |
| ThinkNode_M5 | ESP32S3 | 512 KB | No | 4MB | SX1262 | E-paper (GxEPD) | ✅ |
## Платы `companion_radio_wifi` без дисплея
Это Wi-Fi companion-таргеты, где основной интерфейс — приложение companion. Для многих пользователей это лучший повседневный вариант.
| Target | MCU | RAM | PSRAM | Flash | LoRa | GPS |
| ----------------------- | ------- | ------ | ----- | ----- | ------ | --- |
| Heltec_WSL3 | ESP32S3 | 512 KB | No | 8 MB | SX1262 | ✅ |
| RAK_3112 | ESP32S3 | 512 KB | No | 8 MB | SX1262 | ✅ |
| Xiao_S3_LoRa2021F33-2G4 | ESP32S3 | 512 KB | No | 8 MB | LR2021 | |
| Xiao_S3_WIO | ESP32S3 | 512 KB | No | 8 MB | SX1262 | ✅ |
## Практические рекомендации
- Лучший универсальный обсервер с экраном и хорошим запасом ресурсов: `heltec_v4_repeater_observer`, `heltec_v4_tft_repeater_observer`, `Station_G2_repeater_observer`, `LilyGo_TBeam_1W_repeater_observer`.
- Лучший обсервер для простой установки без дисплея: `RAK_3112_repeater_observer`, `Generic_E22_sx1262_repeater_observer`, `Meshimi_repeater_observer`, `Xiao_C6_repeater_observer`.
- Лучшие малопотребляющие сборки обсервера с дисплеем: `Heltec_E213_repeater_observer`, `Heltec_E290_repeater_observer`, `Heltec_Wireless_Paper_repeater_observer`, `ThinkNode_M5_Repeater_observer`.
- Лучший выбор companion, если нужен самый богатый локальный интерфейс: `heltec_v4_tft_companion_radio_wifi` и `heltec_tracker_v2_companion_radio_wifi`.
- Лучший выбор companion, если нужен максимальный запас памяти: `T_Beam_S3_Supreme_SX1262_companion_radio_wifi`, `Station_G2_companion_radio_wifi`, `LilyGo_TBeam_1W_companion_radio_wifi`.
- Лучший выбор companion, если достаточно приложения и работы почти без дисплея: `RAK_3112_companion_radio_wifi`, `Xiao_S3_WIO_companion_radio_wifi`, `Station_G2_companion_radio_wifi`.
- Лучший выбор companion, если вы предпочитаете OLED вместо TFT: `T_Beam_S3_Supreme_SX1262_companion_radio_wifi`, `heltec_v4_companion_radio_wifi`, `LilyGo_TBeam_1W_companion_radio_wifi`.
- Лучший универсальный MQTT-репитер с экраном и хорошим запасом ресурсов: `heltec_v4_repeater_mqtt`, `heltec_v4_tft_repeater_mqtt`, `Station_G2_repeater_mqtt`, `LilyGo_TBeam_1W_repeater_mqtt`.
- Лучший MQTT-репитер для простой установки без дисплея: `RAK_3112_repeater_mqtt`, `Generic_E22_sx1262_repeater_mqtt`, `Meshimi_repeater_mqtt`, `Xiao_C6_repeater_mqtt`.
- Лучшие малопотребляющие сборки MQTT-репитера с дисплеем: `Heltec_E213_repeater_mqtt`, `Heltec_E290_repeater_mqtt`, `Heltec_Wireless_Paper_repeater_mqtt`, `ThinkNode_M5_repeater_mqtt`.
+17 -102
View File
@@ -16,7 +16,7 @@ set mqtt.iata <code>
get mqtt.status
```
Для обсерверов с локальной веб-панелью также полезны:
Для MQTT-репитеров с локальной веб-панелью также полезны:
```text
set web on
@@ -24,11 +24,11 @@ get web.status
set web off
```
Используйте `set web on` при настройке или диагностике, а затем `set web off`, когда стационарному обсерверу нужен максимальный запас памяти.
Используйте `set web on` при настройке или диагностике, а затем `set web off`, когда стационарному MQTT-репитеру нужен максимальный запас памяти.
## Команды обсервера
## Команды MQTT-репитера
Эти команды доступны в таргетах прошивки `*_repeater_observer`.
Эти команды доступны в таргетах прошивки `*_repeater_mqtt`.
Команды `get` без аргументов нужно вводить точно так, как показано.
@@ -80,7 +80,7 @@ set web off
Примечания:
- новые установки обсерверов по умолчанию задают для `mqtt.iata` значение `UNSET`
- новые установки MQTT-репитеров по умолчанию задают для `mqtt.iata` значение `UNSET`
- одновременно можно включить максимум два MQTT-брокера
- если `mqtt.iata` имеет значение `UNSET`, включённые MQTT-брокеры не подключатся
- пользовательский MQTT использует настроенные имя пользователя и пароль, а не аутентификацию JWT
@@ -94,7 +94,7 @@ set web off
- `mqtt.meshcoretel.ru`
### Настройки Wi-Fi для обсерверов
### Настройки Wi-Fi для MQTT-репитеров
- `get wifi.status`: показывает SSID, состояние подключения, необработанный код статуса Wi-Fi, IP, канал и уровень сигнала при подключении, а также состояние шлюза (`gw:ok|lost`) и счётчик переподключений сторожевым таймером (`wd:<n>`).
- `get wifi.ssid`: показывает настроенный SSID Wi-Fi.
@@ -104,9 +104,9 @@ set web off
- `set wifi.powersaving none|min|max`: задаёт режим энергосбережения Wi-Fi.
- `wifi reconnect`: разрывает текущее соединение и переподключается с полным сканированием каналов. Используйте, когда узел сообщает о подключении, но недоступен по сети.
Обсерверы также используют сторожевой таймер связи: пока Wi-Fi сообщает о подключении, узел каждые 30 секунд проверяет свой шлюз через ARP. Если шлюз молчит 3 минуты (например, точка доступа, которая продолжает рассылать beacon после потери проводного аплинка), узел сам принудительно выполняет полное переподключение, увеличивая интервал между попытками вплоть до 48 минут, пока сбой не прекратится. `wd:<n>` в `get wifi.status` считает такие принудительные переподключения с момента загрузки.
MQTT-репитеры также используют сторожевой таймер связи: пока Wi-Fi сообщает о подключении, узел каждые 30 секунд проверяет свой шлюз через ARP. Если шлюз молчит 3 минуты (например, точка доступа, которая продолжает рассылать beacon после потери проводного аплинка), узел сам принудительно выполняет полное переподключение, увеличивая интервал между попытками вплоть до 48 минут, пока сбой не прекратится. `wd:<n>` в `get wifi.status` считает такие принудительные переподключения с момента загрузки.
### Настройки NTP для обсерверов
### Настройки NTP для MQTT-репитеров
- `get ntp.server1`: показывает основной NTP-сервер.
- `get ntp.server2`: показывает дополнительный NTP-сервер.
@@ -117,20 +117,20 @@ set web off
Серверы по умолчанию: `au.pool.ntp.org`, `time.google.com` и `time.cloudflare.com`.
### Настройки моста ESP-NOW для сборок Observer ESP-NOW
### Настройки моста ESP-NOW для сборок MQTT ESP-NOW
Эти команды доступны в таргетах прошивки `*_repeater_observer_espnow`, использующих транспорт моста ESP-NOW.
Эти команды доступны в таргетах прошивки `*_repeater_mqtt_espnow`, использующих транспорт моста ESP-NOW.
Команды моста предназначены для локального использования моста ESP-NOW между близко расположенными репитерами, например для связи репитеров в `Australia (Narrow)` и `Australia (Mid)`. Это не элементы управления MQTT-over-WAN, VPN или интернет-мостом.
Команды моста предназначены для локального использования моста ESP-NOW между близко расположенными репитерами, работающими на разных радиоконфигурациях MeshCore — например, с разной полосой пропускания и SF. Это не элементы управления MQTT-over-WAN, VPN или интернет-мостом.
- `get bridge.channel`: показывает настроенный канал моста ESP-NOW.
- `set bridge.channel <channel>`: задаёт канал моста ESP-NOW и перезапускает мост. Используйте значение от `1` до `14`.
- `get bridge.secret`: показывает настроенный секрет моста ESP-NOW.
- `set bridge.secret <secret>`: задаёт общий секрет моста ESP-NOW и перезапускает мост.
После выполнения `set bridge.channel` ожидайте кратковременного разрыва соединения моста и веб-панели, пока радио перезапускается. В текущих сборках observer ESP-NOW это может выглядеть как перезагрузка платы.
После выполнения `set bridge.channel` ожидайте кратковременного разрыва соединения моста и веб-панели, пока радио перезапускается. В текущих сборках MQTT ESP-NOW это может выглядеть как перезагрузка платы.
В сборках `*_repeater_observer_espnow`, подключённых к Wi-Fi, канал моста ESP-NOW должен совпадать с активным каналом Wi-Fi 2,4 ГГц:
В сборках `*_repeater_mqtt_espnow`, подключённых к Wi-Fi, канал моста ESP-NOW должен совпадать с активным каналом Wi-Fi 2,4 ГГц:
1. Выполните `get wifi.status`.
2. Считайте значение `channel:<n>` из статуса подключённого Wi-Fi.
@@ -177,11 +177,11 @@ OK
- `get flood.max.advert`: показывает лимит хопов для flood-пакетов advert.
- `set flood.max.advert <0-64>`: задаёт лимит хопов для flood-пакетов advert.
В сборках обсерверов `flood.max.unscoped` по умолчанию равен `64`. Меньшие значения могут ограничить, как далеко повторяется неограниченный flood-трафик, тогда как пересылка scoped/region flood остаётся под управлением `flood.max`.
В сборках MQTT-репитеров `flood.max.unscoped` по умолчанию равен `64`. Меньшие значения могут ограничить, как далеко повторяется неограниченный flood-трафик, тогда как пересылка scoped/region flood остаётся под управлением `flood.max`.
### Отчётность о батарее платы
- В сборках обсерверов фоновый опрос батареи, используемый для истории MQTT/статуса, ограничен примерно одним разом в минуту. Явные запросы статуса и телеметрии по-прежнему обновляют показание сразу.
- В сборках MQTT-репитеров фоновый опрос батареи, используемый для истории MQTT/статуса, ограничен примерно одним разом в минуту. Явные запросы статуса и телеметрии по-прежнему обновляют показание сразу.
### Управление вентилятором T-Beam 1W
@@ -217,96 +217,11 @@ OK
- панель по-прежнему использует для доступа пароль администратора репитера
- команды выполняются с той же осторожностью, как если бы вы вводили их напрямую в CLI репитера
- это предназначено для локального административного использования в доверенной сети
- `start ota` освобождает локальный слушатель HTTP-редиректа на порту `80`, чтобы слушатель OTA HTTP мог занять его, не останавливая остальные службы репитера, независимо от того, выполнена ли команда из веб-панели, последовательного CLI или удалённого сеанса CLI companion/приложения
- `start ota` освобождает локальный слушатель HTTP-редиректа на порту `80`, чтобы слушатель OTA HTTP мог занять его, не останавливая остальные службы репитера, независимо от того, выполнена ли команда из веб-панели, последовательного CLI или удалённого сеанса CLI
- если старый слушатель редиректа не освободил порт `80` полностью, слушатель OTA повторяет попытки примерно до 30 секунд, после чего сдаётся
- кнопка `Purge SD` в веб-интерфейсе выполняет `purge sd` после подтверждения в браузере
- `start ota` использует существующий Wi-Fi-адрес репитера, если он уже подключён, или запускает точку доступа `MeshCore-OTA`, если Wi-Fi не подключён
- ярлык Regions в `/app` последовательно выполняет существующие команды регионов MeshCore: `region put au`, `region put au-STATE`, `region allowf au`, `region allowf au-STATE`, затем `region save`
## Команды восстановления Wi-Fi для companion
Эти команды доступны в последовательном CLI восстановления для сборок `*_companion_radio_wifi`.
Чтобы войти в `CLI Rescue`:
- откройте последовательный монитор на скорости `115200` бод
- перезагрузите устройство
- удерживайте кнопку пользователя в течение первых 8 секунд после загрузки
- дождитесь `========= CLI Rescue =========`
- `get wifi.status`: показывает настроенный SSID, состояние подключения, необработанный код статуса Wi-Fi, IP, канал и уровень сигнала при подключении.
- `get wifi.ssid`: показывает настроенный SSID Wi-Fi.
- `get wifi.powersaving`: показывает текущий режим энергосбережения Wi-Fi.
- `set wifi.ssid <ssid>`: сохраняет SSID Wi-Fi и сразу повторяет подключение.
- `set wifi.pwd <password>`: сохраняет пароль Wi-Fi и сразу повторяет подключение.
- `set wifi.powersaving none|min|max`: изменяет режим энергосбережения Wi-Fi.
Сборки Companion Wi-Fi также по-прежнему поддерживают существующие команды восстановления, такие как:
- `set pin <6-digit-pin>`
- `rebuild`
- `erase`
- `ls ...`
- `cat ...`
- `rm ...`
- `reboot`
### Точка доступа для восстановления
Когда у устройства companion Wi-Fi не настроены учётные данные Wi-Fi или оно не может подключиться
к своей настроенной сети в течение 60 секунд, оно поднимает собственную
точку доступа `EastMesh-WiFi`, чтобы его можно было восстановить без последовательного кабеля.
**Пароль точки доступа — это pin устройства, дополненный нулями до 8 цифр** (WPA2 требует
не менее 8 символов). Pin подчиняется тем же правилам, что и pin сопряжения Bluetooth в
сборках BLE:
| Устройство | Активный pin | Пароль `EastMesh-WiFi` |
| --------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------- |
| Есть экран, pin не задан | случайный 6-значный pin при каждой загрузке, отображается как `Pin:NNNNNN` на главном экране | `00NNNNNN` — считайте его с экрана |
| Нет экрана, pin не задан | `123456` (по умолчанию) | `00123456` |
| Pin задан через `set pin <pin>` | ваш настроенный pin (любое устройство) | ваш pin, дополненный нулями до 8 цифр, например pin `4242` → `00004242` |
Примечания по pin:
- на устройствах с экраном pin случаен только до тех пор, пока pin не сохранён; выполните
`set pin <pin>` для фиксированного пароля (вступает в силу при следующей загрузке)
- устройствам без экрана в общедоступных местах всегда следует задавать собственный pin — `00123456` —
это документированное значение по умолчанию, поэтому относитесь к нему как к паролю роутера по умолчанию
Шаги восстановления:
1. подключитесь к сети `EastMesh-WiFi` с паролем из таблицы выше
2. откройте CLI восстановления командой `telnet 192.168.4.1` (или `nc 192.168.4.1 23`) — все
команды восстановления, перечисленные выше, доступны
3. `set wifi.ssid <ssid>`, затем `set wifi.pwd <password>` — устройство сразу
повторяет подключение к сети с новыми учётными данными
4. `reboot` (или просто подождите — см. ниже)
Пока точка доступа поднята, устройство продолжает повторять попытки подключения к настроенной сети примерно раз в
минуту (ожидайте короткий сбой точки доступа при каждой попытке); как только подключение станции
успешно, точка доступа восстановления автоматически отключается (это также разрывает
ваш сеанс восстановления — это признак того, что всё сработало).
### Использование приложения companion через AP (роуминг)
Точка доступа восстановления нужна не только для исправления учётных данных — через неё
доступен полный протокол companion, что делает её режимом роумингового доступа, когда устройство
находится вне своей настроенной сети:
1. подключитесь к `EastMesh-WiFi` с паролем, производным от pin (см. таблицу выше)
2. в приложении companion MeshCore добавьте/подключите Wi-Fi-устройство с хостом
`192.168.4.1` и портом `5000`
3. пользуйтесь приложением как обычно — сообщения, контакты и каналы работают через AP
Примечания по использованию в роуминге:
- один раз выполните `set pin <pin>`, чтобы пароль точки доступа оставался неизменным между перезагрузками;
иначе устройства с экраном выбирают новый случайный pin при каждой загрузке
- точка доступа появляется примерно через 60 секунд после загрузки (сначала устройство пытается
подключиться к своей настроенной сети) и работает до тех пор, пока эта сеть недоступна
- оказавшись снова в зоне действия своей настроенной сети, устройство подключается к ней и
автоматически отключает точку доступа — вместо этого переподключите приложение по адресу в локальной сети
- ярлык Regions в `/app` последовательно выполняет команды регионов MeshCore: `region put` и `region allowf` для базового региона и вложенного, затем `region save`
## Скрипт проверки состояния heap
+16 -21
View File
@@ -2,14 +2,14 @@
MeshCore-Posadmesh сохраняет upstream-прошивку MeshCore без изменений и публикует четыре трека прошивок в зависимости от того, как устройству нужно подключаться:
- `companion-wifi`: используйте для companion-устройств с подключением по Wi-Fi. Этот трек наиболее близок к upstream MeshCore и добавляет команды аварийного восстановления/настройки Wi-Fi от PosadMesh.
- `repeater-bridge-espnow`: используйте, когда нужен обычный репитерный мост ESP-NOW в стиле upstream, без MQTT-аплинка и без веб-панели PosadMesh.
- `observer-posadmesh`: используйте для Wi-Fi репитера, который должен публиковать данные в MQTT-брокер и, на поддерживаемых платах ESP32, предоставлять опциональную локальную веб-панель для настройки и диагностики.
- `observer-posadmesh-bridge-espnow`: используйте, когда одному репитеру нужны одновременно MQTT-аплинк и обязанности моста ESP-NOW, включая управление каналом/секретом моста для синхронизации моста с Wi-Fi.
- `repeater-mqtt`: используйте для Wi-Fi репитера, который должен публиковать данные в MQTT-брокер и, на поддерживаемых платах ESP32, предоставлять опциональную локальную веб-панель для настройки и диагностики.
- `repeater-mqtt-espnow`: используйте, когда одному репитеру нужны одновременно MQTT-аплинк и обязанности моста ESP-NOW, включая управление каналом/секретом моста для синхронизации моста с Wi-Fi.
- `repeater-mqtt-bridge`: используйте, когда репитер должен пересылать raw-пакеты mesh между репитерами через ваш собственный MQTT-брокер (например, Mosquitto в локальной сети), а не публиковать телеметрию в курируемый брокер.
!!! note "Треки-мосты — это локальные радиомосты"
Треки-мосты ESP-NOW предназначены для соединения двух расположенных рядом репитеров, работающих на разных радиоконфигурациях MeshCore, например один репитер на `Australia (Narrow)`, а другой на `Australia (Mid)`.
Треки-мосты ESP-NOW предназначены для соединения двух расположенных рядом репитеров, работающих на разных радиоконфигурациях MeshCore — например, с разной полосой пропускания и SF.
Треки-мосты — это не релизы MQTT-over-WAN, VPN или интернет-туннелей.
@@ -18,15 +18,15 @@ MeshCore-Posadmesh сохраняет upstream-прошивку MeshCore без
- [Сравнение плат](./boards.md)
- [Скачивание и прошивка релизов](./releases.md)
Если вы уже знаете свою плату и хотите самый быстрый путь, пропустите документацию и откройте прошивальщик:
Если вы уже знаете свою плату и хотите самый быстрый путь, пропустите документацию и откройте раздел релизов:
- [Открыть прошивальщик PosadMesh](https://flasher.eastmesh.au)
- [Скачать прошивку PosadMesh](https://git.meshinfo.ru/shade/MeshCore-Posadmesh/releases)
## Я хочу
- выбрать плату: начните с [Сравнение плат](./boards.md)
- прошить прошивку с рекомендациями: начните с [Скачивание и прошивка релизов](./releases.md)
- прошить прошивку сейчас: откройте [прошивальщик PosadMesh](https://flasher.eastmesh.au)
- прошить прошивку сейчас: скачайте файл из [раздела релизов](https://git.meshinfo.ru/shade/MeshCore-Posadmesh/releases)
- настроить репитер после прошивки: используйте [Скачивание и прошивка релизов](./releases.md) и [Использование веб-панели репитера](./web-panel.md)
- разобраться в CLI-командах PosadMesh: используйте [Пользовательские CLI-команды](./custom-cli.md)
- автоматизировать работу с репитером или писать скрипты: используйте [Использование веб-API репитера](./api.md)
@@ -53,20 +53,15 @@ MeshCore-Posadmesh сохраняет upstream-прошивку MeshCore без
- [meshcore-dev/MeshCore](https://github.com/meshcore-dev/MeshCore)
## Региональные материалы по Австралии
## Материалы MeshCoreTel
Эти материалы поддерживаются сообществом, а не являются официальной документацией проекта, но они всё равно полезны для региональных заметок по настройке в Австралии, местных соглашений и материалов по MeshCore для отдельных регионов.
Проект ориентирован на сеть и сайт <https://meshcoretel.ru>:
### ACT / NSW / QLD / SA / TAS / VIC
- [Карта сети](https://meshcoretel.ru/ru/MOW/map)
- [Связность](https://meshcoretel.ru/ru/MOW/links)
- [Покрытие](https://meshcoretel.ru/ru/MOW/coverage)
- [Узлы](https://meshcoretel.ru/ru/MOW/adverts)
- [Наблюдатели](https://meshcoretel.ru/ru/MOW/observers)
- [Веб-прошивальщик и консоль](https://meshcoretel.ru/ru/flasher)
- [wiki.eastmesh.au](https://wiki.eastmesh.au/)
- [wiki.meshcoreaus.org](https://wiki.meshcoreaus.org/)
### Сидней
- [nswmesh.au](https://nswmesh.au/)
- [github.com/nswmesh](https://github.com/nswmesh/)
### Брисбен
- [wiki.mbug.com.au/en/Meshcore/Settings](https://wiki.mbug.com.au/en/Meshcore/Settings)
Радиопараметры региона Москва (MOW), которые использует сеть: 868,731 МГц, полоса 62,5 кГц, SF7, CR7, хэш пути 2 байта. Брокер: `mqtt://mqtt.meshcoretel.ru:1883`, пользователь и пароль `meshcore`.
+53 -101
View File
@@ -6,6 +6,8 @@
Используйте эту страницу, когда изменяете прошивку, тестируете таргет перед релизом или собираете локальный артефакт, недоступный в разделе Releases.
Если сборка на своей машине не нужна, те же MQTT-прошивки можно собрать на сервере ручным workflow Gitea Actions (**Actions → Build MQTT firmwares → Run workflow**): он принимает версии `FIRMWARE_VERSION` и `POSADMESH_VERSION`, группу сборки (`all`, `uplink`, `espnow`, `bridge` или один таргет) и умеет сразу создать релиз Gitea с собранными файлами. Подробности — в [RELEASE.md](../RELEASE.md).
## Настройка
Из корня репозитория:
@@ -25,17 +27,16 @@ bash posadmesh-build.sh list
Обычная сборка PlatformIO для одного таргета:
```bash
uv run pio run -e heltec_v4_repeater_observer
uv run pio run -e heltec_v4_companion_radio_wifi
uv run pio run -e heltec_v4_repeater_mqtt
uv run pio run -e heltec_v4_repeater_bridge_espnow
uv run pio run -e heltec_v4_repeater_observer_espnow
uv run pio run -e Xiao_S3_WIO_repeater_observer_mqtt_bridge
uv run pio run -e heltec_v4_repeater_mqtt_espnow
uv run pio run -e Xiao_S3_WIO_repeater_mqtt_bridge
```
Прошивка таргета:
```bash
uv run pio run -e heltec_v4_repeater_observer -t upload --upload-port /dev/tty.usbmodemXXXX
uv run pio run -e heltec_v4_repeater_mqtt -t upload --upload-port /dev/tty.usbmodemXXXX
```
Монитор последовательного порта:
@@ -48,19 +49,12 @@ uv run pio device monitor --port /dev/tty.usbmodemXXXX --baud 115200
Если вам нужны те же метаданные версии, которые используются при выпуске релиза, сначала экспортируйте переменные версии.
Companion Wi-Fi:
```bash
export FIRMWARE_VERSION=v1.14.1
bash posadmesh-build.sh build-firmware heltec_v4_companion_radio_wifi
```
Обсервер:
MQTT-репитер:
```bash
export FIRMWARE_VERSION=v1.15.0
export POSADMESH_VERSION=v2026.5.1
bash posadmesh-build.sh build-firmware heltec_v4_repeater_observer
bash posadmesh-build.sh build-firmware heltec_v4_repeater_mqtt
```
Мост ESP-NOW репитера:
@@ -70,59 +64,59 @@ export FIRMWARE_VERSION=v1.15.0
bash posadmesh-build.sh build-firmware heltec_v4_repeater_bridge_espnow
```
Обсервер ESP-NOW:
MQTT-репитер ESP-NOW:
```bash
export FIRMWARE_VERSION=v1.15.0
export POSADMESH_VERSION=v2026.5.1
bash posadmesh-build.sh build-firmware heltec_v4_repeater_observer_espnow
bash posadmesh-build.sh build-firmware heltec_v4_repeater_mqtt_espnow
```
На выходе получаются артефакты с версиями в `out/`.
Правило версионирования:
- `companion-wifi` и `repeater-bridge-espnow` используют версию upstream MeshCore как `FIRMWARE_VERSION`
- `observer-posadmesh`, `observer-posadmesh-bridge-espnow` и `observer-posadmesh-bridge-mqtt` используют версию upstream MeshCore как `FIRMWARE_VERSION` плюс версию релиза PosadMesh как `POSADMESH_VERSION`
- `repeater-bridge-espnow` использует версию upstream MeshCore как `FIRMWARE_VERSION`
- `repeater-mqtt`, `repeater-mqtt-espnow` и `repeater-mqtt-bridge` используют версию upstream MeshCore как `FIRMWARE_VERSION` плюс версию релиза PosadMesh как `POSADMESH_VERSION`
## Поддерживаемые платы `repeater_observer`
## Поддерживаемые платы `repeater_mqtt`
Это полные имена окружений PlatformIO, используемые для локальных сборок из исходников и для именования артефактов релизов.
```text
Generic_E22_sx1262_repeater_observer
Generic_E22_sx1268_repeater_observer
Heltec_E213_repeater_observer
Heltec_E290_repeater_observer
Heltec_T190_repeater_observer
heltec_tracker_v2_repeater_observer
Heltec_v2_repeater_observer
Heltec_v3_repeater_observer
heltec_v4_repeater_observer
heltec_v4_tft_repeater_observer
Heltec_Wireless_Paper_repeater_observer
Heltec_Wireless_Tracker_repeater_observer
Heltec_WSL3_repeater_observer
LilyGo_T3S3_sx1262_repeater_observer
LilyGo_T3S3_sx1276_repeater_observer
LilyGo_TBeam_1W_repeater_observer
LilyGo_TDeck_repeater_observer
LilyGo_Tlora_C6_repeater_observer
M5Stack_Unit_C6L_repeater_observer
Meshadventurer_sx1262_repeater_observer
Meshadventurer_sx1268_repeater_observer
Meshimi_repeater_observer
nibble_screen_connect_repeater_observer
RAK_3112_repeater_observer
Station_G2_logging_repeater_observer
Station_G2_repeater_observer
T_Beam_S3_Supreme_SX1262_repeater_observer
Tbeam_SX1262_repeater_observer
Tbeam_SX1276_repeater_observer
WHY2025_badge_repeater_observer
Xiao_C6_repeater_observer
Xiao_S3_LoRa2021F33-2G4_repeater_observer
Xiao_S3_WIO_repeater_observer
Generic_E22_sx1262_repeater_mqtt
Generic_E22_sx1268_repeater_mqtt
Heltec_E213_repeater_mqtt
Heltec_E290_repeater_mqtt
Heltec_T190_repeater_mqtt
heltec_tracker_v2_repeater_mqtt
Heltec_v2_repeater_mqtt
Heltec_v3_repeater_mqtt
heltec_v4_repeater_mqtt
heltec_v4_tft_repeater_mqtt
Heltec_Wireless_Paper_repeater_mqtt
Heltec_Wireless_Tracker_repeater_mqtt
Heltec_WSL3_repeater_mqtt
LilyGo_T3S3_sx1262_repeater_mqtt
LilyGo_T3S3_sx1276_repeater_mqtt
LilyGo_TBeam_1W_repeater_mqtt
LilyGo_TDeck_repeater_mqtt
LilyGo_Tlora_C6_repeater_mqtt
M5Stack_Unit_C6L_repeater_mqtt
Meshadventurer_sx1262_repeater_mqtt
Meshadventurer_sx1268_repeater_mqtt
Meshimi_repeater_mqtt
nibble_screen_connect_repeater_mqtt
RAK_3112_repeater_mqtt
Station_G2_logging_repeater_mqtt
Station_G2_repeater_mqtt
T_Beam_S3_Supreme_SX1262_repeater_mqtt
Tbeam_SX1262_repeater_mqtt
Tbeam_SX1276_repeater_mqtt
WHY2025_badge_repeater_mqtt
Xiao_C6_repeater_mqtt
Xiao_S3_LoRa2021F33-2G4_repeater_mqtt
Xiao_S3_WIO_repeater_mqtt
```
## Поддерживаемые платы мостов
@@ -131,70 +125,28 @@ Xiao_S3_WIO_repeater_observer
```bash
bash posadmesh-build.sh list | grep '_repeater_bridge_espnow'
bash posadmesh-build.sh list | grep '_repeater_observer_espnow'
bash posadmesh-build.sh list | grep '_repeater_mqtt_espnow'
```
Типичные примеры:
```text
heltec_v4_repeater_bridge_espnow
heltec_v4_repeater_observer_espnow
heltec_v4_repeater_mqtt_espnow
Station_G2_repeater_bridge_espnow
Station_G2_repeater_observer_espnow
Station_G2_repeater_mqtt_espnow
T_Beam_S3_Supreme_SX1262_repeater_bridge_espnow
T_Beam_S3_Supreme_SX1262_repeater_observer_espnow
T_Beam_S3_Supreme_SX1262_repeater_mqtt_espnow
```
## Поддерживаемые платы `repeater_observer_mqtt_bridge`
## Поддерживаемые платы `repeater_mqtt_bridge`
Для каждой платы обсервера определён вариант сборки `mqtt_bridge`.
Для каждой платы MQTT-репитера определён вариант сборки `mqtt_bridge`.
Список доступных таргетов:
```bash
bash posadmesh-build.sh list | grep '_repeater_observer_mqtt_bridge'
bash posadmesh-build.sh list | grep '_repeater_mqtt_bridge'
```
Прошивка моста предназначена для локального использования ESP-NOW-моста между близлежащими репитерами. Это не мост MQTT-over-WAN и не VPN-мост.
## Поддерживаемые платы `companion_radio_wifi`
Это полные имена окружений PlatformIO, используемые для локальных сборок из исходников и для именования артефактов релизов.
```text
heltec_tracker_v2_companion_radio_wifi
Heltec_v2_companion_radio_wifi
Heltec_v3_companion_radio_wifi
heltec_v4_companion_radio_wifi
heltec_v4_tft_companion_radio_wifi
Heltec_WSL3_companion_radio_wifi
LilyGo_TBeam_1W_companion_radio_wifi
LilyGo_TLora_V2_1_1_6_companion_radio_wifi
nibble_screen_connect_companion_radio_wifi
RAK_3112_companion_radio_wifi
Station_G2_companion_radio_wifi
T_Beam_S3_Supreme_SX1262_companion_radio_wifi
ThinkNode_M2_companion_radio_wifi
ThinkNode_M5_companion_radio_wifi
Xiao_S3_LoRa2021F33-2G4_companion_radio_wifi
Xiao_S3_WIO_companion_radio_wifi
```
## CLI companion Wi-Fi
Текущие сборки companion Wi-Fi поддерживают сохраняемые команды восстановления Wi-Fi:
- откройте монитор последовательного порта на скорости `115200` бод
- перезагрузите устройство
- в течение первых 8 секунд после загрузки зажмите пользовательскую кнопку, чтобы войти в `CLI Rescue`
- дождитесь `========= CLI Rescue =========`
- затем выполните приведённые ниже команды восстановления Wi-Fi из монитора последовательного порта
```text
get wifi.status
get wifi.ssid
get wifi.powersaving
set wifi.ssid <ssid>
set wifi.pwd <password>
set wifi.powersaving none|min|max
```
+1 -1
View File
@@ -8,7 +8,7 @@
- `https://git.meshinfo.ru/shade/MeshCore-Posadmesh`
Эти шаги предназначены для существующих пользователей репитеров, переходящих на новую прошивку PosadMesh `*_repeater_observer`.
Эти шаги предназначены для существующих пользователей репитеров, переходящих на новую прошивку PosadMesh `*_repeater_mqtt`.
Начните с загрузки подходящего релиза PosadMesh для вашей платы:
+45 -69
View File
@@ -8,17 +8,14 @@
Если вы прошиваете прошивку PosadMesh впервые, самый простой путь:
1. Откройте <https://flasher.eastmesh.au/>.
2. Выберите прошивку, соответствующую тому, что будет делать устройство.
3. Выберите плату, точно соответствующую вашему железу.
4. Выберите версию. Флешер по умолчанию выбирает последний доступный релиз.
5. Выберите тип образа:
- `Update` для обычного обновления прошивки
- `Full Flash` для чистой прошивки полного образа
6. Нажмите `Flash Firmware`.
7. После прошивки завершите настройку через `Open MeshCore Config Panel` или `Serial Console`.
1. Откройте раздел релизов: <https://git.meshinfo.ru/shade/MeshCore-Posadmesh/releases>.
2. Выберите трек: `repeater-mqtt`, `repeater-mqtt-espnow`, `repeater-mqtt-bridge` или `repeater-bridge-espnow`.
3. Скачайте файл, имя которого начинается с вашей платы.
4. Выберите тип образа: `.bin` для обычного обновления, `-merged.bin` для чистой прошивки.
5. Прошейте файл — см. раздел «Чем прошивать» ниже.
6. После прошивки настройте узел через локальную веб-панель репитера или последовательную консоль.
Если вы не уверены, какой трек вам нужен, начните с `companion-wifi` для companion-устройств, подключаемых к приложению, или с `observer-posadmesh` для стационарного репитера, который должен публиковать данные в MQTT.
Если вы не уверены, какой трек вам нужен, начните с `repeater-mqtt` для стационарного репитера, который должен публиковать данные в MQTT.
## Выбор трека
@@ -26,14 +23,14 @@ PosadMesh публикует четыре трека релизов:
| Трек | Используйте, когда | Суффикс имени файла прошивки |
| --------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------ |
| `companion-wifi` | Нужно companion-устройство, которое подключается по Wi-Fi вместо BLE или USB. | `*_companion_radio_wifi` |
| `observer-posadmesh` | Нужен репитер с Wi-Fi и MQTT-аплинком, обычно для видимости в брокере, например в PosadMesh/CoreScope. | `*_repeater_observer` |
| `repeater-mqtt` | Нужен репитер с Wi-Fi и MQTT-аплинком, обычно для видимости в брокере, например в PosadMesh/CoreScope. | `*_repeater_mqtt` |
| `repeater-bridge-espnow` | Нужен локальный ESP-NOW мост между соседними репитерами, без MQTT-аплинка и без веб-панели PosadMesh. | `*_repeater_bridge_espnow` |
| `observer-posadmesh-bridge-espnow` | Нужно, чтобы один репитер выполнял и MQTT-аплинк, и задачи локального ESP-NOW моста. | `*_repeater_observer_espnow` |
| `repeater-mqtt-espnow` | Нужно, чтобы один репитер выполнял и MQTT-аплинк, и задачи локального ESP-NOW моста. | `*_repeater_mqtt_espnow` |
| `repeater-mqtt-bridge` | Нужно, чтобы репитер пересылал raw-пакеты mesh между репитерами через ваш собственный MQTT-брокер. | `*_repeater_mqtt_bridge` |
!!! note "Прошивка моста — это не WAN-мост"
Треки ESP-NOW моста предназначены для соединения двух соседних репитеров, работающих с разными конфигурациями радио MeshCore, например `Australia (Narrow)` и `Australia (Mid)`.
Треки ESP-NOW моста предназначены для соединения двух соседних репитеров, работающих с разными конфигурациями радио MeshCore — например, с разной полосой пропускания и SF.
Треки моста не используют брокеры MQTT-аплинка для туннелирования mesh-трафика через интернет, WAN-каналы или VPN.
@@ -43,27 +40,22 @@ PosadMesh публикует четыре трека релизов:
Примеры:
- `heltec_v4_companion_radio_wifi-v1.14.1-abcdef.bin`
- `heltec_v4_repeater_observer-v1.15.0-posadmesh-v2026.5.1-abcdef.bin`
- `heltec_v4_repeater_observer-v1.15.0-posadmesh-v2026.5.1-abcdef-merged.bin`
- `heltec_v4_repeater_mqtt-v1.15.0-posadmesh-v2026.5.1-abcdef.bin`
- `heltec_v4_repeater_mqtt-v1.15.0-posadmesh-v2026.5.1-abcdef-merged.bin`
- `heltec_v4_repeater_bridge_espnow-v1.15.0-abcdef.bin`
- `heltec_v4_repeater_observer_espnow-v1.15.0-posadmesh-v2026.5.1-abcdef.bin`
- `heltec_v4_repeater_mqtt_espnow-v1.15.0-posadmesh-v2026.5.1-abcdef.bin`
- `heltec_v4_repeater_mqtt_bridge-v1.15.0-posadmesh-v2026.7.0-abcdef.bin`
Важен префикс платы/env:
- `*_companion_radio_wifi`
- `*_repeater_observer`
- `*_repeater_mqtt`
- `*_repeater_bridge_espnow`
- `*_repeater_observer_espnow`
- `*_repeater_mqtt_espnow`
- `*_repeater_mqtt_bridge`
## Какой файл прошивать
Если вы используете <https://flasher.eastmesh.au/>, выберите тип образа во флешере:
- `Update` = обычное обновление прошивки
- `Full Flash` = чистая прошивка полного образа
Если вы скачиваете файлы вручную из раздела Releases на git.meshinfo.ru, вместо этого ориентируйтесь на имя файла:
Файлы берутся из раздела Releases на git.meshinfo.ru. Ориентируйтесь на имя файла:
Используйте стандартный файл `.bin`, когда обновляете существующее устройство с тем же таргетом и той же разметкой разделов.
@@ -76,37 +68,32 @@ PosadMesh публикует четыре трека релизов:
## Процесс прошивки
1. Выберите прошивку.
2. Выберите плату.
3. Выберите версию. Последняя версия выбирается по умолчанию.
4. Выберите тип образа: `Update` или `Full Flash`.
5. Нажмите `Flash Firmware`.
6. После прошивки используйте `Open MeshCore Config Panel` или `Serial Console` для настройки после прошивки, такой как Wi-Fi, MQTT, мост или параметры радио.
1. Скачайте нужный файл релиза для своей платы.
2. Определите чип платы (ESP32, ESP32-S3, ESP32-C6 или nRF52) — он виден по имени платы в имени файла.
3. Для чистой установки прошейте `-merged.bin` по адресу `0x0`, для обычного обновления — `.bin`.
4. Для nRF52-плат прошейте `.uf2` (копированием на диск в режиме загрузчика) или `.zip` через DFU.
5. После прошивки настройте узел: Wi-Fi, MQTT, мост или параметры радио.
## Рекомендуемый флешер
## Чем прошивать
Рекомендуемый флешер:
Отдельный флешер для этого не нужен: подойдёт любой инструмент, умеющий записать образ ESP32 по адресу `0x0`, например `esptool.py`:
- <https://flasher.eastmesh.au/>
```bash
esptool.py --chip esp32s3 write_flash 0x0 <имя-файла>-merged.bin
```
Он имеет встроенную поддержку распространённых типов прошивок PosadMesh, а также может прошивать пользовательские файлы прошивок:
Практическое правило:
- прошивка `companion_radio_wifi`
- прошивка `repeater_observer`
- пользовательские файлы прошивок
- `.bin` = инкрементальное обновление
- `-merged.bin` = стирание и чистая прошивка
Для релизов моста используйте соответствующий пункт для моста, если флешер его показывает. В противном случае скачайте файл релиза самостоятельно и прошейте его как пользовательский файл прошивки.
Для релизов моста берите файл соответствующего трека (`repeater-mqtt-bridge` или `repeater-bridge-espnow`).
Рекомендуемое использование:
После прошивки есть два полезных пути настройки.
- используйте `Update`, когда обновляете существующее устройство
- используйте `Full Flash`, когда нужна чистая прошивка полного образа
### Панель настройки MeshCore
После прошивки во флешере доступны два полезных пути настройки.
### Открыть панель конфигурации MeshCore
Используйте `Open MeshCore Config Panel`, чтобы получить доступ к пошаговым инструментам настройки MeshCore:
Откройте <https://config.meshcore.io/> — это пошаговые инструменты настройки MeshCore:
- `Repeater Setup`
- `Console`
@@ -126,7 +113,7 @@ PosadMesh публикует четыре трека релизов:
- flood max
- некоторые расширенные настройки репитера
Начиная с `v1.2.1`, локальная веб-панель репитера также включает те же общие настройки репитера, поэтому пользователи могут выполнить первоначальную настройку там и возвращаться к ней для периодической диагностики или изменения конфигурации. На обсерверах, которым нужен максимальный запас heap, по-прежнему лучше снова отключить панель, когда вы закончили.
Начиная с `v1.2.1`, локальная веб-панель репитера также включает те же общие настройки репитера, поэтому пользователи могут выполнить первоначальную настройку там и возвращаться к ней для периодической диагностики или изменения конфигурации. На MQTT-репитерах, которым нужен максимальный запас heap, по-прежнему лучше снова отключить панель, когда вы закончили.
#### Консоль
@@ -139,15 +126,14 @@ PosadMesh публикует четыре трека релизов:
Это относится к:
- `companion_radio_wifi`
- `repeater_observer`
- `repeater_observer_espnow`
- `repeater_mqtt`
- `repeater_mqtt_espnow`
### Последовательная консоль
Используйте `Serial Console`, когда хотите подключиться по USB и вводить команды CLI напрямую.
Подключитесь к устройству по USB и вводите команды CLI напрямую, например через `uv run pio device monitor --port <port> --baud 115200`.
Флешер может подключаться к устройству по USB и отключаться от него. Он также включает готовые команды CLI, которые подставляются в поле ввода команд для упрощения настройки:
Полезные команды:
- `set wifi.ssid`
- `set wifi.pwd`
@@ -160,9 +146,9 @@ PosadMesh публикует четыре трека релизов:
## Типовые первые шаги
### Обсервер
### MQTT-репитер
Сборки `repeater_observer` включают дополнения MQTT от PosadMesh. В зависимости от платы они также могут включать локальную веб-панель.
Сборки `repeater_mqtt` включают дополнения MQTT от PosadMesh. В зависимости от платы они также могут включать локальную веб-панель.
Типовые первые шаги после прошивки:
@@ -173,9 +159,9 @@ PosadMesh публикует четыре трека релизов:
- при желании задайте `mqtt.owner` и `mqtt.email`
- при желании включите пользовательский брокер как второй аплинк
### Обсервер ESP-NOW
### MQTT-репитер ESP-NOW
Сборки `repeater_observer_espnow` объединяют роль обсервера с поддержкой локального ESP-NOW моста.
Сборки `repeater_mqtt_espnow` объединяют роль MQTT-репитера с поддержкой локального ESP-NOW моста.
Типовые первые шаги после прошивки:
@@ -197,13 +183,3 @@ PosadMesh публикует четыре трека релизов:
- задайте нужный пресет/конфигурацию радио MeshCore
- задайте одинаковые канал моста и секрет для локальной пары моста
- убедитесь, что оба репитера моста физически находятся достаточно близко для работы ESP-NOW
### Companion-радио Wi-Fi
Сборки `companion_radio_wifi` предназначены для companion-устройств, которые предоставляют интерфейс приложения по Wi-Fi вместо BLE или USB.
Типовые первые шаги после прошивки:
- задайте учётные данные Wi-Fi
- проверьте `get wifi.status`
- подключите ваше клиентское приложение к companion-устройству по Wi-Fi
+7 -7
View File
@@ -1,6 +1,6 @@
# Веб-панель репитера
Эта страница предназначена для конечных пользователей, которые используют сборку PosadMesh `*_repeater_observer` с включённой локальной веб-панелью.
Эта страница предназначена для конечных пользователей, которые используют сборку PosadMesh `*_repeater_mqtt` с включённой локальной веб-панелью.
Здесь описано, как открыть панель, что делает каждый раздел и чего ожидать при работе с ней на компьютере или мобильном устройстве.
@@ -35,7 +35,7 @@
Рекомендации по эксплуатации:
- используйте её для первоначальной настройки, редких изменений конфигурации и диагностики
- по завершении предпочитайте `set web off` на обсерверах, которым нужен максимальный запас
- по завершении предпочитайте `set web off` на MQTT-репитерах, которым нужен максимальный запас
- это оставляет больше внутреннего heap для работы MQTT/WSS, особенно в конфигурациях с двумя брокерами
## Типовые задачи
@@ -78,7 +78,7 @@
Вам потребуется:
- поддерживаемая сборка прошивки `*_repeater_observer`
- поддерживаемая сборка прошивки `*_repeater_mqtt`
- настроенный на репитере Wi-Fi
- репитер, подключённый к вашей локальной сети
- пароль администратора репитера
@@ -212,7 +212,7 @@
## Настройки радио и регионы
Раздел `Radio Settings` включает селектор community-пресета радио, режим path hash и выпадающий список `Region (Australia)`, построенный из групп штатов, используемых селектором MQTT IATA. Список предустанавливается только тогда, когда у репитера уже есть соответствующий разрешённый регион `au-STATE`. Нажатие кнопки `Save` для региона создаёт и разрешает базовый регион `au` вместе с выбранным регионом штата, а затем сохраняет карту регионов командой `region save`.
Раздел `Radio Settings` включает селектор community-пресета радио, режим path hash и работу с деревом регионов узла. Список регионов строится из уже разрешённых на узле регионов; нажатие `Save` разрешает выбранный регион вместе с его базовым регионом и сохраняет карту регионов командой `region save`.
## Информация
@@ -228,7 +228,7 @@
Типичный сценарий использования:
- MQTT-обсервер в помещении или в одном месте с другим устройством, когда соседний репитер уже выполняет работу по RF-ретрансляции
- MQTT-MQTT-репитер в помещении или в одном месте с другим устройством, когда соседний репитер уже выполняет работу по RF-ретрансляции
- узел, который вы хотите использовать для передачи данных в MQTT, веб-статуса и диагностики, не добавляя при этом лишний трафик ретрансляции или advert-пакеты
Когда режим Ghost Node включён, он:
@@ -256,7 +256,7 @@
- Брокеры MQTT: переключатель **MeshCoreTel RU** и переключатель **Custom broker**, каждый включает или отключает свой брокер. Одновременно можно включить не более двух брокеров.
- поля custom MQTT `host:port`, транспорт TCP/WSS, имя пользователя и пароль.
`UNSET - To be configured` — значение по умолчанию для новых установок обсервера, пока не появится реальное сохранённое значение.
`UNSET - To be configured` — значение по умолчанию для новых установок MQTT-репитера, пока не появится реальное сохранённое значение.
Примечания:
@@ -356,7 +356,7 @@
Если репитер уже подключён к Wi-Fi, OTA использует существующий адрес в локальной сети. Если Wi-Fi не подключён, репитер запускает точку доступа `MeshCore-OTA` и возвращает вместо этого адрес OTA.
Если старый слушатель перенаправления не полностью освободил порт `80`, слушатель OTA повторяет попытки примерно до 30 секунд, после чего сдаётся.
Если более старая сборка отправляет вас на странное перенаправление после `start ota`, используйте веб-кнопку `Start OTA` для запуска обновления. Эта проблема с перенаправлением исправлена в `observer-eastmesh-v1.3.11`.
Если более старая сборка отправляет вас на странное перенаправление после `start ota`, используйте веб-кнопку `Start OTA` для запуска обновления. В актуальных сборках эта проблема с перенаправлением исправлена.
### Purge SD
+149
View File
@@ -0,0 +1,149 @@
#!/usr/bin/env bash
#
# Publish built firmware files to a Gitea release.
#
# Usage:
# posadmesh-tools/publish-gitea-release.sh <tag> <dist-dir> [release-title] [notes-file]
#
# Example:
# GITEA_TOKEN=... posadmesh-tools/publish-gitea-release.sh \
# repeater-mqtt-v2026.10.0 out "Repeater MQTT v2026.10.0" RELEASE-NOTES.md
#
# Environment:
# GITEA_TOKEN (required) personal access token with write:repository scope
# GITEA_URL (optional) instance URL, default https://git.meshinfo.ru
# GITEA_REPO (optional) owner/repo, default shade/MeshCore-Posadmesh
# ASSET_GLOB (optional) only upload files matching this glob, e.g. '*_repeater_mqtt-v*'
# (handy when out/ holds several tracks: uplink, espnow, bridge)
#
# The script is idempotent: if the release already exists it reuses it and skips
# assets whose names are already attached.
#
# Requires: curl, awk. A working python (python3, python, or the project .venv)
# is used only to encode the release notes as JSON; without it the release is
# created with an empty body.
set -euo pipefail
tag="${1:-}"
dist="${2:-}"
title="${3:-$tag}"
notes_file="${4:-}"
if [[ -z "$tag" || -z "$dist" ]]; then
echo "usage: $0 <tag> <dist-dir> [release-title] [notes-file]" >&2
exit 1
fi
if [[ ! -d "$dist" ]]; then
echo "error: distribution directory not found: $dist" >&2
exit 1
fi
if [[ -z "${GITEA_TOKEN:-}" ]]; then
echo "error: GITEA_TOKEN is not set (needs write access to the repository)" >&2
exit 1
fi
command -v curl >/dev/null 2>&1 || { echo "error: curl is required" >&2; exit 1; }
base="${GITEA_URL:-https://git.meshinfo.ru}"
repo="${GITEA_REPO:-shade/MeshCore-Posadmesh}"
api="$base/api/v1/repos/$repo"
auth="Authorization: token $GITEA_TOKEN"
work="$(mktemp -d)"
trap 'rm -rf "$work"' EXIT
# pick a python that actually runs (on Windows "python3" may be a Store stub)
PY=""
for candidate in .venv/Scripts/python.exe .venv/bin/python python3 python; do
if command -v "$candidate" >/dev/null 2>&1 || [[ -x "$candidate" ]]; then
if "$candidate" -c 'import json, sys' >/dev/null 2>&1; then
PY="$candidate"
break
fi
fi
done
echo "repository : $repo"
echo "tag : $tag"
echo "files from : $dist"
pattern="${ASSET_GLOB:-*}"
if [[ "$pattern" != "*" ]]; then
echo "asset glob : $pattern"
fi
assets=()
while IFS= read -r -d '' f; do
assets+=("$f")
done < <(find "$dist" -maxdepth 1 -type f -name "$pattern" \( -name '*.bin' -o -name '*.uf2' -o -name '*.zip' -o -name '*.elf' \) -print0 | sort -z)
if [[ ${#assets[@]} -eq 0 ]]; then
echo "error: no matching .bin/.uf2/.zip/.elf files found in $dist (glob: $pattern)" >&2
exit 1
fi
echo "assets : ${#assets[@]}"
body_json='""'
if [[ -n "$notes_file" && -f "$notes_file" ]]; then
if [[ -n "$PY" ]]; then
body_json="$("$PY" -c 'import json,sys; print(json.dumps(open(sys.argv[1], encoding="utf-8").read()))' "$notes_file")"
else
echo "warning: no usable python found, release notes will be empty" >&2
fi
fi
payload_file="$work/release.json"
printf '{"tag_name":"%s","name":"%s","body":%s,"draft":false,"prerelease":false}' \
"$tag" "$title" "$body_json" > "$payload_file"
code=$(curl -sS -o "$work/release.json" -w '%{http_code}' \
-X POST "$api/releases" -H "$auth" -H 'Content-Type: application/json' \
--data-binary "@$payload_file" || true)
release_id=""
if [[ "$code" == "201" ]]; then
release_id=$(grep -o '"id":[0-9]*' "$work/release.json" | head -n 1 | cut -d: -f2)
echo "created release id=$release_id"
else
echo "release create returned HTTP $code, looking up the existing release"
release_id=$(curl -sS "$api/releases/tags/$tag" -H "$auth" \
| grep -o '"id":[0-9]*' | head -n 1 | cut -d: -f2 || true)
if [[ -z "$release_id" ]]; then
echo "error: cannot create or find a release for tag $tag" >&2
head -c 400 "$work/release.json" >&2 || true
echo >&2
exit 1
fi
echo "reusing release id=$release_id"
fi
existing=$(curl -sS "$api/releases/$release_id/assets" -H "$auth" \
| grep -o '"name":"[^"]*"' | cut -d'"' -f4 || true)
uploaded=0
skipped=0
for f in "${assets[@]}"; do
name="$(basename "$f")"
if grep -qxF "$name" <<<"$existing"; then
echo "skip $name (already attached)"
skipped=$((skipped + 1))
continue
fi
code=$(curl -sS -o "$work/asset.json" -w '%{http_code}' \
-X POST "$api/releases/$release_id/assets?name=$name" \
-H "$auth" -F "attachment=@$f" || true)
if [[ "$code" == "201" ]]; then
echo "upload $name"
uploaded=$((uploaded + 1))
else
echo "error: upload of $name failed with HTTP $code" >&2
head -c 400 "$work/asset.json" >&2 || true
echo >&2
exit 1
fi
done
echo "done: uploaded=$uploaded skipped=$skipped"
echo "release: $base/$repo/releases/tag/$tag"
+1 -1
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# Web panel heap-health check for *_repeater_observer nodes.
# Web panel heap-health check for *_repeater_mqtt nodes.
#
# Reads memory / web / mqtt / wifi status over the HTTPS API, then (optionally)
# hammers the panel the way a browser page-load does and re-reads memory to see
+58 -41
View File
@@ -1,9 +1,12 @@
schema_version: 1
tracks:
# снят с выпуска в 2026.10.0: линия companion-прошивок удалена из проекта,
# трек остаётся в реестре для исторических записей релизов
- companion-wifi
- repeater-bridge-espnow
- observer-posadmesh
- observer-posadmesh-bridge-espnow
- repeater-mqtt
- repeater-mqtt-espnow
- repeater-mqtt-bridge
generated_from: "Adjacent git tag comparisons plus non-merge commit subjects."
releases:
@@ -186,7 +189,7 @@ releases:
text: "Included upstream board, radio, display, and platform fixes from MeshCore dev."
breaking_changes: []
- track: observer-posadmesh
- track: repeater-mqtt
version: "2026.5.1"
tag: "observer-eastmesh-v2026.5.1"
date: "2026-05-23"
@@ -198,14 +201,14 @@ releases:
text: "Renamed the EastMesh MQTT release tag format from `repeater-mqtt-eastmesh-v*` to `observer-eastmesh-v*`."
- type: changed
area: build
text: "Renamed `*_repeater_mqtt` PlatformIO environments and release artifact prefixes to `*_repeater_observer`."
text: "Renamed `*_repeater_mqtt` PlatformIO environments and release artifact prefixes to `*_repeater_mqtt`."
- type: docs
area: docs
text: "Updated EastMesh release, local build, board, web panel, API, and CLI documentation to use Observer naming."
breaking_changes:
- "The EastMesh MQTT release tag format and PlatformIO target suffix changed to Observer naming."
- track: observer-posadmesh
- track: repeater-mqtt
version: "2026.6.0"
tag: "observer-eastmesh-v2026.6.0"
date: "2026-06-03"
@@ -232,7 +235,7 @@ releases:
text: "Merged upstream MeshCore dev updates including sensor handling, RAK4631 BME680/BSEC support, documentation refreshes, and board/platform fixes."
breaking_changes: []
- track: observer-posadmesh
- track: repeater-mqtt
version: "2026.6.1"
tag: "observer-eastmesh-v2026.6.1"
date: "2026-06-07"
@@ -250,7 +253,7 @@ releases:
text: "Updated EastMesh custom CLI docs for the new `flood.max.advert` command."
breaking_changes: []
- track: observer-posadmesh
- track: repeater-mqtt
version: "2026.6.2"
tag: "observer-eastmesh-v2026.6.2"
date: "2026-06-07"
@@ -286,7 +289,7 @@ releases:
text: "Hardened OTA startup by binding before reporting success and falling back to alternate ports when port 80 is still being released."
breaking_changes: []
- track: observer-posadmesh
- track: repeater-mqtt
version: "2026.6.3"
tag: "observer-eastmesh-v2026.6.3"
date: "2026-06-09"
@@ -310,7 +313,7 @@ releases:
text: "Documented custom MQTT TCP/WSS configuration in the web panel and custom CLI guides."
breaking_changes: []
- track: observer-posadmesh
- track: repeater-mqtt
version: "2026.6.4"
tag: "observer-eastmesh-v2026.6.4"
date: "2026-06-23"
@@ -339,7 +342,7 @@ releases:
- "`get mqtt.status` output changed from per-broker fields to `p:`/`s:` broker slots; anything parsing the previous format must be updated."
- "Saved LetsMesh EU/US broker selections are cleared once on upgrade; re-enable a broker such as MeshMapper if a second uplink is required."
- track: observer-posadmesh
- track: repeater-mqtt
version: "2026.6.5"
tag: "observer-eastmesh-v2026.6.5"
date: "2026-06-26"
@@ -363,7 +366,7 @@ releases:
text: "Documented the Waev broker in the README and custom CLI guides."
breaking_changes: []
- track: observer-posadmesh
- track: repeater-mqtt
version: "2026.6.6"
tag: "observer-eastmesh-v2026.6.6"
date: "2026-06-27"
@@ -375,7 +378,7 @@ releases:
text: "Added `packets_sent` and `packets_received` counters to the MQTT `status` payload `stats` object, reporting cumulative radio TX/RX packet totals to align with the Waev/MeshMapper status schema."
breaking_changes: []
- track: observer-posadmesh
- track: repeater-mqtt
version: "2026.7.0"
tag: "observer-eastmesh-v2026.7.0"
date: "2026-07-19"
@@ -397,7 +400,7 @@ releases:
breaking_changes:
- "The saved settings layout changed; devices upgrading from 2026.6.6 or earlier may need EastMesh-specific settings (such as fan control and bridge peer) and recently added radio settings reconfigured."
- track: observer-posadmesh
- track: repeater-mqtt
version: "2026.8.0"
tag: "observer-eastmesh-v2026.8.0"
date: "2026-08-09"
@@ -416,7 +419,7 @@ releases:
breaking_changes:
- "Saved settings move to the new `prefs.json` format on first boot; downgrading to earlier firmware afterwards reverts the device to the old (pre-migration) settings file."
- track: observer-posadmesh
- track: repeater-mqtt
version: "2026.8.1"
tag: "observer-eastmesh-v2026.8.1"
date: "2026-08-09"
@@ -431,7 +434,7 @@ releases:
text: "Made a failed or absent SH1106 display boot the node headless instead of crash-looping: display operations are now safe no-ops when the boot-time initialisation did not succeed."
breaking_changes: []
- track: observer-posadmesh
- track: repeater-mqtt
version: "2026.8.2"
tag: "observer-eastmesh-v2026.8.2"
date: "2026-08-15"
@@ -458,7 +461,7 @@ releases:
text: "Adopted upstream's SH1106 display address fallback (0x3C/0x3D) so board revisions with the other SA0 strap setting still get a working display, while keeping the EastMesh T-Beam S3 Supreme bring-up order and headless fallback."
breaking_changes: []
- track: observer-posadmesh
- track: repeater-mqtt
version: "2026.8.3"
tag: "observer-eastmesh-v2026.8.3"
date: "2026-08-23"
@@ -485,19 +488,25 @@ releases:
text: "Added `eastmesh-tools/web-heap-check.sh` to read heap and service health over the HTTPS API and optionally stress the web panel with browser-style bursts."
breaking_changes: []
- track: observer-posadmesh
- track: repeater-mqtt
version: "2026.10.0"
tag: "observer-posadmesh-v2026.10.0"
tag: "repeater-mqtt-v2026.10.0"
date: "2026-10-07"
previous_version: "2026.8.3"
summary: "Полный рефакторинг под PosadMesh: переименованы папки, скрипты, треки и теги, документация переведена на русский, удалены брокеры waev/meshmapper/letsmesh, репозиторий переехал на git.meshinfo.ru с локальной сборкой релизов, база обновлена до upstream MeshCore v1.17.1."
summary: "Полный рефакторинг под PosadMesh: переименованы папки, скрипты, цели сборки и треки (observer → mqtt), документация переведена на русский, удалены брокеры waev/meshmapper/letsmesh и линия companion-прошивок, репозиторий переехал на git.meshinfo.ru с локальной сборкой релизов, база обновлена до upstream MeshCore v1.17.1."
changes:
- type: changed
area: upstream
text: "База прошивки обновлена до upstream MeshCore v1.17.1."
- type: changed
area: release
text: "Проект целиком переименован в PosadMesh: папки и скрипты (`eastmesh-docs` → `posadmesh-docs`, `eastmesh-tools` → `posadmesh-tools`, `eastmesh-build.sh` → `posadmesh-build.sh`), треки релизов (`observer-eastmesh*` → `observer-posadmesh*`), форматы тегов (`observer-posadmesh-v*`, `observer-posadmesh-bridge-espnow-v*`, `observer-posadmesh-bridge-mqtt-v*`), суффикс версии сборки (`-posadmesh-`) и переменная версии релиза (`EASTMESH_VERSION` → `POSADMESH_VERSION`)."
text: "Проект переименован в PosadMesh и переведён на имена MQTT: папки и скрипты (`eastmesh-docs` → `posadmesh-docs`, `eastmesh-tools` → `posadmesh-tools`, `eastmesh-build.sh` → `posadmesh-build.sh`), цели сборки (`*_repeater_observer*` → `*_repeater_mqtt*`), треки релизов (`observer-eastmesh*` → `repeater-mqtt*`), форматы тегов (`repeater-mqtt-v*`, `repeater-mqtt-espnow-v*`, `repeater-mqtt-bridge-v*`), суффикс версии сборки (`-posadmesh-`) и переменная версии релиза (`EASTMESH_VERSION` → `POSADMESH_VERSION`)."
- type: changed
area: release
text: "Удалена линия companion-прошивок: трек `companion-wifi` и команды сборки companion убраны из проекта, остаются только MQTT-сборки. Цели и код companion в upstream-оверлеях не изменялись."
- type: fixed
area: build
text: "Сборка по группам снова работает: команды искали окружения по устаревшим суффиксам `_repeater_observer*`, а на Windows имена окружений приходили с символом `\\r`, из-за чего не находилось ни одной цели. Теперь используются реальные суффиксы `_repeater_mqtt*`, вывод PlatformIO очищается от `\r`, добавлены команды `build-mqtt-firmwares` (все MQTT-треки) и `list-mqtt`."
- type: docs
area: docs
text: "Документация переведена на русский язык: `posadmesh-docs/*.md`, `README.md`, `RELEASE.md` и `AGENTS.md`. Команды, их вывод, код, пути и идентификаторы оставлены без перевода."
@@ -520,11 +529,13 @@ releases:
area: web
text: "Исправлен разбор дерева регионов: завершающая буква `F` в имени региона срезалась, из-за чего `region allowf`, `region denyf` и `region remove` не работали для таких имён."
breaking_changes:
- "Формат тегов меняется на `observer-posadmesh-*`: прежние теги `observer-eastmesh-*` больше ничего не запускают и остаются только как история."
- "Формат тегов меняется на `repeater-mqtt-*`: прежние теги `observer-eastmesh-*` больше ничего не запускают и остаются только как история."
- "`EASTMESH_VERSION` переименована в `POSADMESH_VERSION`: локальные скрипты со старым именем соберут версию без суффикса PosadMesh."
- "Команды `mqtt.meshmapper`, `mqtt.waev` и `mqtt.letsmesh-*` удалены; сохранённые выборы этих брокеров сбрасываются при обновлении."
- "Документация больше не публикуется отдельным сайтом и читается в веб-интерфейсе git.meshinfo.ru."
- track: observer-posadmesh-bridge-espnow
- "Линия companion-прошивок удалена: трек `companion-wifi` и companion-сборки больше не выпускаются."
- track: repeater-mqtt-espnow
version: "2026.5.1"
tag: "observer-eastmesh-bridge-espnow-v2026.5.1"
date: "2026-05-23"
@@ -536,14 +547,14 @@ releases:
text: "Renamed the EastMesh MQTT bridge release tag format from `repeater-mqtt-bridge-eastmesh-v*` to `observer-eastmesh-bridge-espnow-v*`."
- type: changed
area: build
text: "Renamed `*_repeater_mqtt_bridge` PlatformIO environments and release artifact prefixes to `*_repeater_observer_espnow`."
text: "Renamed `*_repeater_mqtt_bridge` PlatformIO environments and release artifact prefixes to `*_repeater_mqtt_espnow`."
- type: docs
area: docs
text: "Updated EastMesh release, local build, board, and CLI documentation to use Observer ESP-NOW naming."
breaking_changes:
- "The EastMesh MQTT bridge release tag format and PlatformIO target suffix changed to Observer ESP-NOW naming."
- track: observer-posadmesh-bridge-espnow
- track: repeater-mqtt-espnow
version: "2026.6.0"
tag: "observer-eastmesh-bridge-espnow-v2026.6.0"
date: "2026-06-03"
@@ -570,7 +581,7 @@ releases:
text: "Merged upstream MeshCore dev updates including sensor handling, RAK4631 BME680/BSEC support, documentation refreshes, and board/platform fixes."
breaking_changes: []
- track: observer-posadmesh-bridge-espnow
- track: repeater-mqtt-espnow
version: "2026.6.1"
tag: "observer-eastmesh-bridge-espnow-v2026.6.1"
date: "2026-06-07"
@@ -588,7 +599,7 @@ releases:
text: "Updated EastMesh custom CLI docs for the new `flood.max.advert` command."
breaking_changes: []
- track: observer-posadmesh-bridge-espnow
- track: repeater-mqtt-espnow
version: "2026.6.2"
tag: "observer-eastmesh-bridge-espnow-v2026.6.2"
date: "2026-06-07"
@@ -624,7 +635,7 @@ releases:
text: "Hardened OTA startup by binding before reporting success and falling back to alternate ports when port 80 is still being released."
breaking_changes: []
- track: observer-posadmesh-bridge-espnow
- track: repeater-mqtt-espnow
version: "2026.6.3"
tag: "observer-eastmesh-bridge-espnow-v2026.6.3"
date: "2026-06-09"
@@ -648,7 +659,7 @@ releases:
text: "Documented custom MQTT TCP/WSS configuration in the web panel and custom CLI guides."
breaking_changes: []
- track: observer-posadmesh-bridge-espnow
- track: repeater-mqtt-espnow
version: "2026.6.4"
tag: "observer-eastmesh-bridge-espnow-v2026.6.4"
date: "2026-06-23"
@@ -677,7 +688,7 @@ releases:
- "`get mqtt.status` output changed from per-broker fields to `p:`/`s:` broker slots; anything parsing the previous format must be updated."
- "Saved LetsMesh EU/US broker selections are cleared once on upgrade; re-enable a broker such as MeshMapper if a second uplink is required."
- track: observer-posadmesh-bridge-espnow
- track: repeater-mqtt-espnow
version: "2026.6.5"
tag: "observer-eastmesh-bridge-espnow-v2026.6.5"
date: "2026-06-26"
@@ -701,7 +712,7 @@ releases:
text: "Documented the Waev broker in the README and custom CLI guides."
breaking_changes: []
- track: observer-posadmesh-bridge-espnow
- track: repeater-mqtt-espnow
version: "2026.6.6"
tag: "observer-eastmesh-bridge-espnow-v2026.6.6"
date: "2026-06-27"
@@ -713,7 +724,7 @@ releases:
text: "Added `packets_sent` and `packets_received` counters to the MQTT `status` payload `stats` object, reporting cumulative radio TX/RX packet totals to align with the Waev/MeshMapper status schema."
breaking_changes: []
- track: observer-posadmesh-bridge-espnow
- track: repeater-mqtt-espnow
version: "2026.7.0"
tag: "observer-eastmesh-bridge-espnow-v2026.7.0"
date: "2026-07-19"
@@ -735,7 +746,7 @@ releases:
breaking_changes:
- "The saved settings layout changed; devices upgrading from 2026.6.6 or earlier may need EastMesh-specific settings (such as fan control and bridge peer) and recently added radio settings reconfigured."
- track: observer-posadmesh-bridge-espnow
- track: repeater-mqtt-espnow
version: "2026.8.0"
tag: "observer-eastmesh-bridge-espnow-v2026.8.0"
date: "2026-08-09"
@@ -754,7 +765,7 @@ releases:
breaking_changes:
- "Saved settings move to the new `prefs.json` format on first boot; downgrading to earlier firmware afterwards reverts the device to the old (pre-migration) settings file."
- track: observer-posadmesh-bridge-espnow
- track: repeater-mqtt-espnow
version: "2026.8.1"
tag: "observer-eastmesh-bridge-espnow-v2026.8.1"
date: "2026-08-09"
@@ -769,7 +780,7 @@ releases:
text: "Made a failed or absent SH1106 display boot the node headless instead of crash-looping: display operations are now safe no-ops when the boot-time initialisation did not succeed."
breaking_changes: []
- track: observer-posadmesh-bridge-espnow
- track: repeater-mqtt-espnow
version: "2026.8.2"
tag: "observer-eastmesh-bridge-espnow-v2026.8.2"
date: "2026-08-15"
@@ -795,7 +806,7 @@ releases:
area: board
text: "Adopted upstream's SH1106 display address fallback (0x3C/0x3D) so board revisions with the other SA0 strap setting still get a working display, while keeping the EastMesh T-Beam S3 Supreme bring-up order and headless fallback."
breaking_changes: []
- track: observer-posadmesh-bridge-espnow
- track: repeater-mqtt-espnow
version: "2026.8.3"
tag: "observer-eastmesh-bridge-espnow-v2026.8.3"
date: "2026-08-23"
@@ -822,19 +833,25 @@ releases:
text: "Added `eastmesh-tools/web-heap-check.sh` to read heap and service health over the HTTPS API and optionally stress the web panel with browser-style bursts."
breaking_changes: []
- track: observer-posadmesh-bridge-espnow
- track: repeater-mqtt-espnow
version: "2026.10.0"
tag: "observer-posadmesh-bridge-espnow-v2026.10.0"
tag: "repeater-mqtt-espnow-v2026.10.0"
date: "2026-10-07"
previous_version: "2026.8.3"
summary: "Полный рефакторинг под PosadMesh в сборках обсервера с ESP-NOW мостом: переименованы папки, скрипты, треки и теги, документация переведена на русский, удалены брокеры waev/meshmapper/letsmesh, репозиторий переехал на git.meshinfo.ru с локальной сборкой релизов, база обновлена до upstream MeshCore v1.17.1."
summary: "Полный рефакторинг под PosadMesh в сборках MQTT-репитера с ESP-NOW мостом: переименованы папки, скрипты, цели сборки и треки (observer → mqtt), документация переведена на русский, удалены брокеры waev/meshmapper/letsmesh и линия companion-прошивок, репозиторий переехал на git.meshinfo.ru с локальной сборкой релизов, база обновлена до upstream MeshCore v1.17.1."
changes:
- type: changed
area: upstream
text: "База прошивки обновлена до upstream MeshCore v1.17.1."
- type: changed
area: release
text: "Проект целиком переименован в PosadMesh: папки и скрипты (`eastmesh-docs` → `posadmesh-docs`, `eastmesh-tools` → `posadmesh-tools`, `eastmesh-build.sh` → `posadmesh-build.sh`), треки релизов (`observer-eastmesh*` → `observer-posadmesh*`), форматы тегов (`observer-posadmesh-v*`, `observer-posadmesh-bridge-espnow-v*`, `observer-posadmesh-bridge-mqtt-v*`), суффикс версии сборки (`-posadmesh-`) и переменная версии релиза (`EASTMESH_VERSION` → `POSADMESH_VERSION`)."
text: "Проект переименован в PosadMesh и переведён на имена MQTT: папки и скрипты (`eastmesh-docs` → `posadmesh-docs`, `eastmesh-tools` → `posadmesh-tools`, `eastmesh-build.sh` → `posadmesh-build.sh`), цели сборки (`*_repeater_observer*` → `*_repeater_mqtt*`), треки релизов (`observer-eastmesh*` → `repeater-mqtt*`), форматы тегов (`repeater-mqtt-v*`, `repeater-mqtt-espnow-v*`, `repeater-mqtt-bridge-v*`), суффикс версии сборки (`-posadmesh-`) и переменная версии релиза (`EASTMESH_VERSION` → `POSADMESH_VERSION`)."
- type: changed
area: release
text: "Удалена линия companion-прошивок: трек `companion-wifi` и команды сборки companion убраны из проекта, остаются только MQTT-сборки. Цели и код companion в upstream-оверлеях не изменялись."
- type: fixed
area: build
text: "Сборка по группам снова работает: команды искали окружения по устаревшим суффиксам `_repeater_observer*`, а на Windows имена окружений приходили с символом `\\r`, из-за чего не находилось ни одной цели. Теперь используются реальные суффиксы `_repeater_mqtt*`, вывод PlatformIO очищается от `\r`, добавлены команды `build-mqtt-firmwares` (все MQTT-треки) и `list-mqtt`."
- type: docs
area: docs
text: "Документация переведена на русский язык: `posadmesh-docs/*.md`, `README.md`, `RELEASE.md` и `AGENTS.md`. Команды, их вывод, код, пути и идентификаторы оставлены без перевода."
@@ -857,8 +874,8 @@ releases:
area: web
text: "Исправлен разбор дерева регионов: завершающая буква `F` в имени региона срезалась, из-за чего `region allowf`, `region denyf` и `region remove` не работали для таких имён."
breaking_changes:
- "Формат тегов меняется на `observer-posadmesh-*`: прежние теги `observer-eastmesh-*` больше ничего не запускают и остаются только как история."
- "Формат тегов меняется на `repeater-mqtt-*`: прежние теги `observer-eastmesh-*` больше ничего не запускают и остаются только как история."
- "`EASTMESH_VERSION` переименована в `POSADMESH_VERSION`: локальные скрипты со старым именем соберут версию без суффикса PosadMesh."
- "Команды `mqtt.meshmapper`, `mqtt.waev` и `mqtt.letsmesh-*` удалены; сохранённые выборы этих брокеров сбрасываются при обновлении."
- "Документация больше не публикуется отдельным сайтом и читается в веб-интерфейсе git.meshinfo.ru."
- "Линия companion-прошивок удалена: трек `companion-wifi` и companion-сборки больше не выпускаются."