Commit Graph
4233 Commits
Author SHA1 Message Date
agessaman f339beb22e docs: refresh observer docs and document ota commands
Add ota check/update/branch, display, and diagnostic commands to the
observer guide; condense MQTT_IMPLEMENTATION.md and ALERTS.md; fix the
nonexistent 'set bridge off' instruction; mark the T-LoRa observer envs
parked; update the SNMP build-target list; move local-testing notes to
MQTT_INTERNALS.md; drop MEMORY_MONITORING.md (its script never existed).
2026-10-18 15:00:47 -07:00
agessaman 480c540bf8 feat(repeater): set ADC multiplier during MyMesh initialization 2026-10-18 14:42:53 -07:00
agessaman 10612f7d95 chore(gitignore): add impeccable.json to .gitignore 2026-10-18 14:35:28 -07:00
Adam Gessaman 905b0af2e6 feat(variants): add Heltec V2 MQTT observer envs
Heltec_v2_repeater_observer_mqtt and Heltec_v2_room_server_observer_mqtt,
modelled on the Heltec V3 observer envs. The V2 is a classic ESP32 without
PSRAM, so like the T-LoRa observer it is documented as one active WSS broker
and leaves MQTT_NEIGHBORS_WITHOUT_PSRAM off. Its 8 MB flash and the board's
default_8MB.csv layout fit the image (48% of the app slot), so no partition
change or erase is needed.
2026-10-15 18:15:33 -07:00
Adam Gessaman fdfcbfd409 ci: bump observer channel base version to v1.18.0
Both channels move together: the beta workflow's FIRMWARE_VERSION must equal
production's. Resets the per-base build counter so the first builds are
v1.18.0.1. The flasher repo's config.json version key still needs the
matching bump.
2026-10-15 17:30:24 -07:00
Adam Gessaman 021f45aa36 Merge upstream/dev (v1.18.0) into observer-firmware-dev 2026-10-15 17:30:23 -07:00
Scott Powell 07a833bbbe * version 1.18.0 2026-10-15 19:42:01 +11:00
ripplebiz 9043a2bbf8 Merge pull request #3596 from recrof/wifi-companion-boards
added dynamic wifi to: heltec wsl3, v4r8, wireless paper; rak 3112; seeed xiao s3 (wio)
2026-10-15 19:35:32 +11:00
Rastislav Vysoky 97c0aec8d6 added dynamic wifi to: heltec wsl3, v4r8, wireless paper; rak 3112; xiao s3 (wio) 2026-10-15 09:57:31 +02:00
ripplebiz f1b608a777 Merge pull request #2377 from fschrempf/dev
Disable NRF52 undervoltage bootlock feature
2026-10-15 15:02:12 +11:00
Liam Cottle 2586f7abe3 Merge pull request #3591 from liamcottle/feature/companion-ble-wifi
Add WiFi support to Heltec v3 and v4 BLE variants
2026-10-14 20:23:11 +13:00
agessaman 79a0e8404d Merge Waveshare LR1121 observer variants into observer-firmware-dev 2026-10-13 20:38:26 -07:00
liamcottle a0fc769660 rework companion ui for ip address so it fits in multi interface variants 2026-10-14 16:29:41 +13:00
liamcottle c0d00a060a enable wifi interface for heltec v4 ble variant 2026-10-14 15:16:55 +13:00
agessaman 14b487da81 Merge upstream/dev into observer-firmware-dev
Preserve observer discovery when forwarding is disabled while honoring hidden-node settings. Keep GPS power ownership paired and incorporate upstream GPS diagnostics.
2026-10-13 19:10:10 -07:00
liamcottle 590bc23ab9 enable wifi interface for heltec v3 ble variant 2026-10-14 15:05:00 +13:00
Liam Cottle 8e48e01a4b Merge pull request #3589 from meshcore-dev/remove-room-repeater
Room: "set repeat" CLI now deprecated
2026-10-14 14:27:54 +13:00
Scott Powell 481f72cae7 * only 'repeat on' now intercepted 2026-10-14 12:21:38 +11:00
ripplebiz d86cad8a82 Merge pull request #3575 from agessaman/feat/lr1121-dual-band-power
LR1121: keep TX power valid across sub-GHz and 2.4 GHz
2026-10-14 12:04:47 +11:00
ripplebiz 97113a7050 Merge pull request #3574 from agessaman/feat/waveshare-esp32s3-lr1121
feat(variants): add Waveshare ESP32-S3-LR1121
2026-10-14 12:00:11 +11:00
Scott Powell 8579c66747 * Room: "set repeat" CLI now deprecated 2026-10-14 11:48:58 +11:00
ripplebiz b47fd54905 Merge pull request #3573 from meshcore-dev/ack-timing-fix
ACK forwarding timing fix
2026-10-13 15:48:29 +11:00
ripplebiz 52d7bf1551 Merge pull request #3568 from meshcore-dev/zero-scope
Treat transport code 0 the same as un-scoped.
2026-10-13 15:48:02 +11:00
agessaman f6a6f3dbe9 fix(radiolib): keep LR1121 tx power valid across sub-GHz and 2.4 GHz
- Clip requested power to the active PA's range instead of failing. A
  stored 22 dBm was rejected at 2.4 GHz (HF PA max 13 dBm), and since
  setTxPower ignores errors the sub-GHz PA stayed configured.
- Re-apply the requested power after every successful retune: PA choice
  depends on the band, and set radio / tempradio only call setParams.
2026-10-11 21:07:19 -07:00
agessaman eac6e66b1b fix(radiolib): keep LR1121 tx power valid across sub-GHz and 2.4 GHz
- Clip requested power to the active PA's range instead of failing. A
  stored 22 dBm was rejected at 2.4 GHz (HF PA max 13 dBm), and since
  setTxPower ignores errors the sub-GHz PA stayed configured.
- Re-apply the requested power after every successful retune: PA choice
  depends on the band, and set radio / tempradio only call setParams.
2026-10-11 21:07:05 -07:00
agessaman 018c5e7d04 feat(variants): add Waveshare S3 LR1121 MQTT observer envs 2026-10-11 20:54:12 -07:00
agessaman 51fc3ac58f feat(variants): add Waveshare ESP32-S3-LR1121
ESP32-S3FH4R2 (4MB flash, 2MB PSRAM, native USB-CDC) with an LR1121.
Pins, the DIO5/DIO6 RF switch table and the 1.8 V TCXO follow the HF
schematic and Waveshare's examples. Envs: repeater, room server,
companion USB/BLE and KISS modem, all on min_spiffs so roles share one
partition layout.

Only RFO_HP_LF is wired (R4 on RFO_LP_LF is not fitted), so the new
opt-in LR1121_FORCE_HP_PA flag keeps RadioLib on the HP PA at <= 14 dBm,
where it would otherwise select the unconnected LP PA.
2026-10-11 20:54:12 -07:00
agessaman 3d1a5d4c64 feat(variants): add Waveshare ESP32-S3-LR1121
ESP32-S3FH4R2 (4MB flash, 2MB PSRAM, native USB-CDC) with an LR1121.
Pins, the DIO5/DIO6 RF switch table and the 1.8 V TCXO follow the HF
schematic and Waveshare's examples. Envs: repeater, room server,
companion USB/BLE and KISS modem, all on min_spiffs so roles share one
partition layout.

Only RFO_HP_LF is wired (R4 on RFO_LP_LF is not fitted), so the new
opt-in LR1121_FORCE_HP_PA flag keeps RadioLib on the HP PA at <= 14 dBm,
where it would otherwise select the unconnected LP PA.
2026-10-11 20:51:18 -07:00
Scott Powell 6df5aaed43 * ACK forwarding (in direct mode) had zero delay 2026-10-12 10:44:42 +11:00
Scott Powell 01f9293be0 * treat transport code 0 the same as un-scoped. 2026-10-08 19:56:45 +11:00
Adam Gessaman 7fd8c31f1d Merge pull request #66 from agessaman/feat/mqtt-advert-verify
feat(mqtt): add opt-in advert signature check before publishing
2026-10-07 20:56:24 -07:00
agessaman e53755a5a9 feat(mqtt): add opt-in advert signature check before publishing
Received packets are uploaded before Mesh::onRecvPacket validates them, so
an advert corrupted over the air that still passes the LoRa CRC is published
with a mangled name or location. `set mqtt.advert.verify on` verifies each
received advert's Ed25519 signature (same message layout as Mesh.cpp,
including the 32-byte app-data clamp) and skips publishing failures.

Defaults off so collectors keep seeing RF corruption on the mesh. Dropped
adverts are counted as badsig= in `get mqtt.stats`. Exposed in the web
config Publishing card and persisted as mqtt.advert_verify in prefs JSON.
2026-10-07 20:07:36 -07:00
Liam Cottle 2dbd463eda Merge pull request #3561 from quyenlt298/nelos-groupdata-allocation
Add Nelos allocation for GroupData
2026-10-07 20:41:54 +13:00
quyenlt298 47c3005b08 Add Nelos allocation for GroupData 2026-10-07 13:09:36 +07:00
Liam Cottle f3bcb3634b Merge pull request #3559 from syssi/streamline-ota-ble-name
Use consistent `_OTA` suffix for nRF52 OTA BLE names
2026-10-07 12:16:50 +13:00
Sebastian Muszynski 4c2af58d3e Use consistent _OTA suffix for nRF52 OTA BLE names 2026-10-06 18:50:15 +02:00
agessaman a24dade1c0 fix(network): snapshot and restore every lwIP DNS slot
DHCP can fill all DNS_MAX_SERVERS (3) slots, but only two were saved and restored, so a third server from one medium survived a switch to the other. link.dns now drops trailing empty slots to keep remote replies under 160 bytes.
2026-10-04 20:45:07 -07:00
agessaman 274997e9ae feat(cli): add get link.dns for resolver, gateway and lease DNS
Shows lwIP's live global DNS server list next to the DNS each medium's DHCP lease installed, so a node that is linked but failing to resolve can be diagnosed remotely.
2026-10-04 19:55:54 -07:00
Liam Cottle 3e3150c83f Merge pull request #3538 from meshcore-dev/hidden-repeater
Hidden repeater
2026-10-04 20:10:43 +13:00
Scott Powell f19733e478 * don't respond to DISCOVER requests if node has adverts turned off. (isHiddenNode()) 2026-10-04 15:02:00 +11:00
Adam Gessaman a928498c46 Merge pull request #63 from agessaman/merge/ota-branch-into-observer-firmware-dev
feat(ota): ota branch channel switch (dev)
2026-10-03 16:41:52 -07:00
agessaman 45d8f15098 Merge branch 'feat/ota-branch-switch' into merge/ota-branch-into-observer-firmware-dev 2026-10-03 15:52:39 -07:00
agessaman 8ec31dda71 fix(ota): skip the bare compat search literal when scanning an image
Every image also holds "ota-compat:" with no value (the search string);
finding it first made every channel switch look untagged.
2026-10-03 15:52:21 -07:00
agessaman a0856bed72 feat(ota): dev stores /mqtt.json, so its state generation is 2
Builds that only read /mqtt_prefs (gen 1) are refused as channel-switch
targets until they can read /mqtt.json.
2026-10-03 15:47:01 -07:00
agessaman baf01a5c16 Merge branch 'feat/ota-branch-switch' into merge/ota-branch-into-observer-firmware-dev
# Conflicts:
#	examples/simple_repeater/MyMesh.cpp
2026-10-03 15:47:01 -07:00
agessaman ed8af1b7ca fix(ota): refuse a channel switch to a build that cannot carry this node
A switch can land on an older build: e.g. prod cannot read dev's /mqtt.json,
and prod's M7 image has no Ethernet. Each image carries an ota-compat tag
(state generation + transports). A switch is flashed without rebooting, the
new image's tag is read (bounded by its length), and boot is pointed back at
the running image unless the target keeps this node's state and transports.
CI now requires the tag in every published binary.
2026-10-03 15:46:46 -07:00
agessaman f652e7d185 fix(ota): flash the channel ota update checked, not a later ota branch
The deferred flash re-read the channel preference ~2.5 s after ota update
acknowledged its target; capture it when the update is scheduled.
2026-10-03 15:37:49 -07:00
agessaman a1943a8eac fix(ota): always offer another channel's image, even from the same commit
Prod and beta are often built from one commit (e.g. after a dev->prod merge),
so a hash match does not mean the images are the same: the native base differs.
After the flash the target channel is native, so this cannot loop.
2026-10-03 15:37:49 -07:00
agessaman ee88192acb Merge branch 'feat/ota-branch-switch' into merge/ota-branch-into-observer-firmware-dev
# Conflicts:
#	.github/workflows/build-observer-firmwares.yml
#	examples/simple_repeater/MyMesh.cpp
#	examples/simple_room_server/MyMesh.cpp
#	src/helpers/ESP32Board.cpp
#	src/helpers/ESP32Board.h
#	test/test_config_serializer/test_config_serializer.cpp
2026-10-03 15:24:33 -07:00
agessaman 65d80bc908 ci(ota): verify each published binary's native channel by tag
Every observer build now carries both channel URLs, so checking for a URL's
presence or absence can no longer tell prod from beta (and the old checks would
reject every build). Read the ota-base-* tags from every .bin in out/ instead
of a single ELF, with URLs shared by build.sh and both workflows.
2026-10-03 15:24:11 -07:00