schema_version: 1 tracks: # снят с выпуска в 2026.10.0: линия companion-прошивок удалена из проекта, # трек остаётся в реестре для исторических записей релизов - companion-wifi - repeater-bridge-espnow - repeater-mqtt - repeater-mqtt-espnow - repeater-mqtt-bridge generated_from: "Adjacent git tag comparisons plus non-merge commit subjects." releases: - track: companion-wifi version: "1.14.1" tag: "companion-wifi-v1.14.1" date: "2026-04-09" previous_version: null summary: "First EastMesh companion_wifi release with persisted Wi-Fi CLI settings and EastMesh-specific docs and release plumbing." changes: - type: added area: companion-wifi text: "Added the EastMesh companion_wifi release track for supported boards." - type: added area: wifi text: "Added persisted Wi-Fi CLI settings so companion Wi-Fi devices can retain configured credentials across restart." - 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: docs text: "Refreshed the docs site structure and theme as part of the first EastMesh release set." breaking_changes: [] - track: companion-wifi version: "1.15.0" tag: "companion-wifi-v1.15.0" date: "2026-04-19" previous_version: "1.14.1" summary: "Prepares the next companion_wifi release on top of upstream MeshCore firmware v1.15.0." changes: - type: changed area: upstream text: "Updated the companion_wifi firmware base to upstream MeshCore v1.15.0." breaking_changes: [] - track: companion-wifi version: "1.16.0" tag: "companion-wifi-v1.16.0" date: "2026-06-07" previous_version: "1.15.0" summary: "Updates companion WiFi firmware to upstream MeshCore v1.16.0." changes: - type: changed area: upstream text: "Updated the companion WiFi firmware base to upstream MeshCore v1.16.0." - type: changed area: board text: "Included upstream board, UI, power-saving, and platform fixes from MeshCore dev." breaking_changes: [] - track: companion-wifi version: "1.17.0" tag: "companion-wifi-v1.17.0" date: "2026-08-09" previous_version: "1.16.0" summary: "Updates companion WiFi firmware to upstream MeshCore v1.17.0 with the new key-based settings format, interface manager, and a recovery access point for fixing Wi-Fi credentials without a serial cable." changes: - type: changed area: upstream text: "Updated the companion WiFi firmware base to upstream MeshCore v1.17.0." - type: added area: wifi text: "Added a recovery access point: when the device has no Wi-Fi credentials or cannot connect for 60 seconds, it broadcasts `EastMesh-WiFi` (WPA2 password = the device pin zero-padded to 8 digits) and shuts the AP down automatically once the configured network connects." - type: added area: cli text: "Exposed the rescue CLI over TCP port 23 on the recovery AP (`telnet 192.168.4.1`), so `set wifi.ssid`, `set wifi.pwd`, and `reboot` work without a serial cable." - type: added area: wifi text: "The companion app works over the recovery AP too: connect to host `192.168.4.1` port `5000` for full app connectivity while roaming away from the configured network." - type: added area: wifi text: "Gave companion WiFi builds the BLE-style device pin rules: displays show a per-session `Pin:NNNNNN` on the home screen, headless devices default to pin `123456` (AP password `00123456`), and `set pin` overrides both persistently." - type: fixed area: wifi text: "Kept the recovery AP joinable by pausing constant station rescans while it is up (they broke joining clients' WPA2 handshakes, which phones report as a wrong password); the configured network is retried once a minute instead." - type: changed area: prefs text: "Moved saved node settings to upstream's new key-based `prefs.json` format; existing settings, including persisted Wi-Fi credentials, are migrated automatically on first boot." - type: changed area: wifi text: "Adopted upstream's new interface manager so BLE, Wi-Fi, USB, and serial companion connections are handled uniformly, while keeping Wi-Fi credentials configurable at runtime." - type: changed area: board text: "Included upstream board, radio, display, UI, and platform fixes from MeshCore dev, including new board support and LR2021 radio groundwork." breaking_changes: - "Saved settings move to the new `prefs.json` format on first boot; downgrading to earlier firmware afterwards reverts the device to the old (pre-migration) settings file." - track: companion-wifi version: "1.17.1" tag: "companion-wifi-v1.17.1" date: "2026-08-15" previous_version: "1.17.0" summary: "Updates companion WiFi firmware to upstream MeshCore v1.17.1 with radio gain and board fixes." changes: - type: changed area: upstream text: "Updated the companion WiFi firmware base to upstream MeshCore v1.17.1." - type: fixed area: radio text: "Kept the user-configured RX boosted gain setting after an automatic gain control reset instead of reverting to the compiled-in default (SX126x radios)." - type: changed area: board text: "Included upstream board, radio, display, and platform fixes from MeshCore dev, including external FEM gain groundwork for companion builds." breaking_changes: [] - track: repeater-bridge-espnow version: "1.15.0" tag: "repeater-bridge-espnow-v1.15.0" date: "2026-05-05" previous_version: null summary: "Adds a tagged release workflow for upstream-versioned repeater ESP-NOW bridge firmware artifacts." changes: - type: added area: release text: "Added the `repeater-bridge-espnow-v*` release tag format and workflow for building repeater ESP-NOW bridge firmware artifacts using the official upstream MeshCore version." - type: fixed area: build text: "Kept pure ESP-NOW bridge targets out of the web-panel link path so they no longer fail with unresolved web service symbols." - type: docs area: release text: "Updated release guidance to document the repeater ESP-NOW bridge tag format and versioning rule." breaking_changes: [] - track: repeater-bridge-espnow version: "1.16.0" tag: "repeater-bridge-espnow-v1.16.0" date: "2026-06-07" previous_version: "1.15.0" summary: "Updates repeater ESP-NOW bridge firmware to upstream MeshCore v1.16.0." changes: - type: changed area: upstream text: "Updated the repeater ESP-NOW bridge firmware base to upstream MeshCore v1.16.0." - type: changed area: board text: "Included upstream board, radio, UI, and platform fixes from MeshCore dev." breaking_changes: [] - track: repeater-bridge-espnow version: "1.17.0" tag: "repeater-bridge-espnow-v1.17.0" date: "2026-08-09" previous_version: "1.16.0" summary: "Updates repeater ESP-NOW bridge firmware to upstream MeshCore v1.17.0 with the new key-based settings format." changes: - type: changed area: upstream text: "Updated the repeater ESP-NOW bridge firmware base to upstream MeshCore v1.17.0." - type: changed area: prefs text: "Moved saved node settings to upstream's new key-based `prefs.json` format; existing settings, including bridge configuration, are migrated automatically on first boot." - type: changed area: board text: "Included upstream board, radio, display, and platform fixes from MeshCore dev, including new board support and an external watchdog manager." breaking_changes: - "Saved settings move to the new `prefs.json` format on first boot; downgrading to earlier firmware afterwards reverts the device to the old (pre-migration) settings file." - track: repeater-bridge-espnow version: "1.17.1" tag: "repeater-bridge-espnow-v1.17.1" date: "2026-08-15" previous_version: "1.17.0" summary: "Updates repeater ESP-NOW bridge firmware to upstream MeshCore v1.17.1 with reply-routing improvements and radio gain fixes." changes: - type: changed area: upstream text: "Updated the repeater ESP-NOW bridge firmware base to upstream MeshCore v1.17.1." - type: changed area: mesh text: "Improved reply routing: direct requests now reply over the stored return path when one is known, and replies fall back to the repeater's default scope when the request scope is unknown, instead of always flooding un-scoped." - type: fixed area: radio text: "Kept the user-configured RX boosted gain setting after an automatic gain control reset instead of reverting to the compiled-in default (SX126x radios)." - type: added area: cli text: "Added `get radio.fem.txgain` and `set radio.fem.txgain on|off` for boards with a controllable external FEM PA gain (such as Station G3)." - type: changed area: board text: "Included upstream board, radio, display, and platform fixes from MeshCore dev." breaking_changes: [] - track: repeater-mqtt 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: changed area: release text: "Renamed the EastMesh MQTT release tag format from `repeater-mqtt-eastmesh-v*` to `observer-eastmesh-v*`." - type: changed area: build text: "Renamed `*_repeater_mqtt` PlatformIO environments and release artifact prefixes to `*_repeater_mqtt`." - type: docs area: docs text: "Updated EastMesh release, local build, board, web panel, API, and CLI documentation to use Observer naming." breaking_changes: - "The EastMesh MQTT release tag format and PlatformIO target suffix changed to Observer naming." - track: repeater-mqtt version: "2026.6.0" tag: "observer-eastmesh-v2026.6.0" date: "2026-06-03" previous_version: "2026.5.1" summary: "Updates Observer firmware with the latest upstream MeshCore dev changes plus EastMesh web panel, MQTT, radio, and board support fixes." changes: - type: added area: mqtt text: "Added configurable custom MQTT broker support alongside the curated EastMesh and LetsMesh endpoints." - type: added area: build text: "Added Station G3 ESP32 Observer firmware targets." - type: added area: cli text: "Added `flood.max.unscoped` so unscoped flood packets can use a separate hop limit from scoped flood traffic." - type: fixed area: web text: "Preserved web panel sessions across Wi-Fi reconnects and hardened OTA startup from the local web panel." - type: fixed area: radio text: "Hardened LilyGo T-Beam 1W radio setup and restored the missing SX126x register patch." - type: changed area: upstream text: "Merged upstream MeshCore dev updates including sensor handling, RAK4631 BME680/BSEC support, documentation refreshes, and board/platform fixes." breaking_changes: [] - track: repeater-mqtt version: "2026.6.1" tag: "observer-eastmesh-v2026.6.1" date: "2026-06-07" previous_version: "2026.6.0" summary: "Updates Observer firmware to upstream MeshCore v1.16.0 with flood-advert controls and board/platform fixes." changes: - type: added area: cli text: "Added `flood.max.advert` so flooded advert packets can use their own hop limit." - type: changed area: upstream text: "Merged upstream MeshCore v1.16.0 dev updates including companion UI, board, radio, power-saving, documentation, and platform fixes." - type: docs area: docs text: "Updated EastMesh custom CLI docs for the new `flood.max.advert` command." breaking_changes: [] - track: repeater-mqtt version: "2026.6.2" tag: "observer-eastmesh-v2026.6.2" date: "2026-06-07" previous_version: "2026.6.1" summary: "Improves Observer boot reliability, T-Beam S3 Supreme telemetry, Wi-Fi/OTA persistence, and web-panel archive maintenance." changes: - type: fixed area: board text: "Fixed LilyGo T-Beam S3 Supreme BME280 detection and live telemetry by using the board-detected address, stop-based I2C reads, and board-specific I2C bus recovery before samples." - type: fixed area: web text: "Changed live `/stats` sensor values to use the main-loop sensor snapshot instead of reading I2C sensors from the web request handler." - type: fixed area: wifi text: "Improved boot-time Wi-Fi startup by starting Wi-Fi earlier on T-Beam S3 Supreme, remembering the last connected AP channel, and falling back to full scan if that channel is stale." - type: fixed area: wifi text: "Added NVS-backed Wi-Fi preference recovery so SSID and password survive OTA updates even if the filesystem preference file is lost." - type: fixed area: wifi text: "Hardened Wi-Fi retry handling so scan-mode connects are not interrupted early and failed attempts reset the ESP32 station state before retrying." - type: fixed area: cli text: "Fixed `set wifi.powersaving none` returning an error when Wi-Fi power saving was already disabled." - type: fixed area: archive text: "Bounded archive neighbour restore and history reads so large SD-card archive files no longer slow boot unnecessarily." - type: added area: web text: "Added a web-panel and CLI SD purge action for clearing archive contents from supported SD-card targets." - type: fixed area: web text: "Hardened OTA startup by binding before reporting success and falling back to alternate ports when port 80 is still being released." breaking_changes: [] - track: repeater-mqtt version: "2026.6.3" tag: "observer-eastmesh-v2026.6.3" date: "2026-06-09" previous_version: "2026.6.2" summary: "Adds secure WebSocket transport support for custom MQTT brokers from the Observer web panel and CLI." changes: - type: added area: mqtt text: "Added TCP/WSS transport selection for custom MQTT brokers while keeping custom broker authentication to username and password only." - type: fixed area: mqtt text: "Verified custom MQTT WSS connections with the ESP-IDF x509 root CA bundle and the fixed `/mqtt` WebSocket path." - type: fixed area: mqtt text: "Configured custom MQTT WSS using a full `wss://host:port/mqtt` URI so ESP-MQTT handles the WebSocket connection consistently." - type: changed area: cli text: "Updated `get mqtt.status` to show the custom MQTT transport and state, for example `custom:wss:up`." - type: docs area: docs text: "Documented custom MQTT TCP/WSS configuration in the web panel and custom CLI guides." breaking_changes: [] - track: repeater-mqtt version: "2026.6.4" tag: "observer-eastmesh-v2026.6.4" date: "2026-06-23" previous_version: "2026.6.3" summary: "Replaces the retired LetsMesh brokers with the MeshMapper broker and reworks broker selection into Primary and Secondary slots." changes: - type: added area: mqtt text: "Added the `meshmapper` curated broker (`wss://mqtt.meshmapper.net:443/mqtt`) using WSS, verified TLS, and MeshCore JWT authentication with the broker host as the token audience." - type: added area: cli text: "Added `get mqtt.meshmapper` and `set mqtt.meshmapper on|off` to toggle the MeshMapper broker." - type: changed area: mqtt text: "Retired the unmaintained LetsMesh EU/US brokers: they remain selectable but are marked retired, and saved selections are cleared once on upgrade so dead brokers stop retrying." - type: changed area: web text: "Replaced the EastMesh and LetsMesh sliders and the custom MQTT toggle with Primary and Secondary broker dropdowns that enforce the two-broker maximum and reveal custom host, username, and password fields when Custom is selected." - type: changed area: cli text: "Shortened `get mqtt.status` to report the two active broker slots as `p::` and `s::` so the reply stays within the LoRa text limit." - type: docs area: docs text: "Updated the README, web panel, and custom CLI guides for MeshMapper and the Primary/Secondary broker layout." breaking_changes: - "`get mqtt.status` output changed from per-broker fields to `p:`/`s:` broker slots; anything parsing the previous format must be updated." - "Saved LetsMesh EU/US broker selections are cleared once on upgrade; re-enable a broker such as MeshMapper if a second uplink is required." - track: repeater-mqtt version: "2026.6.5" tag: "observer-eastmesh-v2026.6.5" date: "2026-06-26" previous_version: "2026.6.4" summary: "Adds the Waev curated MQTT broker and makes the Custom MQTT settings panel full width when Custom is selected." changes: - type: added area: mqtt text: "Added the `waev` curated broker (`wss://mqtt.waev.app:443/mqtt`) using WSS, verified TLS, and MeshCore JWT authentication with the broker host as the token audience." - type: added area: cli text: "Added `get mqtt.waev` and `set mqtt.waev on|off` to toggle the Waev broker." - type: added area: mqtt text: "Added per-broker JWT token lifetimes so Waev receives a 1-hour token to match its shorter maximum token lifetime." - type: fixed area: web text: "Made the Custom MQTT settings panel span the full width of the MQTT Servers card when Custom is selected." - type: docs area: docs text: "Documented the Waev broker in the README and custom CLI guides." breaking_changes: [] - track: repeater-mqtt version: "2026.6.6" tag: "observer-eastmesh-v2026.6.6" date: "2026-06-27" previous_version: "2026.6.5" summary: "Adds cumulative packet counters to the MQTT status payload so brokers receive radio TX/RX totals." changes: - type: added area: mqtt text: "Added `packets_sent` and `packets_received` counters to the MQTT `status` payload `stats` object, reporting cumulative radio TX/RX packet totals to align with the Waev/MeshMapper status schema." breaking_changes: [] - track: repeater-mqtt version: "2026.7.0" tag: "observer-eastmesh-v2026.7.0" date: "2026-07-19" previous_version: "2026.6.6" summary: "Syncs Observer firmware with the latest upstream MeshCore dev changes, realigns saved settings storage with upstream, and restores EastMesh/MeshMapper broker TLS trust." changes: - type: changed area: upstream text: "Merged upstream MeshCore dev updates including power-off/deep-sleep improvements, SX1262 LDO support, hardware channel-activity detection, radio gain fixes, and board/platform fixes." - type: fixed area: prefs text: "Realigned saved node settings to upstream byte offsets and moved EastMesh-specific fields behind a reserved gap so future upstream syncs no longer shift or corrupt them." - type: fixed area: mqtt text: "Restored EastMesh and MeshMapper broker TLS trust after mqtt2.eastmesh.au moved from Let's Encrypt to a Google Trust Services certificate." - type: changed area: build text: "Bumped CI build and docs workflows to Python 3.13." breaking_changes: - "The saved settings layout changed; devices upgrading from 2026.6.6 or earlier may need EastMesh-specific settings (such as fan control and bridge peer) and recently added radio settings reconfigured." - track: repeater-mqtt version: "2026.8.0" tag: "observer-eastmesh-v2026.8.0" date: "2026-08-09" previous_version: "2026.7.0" summary: "Updates Observer firmware to upstream MeshCore v1.17.0 with the new key-based settings format and fixes the web panel becoming unreachable after long uptimes." changes: - type: changed area: upstream text: "Merged upstream MeshCore v1.17.0 including new board support, ethernet interface groundwork, LR2021 radio support, display and UI improvements, and platform fixes." - type: changed area: prefs text: "Moved saved node settings to upstream's new key-based `prefs.json` format; existing settings, including EastMesh fan control and bridge peer configuration, are migrated automatically on first boot." - type: fixed area: web text: "Fixed the web panel refusing connections (browser `PR_CONNECT_RESET_ERROR`) after long uptimes by evicting stale keep-alive connections instead of letting vanished clients permanently occupy the connection pool." breaking_changes: - "Saved settings move to the new `prefs.json` format on first boot; downgrading to earlier firmware afterwards reverts the device to the old (pre-migration) settings file." - track: repeater-mqtt version: "2026.8.1" tag: "observer-eastmesh-v2026.8.1" date: "2026-08-09" previous_version: "2026.8.0" summary: "Hardens T-Beam S3 Supreme display bring-up so a failed boot-time OLED probe can no longer crash-loop the node." changes: - type: fixed area: board text: "Restored the proven T-Beam S3 Supreme SH1106 bring-up order (initialise the display before probing the bus, which can NAK cold probes on this board) so the OLED reliably comes up at boot." - type: fixed area: board text: "Made a failed or absent SH1106 display boot the node headless instead of crash-looping: display operations are now safe no-ops when the boot-time initialisation did not succeed." breaking_changes: [] - track: repeater-mqtt version: "2026.8.2" tag: "observer-eastmesh-v2026.8.2" date: "2026-08-15" previous_version: "2026.8.1" summary: "Adds a Wi-Fi gateway connectivity watchdog so observers recover from APs that stay associated after losing their uplink, and updates to upstream MeshCore v1.17.1." changes: - type: added area: wifi text: "Added a gateway connectivity watchdog: while connected, the node ARP-probes its gateway every 30 seconds, and if the gateway stays silent for 3 minutes it forces a full disconnect and rescan so the node can roam to a healthy AP, backing off up to 48 minutes between attempts while the outage persists." - type: added area: cli text: "Added `wifi reconnect` to drop the current association and rejoin from a full channel scan, for nodes that report connected but are unreachable over the network." - type: changed area: cli text: "Extended `get wifi.status` with gateway health (`gw:ok|lost`) and the watchdog reconnect count (`wd:`), which the web panel now also shows." - type: changed area: upstream text: "Merged upstream MeshCore v1.17.1 including improved reply routing (direct requests reply over known return paths, and replies fall back to the default scope when the request scope is unknown), LR2021 radio improvements, and board/platform fixes." - type: fixed area: radio text: "Kept the user-configured RX boosted gain setting after an automatic gain control reset instead of reverting to the compiled-in default (SX126x radios)." - type: fixed area: board text: "Adopted upstream's SH1106 display address fallback (0x3C/0x3D) so board revisions with the other SA0 strap setting still get a working display, while keeping the EastMesh T-Beam S3 Supreme bring-up order and headless fallback." breaking_changes: [] - track: repeater-mqtt version: "2026.8.3" tag: "observer-eastmesh-v2026.8.3" date: "2026-08-23" previous_version: "2026.8.2" summary: "Fixes the web panel going unreachable after long uptimes due to internal heap fragmentation, adds web panel self-healing and heap-health CLI counters, fixes the stats page Channel/Gateway cells, and keeps the T-Beam 1W external PA ramp time from being reset by TX power changes." changes: - type: fixed area: web text: "Fixed the web panel becoming unreachable after days of uptime while LoRa and MQTT kept working: browser page-load bursts were evicting live HTTPS sessions and forcing repeated TLS handshakes, fragmenting internal RAM until no handshake could be allocated. One-shot responses (pages, favicon, login, redirect, 401s) now release their socket immediately, while the authenticated API connection keeps keep-alive." - type: added area: web text: "Added web panel self-healing: the HTTPS server now refuses to start without enough internal heap headroom (retrying every 15 seconds), and restarts itself when idle if the largest free block shrinks below what a TLS handshake needs." - type: changed area: cli text: "Extended `get web.status` with `heals:` and `deferred:`, and `get mqtt.status` with `leaked:` (MQTT clients abandoned after a heap-integrity failure), so heap-related failures are visible over LoRa." - type: fixed area: web text: "Fixed the Channel and Gateway cells on the web panel stats page always showing `--`; the stats summary now carries the Wi-Fi channel, gateway health, and watchdog reconnect count." - type: fixed area: radio text: "Fixed the LilyGo T-Beam 1W external PA ramp time being silently reset from 800 µs back to RadioLib's 200 µs default whenever TX power was applied (at boot and via `set tx`); every power change now re-applies the 800 µs ramp the external PA requires." - type: added area: tools text: "Added `eastmesh-tools/web-heap-check.sh` to read heap and service health over the HTTPS API and optionally stress the web panel with browser-style bursts." breaking_changes: [] - track: repeater-mqtt version: "2026.10.0" tag: "repeater-mqtt-v2026.10.0" date: "2026-10-07" previous_version: "2026.8.3" summary: "Полный рефакторинг под PosadMesh: переименованы папки, скрипты, цели сборки и треки (observer → mqtt), документация переведена на русский, удалены брокеры waev/meshmapper/letsmesh и линия companion-прошивок, репозиторий переехал на git.meshinfo.ru с локальной сборкой релизов, база обновлена до upstream MeshCore v1.17.1." changes: - type: changed area: upstream text: "База прошивки обновлена до upstream MeshCore v1.17.1." - type: changed area: release text: "Проект переименован в PosadMesh и переведён на имена MQTT: папки и скрипты (`eastmesh-docs` → `posadmesh-docs`, `eastmesh-tools` → `posadmesh-tools`, `eastmesh-build.sh` → `posadmesh-build.sh`), цели сборки (`*_repeater_observer*` → `*_repeater_mqtt*`), треки релизов (`observer-eastmesh*` → `repeater-mqtt*`), форматы тегов (`repeater-mqtt-v*`, `repeater-mqtt-espnow-v*`, `repeater-mqtt-bridge-v*`), суффикс версии сборки (`-posadmesh-`) и переменная версии релиза (`EASTMESH_VERSION` → `POSADMESH_VERSION`)." - type: changed area: release text: "Удалена линия companion-прошивок: трек `companion-wifi` и команды сборки companion убраны из проекта, остаются только MQTT-сборки. Цели и код companion в upstream-оверлеях не изменялись." - type: fixed area: build text: "Сборка по группам снова работает: команды искали окружения по устаревшим суффиксам `_repeater_observer*`, а на Windows имена окружений приходили с символом `\\r`, из-за чего не находилось ни одной цели. Теперь используются реальные суффиксы `_repeater_mqtt*`, вывод PlatformIO очищается от `\r`, добавлены команды `build-mqtt-firmwares` (все MQTT-треки) и `list-mqtt`." - type: docs area: docs text: "Документация переведена на русский язык: `posadmesh-docs/*.md`, `README.md`, `RELEASE.md` и `AGENTS.md`. Команды, их вывод, код, пути и идентификаторы оставлены без перевода." - type: changed area: release text: "Репозиторий переехал на , workflow GitHub Actions удалены: прошивки собираются локально через `posadmesh-build.sh`, а теги и релизы создаются вручную в веб-интерфейсе git.meshinfo.ru." - type: changed area: mqtt text: "Удалены брокеры `waev`, `meshmapper` и `letsmesh-eu`/`letsmesh-us` — из прошивки, веб-панели и документации; остались `mqtt.meshcoretel` и `mqtt.custom`. Сохранённые выборы удалённых брокеров сбрасываются один раз при обновлении." - type: fixed area: cli text: "Исправлена команда `set mqtt.meshcoretel on|off`: обработчик сравнивался со строкой `set mqtt.mqtt.meshcoretel `, из-за чего команда не срабатывала. Заодно алиас `set mqtt.meshcoretel.ru on|off` читает значение по правильному смещению, а не всегда выключает брокер." - type: fixed area: mqtt text: "Исправлено молчаливое отключение собственного брокера: `setEndpointEnabled` маскировал сохранённую маску брокеров значением `0x07` и терял бит custom при переключении любого другого брокера." - type: fixed area: web text: "Исправлена разметка страницы логина: незакрытый тег `:` and `s::` so the reply stays within the LoRa text limit." - type: docs area: docs text: "Updated the README, web panel, and custom CLI guides for MeshMapper and the Primary/Secondary broker layout." breaking_changes: - "`get mqtt.status` output changed from per-broker fields to `p:`/`s:` broker slots; anything parsing the previous format must be updated." - "Saved LetsMesh EU/US broker selections are cleared once on upgrade; re-enable a broker such as MeshMapper if a second uplink is required." - track: repeater-mqtt-espnow version: "2026.6.5" tag: "observer-eastmesh-bridge-espnow-v2026.6.5" date: "2026-06-26" previous_version: "2026.6.4" summary: "Adds the Waev curated MQTT broker and makes the Custom MQTT settings panel full width in Observer ESP-NOW bridge builds." changes: - type: added area: mqtt text: "Added the `waev` curated broker (`wss://mqtt.waev.app:443/mqtt`) using WSS, verified TLS, and MeshCore JWT authentication with the broker host as the token audience." - type: added area: cli text: "Added `get mqtt.waev` and `set mqtt.waev on|off` to toggle the Waev broker." - type: added area: mqtt text: "Added per-broker JWT token lifetimes so Waev receives a 1-hour token to match its shorter maximum token lifetime." - type: fixed area: web text: "Made the Custom MQTT settings panel span the full width of the MQTT Servers card when Custom is selected." - type: docs area: docs text: "Documented the Waev broker in the README and custom CLI guides." breaking_changes: [] - track: repeater-mqtt-espnow version: "2026.6.6" tag: "observer-eastmesh-bridge-espnow-v2026.6.6" date: "2026-06-27" previous_version: "2026.6.5" summary: "Adds cumulative packet counters to the MQTT status payload so brokers receive radio TX/RX totals." changes: - type: added area: mqtt text: "Added `packets_sent` and `packets_received` counters to the MQTT `status` payload `stats` object, reporting cumulative radio TX/RX packet totals to align with the Waev/MeshMapper status schema." breaking_changes: [] - track: repeater-mqtt-espnow version: "2026.7.0" tag: "observer-eastmesh-bridge-espnow-v2026.7.0" date: "2026-07-19" previous_version: "2026.6.6" summary: "Syncs Observer ESP-NOW bridge firmware with the latest upstream MeshCore dev changes, realigns saved settings storage with upstream, and restores EastMesh/MeshMapper broker TLS trust." changes: - type: changed area: upstream text: "Merged upstream MeshCore dev updates including power-off/deep-sleep improvements, SX1262 LDO support, hardware channel-activity detection, radio gain fixes, and board/platform fixes." - type: fixed area: prefs text: "Realigned saved node settings to upstream byte offsets and moved EastMesh-specific fields behind a reserved gap so future upstream syncs no longer shift or corrupt them." - type: fixed area: mqtt text: "Restored EastMesh and MeshMapper broker TLS trust after mqtt2.eastmesh.au moved from Let's Encrypt to a Google Trust Services certificate." - type: changed area: build text: "Bumped CI build and docs workflows to Python 3.13." breaking_changes: - "The saved settings layout changed; devices upgrading from 2026.6.6 or earlier may need EastMesh-specific settings (such as fan control and bridge peer) and recently added radio settings reconfigured." - track: repeater-mqtt-espnow version: "2026.8.0" tag: "observer-eastmesh-bridge-espnow-v2026.8.0" date: "2026-08-09" previous_version: "2026.7.0" summary: "Updates Observer ESP-NOW bridge firmware to upstream MeshCore v1.17.0 with the new key-based settings format and fixes the web panel becoming unreachable after long uptimes." changes: - type: changed area: upstream text: "Merged upstream MeshCore v1.17.0 including new board support, ethernet interface groundwork, LR2021 radio support, display and UI improvements, and platform fixes." - type: changed area: prefs text: "Moved saved node settings to upstream's new key-based `prefs.json` format; existing settings, including EastMesh fan control and bridge peer configuration, are migrated automatically on first boot." - type: fixed area: web text: "Fixed the web panel refusing connections (browser `PR_CONNECT_RESET_ERROR`) after long uptimes by evicting stale keep-alive connections instead of letting vanished clients permanently occupy the connection pool." breaking_changes: - "Saved settings move to the new `prefs.json` format on first boot; downgrading to earlier firmware afterwards reverts the device to the old (pre-migration) settings file." - track: repeater-mqtt-espnow version: "2026.8.1" tag: "observer-eastmesh-bridge-espnow-v2026.8.1" date: "2026-08-09" previous_version: "2026.8.0" summary: "Hardens T-Beam S3 Supreme display bring-up so a failed boot-time OLED probe can no longer crash-loop the node." changes: - type: fixed area: board text: "Restored the proven T-Beam S3 Supreme SH1106 bring-up order (initialise the display before probing the bus, which can NAK cold probes on this board) so the OLED reliably comes up at boot." - type: fixed area: board text: "Made a failed or absent SH1106 display boot the node headless instead of crash-looping: display operations are now safe no-ops when the boot-time initialisation did not succeed." breaking_changes: [] - track: repeater-mqtt-espnow version: "2026.8.2" tag: "observer-eastmesh-bridge-espnow-v2026.8.2" date: "2026-08-15" previous_version: "2026.8.1" summary: "Adds the Wi-Fi gateway connectivity watchdog to Observer ESP-NOW bridge builds and updates to upstream MeshCore v1.17.1." changes: - type: added area: wifi text: "Added a gateway connectivity watchdog: while connected, the node ARP-probes its gateway every 30 seconds, and if the gateway stays silent for 3 minutes it forces a full disconnect and rescan so the node can roam to a healthy AP, backing off up to 48 minutes between attempts while the outage persists." - type: added area: cli text: "Added `wifi reconnect` to drop the current association and rejoin from a full channel scan, for nodes that report connected but are unreachable over the network." - type: changed area: cli text: "Extended `get wifi.status` with gateway health (`gw:ok|lost`) and the watchdog reconnect count (`wd:`), which the web panel now also shows." - type: changed area: upstream text: "Merged upstream MeshCore v1.17.1 including improved reply routing (direct requests reply over known return paths, and replies fall back to the default scope when the request scope is unknown), LR2021 radio improvements, and board/platform fixes." - type: fixed area: radio text: "Kept the user-configured RX boosted gain setting after an automatic gain control reset instead of reverting to the compiled-in default (SX126x radios)." - type: fixed area: board text: "Adopted upstream's SH1106 display address fallback (0x3C/0x3D) so board revisions with the other SA0 strap setting still get a working display, while keeping the EastMesh T-Beam S3 Supreme bring-up order and headless fallback." breaking_changes: [] - track: repeater-mqtt-espnow version: "2026.8.3" tag: "observer-eastmesh-bridge-espnow-v2026.8.3" date: "2026-08-23" previous_version: "2026.8.2" summary: "Fixes the web panel going unreachable after long uptimes due to internal heap fragmentation, adds web panel self-healing and heap-health CLI counters, fixes the stats page Channel/Gateway cells, and keeps the T-Beam 1W external PA ramp time from being reset by TX power changes." changes: - type: fixed area: web text: "Fixed the web panel becoming unreachable after days of uptime while LoRa and MQTT kept working: browser page-load bursts were evicting live HTTPS sessions and forcing repeated TLS handshakes, fragmenting internal RAM until no handshake could be allocated. One-shot responses (pages, favicon, login, redirect, 401s) now release their socket immediately, while the authenticated API connection keeps keep-alive." - type: added area: web text: "Added web panel self-healing: the HTTPS server now refuses to start without enough internal heap headroom (retrying every 15 seconds), and restarts itself when idle if the largest free block shrinks below what a TLS handshake needs." - type: changed area: cli text: "Extended `get web.status` with `heals:` and `deferred:`, and `get mqtt.status` with `leaked:` (MQTT clients abandoned after a heap-integrity failure), so heap-related failures are visible over LoRa." - type: fixed area: web text: "Fixed the Channel and Gateway cells on the web panel stats page always showing `--`; the stats summary now carries the Wi-Fi channel, gateway health, and watchdog reconnect count." - type: fixed area: radio text: "Fixed the LilyGo T-Beam 1W external PA ramp time being silently reset from 800 µs back to RadioLib's 200 µs default whenever TX power was applied (at boot and via `set tx`); every power change now re-applies the 800 µs ramp the external PA requires." - type: added area: tools text: "Added `eastmesh-tools/web-heap-check.sh` to read heap and service health over the HTTPS API and optionally stress the web panel with browser-style bursts." breaking_changes: [] - track: repeater-mqtt-espnow version: "2026.10.0" tag: "repeater-mqtt-espnow-v2026.10.0" date: "2026-10-07" previous_version: "2026.8.3" summary: "Полный рефакторинг под PosadMesh в сборках MQTT-репитера с ESP-NOW мостом: переименованы папки, скрипты, цели сборки и треки (observer → mqtt), документация переведена на русский, удалены брокеры waev/meshmapper/letsmesh и линия companion-прошивок, репозиторий переехал на git.meshinfo.ru с локальной сборкой релизов, база обновлена до upstream MeshCore v1.17.1." changes: - type: changed area: upstream text: "База прошивки обновлена до upstream MeshCore v1.17.1." - type: changed area: release text: "Проект переименован в PosadMesh и переведён на имена MQTT: папки и скрипты (`eastmesh-docs` → `posadmesh-docs`, `eastmesh-tools` → `posadmesh-tools`, `eastmesh-build.sh` → `posadmesh-build.sh`), цели сборки (`*_repeater_observer*` → `*_repeater_mqtt*`), треки релизов (`observer-eastmesh*` → `repeater-mqtt*`), форматы тегов (`repeater-mqtt-v*`, `repeater-mqtt-espnow-v*`, `repeater-mqtt-bridge-v*`), суффикс версии сборки (`-posadmesh-`) и переменная версии релиза (`EASTMESH_VERSION` → `POSADMESH_VERSION`)." - type: changed area: release text: "Удалена линия companion-прошивок: трек `companion-wifi` и команды сборки companion убраны из проекта, остаются только MQTT-сборки. Цели и код companion в upstream-оверлеях не изменялись." - type: fixed area: build text: "Сборка по группам снова работает: команды искали окружения по устаревшим суффиксам `_repeater_observer*`, а на Windows имена окружений приходили с символом `\\r`, из-за чего не находилось ни одной цели. Теперь используются реальные суффиксы `_repeater_mqtt*`, вывод PlatformIO очищается от `\r`, добавлены команды `build-mqtt-firmwares` (все MQTT-треки) и `list-mqtt`." - type: docs area: docs text: "Документация переведена на русский язык: `posadmesh-docs/*.md`, `README.md`, `RELEASE.md` и `AGENTS.md`. Команды, их вывод, код, пути и идентификаторы оставлены без перевода." - type: changed area: release text: "Репозиторий переехал на , workflow GitHub Actions удалены: прошивки собираются локально через `posadmesh-build.sh`, а теги и релизы создаются вручную в веб-интерфейсе git.meshinfo.ru." - type: changed area: mqtt text: "Удалены брокеры `waev`, `meshmapper` и `letsmesh-eu`/`letsmesh-us` — из прошивки, веб-панели и документации; остались `mqtt.meshcoretel` и `mqtt.custom`. Сохранённые выборы удалённых брокеров сбрасываются один раз при обновлении." - type: fixed area: cli text: "Исправлена команда `set mqtt.meshcoretel on|off`: обработчик сравнивался со строкой `set mqtt.mqtt.meshcoretel `, из-за чего команда не срабатывала. Заодно алиас `set mqtt.meshcoretel.ru on|off` читает значение по правильному смещению, а не всегда выключает брокер." - type: fixed area: mqtt text: "Исправлено молчаливое отключение собственного брокера: `setEndpointEnabled` маскировал сохранённую маску брокеров значением `0x07` и терял бит custom при переключении любого другого брокера." - type: fixed area: web text: "Исправлена разметка страницы логина: незакрытый тег `