Commit Graph
100 Commits
Author SHA1 Message Date
Jared DohrmanandClaude Fable 5 cfb4cc9bc6 fix(companion-wifi): quiesce STA scanning so the recovery AP is joinable
With saved credentials present (seeded from the WIFI_SSID build flag on
first boot), the recovery AP came up in AP+STA mode while auto-reconnect
and the 10s manual retry kept the station scanning. STA scans drag the
shared radio across channels, so joining clients' WPA2 handshakes timed
out - reported by phones as a wrong password.

Disable auto-reconnect and pause the 10s retry loop while the recovery
AP is active; retry the configured network once a minute instead, so the
AP stays stable between attempts and the node still self-recovers (and
shuts the AP down) when its network returns.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 18:34:19 +10:00
Jared DohrmanandClaude Fable 5 5054b02c62 docs(release): add 2026.8.1 notes for observer display bring-up fix
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 18:09:16 +10:00
Jared DohrmanandClaude Fable 5 e5ba4885de fix(display): stop SH1106 boot crash when the boot-time probe fails
The upstream merge switched SH1106Display::begin() to probe-then-init.
On the T-Beam S3 Supreme the OLED bus can NAK a cold address probe, so
begin() bailed before display.begin() ever ran, and UITask::begin()'s
unconditional turnOn() then drove Adafruit_GrayOLED with a null bus
device: bogus gpio_set_level(227) followed by a LoadProhibited boot loop.

Restore the proven S3 Supreme bring-up order (Adafruit init with reset
sequence first, then settle the bus and verify), and track begin()
success so turnOn/turnOff/clear are safe no-ops when the display never
initialised - a failed or absent display now boots headless instead of
crash-looping.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 17:36:20 +10:00
Jared DohrmanandClaude Fable 5 7639e92287 fix(web): evict stale keep-alive connections so the panel stays reachable
With max_open_sockets=2 and no LRU purge, clients that vanish without
closing (lid shut, out of range) permanently occupy the pool on both the
HTTPS panel and the port-80 redirect listener; after enough uptime every
new connect is reset (Firefox PR_CONNECT_RESET_ERROR) until reboot.
Enable lru_purge_enable on both servers so a new connection evicts the
least-recently-used one instead of being refused.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 17:09:21 +10:00
Jared DohrmanandClaude Fable 5 0be8f8838a docs(release): add recovery AP notes to companion-wifi 1.17.0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 16:59:54 +10:00
Jared DohrmanandClaude Fable 5 4c8ddbd29f feat(companion-wifi): pin-derived recovery AP password with on-screen pin
Mirror the BLE pin rules on WiFi builds so the recovery AP always has a
knowable password: devices with a display get a random per-session pin
shown as Pin:NNNNNN on the home screen, headless devices default to
123456, and 'set pin' overrides both persistently. The AP password is
the active pin zero-padded to 8 digits (WPA2 minimum), so a fresh
device is never an open AP.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 16:56:24 +10:00
Jared DohrmanandClaude Fable 5 a5c9ba3e01 feat(companion-wifi): recovery AP with TCP rescue CLI when WiFi is down
When a companion WiFi device has no WiFi credentials or can't connect for
60s, it broadcasts an 'EastMesh-WiFi' AP (WPA2 password = device pin
zero-padded to 8 digits; open if no pin set) with the rescue CLI on TCP
port 23, so wifi.ssid/pwd can be fixed without a serial cable.

- rescue CLI command handler now writes to any Stream (Serial or the TCP
  rescue client)
- while the AP is up, STA keeps retrying; the AP shuts down automatically
  once the configured network connects
- 'set wifi.ssid/pwd' keeps AP+STA mode during a rescue session so the
  session isn't dropped mid-config
- guard ESP32-only SD/SPI code in ArchiveStorage so non-ESP32 builds of
  the shared helpers get further

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 16:52:50 +10:00
Jared DohrmanandClaude Fable 5 c6698c5bad docs(release): add v1.17.0 and 2026.8.0 notes across release tracks
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 16:34:17 +10:00
Jared DohrmanandClaude Fable 5 9551272abe Merge remote-tracking branch 'upstream/dev' into integrate-upstream-dev-2026-08-09
Integrates upstream v1.17.0. Key adaptations:
- companion + repeater NodePrefs moved to upstream's new ConfigSerializer
  (prefs.json) format; EastMesh fields (companion wifi, repeater fan and
  MQTT bridge peer) appended as serializer groups/keys
- legacy binary prefs loaders retain EastMesh tail fields, so existing
  devices migrate their settings to the new format
- companion main.cpp adopts upstream InterfaceManager while keeping
  runtime WiFi credentials from prefs
- kept EastMesh release-tag versioning in setup-build-environment action

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 16:30:22 +10:00
Jared DohrmanandClaude Fable 5 e5cbd082c9 docs(release): add 2026.7.0 notes for observer-eastmesh tracks
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 13:16:35 +10:00
Jared DohrmanandClaude Fable 5 1fb9737f95 fix(mqtt): trust GTS WE1 for eastmesh/meshmapper broker TLS
mqtt2.eastmesh.au switched from a Let's Encrypt cert to a Google Trust
Services WE1-issued *.eastmesh.au wildcard (July 2026), so devices on the
pinned-PEM fallback path failed the handshake with mbedTLS -9984. Pin the
combined ISRG Root X1 + GTS WE1 bundle for these brokers so either chain
verifies.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 13:06:46 +10:00
Jared DohrmanandClaude Opus 4.8 54a167f60f fix(prefs): stop reading misaligned tail into later prefs fields
loadPrefsInt guarded each EastMesh field with its own available() check
and no bail-out. On a short prefs file that skipped a large field but
still satisfied a later, smaller one: with 8 bytes left, bridge_peer_host
(64) was correctly skipped, then bridge_peer_port (2) passed its guard
and read two misaligned bytes. It has no constrain(), so it loaded 0
instead of its 1883 default.

Read sequentially and stop at the first field that isn't fully present,
leaving the rest at their constructor defaults.

This does not make a differently-laid-out prefs file safe to read, only a
shorter one -- fan_mode and fan_timeout_secs still take whatever bytes sit
at 512..514. A format marker on the EastMesh block would close that.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 20:23:58 +10:00
Jared DohrmanandClaude Opus 4.8 b9006d14dd fix(prefs): move EastMesh NodePrefs fields behind a reserved gap
Upstream's persisted fields end at 295. EastMesh's own fields sat
immediately after, so any future upstream append would shift them and
conflict. Base the EastMesh block at 512 instead, with the 295..511 gap
reserved for upstream growth.

Upstream can now append fields with no change to EastMesh offsets; a
static_assert fails the build if upstream ever overruns the gap.

EastMesh fields now occupy 512..741 (was 295..524).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 17:19:05 +10:00
Jared DohrmanandClaude Opus 4.8 24fdc70acc ci: bump Python to 3.13 across build and docs workflows
Adopts upstream's 3.13 bump. Also renames the uv cache key from py311
to py313 so a 3.11-built .venv is not restored under the 3.13
interpreter, and updates .python-version so local uv runs match CI.

pyproject requires-python stays >=3.11; 3.13 satisfies it and the
existing uv.lock resolves unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 17:10:04 +10:00
Jared DohrmanandClaude Opus 4.8 2358245c04 fix(prefs): realign NodePrefs to upstream byte offsets
Keep upstream's persisted layout verbatim (rx_boosted_gain 290 ..
cad_enabled 294) and append the EastMesh-only fields after it, rather
than interleaving fan_mode/fan_timeout_secs into upstream's range.
Minimises CommonCLI.cpp conflicts on every upstream sync.

EastMesh fields now occupy 295..524: fan_mode, fan_timeout_secs, and
bridge_peer_*. Existing prefs files written by prior EastMesh firmware
will be misread from offset 292 onward and need reconfiguring.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 17:10:04 +10:00
Jared Dohrman 3d460106ee Merge branch 'integrate-upstream-dev-2026-07-09' into develop 2026-07-09 16:51:34 +10:00
Jared Dohrman 9fd108f946 Merge remote-tracking branch 'upstream/dev' into integrate-upstream-dev-2026-07-09
# Conflicts:
#	.github/actions/setup-build-environment/action.yml
#	README.md
#	examples/simple_repeater/MyMesh.cpp
#	examples/simple_room_server/MyMesh.cpp
#	examples/simple_sensor/SensorMesh.cpp
#	src/helpers/CommonCLI.cpp
#	src/helpers/CommonCLI.h
#	src/helpers/radiolib/CustomLR1110Wrapper.h
#	variants/tenstar_c3/target.h
2026-07-09 16:51:30 +10:00
Jared DohrmanandClaude Opus 4.8 7fab384e4c docs: remove public references to the MQTT bridge track
De-emphasize the observer-eastmesh-bridge-mqtt feature in public-facing
docs (the community prefers not to surface another MQTT-backed mesh):

- eastmesh-docs: drop the track from index/releases/boards track lists,
  the custom-cli "MQTT Bridge Settings" section, and the web-panel peer
  broker fields; keep only a vague mention in local-builds.md.
- release-notes.yml: remove the track from the list and drop the
  2026.7.0 observer-eastmesh-bridge-mqtt entry.
- README: remove the "bidirectional MQTT mesh bridge" bullet and add the
  missing repeater-bridge-espnow track to "What This Repo Adds".

The feature, build envs, and CI are unchanged; this is visibility only.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 23:33:42 +10:00
Jared DohrmanandClaude Opus 4.8 7176f62dae feat(mqtt): add packet counters to status; complete and reorganize MQTT bridge variants
MQTT status payload:
- Add packets_sent and packets_received (cumulative radio TX/RX totals)
  to the status `stats` object, aligning with the Waev/MeshMapper schema.

Variants (variants/eastmesh_mqtt -> variants/eastmesh):
- Rename the variant folder to variants/eastmesh.
- Add the remaining *_repeater_observer_mqtt_bridge envs (2 -> 36), one
  per observer board.
- Regroup envs by board (observer -> espnow -> mqtt_bridge) and add
  per-vendor section banners.

Docs & release notes:
- Update folder path references in README, AGENTS, and boards docs.
- Add observer-eastmesh and observer-eastmesh-bridge-espnow 2026.6.6
  release notes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 22:09:31 +10:00
Jared DohrmanandClaude Opus 4.8 d6fcabcb4c fix(mqtt-bridge): resolve release-notes conflict and clean up review nits
- Resolve leftover merge conflict markers in release-notes.yml from PR #73,
  keeping both the observer-eastmesh-bridge-espnow 2026.6.5 and the new
  observer-eastmesh-bridge-mqtt 2026.7.0 entries in track order
- Normalize the bridge-mqtt release entry `area:` values to the file's
  conventions (bridge -> mqtt, boards -> board)
- Remove dead bridge_peer_port > 65535 check in loadPrefsInt (uint16_t can
  never exceed 65535; the 0 -> 1883 default is handled at use)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 12:45:28 +10:00
xJARiDandGitHub 4e5a6a6a31 Merge pull request #73 from prabathbr/main
Adding observer-eastmesh-bridge-mqtt track to bridge over a MQTT broker🤖🤖
2026-06-26 12:29:03 +10:00
xJARiDandGitHub cdf2cc6fa2 Merge pull request #72 from xJARiD/develop
Add Waev MQTT broker support and enhance web panel settings
2026-06-26 11:03:25 +10:00
Jared Dohrman a7a68c16cb docs: updated release notes for waev 2026-06-26 10:58:10 +10:00
Jared DohrmanandClaude Opus 4.8 6ad3e5224e feat(mqtt): add Waev broker
Add Waev (mqtt.waev.app) as a curated MQTT broker, selectable from the
web-panel Primary/Secondary dropdowns and the CLI.

- Broker spec on bit 0x20, audience mqtt.waev.app, Google Trust Services
  WE1 CA (matches Waev's cert chain); widen broker mask/count to 0x3F/6
- Per-broker JWT lifetime via BrokerSpec.token_ttl_secs: Waev enforces a
  1-hour max token TTL and rejects the 6h default with MQTT CONNACK 5,
  so it mints a 3600s token while other brokers keep the 6h default
- CLI get/set mqtt.waev, web-panel dropdown entry + hidden toggle, docs
- Log token TTL in the "token ready" line for broker auth debugging

fix(web): make Custom MQTT settings full width when Custom is selected

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 10:29:38 +10:00
xJARiDandGitHub 263f04ec3f Merge pull request #69 from xJARiD/develop
Add configurable NTP servers and MeshMapper mqtt
2026-06-23 09:31:09 +10:00
Jared Dohrman dac0923899 chore: update release-notes 2026-06-23 09:25:52 +10:00
Jared Dohrman 93a9c80305 feat(mqtt): add MeshMapper broker, retire LetsMesh, Primary/Secondary broker 2026-06-23 09:22:17 +10:00
Jared Dohrman 67eb70d5c5 fix(tbeam-1w): correct SX1262 TCXO voltage to 1.8V
fix(network): preserve WiFi creds across NetworkPrefs layout changes
2026-06-20 16:31:10 +10:00
Jared Dohrman b8f80dad48 feat: add CLI-configurable NTP servers 2026-06-09 20:49:07 +10:00
xJARiDandGitHub 235e5404b4 Merge pull request #68 from xJARiD/develop
feat: add custom MQTT WSS transport
2026-06-09 19:13:11 +10:00
Jared Dohrman 9bce46c298 feat: add custom MQTT WSS transport 2026-06-09 19:09:33 +10:00
xJARiDandGitHub adbbf1baa8 Merge pull request #67 from xJARiD/develop
fix: harden observer boot and T-Beam S3 telemetry
2026-06-07 13:57:44 +10:00
Jared Dohrman ec88d300c1 fix: stabilise observer wifi ota and s3 telemetry 2026-06-07 13:54:09 +10:00
Jared Dohrman cbfe1cec66 fix: harden observer boot and T-Beam S3 telemetry 2026-06-07 12:32:42 +10:00
xJARiDandGitHub cf73c6c595 Merge pull request #66 from xJARiD/develop
1.16.0! Enhance ESP32 repeaters with power saving and GPIO updates
2026-06-07 08:40:38 +10:00
Jared Dohrman 7232afc115 feat: update release notes and web panel controls 2026-06-07 08:35:09 +10:00
Jared Dohrman 4bce747df0 Merge remote-tracking branch 'upstream/dev' into eastmesh-upstream-dev-sync-20260607
# Conflicts:
#	README.md
#	src/helpers/CommonCLI.cpp
#	src/helpers/ESP32Board.h
#	variants/nibble_screen_connect/platformio.ini
2026-06-07 08:11:15 +10:00
Jared Dohrman a613ba92e2 feat: add web panel firmware update flow 2026-06-04 19:28:43 +10:00
Jared Dohrman c44e9fac3e feat: add update checker 2026-06-04 17:45:03 +10:00
xJARiDandGitHub 0490d8b25a Merge pull request #65 from xJARiD/develop
docs: update release-notes
2026-06-03 12:04:12 +10:00
Jared Dohrman 8d05f0e586 docs: update release-notes 2026-06-03 12:03:42 +10:00
xJARiDandGitHub e304021f92 Merge pull request #64 from xJARiD/develop
Sync with upstream
2026-06-03 11:58:13 +10:00
Jared Dohrman a5e0120ed6 fix: remove stale prefs initializer 2026-06-03 11:54:27 +10:00
Jared Dohrman c25ede42f8 fix: align repeater prefs layout with upstream 2026-06-03 11:51:32 +10:00
Jared Dohrman 4c69dbe4bb Merge remote-tracking branch 'upstream/dev' into eastmesh-upstream-sync-20260603
# Conflicts:
#	README.md
#	src/helpers/CommonCLI.cpp
2026-06-03 11:46:45 +10:00
Jared Dohrman e4b45e429d fix: add missing SX126x register patch for 1W 2026-06-03 11:43:36 +10:00
Jared Dohrman 54f388e3c7 fix: replace real MQTT host placeholder with example value 2026-05-25 12:01:23 +10:00
Jared Dohrman 0fcb010a6f fix: preserve web panel session across Wi-Fi reconnects 2026-05-25 10:24:16 +10:00
Jared Dohrman 4aa2a3dabd feat: add custom mqtt support 2026-05-25 09:51:37 +10:00
Jared Dohrman af81ead9b5 fix: set delay web OTA redirect 3s 2026-05-25 09:20:11 +10:00
Jared Dohrman 12435cfef0 fix: delay web OTA redirect until server is ready 2026-05-24 18:03:21 +10:00
Jared Dohrman 3ffd0e8beb fix: make web server stop idempotent for OTA 2026-05-24 18:00:14 +10:00
Jared Dohrman 1fb68263cd fix: defer ESP32 OTA server startup from web command 2026-05-24 17:55:43 +10:00
Jared Dohrman 01fd229b21 fix: use existing Wi-Fi for ESP32 OTA start 2026-05-24 17:49:01 +10:00
Jared Dohrman 7d561d7459 fix: harden T-Beam 1W radio setup 2026-05-24 17:32:53 +10:00
Jared Dohrman 41848e75e4 feat: add Station_G3_ESP32 observer 2026-05-23 21:39:10 +10:00
Jared Dohrman 88ead24c4f Merge remote-tracking branch 'upstream/dev' into eastmesh-upstream-dev-20260523
# Conflicts:
#	examples/companion_radio/main.cpp
#	src/helpers/sensors/EnvironmentSensorManager.cpp
2026-05-23 20:59:42 +10:00
xJARiDandGitHub 374d6aa87a Merge pull request #63 from xJARiD/develop
Rename EastMesh observer release tracks
2026-05-23 20:44:45 +10:00
Jared Dohrman b69d10208d chore: standardise EastMesh observer release naming 2026-05-23 20:40:44 +10:00
Jared Dohrman 52813b539f chore: rename EastMesh observer release tracks 2026-05-23 20:26:10 +10:00
Jared Dohrman 9415dc4107 fix: retry SD archive recovery while stats are enabled 2026-05-14 17:58:08 +10:00
Jared Dohrman 78bacc3dab fix: normalise generated web panel PEM endings 2026-05-14 09:50:54 +10:00
Jared Dohrman 63d4ced2c1 feat: add repeat status to mqtt status 2026-05-13 12:28:25 +10:00
xJARiDandGitHub d245151a3d Merge pull request #61 from xJARiD/develop
docs: improve EastMesh getting started guides
2026-05-08 12:07:16 +10:00
Jared Dohrman 2f09626c49 docs: improve EastMesh getting started guides 2026-05-08 12:06:36 +10:00
xJARiDandGitHub 7b23753ac7 Merge pull request #60 from xJARiD/develop
Clarify bridge and MQTT documentation in workflow
2026-05-08 11:12:27 +10:00
Jared Dohrman e376f885ee docs: add clarification surrounding bridge and mqtt 2026-05-08 11:10:58 +10:00
Jared Dohrman 452ac4f9a5 chore: workflow housekeeping 2026-05-06 17:01:52 +10:00
xJARiDandGitHub 4ea730f51e Merge pull request #59 from xJARiD/develop
Split EastMesh build wrapper and add MQTT bridge firmware workflows
2026-05-05 20:58:32 +10:00
Jared Dohrman b52a57148c docs: add v1.4.0 release notes 2026-05-05 20:54:02 +10:00
Jared Dohrman 21daf79ddf feat: add bridge firmware release workflows 2026-05-05 20:50:57 +10:00
Jared Dohrman c42cc03069 feat: add MQTT bridge repeater builds 2026-05-05 20:32:32 +10:00
Jared Dohrman 325e7bbfde chore: split EastMesh build wrapper from upstream 2026-05-05 18:14:49 +10:00
xJARiDandGitHub c20c8a932c Merge pull request #58 from xJARiD/develop
chore: reduce upstream merge conflicts
2026-05-05 17:58:57 +10:00
Jared Dohrman 0de06827e8 chore: align with upstream to avoid merge conflicts 2026-05-05 17:54:07 +10:00
Jared Dohrman a4e1fd1d59 fix: prevent future merge from upstream conflicts 2026-05-05 17:46:39 +10:00
Jared Dohrman 7cfaed45c9 Merge remote-tracking branch 'upstream/dev' into integration/upstream-dev-20260505
# Conflicts:
#	.github/workflows/github-pages.yml
#	.github/workflows/pr-build-check.yml
#	README.md
#	docs/cli_commands.md
#	docs/companion_protocol.md
#	docs/faq.md
#	docs/number_allocations.md
#	mkdocs.yml
#	variants/heltec_v3/platformio.ini
2026-05-05 17:30:48 +10:00
xJARiDandGitHub 433e1e4fe7 Merge pull request #57 from xJARiD/develop
fix: mqtt offline status and cli commands
2026-05-01 08:45:12 +10:00
Jared Dohrman fb19c04304 fix: tighten repeater CLI getters and build metadata 2026-05-01 08:38:38 +10:00
Jared Dohrman 27c86b8e5a fix: publish offline status and reconnect when mqtt.iata changes 2026-04-30 16:56:23 +10:00
Jared Dohrman 14d517d29c fix: publish offline status on clean mqtt disconnect 2026-04-30 16:50:31 +10:00
xJARiDandGitHub 37a8dd0633 Merge pull request #55 from xJARiD/develop
fix: gps, truncated LWT, improve no-psram stats, web stability, and absent sensor probes
2026-04-30 15:21:53 +10:00
Jared Dohrman ac3552383d fix: include Wire for sensor I2C probe 2026-04-30 15:11:06 +10:00
Jared Dohrman 6b43aebb9d docs: update repeater mqtt v1.3.14 notes 2026-04-30 15:02:36 +10:00
Jared Dohrman 3b84f050c9 fix: improve no-psram stats, web stability, and absent sensor probes 2026-04-30 14:46:52 +10:00
Jared Dohrman 4cefd24721 docs: update repeater-mqtt-eastmesh-v1.3.14 release notes 2026-04-30 11:16:01 +10:00
xJARiDandGitHub 6183475451 Merge pull request #54 from VBart/patch-1
fix: truncated LWT message
2026-04-30 11:13:18 +10:00
Jared Dohrman f886bb3244 fix: hide inactive GPS stats 2026-04-28 20:07:49 +10:00
xJARiDandGitHub f3b475c315 Merge pull request #53 from xJARiD/develop
fix: preflight mqtt websocket brokers before connect
2026-04-28 10:41:08 +10:00
Jared Dohrman 68772d6a89 docs: add repeater-mqtt-eastmesh-v1.3.13 release notes 2026-04-28 10:34:26 +10:00
Jared Dohrman 51233375c6 fix: preflight mqtt websocket brokers before connect 2026-04-28 10:31:07 +10:00
xJARiDandGitHub 484f530e67 Merge pull request #51 from xJARiD/develop
docs: Update readme to be more australian-specific
2026-04-27 13:19:33 +10:00
Jared Dohrman 942643fc91 docs: Update readme to be more australian-specific 2026-04-27 13:18:55 +10:00
xJARiDandGitHub 3040f56b91 Merge pull request #50 from xJARiD/develop
fix: sd hardening, mqtt jwt lifetime, add region selector
2026-04-27 12:48:07 +10:00
Jared Dohrman 21468ea477 docs: add repeater-mqtt-eastmesh-v1.3.12 release notes 2026-04-27 12:32:20 +10:00
Jared Dohrman 58e94b606d feat: add web panel region selector 2026-04-27 12:28:15 +10:00
Jared Dohrman c729a58c81 fix: extend MQTT JWT lifetime and suppress reconnect noise during planned refresh 2026-04-26 18:10:33 +10:00
Jared Dohrman b003cdc9d9 fix: T-Beam 1W SD archive hardening 2026-04-26 15:12:11 +10:00
xJARiDandGitHub 41a29975a4 Merge pull request #48 from xJARiD/develop
update docs
2026-04-23 09:50:10 +10:00
Jared Dohrman e31c19a848 update docs 2026-04-23 09:49:51 +10:00