chore: rename EastMesh observer release tracks

This commit is contained in:
Jared Dohrman
2026-05-23 20:26:10 +10:00
parent 9415dc4107
commit 52813b539f
21 changed files with 413 additions and 959 deletions
@@ -32,7 +32,7 @@ body:
attributes:
label: Firmware Target
description: Firmware environment or binary name, if known.
placeholder: e.g. Heltec_v3_repeater_mqtt
placeholder: e.g. Heltec_v3_repeater_observer
validations:
required: false
@@ -41,19 +41,19 @@ runs:
echo "$GITHUB_WORKSPACE/.venv/bin" >> "$GITHUB_PATH"
# Active release tag formats:
# companion-wifi-v1.2.3
# repeater-bridge-espnow-v1.2.3
# repeater-mqtt-bridge-eastmesh-v1.0.1
# repeater-mqtt-eastmesh-v1.0.1
# with OFFICIAL_MESHCORE_VERSION=v1.2.3 configured as a GitHub variable.
# companion-wifi-v1.15.0
# repeater-bridge-espnow-v1.15.0
# observer-bridge-espnow-eastmesh-v2026.5.1
# observer-eastmesh-v2026.5.1
# with OFFICIAL_MESHCORE_VERSION=v1.15.0 configured as a GitHub variable.
#
# This exports:
# companion-wifi-v1.2.3 -> FIRMWARE_VERSION=v1.2.3, RELEASE_VERSION=v1.2.3
# repeater-bridge-espnow-v1.2.3 -> FIRMWARE_VERSION=v1.2.3, RELEASE_VERSION=v1.2.3
# repeater-mqtt-bridge-eastmesh-v1.0.1 -> FIRMWARE_VERSION=v1.2.3, EASTMESH_VERSION=v1.0.1,
# RELEASE_VERSION=v1.2.3-eastmesh-v1.0.1
# repeater-mqtt-eastmesh-v1.0.1 -> FIRMWARE_VERSION=v1.2.3, EASTMESH_VERSION=v1.0.1,
# RELEASE_VERSION=v1.2.3-eastmesh-v1.0.1
# 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-bridge-espnow-eastmesh-v2026.5.1 -> FIRMWARE_VERSION=v1.15.0, EASTMESH_VERSION=v2026.5.1,
# RELEASE_VERSION=v1.15.0-eastmesh-v2026.5.1
# observer-eastmesh-v2026.5.1 -> FIRMWARE_VERSION=v1.15.0, EASTMESH_VERSION=v2026.5.1,
# RELEASE_VERSION=v1.15.0-eastmesh-v2026.5.1
- name: Extract Version Info
shell: bash
run: |
@@ -73,13 +73,13 @@ runs:
EASTMESH_VERSION=""
FIRMWARE_VERSION="$STATIC_OFFICIAL_VERSION"
if [[ "$GIT_TAG_NAME" =~ ^repeater-mqtt-eastmesh-(v[[:alnum:]._-]+)$ ]]; then
if [[ "$GIT_TAG_NAME" =~ ^observer-eastmesh-(v[[:alnum:]._-]+)$ ]]; then
if [[ -z "$STATIC_OFFICIAL_VERSION" ]]; then
echo "OFFICIAL_MESHCORE_VERSION must be set for EastMesh release tags" >&2
exit 1
fi
EASTMESH_VERSION="${BASH_REMATCH[1]}"
elif [[ "$GIT_TAG_NAME" =~ ^repeater-mqtt-bridge-eastmesh-(v[[:alnum:]._-]+)$ ]]; then
elif [[ "$GIT_TAG_NAME" =~ ^observer-bridge-espnow-eastmesh-(v[[:alnum:]._-]+)$ ]]; then
if [[ -z "$STATIC_OFFICIAL_VERSION" ]]; then
echo "OFFICIAL_MESHCORE_VERSION must be set for EastMesh release tags" >&2
exit 1
@@ -1,4 +1,4 @@
name: EastMesh Build Repeater MQTT Bridge Firmwares
name: EastMesh Build Observer ESP-NOW Firmwares
permissions:
contents: write
@@ -7,17 +7,15 @@ on:
workflow_dispatch:
push:
tags:
- "repeater-mqtt-bridge-eastmesh-*"
- "observer-bridge-espnow-eastmesh-v*"
jobs:
build:
runs-on: ubuntu-latest
env:
OFFICIAL_MESHCORE_VERSION: ${{ vars.OFFICIAL_MESHCORE_VERSION }}
PLATFORMIO_BUILD_FLAGS: -UMQTT_DEBUG
steps:
- name: Clone Repo
uses: actions/checkout@v6
@@ -25,19 +23,19 @@ jobs:
uses: ./.github/actions/setup-build-environment
- name: Build Firmwares
run: /usr/bin/env bash eastmesh-build.sh build-repeater-mqtt-bridge-firmwares
run: /usr/bin/env bash eastmesh-build.sh build-observer-espnow-firmwares
- name: Upload Workflow Artifacts
uses: actions/upload-artifact@v7
with:
name: repeater-mqtt-bridge-firmwares
name: observer-espnow-firmwares
path: out
- name: Create Release
uses: softprops/action-gh-release@v3
if: startsWith(github.ref, 'refs/tags/')
with:
name: Repeater MQTT Bridge Firmware ${{ env.RELEASE_VERSION }}
name: Observer ESP-NOW Bridge Firmware ${{ env.RELEASE_VERSION }}
body: ""
draft: true
files: out/*
@@ -1,4 +1,4 @@
name: EastMesh Build Repeater MQTT Firmwares
name: EastMesh Build Observer Firmwares
permissions:
contents: write
@@ -7,17 +7,15 @@ on:
workflow_dispatch:
push:
tags:
- "repeater-mqtt-eastmesh-*"
- "observer-eastmesh-v*"
jobs:
build:
runs-on: ubuntu-latest
env:
OFFICIAL_MESHCORE_VERSION: ${{ vars.OFFICIAL_MESHCORE_VERSION }}
PLATFORMIO_BUILD_FLAGS: -UMQTT_DEBUG
steps:
- name: Clone Repo
uses: actions/checkout@v6
@@ -25,19 +23,19 @@ jobs:
uses: ./.github/actions/setup-build-environment
- name: Build Firmwares
run: /usr/bin/env bash eastmesh-build.sh build-repeater-mqtt-firmwares
run: /usr/bin/env bash eastmesh-build.sh build-observer-firmwares
- name: Upload Workflow Artifacts
uses: actions/upload-artifact@v7
with:
name: repeater-mqtt-firmwares
name: observer-firmwares
path: out
- name: Create Release
uses: softprops/action-gh-release@v3
if: startsWith(github.ref, 'refs/tags/')
with:
name: Repeater MQTT Firmware ${{ env.RELEASE_VERSION }}
name: Observer MQTT Firmware ${{ env.RELEASE_VERSION }}
body: ""
draft: true
files: out/*
@@ -22,11 +22,11 @@ jobs:
environment:
# ESP32-S3 / core EastMesh targets
- heltec_v4_companion_radio_wifi
- heltec_v4_repeater_mqtt
- heltec_v4_repeater_observer
- LilyGo_TBeam_1W_companion_radio_wifi
- LilyGo_TBeam_1W_repeater_mqtt
- LilyGo_TBeam_1W_repeater_observer
- T_Beam_S3_Supreme_SX1262_companion_radio_wifi
- T_Beam_S3_Supreme_SX1262_repeater_mqtt
- T_Beam_S3_Supreme_SX1262_repeater_observer
steps:
- name: Clone Repo
@@ -21,12 +21,12 @@ jobs:
matrix:
environment:
# ESP32-S3 / core EastMesh targets
- heltec_v4_repeater_mqtt
- LilyGo_TBeam_1W_repeater_mqtt
- T_Beam_S3_Supreme_SX1262_repeater_mqtt
- heltec_v4_repeater_observer
- LilyGo_TBeam_1W_repeater_observer
- T_Beam_S3_Supreme_SX1262_repeater_observer
# ESP32-C6
- LilyGo_Tlora_C6_repeater_mqtt
- Xiao_C6_repeater_mqtt
- LilyGo_Tlora_C6_repeater_observer
- Xiao_C6_repeater_observer
steps:
- name: Clone Repo
+19 -19
View File
@@ -7,7 +7,7 @@ EastMesh layer on top of upstream MeshCore.
**Default:** preserve upstream behavior.
Only modify code for clearly scoped EastMesh features:
- `*_repeater_mqtt`
- `*_repeater_observer`
- `*_companion_radio_wifi`
- MQTT uplink/broker
- repeater web panel
@@ -87,8 +87,8 @@ bash eastmesh-build.sh list
Build a single target:
```bash
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_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
```
@@ -96,17 +96,17 @@ uv run pio run -e T_Beam_S3_Supreme_SX1262_companion_radio_wifi
Build with release-style metadata:
```bash
export FIRMWARE_VERSION=v1.14.1
export EASTMESH_VERSION=v1.0.1
bash eastmesh-build.sh build-firmware heltec_v4_repeater_mqtt
bash eastmesh-build.sh build-firmware T_Beam_S3_Supreme_SX1262_repeater_mqtt
export FIRMWARE_VERSION=v1.15.0
export EASTMESH_VERSION=v2026.5.1
bash eastmesh-build.sh build-firmware heltec_v4_repeater_observer
bash eastmesh-build.sh build-firmware T_Beam_S3_Supreme_SX1262_repeater_observer
```
Flash a target:
```bash
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
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
```
## Key Files
@@ -142,9 +142,9 @@ If you change any of the following, update docs in the same PR when practical:
- Flashing/release asset guidance:
- update `eastmesh-docs/releases.md`
## Repeater MQTT Notes
## Observer Notes
`*_repeater_mqtt` builds may include the local HTTPS web panel on supported ESP32 targets.
`*_repeater_observer` builds may include the local HTTPS web panel on supported ESP32 targets.
Operational guidance already reflected in docs:
@@ -160,7 +160,7 @@ Do not document companion rescue commands in repeater docs. Do not assume web-pa
Companion release/version rule:
- companion tags use the official upstream MeshCore release version only
- the current official MeshCore version is `v1.14.1`
- the current official MeshCore version is `v1.15.0`
- companion releases are only cut when `meshcore-dev/MeshCore` has made an official release
- do not invent separate EastMesh companion version numbers
@@ -169,19 +169,19 @@ Companion release/version rule:
Current tag formats:
```bash
git tag companion-wifi-v1.2.3
git tag repeater-bridge-espnow-v1.2.3
git tag repeater-mqtt-bridge-eastmesh-v1.0.1
git tag repeater-mqtt-eastmesh-v1.0.1
git tag companion-wifi-v1.15.0
git tag repeater-bridge-espnow-v1.15.0
git tag observer-bridge-espnow-eastmesh-v2026.5.1
git tag observer-eastmesh-v2026.5.1
```
Rules:
- `companion-wifi` tags use the upstream MeshCore version directly
- `repeater-bridge-espnow` tags use the upstream MeshCore version directly
- `repeater-mqtt-bridge` tags use the EastMesh release version in the tag
- `repeater-mqtt` tags use the EastMesh release version in the tag
- GitHub Actions variable `OFFICIAL_MESHCORE_VERSION` supplies the upstream base version for repeater MQTT and repeater MQTT bridge release builds
- `observer-bridge-espnow-eastmesh` tags use the EastMesh release version in the tag
- `observer-eastmesh` tags use the EastMesh release version in the tag
- GitHub Actions variable `OFFICIAL_MESHCORE_VERSION` supplies the upstream base version for Observer EastMesh and Observer ESP-NOW EastMesh release builds
- if the upstream MeshCore release version changes, update `OFFICIAL_MESHCORE_VERSION` in GitHub before cutting release tags
Typical release flow:
+21 -15
View File
@@ -6,15 +6,15 @@ MeshCore-EastMesh originates from the upstream MeshCore project:
Credits to Scott Powell / Ripple Radios and the MeshCore contributors for the original firmware and project foundation.
EastMesh is a community-driven mesh network across Eastern Australia. This repository provides tailored builds of MeshCore, including WiFi companion firmware with additional CLI tools and MQTT-enabled repeater builds that integrate with our CoreScope telemetry platform.
EastMesh is a community-driven mesh network across Eastern Australia. This repository provides tailored builds of MeshCore, including WiFi companion firmware with additional CLI tools and Observer firmware that integrates with our CoreScope telemetry platform.
CoreScope (<https://core.eastmesh.au>) offers visibility into the network, including repeater status, observers, and mapping data.
**MQTT repeater builds feed EastMesh Core telemetry and are intended for Eastern Australia repeaters only**; running them elsewhere can skew shared network data.
**Observer builds feed EastMesh Core telemetry and are intended for Eastern Australia repeaters only**; running them elsewhere can skew shared network data.
## What This Repo Adds
- `*_repeater_mqtt` firmware targets with:
- `*_repeater_observer` firmware targets with:
- native WiFi
- MQTT over WSS with JWT auth
- optional local HTTPS config panel on supported ESP32 targets
@@ -81,22 +81,22 @@ bash eastmesh-build.sh list
Build a single target:
```bash
uv run pio run -e heltec_v4_repeater_mqtt
uv run pio run -e heltec_v4_repeater_observer
uv run pio run -e heltec_v4_companion_radio_wifi
```
Build with release-style version metadata:
```bash
export FIRMWARE_VERSION=v1.14.1
export EASTMESH_VERSION=v1.0.1
bash eastmesh-build.sh build-firmware heltec_v4_repeater_mqtt
export FIRMWARE_VERSION=v1.15.0
export EASTMESH_VERSION=v2026.5.1
bash eastmesh-build.sh build-firmware heltec_v4_repeater_observer
```
Flash a target:
```bash
uv run pio run -e heltec_v4_repeater_mqtt -t upload --upload-port /dev/tty.usbmodemXXXX
uv run pio run -e heltec_v4_repeater_observer -t upload --upload-port /dev/tty.usbmodemXXXX
```
Open a serial monitor:
@@ -124,7 +124,7 @@ uv run --group docs zensical build
- [`platformio.ini`](./platformio.ini)
- root PlatformIO config and ESP32 helper scripts
- [`variants/eastmesh_mqtt/platformio.ini`](./variants/eastmesh_mqtt/platformio.ini)
- shared EastMesh MQTT repeater env definitions
- shared EastMesh observer env definitions
- [`examples/simple_repeater/MyMesh.cpp`](./examples/simple_repeater/MyMesh.cpp)
- repeater CLI wiring, MQTT command surface, and web allowlist integration
- [`src/helpers/mqtt/MQTTUplink.cpp`](./src/helpers/mqtt/MQTTUplink.cpp)
@@ -159,7 +159,7 @@ uv run --group docs zensical build
### Local Web Panel
On supported `*_repeater_mqtt` ESP32 targets, the repeater can expose a local HTTPS config panel over WiFi.
On supported `*_repeater_observer` ESP32 targets, the repeater can expose a local HTTPS config panel over WiFi.
Features include:
@@ -169,7 +169,7 @@ Features include:
- light and dark themes
- optional disable via `set web off`
Recommended use is initial setup and occasional troubleshooting. On MQTT repeater deployments, disable the panel again when finished if you want maximum MQTT heap headroom.
Recommended use is initial setup and occasional troubleshooting. On observer deployments, disable the panel again when finished if you want maximum MQTT heap headroom.
### Companion WiFi Additions
@@ -193,7 +193,9 @@ These rescue commands are only available after entering `CLI Rescue`:
## Active GitHub Workflows
- `.github/workflows/eastmesh-build-companion-wifi-firmwares.yml`
- `.github/workflows/eastmesh-build-repeater-mqtt-firmwares.yml`
- `.github/workflows/eastmesh-build-observer-firmwares.yml`
- `.github/workflows/eastmesh-build-repeater-bridge-espnow-firmwares.yml`
- `.github/workflows/eastmesh-build-observer-espnow-firmwares.yml`
- `.github/workflows/eastmesh-pr-build-check.yml`
- `.github/workflows/eastmesh-push-build-check.yml`
- `.github/workflows/eastmesh-github-pages.yml`
@@ -203,7 +205,9 @@ The upstream MeshCore workflows are retained under their original filenames to r
The current release workflows intentionally focus only on:
- `companion-wifi`
- `repeater-mqtt`
- `repeater-bridge-espnow`
- `observer-eastmesh`
- `observer-bridge-espnow-eastmesh`
## Release Tags
@@ -211,12 +215,14 @@ Current release tags are:
```bash
git tag companion-wifi-v1.14.1
git tag repeater-mqtt-eastmesh-v1.0.1
git tag repeater-bridge-espnow-v1.15.0
git tag observer-eastmesh-v2026.5.1
git tag observer-bridge-espnow-eastmesh-v2026.5.1
```
Companion WiFi uses the upstream MeshCore version in the tag.
Repeater MQTT uses:
Observer uses:
- `OFFICIAL_MESHCORE_VERSION` from GitHub Actions variables as `FIRMWARE_VERSION`
- the EastMesh tag version as `EASTMESH_VERSION`
+29 -29
View File
@@ -8,7 +8,7 @@ Set the repository Actions variable `OFFICIAL_MESHCORE_VERSION` to the current u
Example:
- `OFFICIAL_MESHCORE_VERSION=v1.2.3`
- `OFFICIAL_MESHCORE_VERSION=v1.15.0`
This value becomes the base `FIRMWARE_VERSION` used by the release workflows.
@@ -16,22 +16,22 @@ This value becomes the base `FIRMWARE_VERSION` used by the release workflows.
Push one or more of the following tag formats to trigger the matching firmware release workflow:
- `companion-wifi-v1.2.3`
- `repeater-bridge-espnow-v1.2.3`
- `repeater-mqtt-bridge-eastmesh-v1.0.1`
- `repeater-mqtt-eastmesh-v1.0.1`
- `companion-wifi-v1.15.0`
- `repeater-bridge-espnow-v1.15.0`
- `observer-bridge-espnow-eastmesh-v2026.5.1`
- `observer-eastmesh-v2026.5.1`
Use the upstream MeshCore version in `companion-wifi-v1.2.3`.
Use the upstream MeshCore version in `repeater-bridge-espnow-v1.2.3`.
Use the EastMesh release version in `repeater-mqtt-bridge-eastmesh-v1.0.1`.
Use the EastMesh release version in `repeater-mqtt-eastmesh-v1.0.1`.
Use the upstream MeshCore version in `companion-wifi-v1.15.0`.
Use the upstream MeshCore version in `repeater-bridge-espnow-v1.15.0`.
Use the EastMesh release version in `observer-bridge-espnow-eastmesh-v2026.5.1`.
Use the EastMesh release version in `observer-eastmesh-v2026.5.1`.
Each tag triggers a separate workflow:
- `companion-wifi-v*` builds companion WiFi firmware
- `repeater-bridge-espnow-v*` builds repeater ESP-NOW bridge firmware
- `repeater-mqtt-bridge-eastmesh-*` builds repeater MQTT bridge firmware
- `repeater-mqtt-eastmesh-*` builds repeater MQTT firmware
- `observer-bridge-espnow-eastmesh-v*` builds Observer ESP-NOW firmware
- `observer-eastmesh-v*` builds Observer firmware
You can push one, or more tags on the same commit, and they will all build separately.
@@ -41,21 +41,21 @@ During the GitHub Actions build:
- `companion-wifi` uses the version in the tag as `FIRMWARE_VERSION`
- `repeater-bridge-espnow` uses the version in the tag as `FIRMWARE_VERSION`
- `repeater-mqtt-bridge` uses `OFFICIAL_MESHCORE_VERSION` as `FIRMWARE_VERSION` and the EastMesh version from the tag as `EASTMESH_VERSION`
- `repeater-mqtt` uses `OFFICIAL_MESHCORE_VERSION` as `FIRMWARE_VERSION` and the EastMesh version from the tag as `EASTMESH_VERSION`
- `observer-bridge-espnow-eastmesh` uses `OFFICIAL_MESHCORE_VERSION` as `FIRMWARE_VERSION` and the EastMesh version from the tag as `EASTMESH_VERSION`
- `observer-eastmesh` uses `OFFICIAL_MESHCORE_VERSION` as `FIRMWARE_VERSION` and the EastMesh version from the tag as `EASTMESH_VERSION`
The resulting version string depends on the workflow:
- `companion-wifi`: `v1.2.3-<commit>`
- `repeater-bridge-espnow`: `v1.2.3-<commit>`
- `repeater-mqtt-bridge`: `v1.2.3-eastmesh-v1.0.1-<commit>`
- `repeater-mqtt`: `v1.2.3-eastmesh-v1.0.1-<commit>`
- `companion-wifi`: `v1.15.0-<commit>`
- `repeater-bridge-espnow`: `v1.15.0-<commit>`
- `observer-bridge-espnow-eastmesh`: `v1.15.0-eastmesh-v2026.5.1-<commit>`
- `observer-eastmesh`: `v1.15.0-eastmesh-v2026.5.1-<commit>`
Example:
- tag: `repeater-mqtt-eastmesh-v1.0.1`
- repo variable: `OFFICIAL_MESHCORE_VERSION=v1.2.3`
- resulting build version: `v1.2.3-eastmesh-v1.0.1-abcdef`
- tag: `observer-eastmesh-v2026.5.1`
- repo variable: `OFFICIAL_MESHCORE_VERSION=v1.15.0`
- resulting build version: `v1.15.0-eastmesh-v2026.5.1-abcdef`
## Typical Release Flow
@@ -73,16 +73,16 @@ If `release-notes.yml` should reflect the tagged firmware release in-repo, make
Example:
```bash
git tag companion-wifi-v1.2.3
git tag repeater-bridge-espnow-v1.2.3
git tag repeater-mqtt-bridge-eastmesh-v1.0.1
git tag repeater-mqtt-eastmesh-v1.0.1
git push origin companion-wifi-v1.2.3 repeater-bridge-espnow-v1.2.3 repeater-mqtt-bridge-eastmesh-v1.0.1 repeater-mqtt-eastmesh-v1.0.1
git tag companion-wifi-v1.15.0
git tag repeater-bridge-espnow-v1.15.0
git tag observer-bridge-espnow-eastmesh-v2026.5.1
git tag observer-eastmesh-v2026.5.1
git push origin companion-wifi-v1.15.0 repeater-bridge-espnow-v1.15.0 observer-bridge-espnow-eastmesh-v2026.5.1 observer-eastmesh-v2026.5.1
```
## Supported Tags
- `companion-wifi-v1.2.3`
- `repeater-bridge-espnow-v1.2.3`
- `repeater-mqtt-bridge-eastmesh-v1.0.1`
- `repeater-mqtt-eastmesh-v1.0.1`
- `companion-wifi-v1.15.0`
- `repeater-bridge-espnow-v1.15.0`
- `observer-bridge-espnow-eastmesh-v2026.5.1`
- `observer-eastmesh-v2026.5.1`
+14 -14
View File
@@ -35,8 +35,8 @@ Commands:
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-repeater-mqtt-firmwares: Build all repeater MQTT firmwares for all build targets.
build-repeater-mqtt-bridge-firmwares: Build all repeater MQTT 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-room-server-firmwares: Build all chat room server firmwares for all build targets.
Examples:
@@ -58,11 +58,11 @@ $ sh eastmesh-build.sh build-repeater-firmwares
Build all repeater ESP-NOW bridge firmwares
$ sh eastmesh-build.sh build-repeater-bridge-espnow-firmwares
Build all repeater MQTT firmwares
$ sh eastmesh-build.sh build-repeater-mqtt-firmwares
Build all observer firmwares
$ sh eastmesh-build.sh build-observer-firmwares
Build all repeater MQTT bridge firmwares
$ sh eastmesh-build.sh build-repeater-mqtt-bridge-firmwares
Build all observer ESP-NOW firmwares
$ sh eastmesh-build.sh build-observer-espnow-firmwares
Build all chat room server firmwares
$ sh eastmesh-build.sh build-room-server-firmwares
@@ -315,15 +315,15 @@ build_companion_wifi_firmwares() {
}
build_repeater_mqtt_firmwares() {
build_repeater_observer_firmwares() {
build_all_firmwares_by_suffix "_repeater_mqtt"
build_all_firmwares_by_suffix "_repeater_observer"
}
build_repeater_mqtt_bridge_firmwares() {
build_repeater_observer_espnow_firmwares() {
build_all_firmwares_by_suffix "_repeater_mqtt_bridge"
build_all_firmwares_by_suffix "_repeater_observer_espnow"
}
@@ -376,10 +376,10 @@ 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-repeater-mqtt-firmwares" ]]; then
build_repeater_mqtt_firmwares
elif [[ $1 == "build-repeater-mqtt-bridge-firmwares" ]]; then
build_repeater_mqtt_bridge_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-room-server-firmwares" ]]; then
build_room_server_firmwares
fi
+2 -2
View File
@@ -1,6 +1,6 @@
# Repeater Web API
This page documents the local HTTPS API exposed by EastMesh `*_repeater_mqtt` builds that support the web panel.
This page documents the local HTTPS API exposed by EastMesh `*_repeater_observer` builds that support the web panel.
It is intended for:
@@ -34,7 +34,7 @@ curl -sk https://<repeater-ip>/api/command \
The API is available only when:
- you are running a supported `*_repeater_mqtt` firmware build
- you are running a supported `*_repeater_observer` firmware build
- the repeater web panel is enabled and running
- you can reach the repeater over the local network
- you have authenticated with the repeater admin password
+11 -11
View File
@@ -16,9 +16,9 @@ For companions, think Wi-Fi-connected automation endpoint:
For MQTT/web repeaters, think Wi-Fi, broker visibility, and enough headroom for the local web panel:
- common starting points are `Heltec_v3` and `heltec_v4`
- `heltec_v4_repeater_mqtt` is a strong all-round MQTT repeater choice with GPS, PSRAM, and 16 MB flash
- `heltec_v4_repeater_observer` is a strong all-round observer choice with GPS, PSRAM, and 16 MB flash
- choose boards with more flash and PSRAM when you want MQTT plus the local web panel, stats, or more room for future features
- screens are not a major requirement because MQTT repeaters have the local web panel for setup and troubleshooting
- screens are not a major requirement because observers have the local web panel for setup and troubleshooting
- headless repeaters are often the cleanest choice when the device will live in a roof, box, or fixed install and you will configure it from the web panel, serial console, or app
For bridge repeaters, think local radio linking between nearby repeaters:
@@ -26,7 +26,7 @@ For bridge repeaters, think local radio linking between nearby repeaters:
- use bridge firmware when two local repeaters need to exchange traffic across different MeshCore radio configs, such as `Australia (Narrow)` and `Australia (Mid)`
- pure ESP-NOW bridge repeaters do not need MQTT, the EastMesh web panel, or a screen
- prioritise stable power, suitable antennas, and placement over display features
- use `repeater-mqtt-bridge` only when the same repeater also needs MQTT uplink; otherwise `repeater-bridge-espnow` keeps the role simpler
- use `observer-bridge-espnow-eastmesh` only when the same repeater also needs MQTT uplink; otherwise `repeater-bridge-espnow` keeps the role simpler
Other notes:
@@ -40,7 +40,7 @@ Other notes:
The tables below are built from the repo's PlatformIO board metadata and variant build flags.
- `Target` is the short board name used in this comparison page. Release filenames and local build commands still use the full env names such as `heltec_v4_repeater_mqtt`.
- `Target` is the short board name used in this comparison page. Release filenames and local build commands still use the full env names such as `heltec_v4_repeater_observer`.
- `MCU` shows the chip family only. Actual runtime clock can vary by env and board configuration.
- `RAM` is the MCU's built-in RAM.
- `PSRAM` is extra memory on some boards. More PSRAM usually means more headroom for UI, MQTT, and future features.
@@ -50,8 +50,8 @@ The tables below are built from the repo's PlatformIO board metadata and variant
## Track Notes
- `companion-wifi` boards are for app-connected companion devices.
- `repeater-mqtt` boards are for Wi-Fi repeaters that publish to MQTT.
- `repeater-bridge-espnow` and `repeater-mqtt-bridge` boards are for local ESP-NOW bridge use between nearby repeaters on different MeshCore radio configs.
- `observer-eastmesh` boards are for Wi-Fi repeaters that publish to MQTT.
- `repeater-bridge-espnow` and `observer-bridge-espnow-eastmesh` boards are for local ESP-NOW bridge use between nearby repeaters on different MeshCore radio configs.
Bridge firmware is not MQTT-over-WAN or VPN bridging. Use it when two local repeaters need to exchange traffic across radio configs such as `Australia (Narrow)` and `Australia (Mid)`.
@@ -105,9 +105,9 @@ If you are deciding between otherwise similar boards, these target-level setting
\* These targets use a PA or RF front-end, so effective output can be much higher than the configured `LORA_TX_POWER`.
## `repeater_mqtt` Boards
## `repeater_observer` Boards
This table includes all repeater MQTT targets currently defined in `variants/eastmesh_mqtt/platformio.ini`.
This table includes all observer targets currently defined in `variants/eastmesh_mqtt/platformio.ini`.
| Target | MCU | RAM | PSRAM | Flash | LoRa | Display | GPS | SD |
| ------------------------ | ------- | ------ | ----- | ----- | ------ | --------------- | --- | --- |
@@ -184,9 +184,9 @@ These are the Wi-Fi companion targets that rely on the companion app as the prim
## Practical Picks
- Best all-round MQTT repeater with screen and overall headroom: `heltec_v4_repeater_mqtt`, `heltec_v4_tft_repeater_mqtt`, `Station_G2_repeater_mqtt`, `LilyGo_TBeam_1W_repeater_mqtt`.
- Best MQTT repeater if you want a simple headless install: `RAK_3112_repeater_mqtt`, `Generic_E22_sx1262_repeater_mqtt`, `Meshimi_repeater_mqtt`, `Xiao_C6_repeater_mqtt`.
- Best low-power display MQTT builds: `Heltec_E213_repeater_mqtt`, `Heltec_E290_repeater_mqtt`, `Heltec_Wireless_Paper_repeater_mqtt`, `ThinkNode_M5_Repeater_mqtt`.
- Best all-round observer with screen and overall headroom: `heltec_v4_repeater_observer`, `heltec_v4_tft_repeater_observer`, `Station_G2_repeater_observer`, `LilyGo_TBeam_1W_repeater_observer`.
- Best observer if you want a simple headless install: `RAK_3112_repeater_observer`, `Generic_E22_sx1262_repeater_observer`, `Meshimi_repeater_observer`, `Xiao_C6_repeater_observer`.
- Best low-power display observer builds: `Heltec_E213_repeater_observer`, `Heltec_E290_repeater_observer`, `Heltec_Wireless_Paper_repeater_observer`, `ThinkNode_M5_Repeater_observer`.
- Best companion choices if you want the richest local UI: `heltec_v4_tft_companion_radio_wifi` and `heltec_tracker_v2_companion_radio_wifi`.
- Best companion choices if you want maximum memory headroom: `T_Beam_S3_Supreme_SX1262_companion_radio_wifi`, `Station_G2_companion_radio_wifi`, `LilyGo_TBeam_1W_companion_radio_wifi`.
- Best companion choices if you are happy with an app-first, mostly headless setup: `RAK_3112_companion_radio_wifi`, `Xiao_S3_WIO_companion_radio_wifi`, `Station_G2_companion_radio_wifi`.
+11 -11
View File
@@ -16,7 +16,7 @@ set mqtt.iata <code>
get mqtt.status
```
For MQTT repeaters with the local web panel, these are also useful:
For observers with the local web panel, these are also useful:
```text
set web on
@@ -24,11 +24,11 @@ get web.status
set web off
```
Use `set web on` while setting up or troubleshooting, then use `set web off` when a fixed MQTT repeater needs maximum memory headroom.
Use `set web on` while setting up or troubleshooting, then use `set web off` when a fixed observer needs maximum memory headroom.
## Repeater MQTT Commands
## Observer Commands
These commands are available on `*_repeater_mqtt` firmware targets.
These commands are available on `*_repeater_observer` firmware targets.
No-argument `get` commands must be entered exactly as shown.
@@ -71,7 +71,7 @@ No-argument `get` commands must be entered exactly as shown.
Notes:
- new repeater MQTT installs default `mqtt.iata` to `UNSET`
- new observer installs default `mqtt.iata` to `UNSET`
- `letsmesh-eu` and `letsmesh-us` remain off by default unless already configured in saved prefs
- if `mqtt.iata` is `UNSET`, `eastmesh-au`, `letsmesh-eu`, and `letsmesh-us` will not connect even if they are toggled on
- turning off a connected broker publishes a retained MQTT status update with `"status":"offline"` before the client disconnects
@@ -83,7 +83,7 @@ Legacy dotted aliases are also accepted:
- `mqtt.letsmesh.eu`
- `mqtt.letsmesh.us`
### Wi-Fi Settings For MQTT Repeaters
### Wi-Fi Settings For Observers
- `get wifi.status`: shows SSID, connection state, raw Wi-Fi status code, IP, channel, and signal when connected.
- `get wifi.ssid`: shows the configured Wi-Fi SSID.
@@ -92,9 +92,9 @@ Legacy dotted aliases are also accepted:
- `get wifi.powersaving`: shows the current Wi-Fi power save mode.
- `set wifi.powersaving none|min|max`: sets Wi-Fi power saving mode.
### ESP-NOW Bridge Settings For MQTT Bridge Repeaters
### ESP-NOW Bridge Settings For Observer ESP-NOW Builds
These commands are available on `*_repeater_mqtt_bridge` firmware targets.
These commands are available on `*_repeater_observer_espnow` firmware targets.
Bridge commands are for local ESP-NOW bridge use between nearby repeaters, such as linking repeaters on `Australia (Narrow)` and `Australia (Mid)`. They are not MQTT-over-WAN, VPN, or internet bridge controls.
@@ -103,9 +103,9 @@ Bridge commands are for local ESP-NOW bridge use between nearby repeaters, such
- `get bridge.secret`: shows the configured ESP-NOW bridge secret.
- `set bridge.secret <secret>`: sets the shared ESP-NOW bridge secret and restarts the bridge.
After running `set bridge.channel`, expect the bridge and web panel connection to drop briefly while the radio restarts. On current MQTT bridge test builds, this can look like the board rebooted.
After running `set bridge.channel`, expect the bridge and web panel connection to drop briefly while the radio restarts. On current observer ESP-NOW builds, this can look like the board rebooted.
For `*_repeater_mqtt_bridge` builds that are connected to Wi-Fi, the ESP-NOW bridge channel must match the active 2.4 GHz Wi-Fi channel:
For `*_repeater_observer_espnow` builds that are connected to Wi-Fi, the ESP-NOW bridge channel must match the active 2.4 GHz Wi-Fi channel:
1. Run `get wifi.status`.
2. Read the `channel:<n>` value from the connected Wi-Fi status.
@@ -145,7 +145,7 @@ OK
### Board Battery Reporting
- On repeater MQTT builds, background battery sampling used for MQTT/status history is rate-limited to about once per minute. Explicit status and telemetry requests still refresh the reading immediately.
- On observer builds, background battery sampling used for MQTT/status history is rate-limited to about once per minute. Explicit status and telemetry requests still refresh the reading immediately.
### T-Beam 1W Fan Control
+2 -2
View File
@@ -4,8 +4,8 @@ MeshCore-EastMesh keeps the upstream MeshCore firmware intact and publishes four
- `companion-wifi`: use this for Wi-Fi-connected companion devices. It stays closest to upstream MeshCore and adds the EastMesh Wi-Fi rescue/configuration commands.
- `repeater-bridge-espnow`: use this when you need a plain upstream-style repeater ESP-NOW bridge without MQTT uplink or the EastMesh web panel.
- `repeater-mqtt`: use this for a Wi-Fi repeater that should publish to an MQTT broker and, on supported ESP32 boards, offer the optional local web panel for setup and troubleshooting.
- `repeater-mqtt-bridge`: use this when one repeater needs both MQTT uplink and ESP-NOW bridge duties, including bridge channel/secret controls for keeping the bridge aligned with Wi-Fi.
- `observer-eastmesh`: use this for a Wi-Fi repeater that should publish to an MQTT broker and, on supported ESP32 boards, offer the optional local web panel for setup and troubleshooting.
- `observer-bridge-espnow-eastmesh`: use this when one repeater needs both MQTT uplink and ESP-NOW bridge duties, including bridge channel/secret controls for keeping the bridge aligned with Wi-Fi.
!!! note "Bridge tracks are local radio bridges"
+48 -48
View File
@@ -25,16 +25,16 @@ bash eastmesh-build.sh list
Plain PlatformIO build for a single target:
```bash
uv run pio run -e heltec_v4_repeater_mqtt
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_bridge_espnow
uv run pio run -e heltec_v4_repeater_mqtt_bridge
uv run pio run -e heltec_v4_repeater_observer_espnow
```
Flash a target:
```bash
uv run pio run -e heltec_v4_repeater_mqtt -t upload --upload-port /dev/tty.usbmodemXXXX
uv run pio run -e heltec_v4_repeater_observer -t upload --upload-port /dev/tty.usbmodemXXXX
```
Serial monitor:
@@ -54,12 +54,12 @@ export FIRMWARE_VERSION=v1.14.1
bash eastmesh-build.sh build-firmware heltec_v4_companion_radio_wifi
```
Repeater MQTT:
Observer:
```bash
export FIRMWARE_VERSION=v1.14.1
export EASTMESH_VERSION=v1.0.1
bash eastmesh-build.sh build-firmware heltec_v4_repeater_mqtt
export FIRMWARE_VERSION=v1.15.0
export EASTMESH_VERSION=v2026.5.1
bash eastmesh-build.sh build-firmware heltec_v4_repeater_observer
```
Repeater ESP-NOW bridge:
@@ -69,12 +69,12 @@ export FIRMWARE_VERSION=v1.15.0
bash eastmesh-build.sh build-firmware heltec_v4_repeater_bridge_espnow
```
Repeater MQTT bridge:
Observer ESP-NOW:
```bash
export FIRMWARE_VERSION=v1.15.0
export EASTMESH_VERSION=v1.4.0
bash eastmesh-build.sh build-firmware heltec_v4_repeater_mqtt_bridge
export EASTMESH_VERSION=v2026.5.1
bash eastmesh-build.sh build-firmware heltec_v4_repeater_observer_espnow
```
This produces versioned artifacts in `out/`.
@@ -82,45 +82,45 @@ This produces versioned artifacts in `out/`.
Versioning rule:
- `companion-wifi` and `repeater-bridge-espnow` use the upstream MeshCore version as `FIRMWARE_VERSION`
- `repeater-mqtt` and `repeater-mqtt-bridge` use the upstream MeshCore version as `FIRMWARE_VERSION` plus the EastMesh release version as `EASTMESH_VERSION`
- `observer-eastmesh` and `observer-bridge-espnow-eastmesh` use the upstream MeshCore version as `FIRMWARE_VERSION` plus the EastMesh release version as `EASTMESH_VERSION`
## Supported `repeater_mqtt` Boards
## Supported `repeater_observer` Boards
These are the full PlatformIO env names used for local source builds and release artifact naming.
```text
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_WIO_repeater_mqtt
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_WIO_repeater_observer
```
## Supported Bridge Boards
@@ -129,18 +129,18 @@ Bridge targets can be listed from the repo root:
```bash
bash eastmesh-build.sh list | grep '_repeater_bridge_espnow'
bash eastmesh-build.sh list | grep '_repeater_mqtt_bridge'
bash eastmesh-build.sh list | grep '_repeater_observer_espnow'
```
Common examples:
```text
heltec_v4_repeater_bridge_espnow
heltec_v4_repeater_mqtt_bridge
heltec_v4_repeater_observer_espnow
Station_G2_repeater_bridge_espnow
Station_G2_repeater_mqtt_bridge
Station_G2_repeater_observer_espnow
T_Beam_S3_Supreme_SX1262_repeater_bridge_espnow
T_Beam_S3_Supreme_SX1262_repeater_mqtt_bridge
T_Beam_S3_Supreme_SX1262_repeater_observer_espnow
```
Bridge firmware is for local ESP-NOW bridge use between nearby repeaters. It is not MQTT-over-WAN or VPN bridging.
+1 -1
View File
@@ -8,7 +8,7 @@ to the EastMesh firmware published at:
- `https://github.com/xJARiD/MeshCore-EastMesh`
These steps are intended for existing repeater users moving to the new EastMesh `*_repeater_mqtt` firmware.
These steps are intended for existing repeater users moving to the new EastMesh `*_repeater_observer` firmware.
Start by downloading the correct EastMesh release for your board from:
+16 -16
View File
@@ -18,7 +18,7 @@ If this is your first time flashing EastMesh firmware, the easiest path is:
6. Click `Flash Firmware`.
7. After flashing, finish setup with `Open MeshCore Config Panel` or the `Serial Console`.
If you are not sure which track you need, start with `companion-wifi` for app-connected companion devices or `repeater-mqtt` for a fixed repeater that should publish to MQTT.
If you are not sure which track you need, start with `companion-wifi` for app-connected companion devices or `observer-eastmesh` for a fixed repeater that should publish to MQTT.
## Pick Your Track
@@ -27,9 +27,9 @@ EastMesh publishes four release tracks:
| Track | Use it when | Firmware filename suffix |
| ----- | ----------- | ------------------------ |
| `companion-wifi` | You want a companion device that connects over Wi-Fi instead of BLE or USB. | `*_companion_radio_wifi` |
| `repeater-mqtt` | You want a repeater with Wi-Fi and MQTT uplink, usually feeding broker visibility such as EastMesh/CoreScope. | `*_repeater_mqtt` |
| `observer-eastmesh` | You want a repeater with Wi-Fi and MQTT uplink, usually feeding broker visibility such as EastMesh/CoreScope. | `*_repeater_observer` |
| `repeater-bridge-espnow` | You want a local ESP-NOW bridge between nearby repeaters, without MQTT uplink or the EastMesh web panel. | `*_repeater_bridge_espnow` |
| `repeater-mqtt-bridge` | You want one repeater to provide both MQTT uplink and local ESP-NOW bridge duties. | `*_repeater_mqtt_bridge` |
| `observer-bridge-espnow-eastmesh` | You want one repeater to provide both MQTT uplink and local ESP-NOW bridge duties. | `*_repeater_observer_espnow` |
!!! note "Bridge firmware is not a WAN bridge"
@@ -44,17 +44,17 @@ Download the asset that matches your board and firmware type.
Examples:
- `heltec_v4_companion_radio_wifi-v1.14.1-abcdef.bin`
- `heltec_v4_repeater_mqtt-v1.14.1-eastmesh-v1.0.1-abcdef.bin`
- `heltec_v4_repeater_mqtt-v1.14.1-eastmesh-v1.0.1-abcdef-merged.bin`
- `heltec_v4_repeater_observer-v1.15.0-eastmesh-v2026.5.1-abcdef.bin`
- `heltec_v4_repeater_observer-v1.15.0-eastmesh-v2026.5.1-abcdef-merged.bin`
- `heltec_v4_repeater_bridge_espnow-v1.15.0-abcdef.bin`
- `heltec_v4_repeater_mqtt_bridge-v1.15.0-eastmesh-v1.4.0-abcdef.bin`
- `heltec_v4_repeater_observer_espnow-v1.15.0-eastmesh-v2026.5.1-abcdef.bin`
The important part is the board/env prefix:
- `*_companion_radio_wifi`
- `*_repeater_mqtt`
- `*_repeater_observer`
- `*_repeater_bridge_espnow`
- `*_repeater_mqtt_bridge`
- `*_repeater_observer_espnow`
## Which File To Flash
@@ -92,7 +92,7 @@ The recommended flasher is:
It includes native support for the common EastMesh firmware types and can also flash custom firmware files:
- `companion_radio_wifi` firmware
- `repeater_mqtt` firmware
- `repeater_observer` firmware
- custom firmware files
For bridge releases, use the matching bridge option if the flasher shows one. Otherwise, download the release asset yourself and flash it as a custom firmware file.
@@ -126,7 +126,7 @@ It is the traditional way to configure a repeater after flashing, including:
- flood max
- some advanced repeater settings
As of `v1.2.1`, the local repeater web panel also includes the same common repeater settings, so users can complete initial setup there and return for occasional troubleshooting or configuration changes. On MQTT repeaters that need maximum headroom, it is still best to disable the panel again when you are finished.
As of `v1.2.1`, the local repeater web panel also includes the same common repeater settings, so users can complete initial setup there and return for occasional troubleshooting or configuration changes. On observers that need maximum headroom, it is still best to disable the panel again when you are finished.
#### Console
@@ -140,8 +140,8 @@ It is especially useful, and often required, for initial Wi-Fi setup on Wi-Fi-ca
This applies to:
- `companion_radio_wifi`
- `repeater_mqtt`
- `repeater_mqtt_bridge`
- `repeater_observer`
- `repeater_observer_espnow`
### Serial Console
@@ -160,9 +160,9 @@ For `set` commands, complete the command in the input box before sending it. For
## Common First Steps
### Repeater MQTT
### Observer
`repeater_mqtt` builds include the EastMesh MQTT additions. Depending on the board, they may also include the local web panel.
`repeater_observer` builds include the EastMesh MQTT additions. Depending on the board, they may also include the local web panel.
Typical first steps after flashing:
@@ -173,9 +173,9 @@ Typical first steps after flashing:
- optionally set `mqtt.owner` and `mqtt.email`
- optionally enable `letsmesh-eu` or `letsmesh-us`
### Repeater MQTT Bridge
### Observer ESP-NOW
`repeater_mqtt_bridge` builds combine the MQTT repeater role with local ESP-NOW bridge support.
`repeater_observer_espnow` builds combine the observer role with local ESP-NOW bridge support.
Typical first steps after flashing:
+5 -5
View File
@@ -1,6 +1,6 @@
# Repeater Web Panel
This page is for end users running an EastMesh `*_repeater_mqtt` build with the local web panel enabled.
This page is for end users running an EastMesh `*_repeater_observer` build with the local web panel enabled.
It covers how to reach the panel, what each section does, and what to expect when using it on desktop or mobile.
@@ -35,7 +35,7 @@ It gives you:
Operational guidance:
- use it for initial setup, occasional configuration changes, and troubleshooting
- when you are finished, prefer `set web off` on MQTT repeaters that need maximum headroom
- when you are finished, prefer `set web off` on observers that need maximum headroom
- this leaves more internal heap available for MQTT/WSS activity, especially on dual-broker setups
## Common Tasks
@@ -78,7 +78,7 @@ The screenshots below show the current split between the lighter `/app` admin pa
You need:
- a supported `*_repeater_mqtt` firmware build
- a supported `*_repeater_observer` firmware build
- Wi-Fi configured on the repeater
- the repeater connected to your local network
- the repeater admin password
@@ -249,7 +249,7 @@ This section includes:
- `mqtt.email`: owner contact email.
- MQTT server toggles: `eastmesh-au`, `letsmesh-eu`, and `letsmesh-us`.
`UNSET - To be configured` is the default for new repeater MQTT installs until a real saved value exists.
`UNSET - To be configured` is the default for new observer installs until a real saved value exists.
Notes:
@@ -343,7 +343,7 @@ On mobile:
3. The local HTTP redirect listener on port `80` is released so OTA can take over that port.
4. Continue with your normal OTA workflow.
If an older build sends you through a strange redirect after `start ota`, use the web `Start OTA` button to begin the upgrade. This redirect issue is fixed in `repeater-mqtt-eastmesh-v1.3.11`.
If an older build sends you through a strange redirect after `start ota`, use the web `Start OTA` button to begin the upgrade. This redirect issue is fixed in `observer-eastmesh-v1.3.11`.
### Use Historical Stats
+34 -582
View File
@@ -2,8 +2,8 @@ schema_version: 1
tracks:
- companion-wifi
- repeater-bridge-espnow
- repeater-mqtt
- repeater-mqtt-bridge
- observer-eastmesh
- observer-bridge-espnow-eastmesh
generated_from: "Adjacent git tag comparisons plus non-merge commit subjects."
releases:
@@ -40,550 +40,6 @@ releases:
text: "Updated the companion_wifi firmware base to upstream MeshCore v1.15.0."
breaking_changes: []
- track: repeater-mqtt
version: "1.0.1"
tag: "repeater-mqtt-eastmesh-v1.0.1"
date: "2026-04-09"
previous_version: null
summary: "First EastMesh repeater_mqtt release with MQTT uplink, optional local web panel support, and EastMesh-specific release plumbing."
changes:
- type: added
area: mqtt
text: "Added the EastMesh repeater_mqtt firmware track with MQTT uplink support and EastMesh-specific firmware workflows."
- type: added
area: web-panel
text: "Added the initial local HTTPS repeater web configuration panel for supported targets."
- type: added
area: release
text: "Added EastMesh release documentation, local build guidance, and CI workflows focused on the supported Wi-Fi and MQTT firmware tracks."
- type: changed
area: build
text: "Moved web panel certificate generation into the build flow and kept the web panel optional for tighter firmware targets."
breaking_changes: []
- track: repeater-mqtt
version: "1.1.0"
tag: "repeater-mqtt-eastmesh-v1.1.0"
date: "2026-04-10"
previous_version: "1.0.1"
summary: "Expanded the repeater web panel with a fuller dashboard and MQTT settings, and stabilised HTTPS/TLS startup."
changes:
- type: added
area: web-panel
text: "Added a repeater dashboard and in-panel MQTT settings controls."
- type: changed
area: web-panel
text: "Stabilised HTTPS/TLS startup behaviour for the local repeater web panel."
- type: changed
area: mqtt
text: "Refactored MQTT uplink handling to support the expanded web panel controls and cleaner repeater status reporting."
- type: docs
area: setup
text: "Added CLI rescue guidance for setting Wi-Fi on companion Wi-Fi builds and refreshed README/license content."
breaking_changes: []
- track: repeater-mqtt
version: "1.1.1"
tag: "repeater-mqtt-eastmesh-v1.1.1"
date: "2026-04-10"
previous_version: "1.1.0"
summary: "Added mqtt.status control support and tightened the web panel and migration documentation."
changes:
- type: added
area: mqtt
text: "Added mqtt.status control/reporting support to make broker state easier to inspect from the repeater CLI."
- type: docs
area: migration
text: "Expanded migration guidance and aligned the docs site with the newer EastMesh structure."
- type: docs
area: web-panel
text: "Added dedicated web panel documentation and refreshed the site theme and navigation."
breaking_changes: []
- track: repeater-mqtt
version: "1.1.2"
tag: "repeater-mqtt-eastmesh-v1.1.2"
date: "2026-04-10"
previous_version: "1.1.1"
summary: "Cleaned up legacy MQTT preference handling, restored status publishing, and expanded web panel controls."
changes:
- type: fixed
area: mqtt
text: "Cleared legacy MQTT preference fields so older persisted settings stopped leaking into current repeater behaviour."
- type: fixed
area: mqtt
text: "Restored MQTT status publishing after the earlier control changes."
- type: changed
area: web-panel
text: "Expanded the repeater web panel controls and updated the related CLI and web panel docs."
breaking_changes: []
- track: repeater-mqtt
version: "1.2.0"
tag: "repeater-mqtt-eastmesh-v1.2.0"
date: "2026-04-11"
previous_version: "1.1.2"
summary: "Reduced MQTT and web-panel memory pressure, streamlined broker controls, and polished the repeater admin surface."
changes:
- type: changed
area: mqtt
text: "Reduced MQTT uplink memory pressure and improved runtime behaviour on constrained repeater targets."
- type: changed
area: web-panel
text: "Streamlined broker controls in the web panel and refreshed the end-user admin flow."
- type: fixed
area: web-panel
text: "Corrected the noise floor gauge colouring and exposed prv.key in the web console."
- type: added
area: board-support
text: "Added a battery reporting toggle for Heltec V3 repeater builds."
- type: docs
area: docs
text: "Simplified the end-user guides and aligned the web panel docs with the current UI."
breaking_changes: []
- track: repeater-mqtt
version: "1.2.1"
tag: "repeater-mqtt-eastmesh-v1.2.1"
date: "2026-04-12"
previous_version: "1.2.0"
summary: "Made broker outages less disruptive and expanded the repeater web panel with radio presets and richer operational controls."
changes:
- type: fixed
area: mqtt
text: "Added graceful MQTT reconnect backoff during broker outages."
- type: added
area: web-panel
text: "Added radio preset controls, repeater info cards, and clock sync controls to the repeater web panel."
- type: docs
area: release
text: "Updated release guidance so the web panel can be used for common repeater setup before being disabled for maximum MQTT headroom."
breaking_changes: []
- track: repeater-mqtt
version: "1.2.2"
tag: "repeater-mqtt-eastmesh-v1.2.2"
date: "2026-04-13"
previous_version: "1.2.1"
summary: "Reduced repeater web panel load pressure and improved MQTT diagnostics."
changes:
- type: changed
area: web-panel
text: "Reduced web panel runtime pressure so opening the admin UI had less impact on busy MQTT repeaters."
- type: added
area: mqtt
text: "Improved MQTT diagnostics and status visibility for troubleshooting broker and uplink issues."
- type: docs
area: web-panel
text: "Updated the web panel documentation to match the lighter loading behaviour and operational guidance."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.0"
tag: "repeater-mqtt-eastmesh-v1.3.0"
date: "2026-04-15"
previous_version: "1.2.2"
summary: "Added SD-backed stats history and split the repeater web UI into a lighter /app page and a dedicated /stats console."
changes:
- type: added
area: stats
text: "Added SD-backed stats archival and restore support for repeater history data."
- type: added
area: web-panel
text: "Added a dedicated /stats web console for current status, historical trends, neighbours, and recent events."
- type: changed
area: web-panel
text: "Reworked the local web UI so /app stays focused on configuration and admin controls while /stats handles visibility and history."
- type: fixed
area: stats
text: "Restored /stats Wi-Fi signal quality and tuned the /stats signal, noise floor, and RSSI meters for correct LoRa-oriented ranges."
- type: changed
area: board-support
text: "Removed ESP32-C3 repeater_mqtt target support and the related CI coverage."
- type: docs
area: docs
text: "Expanded board comparison guidance and refreshed the published web panel screenshots and docs."
breaking_changes:
- "ESP32-C3 repeater_mqtt targets were removed in this release."
- track: repeater-mqtt
version: "1.3.1"
tag: "repeater-mqtt-eastmesh-v1.3.1"
date: "2026-04-16"
previous_version: "1.3.0"
summary: "Made web stats safer on non-PSRAM repeaters by defaulting them off, switching constrained boards to live-only history, and allocating stats buffers lazily."
changes:
- type: fixed
area: web-panel
text: "Disabled web stats by default on non-PSRAM repeater builds so the local web UI places less memory pressure on constrained boards."
- type: changed
area: stats
text: "Changed non-PSRAM repeater builds to a live-only stats mode with smaller in-memory history buffers instead of archive-backed persistence."
- type: fixed
area: stats
text: "Lazy-initialised web stats buffers and released idle live-only buffers so opening /stats has less impact on busy or memory-constrained repeaters."
- type: changed
area: web-panel
text: "Extended the web stats status output and JSON summary payloads to report whether history is running in live-only mode."
- type: docs
area: web-panel
text: "Refreshed the published web panel screenshots and docs to use separate light and dark mode captures."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.2"
tag: "repeater-mqtt-eastmesh-v1.3.2"
date: "2026-04-17"
previous_version: "1.3.1"
summary: "Refined the repeater /stats UX, added better early-event and noise-floor handling, and persisted the ESP32 fallback clock across reboot."
changes:
- type: fixed
area: stats
text: "Removed the misleading neighbour Route column from /stats and cleaned up the neighbour table payload to match the stored data."
- type: changed
area: stats
text: "Retuned the /stats radio noise-floor meter and added a dedicated noise-floor trend with clearer ranges, colour bands, and orientation."
- type: changed
area: web-panel
text: "Reordered the /stats trend cards and changed Packet Activity to a bar chart for interval-based packet counts."
- type: fixed
area: stats
text: "Captured boot/session events earlier on live-only non-PSRAM repeaters so the Events panel is populated before /stats is first opened."
- type: fixed
area: clock
text: "Persisted the ESP32 fallback clock in NVS with immediate saves on sync and periodic checkpoints so boards without a hardware RTC recover a recent sane epoch after reboot."
- type: changed
area: web-panel
text: "Remembered whether the local web UI was last on /app or /stats and returned to that page after unlocking again."
- type: changed
area: mqtt
text: "Changed the Services MQTT status to report degraded when only some enabled MQTT brokers are connected instead of treating any single connected broker as fully up."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.3"
tag: "repeater-mqtt-eastmesh-v1.3.3"
date: "2026-04-17"
previous_version: "1.3.2"
summary: "Improved /stats memory visibility, tightened web stats startup on 2 MB-class PSRAM boards, polished the local repeater admin UI, and pulled in a high-level upstream MeshCore sync."
changes:
- type: fixed
area: stats
text: "Adjusted boot auto-capture for web stats to recognise 2 MB-class ESP32 PSRAM sizes instead of requiring an exact 2 MiB boundary."
- type: changed
area: stats
text: "Extended `get web.stats.status` with focused startup diagnostics for PSRAM size and boot auto-capture, while trimming low-value fields so the reply fits cleanly."
- type: changed
area: web-panel
text: "Updated the /stats Memory card to promote Heap Free, refine its headroom thresholds, and align the memory trend colours with the recent heap-free state."
- type: fixed
area: web-panel
text: "Captured the /stats summary memory snapshot earlier in the request path so the live memory values are more consistent while the page is loading."
- type: changed
area: web-panel
text: "Changed the local web panel tab title to use the repeater name when available, with a fallback to `Repeater Config`."
- type: changed
area: upstream
text: "Synced with newer upstream MeshCore `dev` changes, including region/default-scope CLI support, companion default-scope handling, board/platform updates, and refreshed upstream documentation."
- type: docs
area: web-panel
text: "Updated the web panel docs to describe the rough 2 MB PSRAM boot-history cutoff."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.4"
tag: "repeater-mqtt-eastmesh-v1.3.4"
date: "2026-04-18"
previous_version: "1.3.3"
summary: "Polished the repeater web panel, fixed a T-Beam 1W build issue, and synced the documented web CLI allowlist with the shipped browser console."
changes:
- type: fixed
area: board-support
text: "Added the missing T-Beam 1W flash partition size so the repeater_mqtt target builds with the correct partition layout."
- type: changed
area: web-panel
text: "Cached the repeater title across both the /app and /stats pages so the local admin UI presents a more consistent device label."
- type: changed
area: web-panel
text: "Applied the newer four-band threshold styling to the largest-block memory meters in the /stats Memory card."
- type: docs
area: web-panel
text: "Updated the documented web CLI allowlist to match the actual browser command gate, including the AGC reset interval commands and the troubleshooting note for `noise_floor` reporting `0`."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.5"
tag: "repeater-mqtt-eastmesh-v1.3.5"
date: "2026-04-19"
previous_version: "1.3.4"
summary: "Prepares the next repeater_mqtt release on top of upstream MeshCore firmware v1.15.0."
changes:
- type: changed
area: upstream
text: "Updated the repeater_mqtt firmware base to upstream MeshCore v1.15.0."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.6"
tag: "repeater-mqtt-eastmesh-v1.3.6"
date: "2026-04-20"
previous_version: "1.3.5"
summary: "Opened the repeater web CLI fully after login, added HTTP-to-HTTPS redirect support, preserved /stats through the login bounce, and fixed 4 MB repeater partition layouts."
changes:
- type: changed
area: web-panel
text: "Removed the browser-side repeater CLI allowlist so authenticated web panel sessions can run the same CLI commands accepted by the repeater."
- type: added
area: web-panel
text: "Added a lightweight local HTTP listener that redirects browser requests to the repeater's HTTPS web panel URL."
- type: changed
area: web-panel
text: "Changed the login flow so refreshing /stats and re-authenticating returns to /stats without persisting the last page in browser storage."
- type: fixed
area: board-support
text: "Updated repeater_mqtt partition layouts for 4 MB boards so the affected targets use the correct flash sizing."
- type: docs
area: web-panel
text: "Updated the repeater web panel and custom CLI docs to reflect full web CLI access and the new HTTP-to-HTTPS behavior."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.7"
tag: "repeater-mqtt-eastmesh-v1.3.7"
date: "2026-04-20"
previous_version: "1.3.6"
summary: "Made MQTT IATA explicit on fresh repeater installs, blocked broker connects until it is configured, and surfaced the missing-IATA state in the web panel and CLI status."
changes:
- type: changed
area: mqtt
text: "Changed fresh repeater_mqtt defaults to use `mqtt.iata=UNSET` instead of pre-filling Melbourne."
- type: fixed
area: mqtt
text: "Blocked EastMesh and LetsMesh broker connection attempts while `mqtt.iata` is unset, and reported `invalid iata` in `get mqtt.status` for enabled brokers until a real code is saved."
- type: changed
area: web-panel
text: "Added a top-of-page warning banner and inline MQTT Settings warning when the repeater still needs its MQTT IATA configured."
- type: docs
area: mqtt
text: "Updated the custom CLI and web panel docs to describe the unset-first MQTT IATA flow and the resulting broker behaviour."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.8"
tag: "repeater-mqtt-eastmesh-v1.3.8"
date: "2026-04-21"
previous_version: "1.3.7"
summary: "Expanded repeater `/stats` with environment telemetry and persisted trends, and hardened archive startup on shared-SPI boards."
changes:
- type: fixed
area: web-panel
text: "Fixed Radio Settings preset application in the repeater web panel so the generated `set radio` command uses the comma-separated format accepted by the CLI."
- type: added
area: board-support
text: "Added T-Beam 1W repeater fan CLI controls with persisted mode and post-TX timeout settings."
- type: added
area: board-support
text: "Added T-Beam 1W manual fan mode handling so `fan off` stays off, `fan on` stays on, and TX hold only applies while the board is in auto mode."
- type: fixed
area: stats
text: "Stabilised T-Beam 1W web stats with SD archive enabled by making archive access reuse the same SPI object as the LoRa radio on the board's shared SPI bus."
- type: added
area: web-panel
text: "Added an optional `Environment` section on `/stats` for boards that expose GPS or environmental telemetry, and hid metrics that have no current reading."
- type: added
area: stats
text: "Extended `/stats` history persistence in PSRAM and on the SD-backed archive to capture supported environment telemetry, including voltage, temperatures, humidity, barometer, altitude, and GPS satellites."
- type: added
area: stats
text: "Added environment trend series to `/stats`, including a GPS satellites graph that only appears when GPS is enabled."
- type: fixed
area: board-support
text: "Hardened archive startup on the T-Beam S3 Supreme by providing a safe default shared-archive SPI hook so boards without an override do not crash during early boot."
- type: docs
area: docs
text: "Updated the web panel, API, and custom CLI docs to cover the environment summary/trends, stats persistence behaviour, and existing T-Beam 1W fan controls."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.9"
tag: "repeater-mqtt-eastmesh-v1.3.9"
date: "2026-04-22"
previous_version: "1.3.8"
summary: "Reduced unnecessary repeater battery polling by removing hot-loop MQTT sampling and reusing throttled battery reads across stats and web status paths."
changes:
- type: fixed
area: mqtt
text: "Stopped rebuilding the MQTT status battery reading from a fresh ADC sample on every repeater loop iteration and switched that path to a throttled cached value instead."
- type: changed
area: stats
text: "Reused a single battery sample across the web stats history and summary builders so one logical stats operation no longer performs multiple immediate battery reads."
- type: fixed
area: board-support
text: "Reduced Heltec V3 battery-sense activity while MQTT and web features are active, while still keeping explicit status and telemetry requests on a fresh reading path."
- type: changed
area: board-support
text: "Removed the obsolete battery reporting toggle path and its stale CLI documentation now that repeater battery sampling is handled correctly without a board-level reporting disable switch."
- type: docs
area: docs
text: "Updated the custom CLI docs to note that repeater MQTT background battery sampling is now rate-limited while explicit status and telemetry requests still refresh immediately."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.10"
tag: "repeater-mqtt-eastmesh-v1.3.10"
date: "2026-04-22"
previous_version: "1.3.9"
summary: "Made `/stats` battery display board-aware and corrected count-trend rendering for restored packet activity and GPS satellites."
changes:
- type: changed
area: stats
text: "Updated the `/stats` Core battery meter to prefer a board-reported battery percentage when available and otherwise scale from a board-specific battery voltage range instead of a fixed single-cell assumption."
- type: added
area: board-support
text: "Added default board battery range hints to the board abstraction and set the T-Beam 1W repeater battery profile to a 2S `6000-8400 mV` range for the web stats path."
- type: fixed
area: web-panel
text: "Corrected `/stats` packet activity and GPS satellites bar charts so restored zero values no longer draw phantom bars and the final bar uses the same spacing as the rest of the series."
- type: added
area: mqtt
text: "Added a `get mqtt.client_version` repeater CLI command and exposed the same value in the `/app` quick MQTT command buttons."
- type: changed
area: web-panel
text: "Reworked the `/app` Info panel to show `Version` and `Client Version`, and moved `Clock UTC` into Repeater Settings beside Device Name."
- type: fixed
area: web-panel
text: "Narrowed `start ota` handling so the repeater only releases the local HTTP redirect listener on port `80`, allowing ElegantOTA to start without unnecessarily stopping the rest of the repeater services."
- type: docs
area: docs
text: "Updated the web panel, API, and custom CLI docs to describe the board-aware battery display, the new MQTT client-version command, and the revised `/app` layout."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.11"
tag: "repeater-mqtt-eastmesh-v1.3.11"
date: "2026-04-23"
previous_version: "1.3.10"
summary: "Makes OTA startup consistent across command sources, fixes T-Beam 1W SX1262 repeater builds, and cleans up PMU-backed battery stats in `/stats`."
changes:
- type: fixed
area: web-panel
text: "Moved OTA startup preparation into the shared repeater web service path so `start ota` now behaves consistently whether it is triggered from the web panel, serial CLI, or a remote CLI session."
- type: fixed
area: web-panel
text: "Fixed the old repeater OTA redirect glitch so starting an upgrade no longer falls into the earlier odd redirect behaviour before the OTA page loads."
- type: fixed
area: board-support
text: "Added the missing `USE_SX1262` build flag for the LilyGo T-Beam 1W repeater target so the `*_repeater_mqtt` variant builds with the correct radio configuration."
- type: fixed
area: stats
text: "Cleaned up `/stats` battery details on PMU-backed boards so the Core battery card no longer shows a synthetic battery-voltage range beside a board-reported battery percentage."
- type: docs
area: web-panel
text: "Updated the web panel and custom CLI docs to note the OTA redirect fallback on older builds and to describe the consistent `start ota` handling across command sources."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.12"
tag: "repeater-mqtt-eastmesh-v1.3.12"
date: "2026-04-27"
previous_version: "1.3.11"
summary: "Hardens T-Beam 1W SD archive access, reduces planned MQTT JWT refresh noise in `/stats`, and adds an Australian region shortcut to the repeater web panel."
changes:
- type: fixed
area: board-support
text: "Hardened T-Beam 1W SD archive mounting and recovery on the shared SPI bus by deasserting other chip selects, using a conservative SD SPI clock, and avoiding unnecessary SPI reinitialisation during recovery."
- type: changed
area: mqtt
text: "Extended MQTT JWT lifetime and marked planned token refresh reconnects so `/stats` records `mqtt_token_refreshed` instead of a misleading short disconnect/connect event pair."
- type: added
area: web-panel
text: "Added a `Region (Australia)` selector under `/app` Radio Settings that creates and allows the base `au` region plus the selected `au-STATE` region, then persists the region map."
- type: docs
area: web-panel
text: "Updated the web panel and custom CLI docs for the planned MQTT token-refresh event and the new web-panel region shortcut."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.13"
tag: "repeater-mqtt-eastmesh-v1.3.13"
date: "2026-04-28"
previous_version: "1.3.12"
summary: "Adds a safe MQTT WebSocket preflight for broker failover, restores clean MQTT client destruction when the heap is healthy, and clarifies that EastMesh MQTT repeaters feed Eastern Australia Core telemetry."
changes:
- type: fixed
area: mqtt
text: "Added a bounded WebSocket upgrade preflight before MQTT connects and reconnects so down or misrouted brokers that return non-upgrade HTTP responses are backed off before the ESP32 IDF 4.4 WebSocket transport can corrupt heap."
- type: fixed
area: mqtt
text: "Restored normal MQTT client destruction when heap integrity is clean, while keeping a guarded abandon path if heap poisoning is already detected before `esp_mqtt_client_destroy()`."
- type: changed
area: mqtt
text: "Reduced dual-broker connection pressure by checking both free internal heap and largest internal heap block before starting a second broker while another broker is already connected."
- type: changed
area: mqtt
text: "Switched retrying disconnected MQTT clients to `esp_mqtt_client_reconnect()` instead of destroying and recreating the client on every reconnect attempt."
- type: changed
area: mqtt
text: "Scoped MQTT TLS CA selection per broker instead of passing the combined CA bundle on Arduino-ESP32 2.x builds, while keeping certificate-bundle support for newer ESP-IDF stacks."
- type: docs
area: readme
text: "Updated the README to describe EastMesh as an Eastern Australia community mesh network, introduce CoreScope telemetry, and warn that MQTT repeater builds are intended for Eastern Australia repeaters only."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.14"
tag: "repeater-mqtt-eastmesh-v1.3.14"
date: "2026-04-30"
previous_version: "1.3.13"
summary: "Fixes `/stats` GPS visibility and no-PSRAM trend capture, improves web-panel session recovery and App/Stats navigation on constrained boards, quiets absent I2C sensor probes, and prevents truncated MQTT offline status payloads."
changes:
- type: fixed
area: stats
text: "Updated `/stats` GPS gauges and satellite trends to respect the active GPS setting so boards that report GPS hardware as on but deactivated after `gps off` no longer keep satellite metrics visible."
- type: fixed
area: stats
text: "Allowed no-PSRAM boards to collect the small live `/stats` history buffer whenever `web.stats` is enabled, so Heltec v3 targets can show recent trend samples without archive storage."
- type: fixed
area: web-panel
text: "Improved App/Stats navigation and session recovery by preserving the login token across panel views, validating stale browser tokens before loading settings, and clearing expired sessions quickly after a reflash."
- type: fixed
area: web-panel
text: "Delayed the red MQTT IATA warning until the panel has loaded the configured value, avoiding a misleading unset banner while `/app` is still fetching settings."
- type: fixed
area: sensors
text: "Probed optional I2C environmental sensor addresses before driver initialization so boards without those sensors no longer emit repeated Wire read errors during boot."
- type: fixed
area: mqtt
text: "Increased the MQTT offline last-will payload buffer so the retained offline status JSON is not truncated when release metadata and identity fields are near their configured limits."
- type: docs
area: web-panel
text: "Documented no-PSRAM `/stats` history behavior, stale browser-token recovery, and the lightweight `/api/session` endpoint used by the web panel."
breaking_changes: []
- track: repeater-mqtt
version: "1.3.15"
tag: "repeater-mqtt-eastmesh-v1.3.15"
date: "2026-04-30"
previous_version: "1.3.14"
summary: "Publishes retained offline status for clean MQTT broker disables and IATA topic changes so operator-driven disconnects do not leave stale online status behind."
changes:
- type: fixed
area: mqtt
text: "Published explicit retained offline status before a connected broker is toggled off, matching operator expectations without relying on last-will behavior that only fires on unclean disconnects."
- type: fixed
area: mqtt
text: "Published retained offline status to the old status topic before `mqtt.iata` changes, then restarted connected broker clients so they reconnect and publish online status under the new IATA path."
- type: docs
area: mqtt
text: "Updated the CLI and web-panel docs to describe retained offline status publishing for broker toggles and IATA changes."
- type: fixed
area: cli
text: "Matched no-argument MQTT and Wi-Fi `get` commands exactly so malformed commands with trailing text no longer execute as valid getters."
- type: changed
area: build
text: "Aligned release-style builds with direct PlatformIO builds by using the firmware source build date instead of stamping the current build day into `ver` output."
breaking_changes: []
- track: repeater-bridge-espnow
version: "1.15.0"
tag: "repeater-bridge-espnow-v1.15.0"
@@ -602,44 +58,40 @@ releases:
text: "Updated release guidance to document the repeater ESP-NOW bridge tag format and versioning rule."
breaking_changes: []
- track: repeater-mqtt
version: "1.4.0"
tag: "repeater-mqtt-eastmesh-v1.4.0"
date: "2026-05-05"
previous_version: "1.3.15"
summary: "Adds bridge firmware release plumbing and hardens web-panel feature defaults so non-web bridge targets build cleanly."
- track: observer-eastmesh
version: "2026.5.1"
tag: "observer-eastmesh-v2026.5.1"
date: "2026-05-23"
previous_version: "1.4.0"
summary: "Renames the EastMesh MQTT repeater release track and PlatformIO targets to Observer naming."
changes:
- type: added
- type: changed
area: release
text: "Documented the expanded bridge firmware release tracks alongside the existing repeater MQTT release flow."
- type: fixed
area: web-panel
text: "Scoped the default web-panel enablement to MQTT uplink builds so non-web ESP32 bridge targets do not compile calls to web services that are not linked."
text: "Renamed the EastMesh MQTT release tag format from `repeater-mqtt-eastmesh-v*` to `observer-eastmesh-v*`."
- type: changed
area: build
text: "Tightened EastMesh build target discovery so generated `${env:...}` references are not mistaken for PlatformIO environments."
breaking_changes: []
- track: repeater-mqtt-bridge
version: "1.4.0"
tag: "repeater-mqtt-bridge-eastmesh-v1.4.0"
date: "2026-05-05"
previous_version: null
summary: "First EastMesh repeater MQTT bridge release track, combining MQTT uplink builds with ESP-NOW bridge firmware artifacts."
changes:
- type: added
area: build
text: "Added `*_repeater_mqtt_bridge` build coverage for EastMesh MQTT repeater targets."
- type: added
area: release
text: "Added the `repeater-mqtt-bridge-eastmesh-v*` release tag format and draft-release workflow for MQTT bridge firmware artifacts."
- type: added
area: cli
text: "Exposed the active Wi-Fi channel in `get wifi.status` so MQTT bridge operators can align `bridge.channel` with the connected 2.4 GHz Wi-Fi channel."
text: "Renamed `*_repeater_mqtt` PlatformIO environments and release artifact prefixes to `*_repeater_observer`."
- type: docs
area: cli
text: "Added MQTT bridge CLI guidance for `get/set bridge.channel`, `get/set bridge.secret`, and channel alignment with `get wifi.status`."
- type: fixed
area: web-panel
text: "Kept the web service suspended during OTA start so the Start OTA path does not tear down the panel while OTA is taking over port `80`."
breaking_changes: []
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-bridge-espnow-eastmesh
version: "2026.5.1"
tag: "observer-bridge-espnow-eastmesh-v2026.5.1"
date: "2026-05-23"
previous_version: "1.4.0"
summary: "Renames the EastMesh MQTT bridge release track and PlatformIO targets to Observer ESP-NOW naming."
changes:
- type: changed
area: release
text: "Renamed the EastMesh MQTT bridge release tag format from `repeater-mqtt-bridge-eastmesh-v*` to `observer-bridge-espnow-eastmesh-v*`."
- type: changed
area: build
text: "Renamed `*_repeater_mqtt_bridge` PlatformIO environments and release artifact prefixes to `*_repeater_observer_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."
+1 -1
View File
@@ -31,7 +31,7 @@
#endif
#ifndef CLIENT_VERSION
#define CLIENT_VERSION "eastmesh-repeater-mqtt"
#define CLIENT_VERSION "eastmesh-observer"
#endif
#ifndef MQTT_DEBUG
+167 -167
View File
@@ -1,4 +1,4 @@
[env:Ebyte_EoRa-S3_Repeater_mqtt]
[env:Ebyte_EoRa-S3_Repeater_observer]
extends = Ebyte_EoRa-S3
board_build.partitions = min_spiffs.csv
build_flags =
@@ -24,7 +24,7 @@ lib_deps =
${Ebyte_EoRa-S3.lib_deps}
${esp32_ota.lib_deps}
[env:Generic_E22_sx1262_repeater_mqtt]
[env:Generic_E22_sx1262_repeater_observer]
extends = Generic_E22
board_build.partitions = min_spiffs.csv ; get around 4mb flash limit
build_src_filter = ${Generic_E22.build_src_filter}
@@ -51,7 +51,7 @@ lib_deps =
${Generic_E22.lib_deps}
${esp32_ota.lib_deps}
[env:Generic_E22_sx1268_repeater_mqtt]
[env:Generic_E22_sx1268_repeater_observer]
extends = Generic_E22
board_build.partitions = min_spiffs.csv ; get around 4mb flash limit
build_src_filter = ${Generic_E22.build_src_filter}
@@ -78,7 +78,7 @@ lib_deps =
${Generic_E22.lib_deps}
${esp32_ota.lib_deps}
[env:Heltec_E213_repeater_mqtt]
[env:Heltec_E213_repeater_observer]
extends = Heltec_E213_base
build_flags =
${Heltec_E213_base.build_flags}
@@ -104,7 +104,7 @@ lib_deps =
${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
[env:Heltec_E290_repeater_mqtt]
[env:Heltec_E290_repeater_observer]
extends = Heltec_E290_base
build_flags =
${Heltec_E290_base.build_flags}
@@ -130,7 +130,7 @@ lib_deps =
${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
[env:Heltec_T190_repeater_mqtt]
[env:Heltec_T190_repeater_observer]
extends = Heltec_T190_base
build_flags =
${Heltec_T190_base.build_flags}
@@ -153,7 +153,7 @@ lib_deps =
${Heltec_T190_base.lib_deps}
${esp32_ota.lib_deps}
[env:heltec_tracker_v2_repeater_mqtt]
[env:heltec_tracker_v2_repeater_observer]
extends = Heltec_tracker_v2
build_flags =
${Heltec_tracker_v2.build_flags}
@@ -179,7 +179,7 @@ lib_deps =
${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
[env:Heltec_v2_repeater_mqtt]
[env:Heltec_v2_repeater_observer]
extends = Heltec_lora32_v2
build_flags =
${Heltec_lora32_v2.build_flags}
@@ -205,7 +205,7 @@ lib_deps =
${Heltec_lora32_v2.lib_deps}
${esp32_ota.lib_deps}
[env:Heltec_v3_repeater_mqtt]
[env:Heltec_v3_repeater_observer]
extends = Heltec_lora32_v3
build_flags =
${Heltec_lora32_v3.build_flags}
@@ -231,7 +231,7 @@ lib_deps =
${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
[env:heltec_v4_repeater_mqtt]
[env:heltec_v4_repeater_observer]
extends = heltec_v4_oled
build_flags =
${heltec_v4_oled.build_flags}
@@ -258,7 +258,7 @@ lib_deps =
${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
[env:heltec_v4_tft_repeater_mqtt]
[env:heltec_v4_tft_repeater_observer]
extends = heltec_v4_tft
build_flags =
${heltec_v4_tft.build_flags}
@@ -284,7 +284,7 @@ lib_deps =
${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
[env:Heltec_Wireless_Paper_repeater_mqtt]
[env:Heltec_Wireless_Paper_repeater_observer]
extends = Heltec_Wireless_Paper_base
build_flags =
${Heltec_Wireless_Paper_base.build_flags}
@@ -310,7 +310,7 @@ lib_deps =
${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
[env:Heltec_Wireless_Tracker_repeater_mqtt]
[env:Heltec_Wireless_Tracker_repeater_observer]
extends = Heltec_tracker_base
build_flags =
${Heltec_tracker_base.build_flags}
@@ -336,7 +336,7 @@ lib_deps =
${Heltec_tracker_base.lib_deps}
${esp32_ota.lib_deps}
[env:Heltec_WSL3_repeater_mqtt]
[env:Heltec_WSL3_repeater_observer]
extends = Heltec_lora32_v3
build_flags =
${Heltec_lora32_v3.build_flags}
@@ -360,7 +360,7 @@ lib_deps =
${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
[env:LilyGo_T3S3_sx1262_repeater_mqtt]
[env:LilyGo_T3S3_sx1262_repeater_observer]
extends = LilyGo_T3S3_sx1262
board_build.partitions = min_spiffs.csv ; get around 4mb flash limit
build_flags =
@@ -386,7 +386,7 @@ lib_deps =
${LilyGo_T3S3_sx1262.lib_deps}
${esp32_ota.lib_deps}
[env:LilyGo_T3S3_sx1276_repeater_mqtt]
[env:LilyGo_T3S3_sx1276_repeater_observer]
extends = LilyGo_T3S3_sx1276
board_build.partitions = min_spiffs.csv ; get around 4mb flash limit
build_flags =
@@ -412,7 +412,7 @@ lib_deps =
${LilyGo_T3S3_sx1276.lib_deps}
${esp32_ota.lib_deps}
[env:LilyGo_TBeam_1W_repeater_mqtt]
[env:LilyGo_TBeam_1W_repeater_observer]
extends = LilyGo_TBeam_1W
build_flags =
${LilyGo_TBeam_1W.build_flags}
@@ -437,7 +437,7 @@ lib_deps =
${LilyGo_TBeam_1W.lib_deps}
${esp32_ota.lib_deps}
[env:LilyGo_TDeck_repeater_mqtt]
[env:LilyGo_TDeck_repeater_observer]
extends = LilyGo_TDeck
build_flags =
${LilyGo_TDeck.build_flags}
@@ -461,7 +461,7 @@ lib_deps =
${LilyGo_TDeck.lib_deps}
${esp32_ota.lib_deps}
[env:LilyGo_Tlora_C6_repeater_mqtt]
[env:LilyGo_Tlora_C6_repeater_observer]
extends = tlora_c6
build_src_filter = ${tlora_c6.build_src_filter}
+<../examples/simple_repeater/*.cpp>
@@ -483,7 +483,7 @@ build_flags =
lib_deps =
${tlora_c6.lib_deps}
[env:M5Stack_Unit_C6L_repeater_mqtt]
[env:M5Stack_Unit_C6L_repeater_observer]
extends = M5Stack_Unit_C6L
build_src_filter = ${M5Stack_Unit_C6L.build_src_filter}
+<../examples/simple_repeater/*.cpp>
@@ -505,7 +505,7 @@ build_flags =
lib_deps =
${M5Stack_Unit_C6L.lib_deps}
[env:Meshadventurer_sx1262_repeater_mqtt]
[env:Meshadventurer_sx1262_repeater_observer]
extends = Meshadventurer
build_src_filter = ${Meshadventurer.build_src_filter}
+<../examples/simple_repeater>
@@ -532,7 +532,7 @@ lib_deps =
${Meshadventurer.lib_deps}
${esp32_ota.lib_deps}
[env:Meshadventurer_sx1268_repeater_mqtt]
[env:Meshadventurer_sx1268_repeater_observer]
extends = Meshadventurer
build_src_filter = ${Meshadventurer.build_src_filter}
+<../examples/simple_repeater>
@@ -559,7 +559,7 @@ lib_deps =
${Meshadventurer.lib_deps}
${esp32_ota.lib_deps}
[env:Meshimi_repeater_mqtt]
[env:Meshimi_repeater_observer]
extends = Meshimi
build_src_filter = ${Meshimi.build_src_filter}
+<../examples/simple_repeater/*.cpp>
@@ -581,7 +581,7 @@ build_flags =
lib_deps =
${Meshimi.lib_deps}
[env:nibble_screen_connect_repeater_mqtt]
[env:nibble_screen_connect_repeater_observer]
extends = nibble_screen_connect_base
board_build.partitions = min_spiffs.csv ; get around 4mb flash limit
build_flags =
@@ -607,7 +607,7 @@ lib_deps =
${nibble_screen_connect_base.lib_deps}
${esp32_ota.lib_deps}
[env:RAK_3112_repeater_mqtt]
[env:RAK_3112_repeater_observer]
extends = rak3112
build_flags =
${rak3112.build_flags}
@@ -631,7 +631,7 @@ lib_deps =
${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
[env:Station_G2_repeater_mqtt]
[env:Station_G2_repeater_observer]
extends = Station_G2
build_flags =
${Station_G2.build_flags}
@@ -654,7 +654,7 @@ lib_deps =
${Station_G2.lib_deps}
${esp32_ota.lib_deps}
[env:Station_G2_logging_repeater_mqtt]
[env:Station_G2_logging_repeater_observer]
extends = Station_G2
build_flags =
${Station_G2.build_flags}
@@ -679,7 +679,7 @@ lib_deps =
${Station_G2.lib_deps}
${esp32_ota.lib_deps}
[env:T_Beam_S3_Supreme_SX1262_repeater_mqtt]
[env:T_Beam_S3_Supreme_SX1262_repeater_observer]
extends = T_Beam_S3_Supreme_SX1262
build_flags =
${T_Beam_S3_Supreme_SX1262.build_flags}
@@ -702,7 +702,7 @@ lib_deps =
${T_Beam_S3_Supreme_SX1262.lib_deps}
${esp32_ota.lib_deps}
[env:Tbeam_SX1262_repeater_mqtt]
[env:Tbeam_SX1262_repeater_observer]
extends = LilyGo_TBeam_SX1262
build_flags =
${LilyGo_TBeam_SX1262.build_flags}
@@ -725,7 +725,7 @@ lib_deps =
${LilyGo_TBeam_SX1262.lib_deps}
${esp32_ota.lib_deps}
[env:Tbeam_SX1276_repeater_mqtt]
[env:Tbeam_SX1276_repeater_observer]
extends = LilyGo_TBeam_SX1276
build_flags =
${LilyGo_TBeam_SX1276.build_flags}
@@ -749,7 +749,7 @@ lib_deps =
${LilyGo_TBeam_SX1276.lib_deps}
${esp32_ota.lib_deps}
[env:ThinkNode_M2_Repeater_mqtt]
[env:ThinkNode_M2_Repeater_observer]
extends = ThinkNode_M2
board_build.partitions = min_spiffs.csv ; get around 4mb flash limit
build_src_filter = ${ThinkNode_M2.build_src_filter}
@@ -773,7 +773,7 @@ lib_deps =
${ThinkNode_M2.lib_deps}
${esp32_ota.lib_deps}
[env:ThinkNode_M5_Repeater_mqtt]
[env:ThinkNode_M5_Repeater_observer]
extends = ThinkNode_M5
board_build.partitions = min_spiffs.csv ; get around 4mb flash limit
build_src_filter = ${ThinkNode_M5.build_src_filter}
@@ -797,7 +797,7 @@ lib_deps =
${ThinkNode_M5.lib_deps}
${esp32_ota.lib_deps}
[env:WHY2025_badge_repeater_mqtt]
[env:WHY2025_badge_repeater_observer]
extends = WHY2025_badge
build_src_filter = ${WHY2025_badge.build_src_filter}
+<../examples/simple_repeater/*.cpp>
@@ -819,7 +819,7 @@ build_flags =
lib_deps =
${WHY2025_badge.lib_deps}
[env:Xiao_C6_repeater_mqtt]
[env:Xiao_C6_repeater_observer]
extends = Xiao_C6
build_src_filter = ${Xiao_C6.build_src_filter}
+<../examples/simple_repeater/*.cpp>
@@ -841,7 +841,7 @@ build_flags =
lib_deps =
${Xiao_C6.lib_deps}
[env:Xiao_S3_WIO_repeater_mqtt]
[env:Xiao_S3_WIO_repeater_observer]
extends = Xiao_S3_WIO
build_src_filter = ${Xiao_S3_WIO.build_src_filter}
+<../examples/simple_repeater/*.cpp>
@@ -864,266 +864,266 @@ lib_deps =
${Xiao_S3_WIO.lib_deps}
${esp32_ota.lib_deps}
[env:Ebyte_EoRa-S3_Repeater_mqtt_bridge]
extends = env:Ebyte_EoRa-S3_Repeater_mqtt
[env:Ebyte_EoRa-S3_Repeater_observer_espnow]
extends = env:Ebyte_EoRa-S3_Repeater_observer
build_flags =
${env:Ebyte_EoRa-S3_Repeater_mqtt.build_flags}
${env:Ebyte_EoRa-S3_Repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Ebyte_EoRa-S3_Repeater_mqtt.build_src_filter}
build_src_filter = ${env:Ebyte_EoRa-S3_Repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Generic_E22_sx1262_repeater_mqtt_bridge]
extends = env:Generic_E22_sx1262_repeater_mqtt
[env:Generic_E22_sx1262_repeater_observer_espnow]
extends = env:Generic_E22_sx1262_repeater_observer
build_flags =
${env:Generic_E22_sx1262_repeater_mqtt.build_flags}
${env:Generic_E22_sx1262_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Generic_E22_sx1262_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Generic_E22_sx1262_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Generic_E22_sx1268_repeater_mqtt_bridge]
extends = env:Generic_E22_sx1268_repeater_mqtt
[env:Generic_E22_sx1268_repeater_observer_espnow]
extends = env:Generic_E22_sx1268_repeater_observer
build_flags =
${env:Generic_E22_sx1268_repeater_mqtt.build_flags}
${env:Generic_E22_sx1268_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Generic_E22_sx1268_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Generic_E22_sx1268_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Heltec_E213_repeater_mqtt_bridge]
extends = env:Heltec_E213_repeater_mqtt
[env:Heltec_E213_repeater_observer_espnow]
extends = env:Heltec_E213_repeater_observer
build_flags =
${env:Heltec_E213_repeater_mqtt.build_flags}
${env:Heltec_E213_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Heltec_E213_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Heltec_E213_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Heltec_E290_repeater_mqtt_bridge]
extends = env:Heltec_E290_repeater_mqtt
[env:Heltec_E290_repeater_observer_espnow]
extends = env:Heltec_E290_repeater_observer
build_flags =
${env:Heltec_E290_repeater_mqtt.build_flags}
${env:Heltec_E290_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Heltec_E290_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Heltec_E290_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Heltec_T190_repeater_mqtt_bridge]
extends = env:Heltec_T190_repeater_mqtt
[env:Heltec_T190_repeater_observer_espnow]
extends = env:Heltec_T190_repeater_observer
build_flags =
${env:Heltec_T190_repeater_mqtt.build_flags}
${env:Heltec_T190_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Heltec_T190_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Heltec_T190_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:heltec_tracker_v2_repeater_mqtt_bridge]
extends = env:heltec_tracker_v2_repeater_mqtt
[env:heltec_tracker_v2_repeater_observer_espnow]
extends = env:heltec_tracker_v2_repeater_observer
build_flags =
${env:heltec_tracker_v2_repeater_mqtt.build_flags}
${env:heltec_tracker_v2_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:heltec_tracker_v2_repeater_mqtt.build_src_filter}
build_src_filter = ${env:heltec_tracker_v2_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Heltec_v2_repeater_mqtt_bridge]
extends = env:Heltec_v2_repeater_mqtt
[env:Heltec_v2_repeater_observer_espnow]
extends = env:Heltec_v2_repeater_observer
build_flags =
${env:Heltec_v2_repeater_mqtt.build_flags}
${env:Heltec_v2_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Heltec_v2_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Heltec_v2_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Heltec_v3_repeater_mqtt_bridge]
extends = env:Heltec_v3_repeater_mqtt
[env:Heltec_v3_repeater_observer_espnow]
extends = env:Heltec_v3_repeater_observer
build_flags =
${env:Heltec_v3_repeater_mqtt.build_flags}
${env:Heltec_v3_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Heltec_v3_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Heltec_v3_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:heltec_v4_repeater_mqtt_bridge]
extends = env:heltec_v4_repeater_mqtt
[env:heltec_v4_repeater_observer_espnow]
extends = env:heltec_v4_repeater_observer
build_flags =
${env:heltec_v4_repeater_mqtt.build_flags}
${env:heltec_v4_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:heltec_v4_repeater_mqtt.build_src_filter}
build_src_filter = ${env:heltec_v4_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:heltec_v4_tft_repeater_mqtt_bridge]
extends = env:heltec_v4_tft_repeater_mqtt
[env:heltec_v4_tft_repeater_observer_espnow]
extends = env:heltec_v4_tft_repeater_observer
build_flags =
${env:heltec_v4_tft_repeater_mqtt.build_flags}
${env:heltec_v4_tft_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:heltec_v4_tft_repeater_mqtt.build_src_filter}
build_src_filter = ${env:heltec_v4_tft_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Heltec_Wireless_Paper_repeater_mqtt_bridge]
extends = env:Heltec_Wireless_Paper_repeater_mqtt
[env:Heltec_Wireless_Paper_repeater_observer_espnow]
extends = env:Heltec_Wireless_Paper_repeater_observer
build_flags =
${env:Heltec_Wireless_Paper_repeater_mqtt.build_flags}
${env:Heltec_Wireless_Paper_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Heltec_Wireless_Paper_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Heltec_Wireless_Paper_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Heltec_Wireless_Tracker_repeater_mqtt_bridge]
extends = env:Heltec_Wireless_Tracker_repeater_mqtt
[env:Heltec_Wireless_Tracker_repeater_observer_espnow]
extends = env:Heltec_Wireless_Tracker_repeater_observer
build_flags =
${env:Heltec_Wireless_Tracker_repeater_mqtt.build_flags}
${env:Heltec_Wireless_Tracker_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Heltec_Wireless_Tracker_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Heltec_Wireless_Tracker_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Heltec_WSL3_repeater_mqtt_bridge]
extends = env:Heltec_WSL3_repeater_mqtt
[env:Heltec_WSL3_repeater_observer_espnow]
extends = env:Heltec_WSL3_repeater_observer
build_flags =
${env:Heltec_WSL3_repeater_mqtt.build_flags}
${env:Heltec_WSL3_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Heltec_WSL3_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Heltec_WSL3_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:LilyGo_T3S3_sx1262_repeater_mqtt_bridge]
extends = env:LilyGo_T3S3_sx1262_repeater_mqtt
[env:LilyGo_T3S3_sx1262_repeater_observer_espnow]
extends = env:LilyGo_T3S3_sx1262_repeater_observer
build_flags =
${env:LilyGo_T3S3_sx1262_repeater_mqtt.build_flags}
${env:LilyGo_T3S3_sx1262_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:LilyGo_T3S3_sx1262_repeater_mqtt.build_src_filter}
build_src_filter = ${env:LilyGo_T3S3_sx1262_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:LilyGo_T3S3_sx1276_repeater_mqtt_bridge]
extends = env:LilyGo_T3S3_sx1276_repeater_mqtt
[env:LilyGo_T3S3_sx1276_repeater_observer_espnow]
extends = env:LilyGo_T3S3_sx1276_repeater_observer
build_flags =
${env:LilyGo_T3S3_sx1276_repeater_mqtt.build_flags}
${env:LilyGo_T3S3_sx1276_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:LilyGo_T3S3_sx1276_repeater_mqtt.build_src_filter}
build_src_filter = ${env:LilyGo_T3S3_sx1276_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:LilyGo_TBeam_1W_repeater_mqtt_bridge]
extends = env:LilyGo_TBeam_1W_repeater_mqtt
[env:LilyGo_TBeam_1W_repeater_observer_espnow]
extends = env:LilyGo_TBeam_1W_repeater_observer
build_flags =
${env:LilyGo_TBeam_1W_repeater_mqtt.build_flags}
${env:LilyGo_TBeam_1W_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:LilyGo_TBeam_1W_repeater_mqtt.build_src_filter}
build_src_filter = ${env:LilyGo_TBeam_1W_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:LilyGo_TDeck_repeater_mqtt_bridge]
extends = env:LilyGo_TDeck_repeater_mqtt
[env:LilyGo_TDeck_repeater_observer_espnow]
extends = env:LilyGo_TDeck_repeater_observer
build_flags =
${env:LilyGo_TDeck_repeater_mqtt.build_flags}
${env:LilyGo_TDeck_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:LilyGo_TDeck_repeater_mqtt.build_src_filter}
build_src_filter = ${env:LilyGo_TDeck_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:LilyGo_Tlora_C6_repeater_mqtt_bridge]
extends = env:LilyGo_Tlora_C6_repeater_mqtt
[env:LilyGo_Tlora_C6_repeater_observer_espnow]
extends = env:LilyGo_Tlora_C6_repeater_observer
build_flags =
${env:LilyGo_Tlora_C6_repeater_mqtt.build_flags}
${env:LilyGo_Tlora_C6_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:LilyGo_Tlora_C6_repeater_mqtt.build_src_filter}
build_src_filter = ${env:LilyGo_Tlora_C6_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:M5Stack_Unit_C6L_repeater_mqtt_bridge]
extends = env:M5Stack_Unit_C6L_repeater_mqtt
[env:M5Stack_Unit_C6L_repeater_observer_espnow]
extends = env:M5Stack_Unit_C6L_repeater_observer
build_flags =
${env:M5Stack_Unit_C6L_repeater_mqtt.build_flags}
${env:M5Stack_Unit_C6L_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:M5Stack_Unit_C6L_repeater_mqtt.build_src_filter}
build_src_filter = ${env:M5Stack_Unit_C6L_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Meshadventurer_sx1262_repeater_mqtt_bridge]
extends = env:Meshadventurer_sx1262_repeater_mqtt
[env:Meshadventurer_sx1262_repeater_observer_espnow]
extends = env:Meshadventurer_sx1262_repeater_observer
build_flags =
${env:Meshadventurer_sx1262_repeater_mqtt.build_flags}
${env:Meshadventurer_sx1262_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Meshadventurer_sx1262_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Meshadventurer_sx1262_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Meshadventurer_sx1268_repeater_mqtt_bridge]
extends = env:Meshadventurer_sx1268_repeater_mqtt
[env:Meshadventurer_sx1268_repeater_observer_espnow]
extends = env:Meshadventurer_sx1268_repeater_observer
build_flags =
${env:Meshadventurer_sx1268_repeater_mqtt.build_flags}
${env:Meshadventurer_sx1268_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Meshadventurer_sx1268_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Meshadventurer_sx1268_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:nibble_screen_connect_repeater_mqtt_bridge]
extends = env:nibble_screen_connect_repeater_mqtt
[env:nibble_screen_connect_repeater_observer_espnow]
extends = env:nibble_screen_connect_repeater_observer
build_flags =
${env:nibble_screen_connect_repeater_mqtt.build_flags}
${env:nibble_screen_connect_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:nibble_screen_connect_repeater_mqtt.build_src_filter}
build_src_filter = ${env:nibble_screen_connect_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:RAK_3112_repeater_mqtt_bridge]
extends = env:RAK_3112_repeater_mqtt
[env:RAK_3112_repeater_observer_espnow]
extends = env:RAK_3112_repeater_observer
build_flags =
${env:RAK_3112_repeater_mqtt.build_flags}
${env:RAK_3112_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:RAK_3112_repeater_mqtt.build_src_filter}
build_src_filter = ${env:RAK_3112_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Station_G2_repeater_mqtt_bridge]
extends = env:Station_G2_repeater_mqtt
[env:Station_G2_repeater_observer_espnow]
extends = env:Station_G2_repeater_observer
build_flags =
${env:Station_G2_repeater_mqtt.build_flags}
${env:Station_G2_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Station_G2_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Station_G2_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Station_G2_logging_repeater_mqtt_bridge]
extends = env:Station_G2_logging_repeater_mqtt
[env:Station_G2_logging_repeater_observer_espnow]
extends = env:Station_G2_logging_repeater_observer
build_flags =
${env:Station_G2_logging_repeater_mqtt.build_flags}
${env:Station_G2_logging_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Station_G2_logging_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Station_G2_logging_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:T_Beam_S3_Supreme_SX1262_repeater_mqtt_bridge]
extends = env:T_Beam_S3_Supreme_SX1262_repeater_mqtt
[env:T_Beam_S3_Supreme_SX1262_repeater_observer_espnow]
extends = env:T_Beam_S3_Supreme_SX1262_repeater_observer
build_flags =
${env:T_Beam_S3_Supreme_SX1262_repeater_mqtt.build_flags}
${env:T_Beam_S3_Supreme_SX1262_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:T_Beam_S3_Supreme_SX1262_repeater_mqtt.build_src_filter}
build_src_filter = ${env:T_Beam_S3_Supreme_SX1262_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Tbeam_SX1262_repeater_mqtt_bridge]
extends = env:Tbeam_SX1262_repeater_mqtt
[env:Tbeam_SX1262_repeater_observer_espnow]
extends = env:Tbeam_SX1262_repeater_observer
build_flags =
${env:Tbeam_SX1262_repeater_mqtt.build_flags}
${env:Tbeam_SX1262_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Tbeam_SX1262_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Tbeam_SX1262_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Tbeam_SX1276_repeater_mqtt_bridge]
extends = env:Tbeam_SX1276_repeater_mqtt
[env:Tbeam_SX1276_repeater_observer_espnow]
extends = env:Tbeam_SX1276_repeater_observer
build_flags =
${env:Tbeam_SX1276_repeater_mqtt.build_flags}
${env:Tbeam_SX1276_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Tbeam_SX1276_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Tbeam_SX1276_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:ThinkNode_M2_Repeater_mqtt_bridge]
extends = env:ThinkNode_M2_Repeater_mqtt
[env:ThinkNode_M2_Repeater_observer_espnow]
extends = env:ThinkNode_M2_Repeater_observer
build_flags =
${env:ThinkNode_M2_Repeater_mqtt.build_flags}
${env:ThinkNode_M2_Repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:ThinkNode_M2_Repeater_mqtt.build_src_filter}
build_src_filter = ${env:ThinkNode_M2_Repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:ThinkNode_M5_Repeater_mqtt_bridge]
extends = env:ThinkNode_M5_Repeater_mqtt
[env:ThinkNode_M5_Repeater_observer_espnow]
extends = env:ThinkNode_M5_Repeater_observer
build_flags =
${env:ThinkNode_M5_Repeater_mqtt.build_flags}
${env:ThinkNode_M5_Repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:ThinkNode_M5_Repeater_mqtt.build_src_filter}
build_src_filter = ${env:ThinkNode_M5_Repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:WHY2025_badge_repeater_mqtt_bridge]
extends = env:WHY2025_badge_repeater_mqtt
[env:WHY2025_badge_repeater_observer_espnow]
extends = env:WHY2025_badge_repeater_observer
build_flags =
${env:WHY2025_badge_repeater_mqtt.build_flags}
${env:WHY2025_badge_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:WHY2025_badge_repeater_mqtt.build_src_filter}
build_src_filter = ${env:WHY2025_badge_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>
[env:Xiao_S3_WIO_repeater_mqtt_bridge]
extends = env:Xiao_S3_WIO_repeater_mqtt
[env:Xiao_S3_WIO_repeater_observer_espnow]
extends = env:Xiao_S3_WIO_repeater_observer
build_flags =
${env:Xiao_S3_WIO_repeater_mqtt.build_flags}
${env:Xiao_S3_WIO_repeater_observer.build_flags}
-D WITH_ESPNOW_BRIDGE=1
build_src_filter = ${env:Xiao_S3_WIO_repeater_mqtt.build_src_filter}
build_src_filter = ${env:Xiao_S3_WIO_repeater_observer.build_src_filter}
+<helpers/bridges/ESPNowBridge.cpp>