# MeshCore Observer - Changelog Changes to the MQTT observer / bridge work that powers the firmware offered on [observer.gessaman.com](https://observer.gessaman.com/). Newest changes are at the top. **Legend:** **New** = new capability * **Fix** = bug fix * **Improvement** = enhancement to existing behavior * **Internal** = refactor / under-the-hood * **Docs** = documentation * **Build** / **CI** = build system & automation. **[UP] Upstream sync** marks a merge of the upstream MeshCore `dev` branch, which generally pulls in a new MeshCore software version. ### August 2026 - **New** - Added Heltec V4 R8 OLED and TFT MQTT observer targets, including portrait TFT variants 2026-08-28 - **New** - Added a dark R8 TFT observer dashboard with a rolling 20-minute RF activity graph and partial row redraws 2026-08-28 - **New** - Added live, persisted `display.timeout` and relative 180-degree `display.flip` observer controls 2026-08-28 - **Fix** - Corrected the R8 TFT backlight polarity and made blank/wake preserve the reset line shared with its touch controller 2026-08-28 - **Fix** - Preserved rollback-readable Companion MQTT preferences and added a strict, one-time `/mqtt.json` observer migration without deleting the source file 2026-08-28 - **Improvement** - Made Companion command `0x42` framed CLI the canonical hardware-settings path while retaining both older binary command ranges as receive-only aliases 2026-08-28 - **Fix** - Strengthened observer OTA shutdown gating and enabled the WiFi/WebConfig overlay consistently for ESP32 Full Companion builds 2026-08-28 - **Improvement** - Added a WebConfig CLI terminal, tightened command failure/reboot handling, stopped secret reads, and enforced the setup password 2026-08-08 * `d7109c18`, `c831e599`, `8abe26ba` - **New** * `mqtt` - Added IdahoMesh, GoMesh, okimesh, and atvirastinklas presets; expanded the built-in preset table to 31 entries 2026-08-08 * `da37b6eb`, `3b11540e`, `73faa30c`, `dbee39b5` - **New** - Enabled online OTA for Station G3 observer builds 2026-08-08 * `5000391c` - **New** - Configurable repeater telemetry history plus the browser decoder 2026-08-05 * `3ba0fb18`, `64f99420` - **Improvement** * `mqtt-neighbors` - Enabled neighbor publication on opted-in non-PSRAM observers and fixed unusable heard ages 2026-08-03 * `a3a0a94d`, `5828a3c5` - **Fix** - Restored nRF52 builds after observer-only dependencies leaked into the common build path 2026-08-03 * `45379ad7` - [UP] **Upstream sync** - Promoted the observer channel onto MeshCore v1.17.0-era upstream changes 2026-08-09 * `b744b42a` ### July 2026 - **New** * `webconfig` - Added the ESP32 WebConfig portal, request/result correlation, batch-state tests, and administrator-password management 2026-07-21 * `a7c1cc63`, `dc44311e`, `cece565e`, `675bc6b5` - **Fix** * `mqtt` - Added cooperative MQTT shutdown, a clean-stop OTA barrier, and a hardware-derived slot-scaled stop timeout 2026-07-19 * `2e1a1410`, `7767760f` - **New** * `mqtt` - Added periodic neighbor publication, host-tested JSON construction, preferences, and WebConfig controls 2026-07-19 * `de320bc4`, `e36aee04`, `8d7a47ab`, `d6f8a871` - **Fix** * `mqtt` - Made preference migration power-loss recoverable, restored PSRAM buffers after restart, and added representative CI firmware guardrails 2026-07-18 * `1be09b9b`, `b5deaf93`, `7b60ee70` - **New** * `mqtt` - Added per-slot packet allowlists with named payload types and downgrade-safe preference handling 2026-07-28 * `e00b29b4`, `52bd2719`, `ecbb5005` - **New** - Added standalone WebConfig CLI controls and shared Wi-Fi OTA-seeder policy for Full ESP32 roles 2026-07-29 * `a6ace607`, `e6abf3ea` - **Fix** * `mqtt` - Preserved observer capture and remote administration when duty-cycle throttling fills the packet pool 2026-07-09 * `1c9c6292`, `847be34e` - [UP] **Upstream sync** - Synced the observer development channel with upstream dev through 2026-07-30 2026-07-30 * `612c5213` ### June 2026 - **Fix** * `kiss_modem` - Prevented USB TX backpressure from stalling the modem and added its separate native CI suite 2026-06-23 * `fb2c61f8`, `39ff5b87` - **New** - AlertReporter integration in MyMesh for Room Server 2026-06-17 * `985fda13` - **Improvement** - Cumulative packet statistics (`packets_sent` / `packets_received`) added to the status message 2026-06-16 * `8bf590b1` - **Improvement** - Packet path now published as an array of lowercase hex hop tokens 2026-06-16 * `e80a5ded` - **CI** - Sync documentation files to the flasher site from the build workflow 2026-06-16 * `0844eee1` - **CI** - Reworked the GitHub Actions workflow for rolling releases 2026-06-08 * `8fa38707` - **New** - Radio Watchdog feature for the MQTT observer 2026-06-08 * `002e8d4a` - **Improvement** - Firmware build-date format and UTC timestamps (always emit `+00:00`) 2026-06-06 * `b45373a3` - **CI** - Build observer firmwares across 14 shards (up from 4) 2026-06-06 * `c29ede05` - **CI** - Cache PlatformIO toolchains in CI 2026-06-06 * `6723776f` - **CI** - Automated firmware builds via GitHub Actions 2026-06-06 * `981ed246` - [UP] **Upstream sync** - Synced with upstream MeshCore dev (brings MeshCore v1.16.0) 2026-06-06 * `dcc8f826` ### May 2026 - **New** - NZ Analyzer MQTT preset 2026-05-25 * `c0c845f5` - **Internal** - Region definition helpers; docs refresh 2026-05-21 * `1296aa77` - **Docs** - Clarified WiFi configuration instructions (password optional for open networks) 2026-05-21 * `38568eb1` - **Improvement** - Alert PSK access now restricted by sender timestamp 2026-05-17 * `f717d673` - **Docs** - Trimmed the fault-alert section in the implementation guide 2026-05-17 * `c41805d0` - **Change** - Renamed CLI command `region bulk` -> `region def` 2026-05-16 * `f3c6c348` - **Internal** - Timestamp handling in MQTTMessageBuilder 2026-05-15 * `5a004f37` - **New** - T-LoRa V2.1-1.6 observer configurations 2026-05-13 * `3cde9c10` - **Fix** * `mqtt` - Hardened the T-LoRa MQTT observer and trimmed MQTT task stack usage 2026-05-13 * `daf9ee47` - **Internal** - Alert PSK handling is now hex-only 2026-05-12 * `a8668840` - **Improvement** - Alert PSK accepts both base64 and hex 2026-05-12 * `a865d0a3` - **New** * `cli` - Bulk region hierarchy command 2026-05-12 * `19f95001` - **Improvement** - Path hash size included in AlertReporter flood messages 2026-05-11 * `6a3ed5d4` - **New** - T-Beam 1W observer support and partition handling 2026-05-11 * `fc99d6b3` - **Improvement** - Fault alerts gained region-based scoping and banned channels 2026-05-11 * `16dc49fa` - **New** - Fault alerts for WiFi and MQTT disconnections 2026-05-10 * `80355f32` - **New** - ColoradoMesh MQTT preset 2026-05-10 * `08847342` - **New** - MQTT origin handling and a string utility 2026-05-09 * `b9f478c9` - **Improvement** - Repeat status included in the MQTT status message 2026-05-09 * `303cf8c2` - **Internal** - MQTT origin now uses effective-origin logic 2026-05-09 * `ff031f48` - [UP] **Upstream sync** - Synced with upstream MeshCore dev 2026-05-09 * `b37db668` - **New** * `mqtt` - T-LoRa V2.1-1.6 observer environments 2026-05-02 * `78e1500a` ### April 2026 - **Fix** * `mqtt` - Corrected ColoradoMesh preset details 2026-04-30 * `9f8f2d05` - **New** * `platformio` - PSRAM support for the TBeam Supreme SX1262 variant 2026-04-28 * `0b05aede` - **New** * `mqtt` - ColoradoMesh preset 2026-04-28 * `457edf69` - **Fix** * `mqtt` - Added missing MQTTBridge error codes 2026-04-27 * `5a5e5373` - **New** * `mqtt` - EastIdahoMesh preset and richer CLI preset listing 2026-04-25 * `753eb72f` - **Fix** * `mqtt` - Removed errant `clearLastWill` from PsychicMqttClient 2026-04-25 * `32449e62` - **Fix** * `mqtt` - Restored `origin` field position in packet messages 2026-04-25 * `673361b6` - **Internal** * `mqtt` - Reorganized packet message structure 2026-04-25 * `8be27e4e` - **Internal** * `mqtt` - Default TX packet settings and documentation 2026-04-25 * `bfcf0176` - **New** * `platformio` - MQTT observer configs for the Heltec V4 expansion kit 2026-04-24 * `0a4f002f` - **New** * `cli` - Radio watchdog command 2026-04-24 * `7b21be3e` - **Internal** * `mqtt` - Standardized MQTT preset formatting 2026-04-24 * `6211885c` - **Internal** * `heltec_tracker_v2` - Aligned FEM with meshcore-dev KCT8103L 2026-04-24 * `0d280257` - **New** * `heltec_tracker_v2` - Restored LoRaFEMControl for GC1109 2026-04-24 * `255fce7f` - [UP] **Upstream sync** - Synced with upstream MeshCore dev 2026-04-24 * `c1989d6f` - **New** * `mqtt` - chimesh and meshat.se presets 2026-04-24 * `ee4e39bc` - **Fix** * `mqtt` - Restored legacy outbox behavior for QoS0 async publishes 2026-04-23 * `70722a58` - **Fix** * `mqtt` - Config marked dirty on setter calls; applied on connect/reconnect 2026-04-23 * `bb67b04e` - **Improvement** * `mqtt` - Better QoS handling and retry logic 2026-04-23 * `7d0c5bce` - **Internal** * `mqtt` - Removed legacy `mqtt.server`/`port`/`username`/`password` CLI 2026-04-21 * `cfec3a5b` - **Fix** * `mqtt` - Legacy CLI aligned with slot prefs; restored `isConfigValid` 2026-04-21 * `ac2662c5` - **Internal** - PsychicMqttClient memory management; fixed-size callback arrays (v0.2.2) 2026-04-21 * `e9ff1ae0` - **Improvement** - MQTTBridge memory management, deferred logging, and QoS on publish 2026-04-19 * `1ff9437f` - [UP] **Upstream sync** - Synced with upstream MeshCore dev 2026-04-19 * `563d9a7d` - **Build** - Disabled MQTT debug config for heltec_v4 builds 2026-04-17 * `0ed29cb7` - **Change** - gitignore generated cert files; meshmapper timeout reset to 0 2026-04-17 * `ab121708` - **Change** - MeshMapper preset update; removed generated cert files 2026-04-17 * `074ac3e7` - **Improvement** - Critical heap monitoring and deferred TLS; hard restart on prolonged low memory 2026-04-17 * `f4a4fd7c` - **Internal** - Inline `StaticJsonDocument` allocations to reduce heap fragmentation 2026-04-16 * `ab6685a1` - **New** - nashmesh preset 2026-04-14 * `13fbcd91` - **Internal** - MQTTMessageBuilder takes an external JsonDocument to cut stack usage 2026-04-14 * `ff2df2b7` - **Internal** - Removed the raw-data mutex in favor of core-specific staging 2026-04-14 * `0c190dac` - **Improvement** - Radio watchdog avoids false alarms in quiet meshes 2026-04-14 * `961f8293` - **New** - Radio diagnostics in MyMesh and CommonCLI 2026-04-10 * `7e4f75c9` - **Improvement** - Internal heap stats in status messages 2026-04-06 * `74e45a79` - **New** - TennMesh preset (fixed username/password auth) 2026-04-05 * `3b46e9ee` - **Docs** - Single `set radio` command in the guide 2026-04-04 * `1c524a93` - **Internal** - RX/TX packet logging controlled by MQTT settings (`mqtt_rx_enabled` pref) 2026-04-04 * `47b632aa` - **Improvement** - Runtime-configurable MQTT slot limits based on PSRAM 2026-04-04 * `258a0d72` - **Improvement** - Disconnect count/time diagnostics; per-variant WiFi TX power 2026-04-02 * `f0962eff` ### March 2026 - **Improvement** - Pre-allocated status JSON buffer in PSRAM; non-blocking NTP refresh 2026-03-31 * `cf4ec3f6` - **New** - WiFi disconnect diagnostics 2026-03-31 * `0e82271e` - **Fix** - Audience command parsing handles the 9-character prefix 2026-03-30 * `a4324a83` - **New** - JWT audience configuration for custom slots 2026-03-30 * `1263e71d` - **Improvement** - Partition-table guidance, merged-firmware flashing, embedded CA bundle 2026-03-30 * `da775bb2` - **Docs** - Removed obsolete MQTT design docs 2026-03-28 * `384b80fc` - **Docs** - README links to the MQTT Implementation Guide 2026-03-28 * `ff49d28f` - **New** - Optional SNMP monitoring; concurrent MQTT slots 3 -> 5 2026-03-28 * `202acacf` - [UP] **Upstream sync** - Synced with upstream MeshCore dev 2026-03-28 * `cc17c6b7` - **New** - meshomatic preset; disable slots with no server configured 2026-03-27 * `3eacf56e` - **Improvement** - Pre-allocated JSON publish buffer in PSRAM 2026-03-26 * `47dd2182` - **New** - `reconnect()` added to PsychicMqttClient 2026-03-25 * `1b5884bd` - **Improvement** - Lightweight JWT reconnect (token refresh without full teardown) 2026-03-25 * `af52a989` - **Internal** - Full teardown/setup for JWT slots on reconnect 2026-03-24 * `e29c3d96` - **Internal** - Standardized MQTT slot log format 2026-03-24 * `2bbca206` - **New** - cascadiamesh preset; keepalive configuration 2026-03-24 * `eaf5fcbc` - **Improvement** - Re-create JWT tokens when NTP reveals stale time 2026-03-24 * `1c98d1c6` - **Internal** - Serial-availability checks before logging; circuit-breaker reconnect logic 2026-03-23 * `4a60f166` - **New** - MeshRank preset (token auth, custom topic templates) 2026-03-22 * `95874f0c` - **Fix** - Dynamic MQTTBridge allocation to avoid an ESP32 static-init crash 2026-03-21 * `c67fb12b` - **Build** - Build script: cached project config, artifact handling, ESP32 binary merge 2026-03-21 * `bf8a3a7a` - **Improvement** - Active connection slots limited by available memory (PSRAM-aware) 2026-03-20 * `542f8a31` - **New** - Up to 3 configurable connection slots with built-in presets (LetsMesh US/EU, MeshMapper) 2026-03-20 * `b43e9618` - [UP] **Upstream sync** - Synced with upstream MeshCore dev 2026-03-20 * `abe6e046` - **Change** - Stopped enabling MQTT analyzer servers by default in the example sketches 2026-03-07 * `304719e8` - [UP] **Upstream sync** - Synced with upstream MeshCore dev 2026-03-06 * `db8b4419` - [UP] **Upstream sync** - Synced with upstream MeshCore dev 2026-03-04 * `56ac85fa` - [UP] **Upstream sync** - Synced with upstream MeshCore dev 2026-03-03 * `dcbbe5a6` ### February 2026 - [UP] **Upstream sync** - Synced with upstream MeshCore dev (Packet.cpp fix) 2026-02-26 * `8b359452` - **Internal** - Multibyte path handling in Packet / MQTTMessageBuilder 2026-02-25 * `c8e220b1` - [UP] **Upstream sync** - Synced with upstream MeshCore dev 2026-02-25 * `51e9907f` - **Change** - Removed an unused preprocessor directive in MyMesh 2026-02-25 * `ee1a9b4a` - [UP] **Upstream sync** - Synced with upstream MeshCore dev 2026-02-24 * `397a48fc` - **Improvement** - Keepalive set to 45s to hold WebSocket connections through Cloudflare 2026-02-16 * `2d4b7a64` - **Build** - heltec_v4 uses the `heltec_v4_oled` config for observer / room-server 2026-02-16 * `88ce0d33` - [UP] **Upstream sync** - Synced with upstream MeshCore dev 2026-02-15 * `e89cbee8` - **Improvement** - Simplified KISS noise-floor sampling 2026-02-07 * `776131e2` - **Fix** * `kiss_modem` - Improved RX delivery and noise-floor sampling 2026-02-06 * `f445b5ac` - **Improvement** - Better NTP synchronization in MQTTBridge 2026-02-06 * `ba4243b5` - **Improvement** - WiFi management and fragmentation recovery 2026-02-04 * `26aaace9` - **New** - PSRAM-backed memory management in MQTTBridge 2026-02-04 * `1d0d33f9` - **New** - PSRAM diagnostics at MQTTBridge init 2026-02-04 * `abcfe609` - **Build** - mbedTLS configuration tuned across variants 2026-02-04 * `21158e1f` - **Fix** * `kiss` - Periodic noise-floor calibration and AGC reset 2026-02-03 * `0fb57033` - **Fix** - Memory use and status reporting in the MQTT bridge 2026-02-02 * `498566e6` ### January 2026 - **Internal** - Clarified packet ownership / memory management in MQTTBridge 2026-01-31 * `f91b715e` - **New** - `recv_errors` in the `CMD_GET_STATS` packets response 2026-01-29 * `019bbf74` - **New** - Receive-error tracking in Dispatcher and the message builder 2026-01-29 * `ee577314` - **Fix** - Display header include for heltec_v4 when `DISPLAY_CLASS` is set directly 2026-01-27 * `bb27cded` - [UP] **Upstream sync** - Synced with upstream MeshCore dev 2026-01-27 * `d96c900f` - [UP] **Upstream sync** - Synced with upstream MeshCore dev 2026-01-26 * `2a84e58b` - **Improvement** - MQTTBridge memory usage and NTP handling 2026-01-24 * `9e1ce23e` - **Improvement** - MQTTBridge status handling and publish logic 2026-01-23 * `c67c3295` - **Internal** - MQTTBridge connection handling for stability / responsiveness 2026-01-22 * `c055228c` - [UP] **Upstream sync** - Synced with upstream MeshCore dev 2026-01-21 * `39ba020f` - **Internal** - MQTTBridge moved onto a FreeRTOS task for responsiveness 2026-01-21 * `ed27ebd0` - **New** - Configurable WiFi power-save mode preference 2026-01-18 * `56f98997` - **Internal** - HeltecTrackerV2 / HeltecV4 init for GC1109 FEM 2026-01-13 * `3eaca31f` - **Docs** - Owner configuration commands documented 2026-01-12 * `58cdd60c` - **Internal** - Advert timer type consistency in MyMesh / SensorMesh 2026-01-08 * `ffa2a1ec` - **New** - Device metadata setup at bridge init / restart 2026-01-03 * `2bd61c13` - **Internal** - Config validation allows optional username / password 2026-01-03 * `d1093b43` - **Internal** - JWTHelper / MQTTBridge efficiency cleanup 2026-01-02 * `e754317c` - **Fix** - MQTT connection stability and CLI responsiveness 2026-01-02 * `98f176c7` - **New** - Neighbour-info sorting; MQTTBridge memory tuning 2026-01-01 * `2185523d` ### December 2025 - **Docs** - WiFi power-save configuration documented 2025-12-30 * `915f8b8e` - **Internal** - `loadPrefs` handles fresh installs and upgrades; migrates old prefs 2025-12-30 * `8fa99611` - **Improvement** - Loop prioritizes radio RX for responsiveness 2025-12-29 * `617e3b17` - **Internal** - Defer broker connect until WiFi + NTP ready; socket error logging 2025-12-17 * `5d4f1e4c` - **Improvement** - Event-driven WiFi diagnostics and faster reconnect 2025-12-12 * `f7f1f838` - **New** - WiFi power-save mode configuration (none / min / max) 2025-12-08 * `34c8bea7` - **Fix** - LPS22HB pressure now reported in hPa (was kPa) 2025-12-08 * `b91b854a` - **New** - WiFi TX power configuration (default 11 dBm) 2025-12-07 * `b82d7e43` - **New** - Default bridge settings for fresh installs; JSON reuse to avoid fragmentation 2025-12-07 * `0b7c0888` - **Improvement** - MQTT debug macros check Serial to prevent hangs 2025-12-06 * `3589043b` - **Change** - Removed redundant settings writes in `savePrefs` 2025-12-04 * `03d519f8` - **Build** - Source filter for the Xiao S3 WIO variant 2025-12-01 * `4f548ffc` ### November 2025 - **New** - `adc_multiplier` added to NodePrefs 2025-11-23 * `8fbdc98a` - **Change** - IATA codes uppercased for consistency 2025-11-23 * `5cadf3d9` - **Change** - `CMD_GET_STATS` split into core / radio / packet sub-types 2025-11-17 * `a3c9a073` - **New** - IP address shown for MQTT bridge devices in UITask 2025-11-16 * `6b0c0e93` - **New** - T-Beam ESP32 support; error log when source = tx but TX logging is off 2025-11-16 * `3c7ac9d1` - **Build** - `MQTT_DEBUG` enabled for several build configs 2025-11-16 * `3726c472` - **New** - MQTT observer support for Room Servers 2025-11-15 * `0cd0c36a` - **Change** - Switched MQTT configs to observer mode across variants 2025-11-13 * `304a32db` - **Internal** - Client version string generation 2025-11-13 * `aa242e78` - **Improvement** - WiFi power-save + reduced TX power to limit LoRa interference; retry fix when no brokers connected 2025-11-10 * `bafa5426` - **Internal** - Statistics use binary frames instead of JSON 2025-11-09 * `80d6dd43` - **New** - IATA validation blocks publishing without an IATA code 2025-11-08 * `25d40f02` - **Fix** - Restored status-publish retry delay to prevent server spam 2025-11-08 * `9e06fffc` - **New** - Added missing token-expiration / reconnection member variables 2025-11-08 * `453c4184` - **Change** - Removed WiFi credentials from platformio.ini (use CLI / build flags) 2025-11-08 * `921c6112` - **Internal** - MQTT preferences handling in CommonCLI 2025-11-08 * `5a816be8` - **Internal** - `formatStatsReply` uses the new member variables 2025-11-08 * `c9aa536c` - **Build** - Explicit `paulstoffregen/Time` dependency to fix PIO compile 2025-11-07 * `72ca50b9` - **Build** - Dropped the CayenneLPP patch script; updated ArduinoJson 2025-11-07 * `fef9225b` - **Fix** - Timezone command parsing lengths corrected 2025-11-07 * `b89ceeea` - **New** - Statistics commands and response handling in MyMesh 2025-11-07 * `df4dab85` - **New** - MQTT email support in CommonCLI / JWTHelper 2025-11-06 * `1ed18f9e` - **New** - MQTT owner public-key support 2025-11-06 * `e5dbd56b` - **Improvement** - Status reporting and stats collection 2025-11-01 * `e4ff06cb` ### October 2025 - **Improvement** - MQTTBridge logging and connection handling 2025-10-31 * `7df28557` - **Improvement** - Packet handling and memory management in MQTTMessageBuilder / MQTTBridge 2025-10-31 * `eee02025` - **New** - Memory monitoring and queue-size reporting 2025-10-29 * `e77beff0` - **Internal** - In-place base64url encoding; cleanup frees queued packets / timezone objects 2025-10-27 * `1219668f` - **Change** - Defer MQTT connect until WiFi credentials are valid (requires reboot) 2025-10-27 * `3851a84b` - **Improvement** - Dynamic build date and client versioning 2025-10-26 * `c23663da` - **New** - CLI config for `mqtt.server` / `username` / `password` / `port` 2025-10-26 * `eab70c3c` - **New** - Let's Mesh Analyzer integration 2025-10-26 * `a6453556` - **New** - Station G2 repeater bridge build target; docs 2025-10-26 * `f6a77d2f` - **New** - Timezone handling; raw-data packet output with proper hashes / timestamps 2025-10-25 * `787af7b0` - **New** - Timezone support in the MQTT Bridge and CLI 2025-10-25 * `26c4b970` - **New** - Initial MQTT Bridge implementation with WiFi CLI configuration 2025-10-25 * `efc15eb6`