What's Changed
OpenMQTTGateway v1.9.0 moves to the Arduino ESP32 core 3.x, ships Theengs Decoder 2.5.0, and adds a large set of security hardening fixes. Updating is recommended for all users.
Security
- Theengs Decoder 2.5.0 fixes a security issue in BLE advertisement parsing, reported by Tom Watson. All earlier releases (including v1.8.1) are affected. An advisory will follow.
- Hardened every place where MQTT, HTTP, BLE and RF input is copied into fixed buffers (#2321, #2324), replaced
dtostrf()with bounded formatting (#2368), fixed a buffer overflow when converting binary LoRa packets to hex (#2402) and a dangling pointer when saving the gateway password from the WebUI (#2408). {"cmd":"erase"}now really wipes the stored configuration, including MQTT credentials (#2372).
Upgrade notes and breaking changes
- Home Assistant entities: some unique_ids change, so Home Assistant may create new entities next to the old ones, which you can delete:
- BLE decryption: the default AES key is now empty and encrypted devices are skipped until you set your key (#2310).
- ESP8266 RF: the default
RF_RECEIVER_GPIOchanged from 0 to 4 (#2323). If your receiver is wired to GPIO0, set it back with a build flag. - BLE connections: NimBLE now allows 1 simultaneous connection instead of 3, to save RAM (#2300).
- Arduino core 3.x (#2177, #2248, #2329): custom builds and
prod_env.inioverrides based on the older 2.x platform need updating. - OTA: v1.8.1 gateways can update over the air (Home Assistant update entity or MQTT) or from the web installer. After an OTA from a custom URL,
installed_versionis now omitted rather than reported wrong; the correct version is published after reboot (#2374).
New Features
- WebUI: full BLE configuration page and MQTT Discovery toggle (#2293), the WiFi scan link works again (#2345), active modules shown as text in the page heading (#2406).
- BLE decryption of PVVX, BTHome v2 and Victron frames (#2219, #2226, #2228, #2230).
- WiFi reconnect watchdog that self-heals a wedged WiFi stack (#2319); the WiFiManager portal stays available when saved WiFi credentials are lost (#2340).
- Ethernet:
NetworkAdvancedSetupnow usable, WiFiManager skipped when Ethernet is up (#2351), PHY cold-cycle at boot to avoid link flapping (#2364). - OTA resolves the offered version per build environment (#2350).
- Serial gateway: configurable frame format (parity/stop bits) (#2342).
- Memory: lower RAM use on ESP32 BLE builds (#2294, #2302, #2223, #2232), dynamic TLS buffers so no-PSRAM boards can use MQTT over TLS (#2335).
- WiFi hostname set to the gateway name (#2272).
Theengs Plug and Theengs Bridge
- Theengs Bridge: PSRAM enabled (#2303) and Ethernet PHY cold-cycle at boot on by default, fixing intermittent link loss (#2364).
- Theengs Plug: MQTT over TLS now has enough free memory to run reliably (#2335);
{"cmd":"erase"}no longer leaves the plug stuck in a reboot loop (#2340, #2372). - Button → relay toggle restored (
ACTUATOR_TRIGGER) (#2334).
New BLE Devices
Theengs Decoder moves from v1.8.0 to v2.5.0:
- Victron: Smart Battery Protect, Orion XS, Orion TR, Blue Smart Charger, Smart Battery Sense, SmartSolar MPPT, SmartShunt and generic battery monitors
- EcoFlow Power Station
- SwitchBot Meter Pro and Meter Pro (CO2)
- Govee H5108 probe thermometer and H5140 Smart CO2 Monitor
- ClearGrass/Qingping CO2 Detector CGP22C
- LYWSD03MMC / MJWSD05MMC with PVVX firmware sending BTHome v2, and Tuya THB1 / BTH01 / TH05F with PVVX firmware
- Inkbird IBS-P02B
- ThermoPro TP350 / TP350S, plus battery level for TP357, TP358, TP359 and TP393
- b-parasite v2 soil moisture sensor
- SensorPush HT.w and HTP.xw
- VCHON VCH6003 thermo-hygrometer
- UNI-T UT363 anemometer
- MikroTik TG-BT5-IN / TG-BT5-OUT
- Feasycom BP104D beacon
- TPMS BR
- Schneider Electric Odace SFSP
- BM6 battery monitor connection support (#2274)
RF and RTL_433
- rtl_433_ESP updated to 0.6.2 (#2254, #2328, #2358, #2366, #2369), with an FSK variant for
esp32dev-rtl_433(#2195) and duplicate detection no longer swallowing rapid transmissions (#2357). - CC1101 works on Arduino core 3.x (#2353) and initialises correctly with a saved RF configuration (#2269); CC1101 SPI pins are configurable (#2141).
- RF configuration management refactored (#2245).
- RTL_433 / SX127x environments moved to the shipped ESP32 platform (#2360).
Boards
- ISNO Super (ESP32-S3, dual CC1101 433 + 868/915 MHz) (#2378)
- LilyGo T3-S3 (#2160)
- M5 boards migrated to M5Unified + M5GFX (#2355)
Documentation
- Documentation migrated to VitePress, with a new board selector (search, filters, popular badges), a renewed web upload page and a reworked onboarding (#2299, #2291, #2277, #2347).
Known issues
- After a broker outage of several minutes, the primary MQTT connection slot can be reported as
valid_cnt: falseuntil the next reboot; the connection itself keeps working. Present in earlier releases too. - Re-enabling BLE (
{"enabled":true}) can block the main loop for about 20 seconds while the BLE stack restarts.
All changes
- [BT] Decoder development link by @DigiH in #2120
- [DISC] Defined proper boolean payload values by @DigiH in #2126
- [WEBUI] Fix for TH1 external probe in display routine by @DigiH in #2127
- [Pilight] Handle when 'value' is not a string by @melyux in #2129
- [DISC] Whitelist immediate change by @benzok in #2133
- [RTL_433] Update to rtl_433_esp v0.4.0/rtl_433 24.10 - for testing of the integrated package by @NorthernMan54 in #2125
- [DISC] rtl_433 UV amendments by @DigiH in #2144
- [RF] Allow configuration of CC1101 SPI pins by @DanEmord in #2141
- [BT] Small typo fix by @DigiH in #2147
- [BT] Increase procBLEtask stack size to avoid reset when adapting the scan parameters by @1technophile in #2148
- [CI] Update python version to 3.11 by @1technophile in #2151
- [BT] Increase again procBLEtask stack size by @1technophile in #2152
- HA: RF, RF2, Pilight modules as sensors. Subscribe topic, according valueAsATopic. by @peshovec in #2134
- [DISC] Removal of openHAB specific MQTT discovery patch by @DigiH in #2153
- [BT] Update NimBLE-Arduino to 2.2.1 by @h2zero in #2140
- [RF] GatewayRF2: fix json formatted sending, when the active receiver is not RF2 by @peshovec in #2158
- Bump elliptic from 6.6.0 to 6.6.1 by @dependabot[bot] in #2167
- [RF] Proposal fix for issue #2139 + Extra documentation by @Odyno in #2157
- [RF] ZgatewatPilight: toggle RawEnabled only if Pilight is active by @peshovec in #2159
- Bump prismjs from 1.29.0 to 1.30.0 by @dependabot[bot] in #2169
- [DOCS] Remove hits by @1technophile in #2175
- Update arduino core to 3.1.1 + refactor ino to cpp by @h2zero in #2177
- [BT] MQTT corruption fix by @DigiH in #2183
- [DISC] Additional device classes by @DigiH in #2185
- Misc bug fixes with strict compilation by @h2zero in #2188
- [DISC] device class added and Units sorted by @DigiH in #2189
- [DOCS] image optimisation by @DigiH in #2192
- [DISC] Fix for negative ids for rtl_433 discovery by @DigiH in #2196
- [RF] An FSK version for esp32dev-rtl_433 has been added by @PLCHome in #2195
- Update binaries.md for the use with Mac by @jaal2001 in #2203
- Bump pbkdf2 from 3.1.2 to 3.1.3 by @dependabot[bot] in #2206
- [BLE] Update NimBLE-Arduino to 2.3.2 by @h2zero in #2201
- Support lilygo-t3-s3 by @TomRoush in #2160
- [RF] fixups: RF2 trasnmit, Pilight rawenabled compile by @peshovec in #2207
- [BLE] Add status to Blufi advertising. by @h2zero in #2198
- Bump on-headers and compression by @dependabot[bot] in #2214
- [BLE] Fix crash if BLE stack is not initialized when setting advertising by @h2zero in #2212
- [BLE] Add support for decrypting PVVX, BTHome v2 and Victron BLE frames by @plambrechtsen in #2219
- [DISC] Fix cosmetic issue in Home Assistant where devices don't link to gateway by @plambrechtsen in #2220
- Replace Home Assistant Auto Discovery MQTT keys with shortened abbreviations by @plambrechtsen in #2221
- [DISC] Add RSSI as diagnostic entity_category for Bluetooth devices by @plambrechtsen in #2224
- [BOARD] Remove Theengs Bridge self test by @1technophile in #2225
- [BT] Typo fix to actually have Victron devices decrypted by @DigiH in #2226
- [BT] Consistent checking for BLEDecryptor as a Boolean by @DigiH in #2230
- [BT] Victron decryption adjustments by @DigiH in #2228
- [DISC] Ram usage and flash size optimization by @1technophile in #2223
- [SYS] Reduce Logs flash footprint by @1technophile in #2232
- [SYS] Fix ESP8266 local builds by @1technophile in #2234
- Bump cipher-base from 1.0.4 to 1.0.6 by @dependabot[bot] in #2235
- Bump sha.js from 2.4.11 to 2.4.12 by @dependabot[bot] in #2236
- [SYS] Fix for build error with MDNS_SD by @NorthernMan54 in #2239
- [SYS] Update to Arduino 3.3.3 and use custom libs by @h2zero in #2248
- Bump js-yaml from 3.14.1 to 3.14.2 by @dependabot[bot] in #2251
- Bump min-document from 2.19.0 to 2.19.1 by @dependabot[bot] in #2249
- [RF] Refactor RF Configuration Management by @Odyno in #2245
- [RF] Update to rtl_433_ESP 0.5.0 by @NorthernMan54 in #2254
- [CI] Fix nightly build failures by @1technophile in #2257
- [DOC] Sort firmware dropdown lists alphabetically by @1technophile in #2258
- [CI] Add Claude GitHub actions by @1technophile in #2266
- [DOCS] Bump qs and express by @dependabot[bot] in #2265
- [CI] Configure Claude GitHub Actions to use Opus model by @1technophile in #2267
- [RF] Fix CC1101 initialization on boot with saved RF config by @1technophile in #2269
- [LORA] Fix syncword not persisting after reset by @1technophile in #2271
- [SYS] Fix: Set WiFi hostname to gateway name by @1technophile in #2272
- Bump lodash from 4.17.21 to 4.17.23 by @dependabot[bot] in #2275
- [BLE] Add BM6 Battery Monitor connection support by @1technophile in #2274
- Refactor GitHub Actions workflows for build, documentation, and linting by @Odyno in #2260
- [SYS] Add HASS_UNIT_PPM to availableHASSUnits array by @bafulton in #2279
- [CI] Remove Claude Code GitHub Actions workflows by @1technophile in #2283
- [DOCS] Remove build and code format badges by @1technophile in #2284
- Bump minimatch from 3.1.2 to 3.1.5 by @dependabot[bot] in #2287
- [SITE] Renew the web board presentation and the ESP32 web upload + [SYS] Security checks by @Odyno in #2277
- [DOCS] Fix dev docs deploying to /dev/dev/ instead of /dev/ by @1technophile in #2289
- [CI] Skip nightly dev build when no changes by @1technophile in #2290
- [DOCS] Add search, filters and popular badges to board selection by @1technophile in #2291
- Bump qs from 6.14.1 to 6.14.2 by @dependabot[bot] in #2292
- [WebUI] Add full BLE configuration page and MQTT Discovery toggle by @1technophile in #2293
- [MEM] Reduce ESP32 BLE firmware RAM usage by @1technophile in #2294
- [WebUI] Fix BLE config page connection reset on load by @1technophile in #2295
- Bump picomatch from 2.3.1 to 2.3.2 by @dependabot[bot] in #2296
- [DOCS] Migrate documentation from VuePress 1.x to VitePress by @1technophile in #2299
- Revert "Delete build_and_docs_to_dev.yml" by @DigiH in #2301
- [MEM] Reduce NimBLE max connections from 3 to 1 by @1technophile in #2300
- [MEM] Heap-allocate createDiscovery JsonDocuments by @1technophile in #2302
- [MEM] Enable PSRAM on Theengs Bridge (ESP32-WROVER-IE) by @1technophile in #2303
- [CI] Pin SmartRC-CC1101-Driver-Lib via GitHub URL by @1technophile in #2304
- [DOCS] Restore dev-version banner gate after VitePress migration by @1technophile in #2305
- Bump postcss from 8.5.8 to 8.5.13 by @dependabot[bot] in #2307
- [BT] Default BLE AES key empty, skip decryption without a key by @1technophile in #2310
- Fix/wifimanager portal defaults by @1technophile in #2312
- [BT] Reset BTProcessLock when immediateBTAction can't take the device… by @1technophile in #2314
- [BT] Emit hex-valued BLE properties as text sensors (no state_class) by @1technophile in #2315
- [BT] Omit state_class/unit_of_measurement for enum sensors in HA discovery by @1technophile in #2316
- Add WiFi reconnect watchdog to self-heal from wedged WiFi stack by @1technophile in #2319
- [SYS] Fix heap overflows from unbounded strcpy of MQTT input by @1technophile in #2321
- [DOCS] Remove dead compatible.openmqttgateway.com links (#2205) by @1technophile in #2322
- [RF] Change ESP8266 default RF_RECEIVER_GPIO from 0 to 4 (#2240) by @1technophile in #2323
- [SYS] Bound remaining MQTT/HTTP/BLE/RF inputs into fixed buffers by @1technophile in #2324
- [SYS] Update esp32-arduino-libs to 0.1.4 (BLE-only controller) by @1technophile in #2327
- [RTL_433] Update rtl_433_ESP library to v0.5.1 by @1technophile in #2328
- esp32_platform: update to 55.03.39 by @palto42 in #2329
- [BT] Bump NimBLE-Arduino 2.3.2 -> 2.5.0 to fix BLE scan regression on Arduino core 3.3.7+ by @1technophile in #2333
- [BT] Fix ACTUATOR_TRIGGER build flag: missing -D prefix by @1technophile in #2334
- [SYS] esp32-arduino-libs: bump 0.1.6 -> 0.1.7 for no-PSRAM TLS (MBEDTLS_DYNAMIC_BUFFER) by @1technophile in #2335
- [SYS] Keep WiFiManager portal available when saved WiFi credentials are lost by @1technophile in #2340
- Bump postcss from 8.5.13 to 8.5.23 by @dependabot[bot] in #2341
- SERIAL gateway: make frame format (parity/stop bits) configurable by @simowilso in #2342
- [FIX] Restore GET route for /wi so the WiFi scan link works by @1technophile in #2345
- [DOCS] Fix image link in README.md by @1technophile in #2346
- [DOCS] Overhaul new-user onboarding, home page, and upload flow by @1technophile in #2347
- [DOCS] Fix responsive layout on phones and tablets by @1technophile in #2349
- [OTA] Resolve the offered version per build environment by @1technophile in #2350
- [SYS] esp32-arduino-libs: bump 0.1.7 -> 0.1.8 (restores RISC-V -march) by @1technophile in #2352
- [RF] Fix CC1101 on Arduino core 3.x: bump SmartRC to V3.0.2 + init before probe by @1technophile in #2353
- [FIX] ESP32 Ethernet: make NetworkAdvancedSetup usable, and skip WiFiManager when Ethernet is up by @cduquev in #2351
- [SYS] Migrate M5 boards to M5Unified + M5GFX (modern platform) by @1technophile in #2355
- Update rtl_433_ESP to 0.6.0 by @NorthernMan54 in #2358
- [RF] Move RTL_433 / SX127x envs to the shipped ESP32 platform by @1technophile in #2360
- [BLE] Fix esp32dev-ble-idf: bump esp-nimble-cpp 2.1.1 -> 2.5.0 by @1technophile in #2361
- [DOCS] Modify README for Theengs bridge and plug information by @1technophile in #2362
- [RF] Deselect a secondary CC1101 chip-select on shared-SPI boards by @1technophile in #2363
- Fix RTL_433 duplicate detection swallowing rapid transmissions with differing payloads by @NorthernMan54 with @Copilot in #2357
- [NET] ESP32 Ethernet: PHY cold-cycle at boot, default on Theengs Bridge by @1technophile in #2364
- [RF] Update rtl_433_ESP to v0.6.1 by @1technophile in #2366
- Refresh rtl_433_ESP to version 6.2 by @NorthernMan54 in #2369
- [BT] Update Theengs Decoder to v2.4.5 by @1technophile in #2371
- [SYS] Fix erase command leaving MQTT credentials in SPIFFS by @1technophile in #2372
- Replace dtostrf() with safer Arduino String constructor call by @mgerczuk in #2368
- [OTA] Report the version actually requested after a successful update by @1technophile in #2374
- Add ISNO Super board (ESP32-S3, dual CC1101 433 + 868/915 MHz) by @Shad107 in #2378
- [WebUI] Fix dangling pointer when saving the gateway password by @pwsh in #2408
- [WebUI] Show the active modules as text in the page heading by @pwsh in #2406
- [LORA] Fix buffer overflow when converting binary packets to hex by @pwsh in #2402
- [DISC] Fix empty unique_id suffix for gateway entities by @pwsh in #2401
- [BT] Update Theengs Decoder to v2.5.0 by @1technophile in #2409
- [INA226] Read the shunt voltage as a signed value by @r3wretrhy in #2410
- Bump @vue/server-renderer and vue by @dependabot[bot] in #2413
- Bump source-map-js from 1.2.1 to 1.2.2 by @dependabot[bot] in #2411
- [CI] Pin build, docs and lint jobs to ubuntu-24.04 by @1technophile in #2417
- [CI] Fix release builds: PLATFORMIO_BUILD_FLAGS unbound under set -u by @1technophile in #2418
- [CI] Release docs: ship the web installer firmware and keep /dev by @1technophile in #2419
- [CI] Release: flatten firmware artifacts before uploading assets by @1technophile in #2420
New Contributors
- @benzok made their first contribution in #2133
- @DanEmord made their first contribution in #2141
- @PLCHome made their first contribution in #2195
- @jaal2001 made their first contribution in #2203
- @TomRoush made their first contribution in #2160
- @plambrechtsen made their first contribution in #2219
- @bafulton made their first contribution in #2279
- @palto42 made their first contribution in #2329
- @cduquev made their first contribution in #2351
- @NorthernMan54 with @Copilot made their first contribution in #2357
- @mgerczuk made their first contribution in #2368
- @Shad107 made their first contribution in #2378
- @pwsh made their first contribution in #2408
- @r3wretrhy made their first contribution in #2410
Full Changelog: v1.8.0...v1.9.0