Record V4 MQTT setup and Bellevue G2 Full Repeater update [skip ci]

This commit is contained in:
mikecarper committed 2026-10-21 09:23:26 -07:00
1 parent 497138fad3
commit 8c4fb8d505
2 files changed
+283

No files matched your search

@@ -0,0 +1,72 @@
<!-- meshcore-hosted-doc-link:start -->
<p class="meshcore-hosted-doc-link"><a href="https://mikecarper.github.io/MeshCore/test-results/v4_mqtt_bellevue_g2_2026-10-21/">View this page on MeshCore Docs</a>.</p>
<!-- meshcore-hosted-doc-link:end -->
# V4 MQTT setup and Bellevue G2 Full Repeater, 21 October 2026
Status: **PASS for the requested setup and deployment**. The Mercerwood V4
is left connected to its saved US analyzer MQTT preset. Bellevue's Station G2
now runs the current Full Repeater application, with repeating enabled and its
USB gateway service restored. No firmware source change was needed.
## V4 MQTT
The V4 retains its measured `2bd4cb4d` Full Companion application. Its saved
MQTT switch was already on, while WiFi was off and the MQTT region was empty.
The setup saved region `SEA`, enabled the existing WiFi configuration and kept
the `analyzer-us` preset. This preset uses WSS and device-signed JWT
authentication. WiFi and admin passwords were not changed.
The first connection obtained two broker PUBACKs. A subsequent 137.367-second
held observation recorded PUBACK growth from 3 to 5, uptime from 29,881 to
30,017 seconds, zero core errors and empty core queues. Every sample had an
empty MQTT outbox and zero queue/drop counters. Free DMA memory stayed at
50,056 bytes or more, with a largest block of 49,140 bytes.
The one-minute test status interval was restored to its original five minutes.
That setting restarts the MQTT worker; a separate final check confirmed WiFi,
MQTT and a new broker acknowledgment after the restart. WiFi and MQTT remain
enabled. Other saved broker slots and radio settings were not changed.
PUBACK verifies that the broker accepted a publication. An independent
subscriber payload receipt was not measured because no subscriber account was
available. This finite observation does not replace a long-duration WSS soak.
## Bellevue Station G2
| Item | Result |
| --- | --- |
| Canonical target | `Station_G2_repeater_observer_mqtt`, built through the Full release profile |
| Installed version | `v1.18.0.1-halo-keymind-cascade-dev-observer-a926341f` |
| Application body / target | `4233FACEB6C44EAE` / `DBB6A855` |
| Application SHA256 | `459f2e1de20460b54ac00cd545dfe11490b13081072c3aed47b1398dd276dcf5` |
| Build gates | Full capability and memory gates passed; 200,432 available internal bytes versus 192,656 required heap bytes |
| Installation | Actual ESP32-S3 identity and 16 MiB layout verified; CRC-valid OTA metadata selected the active slot at `0x650000`, size `0x640000` |
| Readback | All 2,118,264 application bytes verified; partition table, OTA metadata and NVS hashes unchanged during the write |
| Persistence | Original public identity, name, radio, TX power, WiFi SSID, MQTT settings and power-saving choice preserved |
| Repeater mode | Role-specific getter accepted; repeating was already on and remains on |
| Final health | Core errors 0, outbound queue 0; local packet counters showed 84 received and 18 sent |
| Service handback | Original `mctomqtt.service` is active and again owns the exact G2 USB endpoint |
The combined Full recipe retains `observer` in its version string and includes
the repeater implementation, MQTT, ESP-NOW, USB logging, WiFi OTA and LoRa OTA.
The build's Full overlay enables the LoRa update path. Saved operating settings
remain 910.525 MHz / BW62.5 / SF7 / CR5 and TX 19 dBm.
The application-only update preserved the existing expanded layout. It made no
whole-chip erase or full-flash backup. Small protected NVS reads were hashed
and removed; after boot, saved logical settings and the full public identity
were independently compared with the original observations.
The first postboot check had zero core errors and one in-flight radio packet
at uptime 13 seconds. The initial harness required an immediately empty queue
and stopped handback at that check. A bounded follow-up on the same installed
firmware verified the exact version, body, identity and repeater role, then
recorded an empty queue with zero errors at uptime 149 seconds and restored
the original USB gateway. That early failed gate is retained in the evidence;
no second firmware installation was performed.
The [safe receipt](v4_mqtt_bellevue_g2_2026-10-21.safe.json) records artifact
bindings, timings and evidence hashes. The local packet counters demonstrate
observed radio activity; independent peer delivery, RF range, physical OTA
installation and long-duration behavior were not tested in this deployment.
@@ -0,0 +1,211 @@
{
"schema": 1,
"report_date": "2026-10-21",
"status": "PASS",
"scope": "Requested V4 MQTT setup and Bellevue Station G2 Full Repeater installation; source-bound finite runtime checks, preserving saved configuration.",
"v4": {
"schema": 1,
"status": "PASS",
"device": "Heltec V4.3 OLED",
"firmware_source": "2bd4cb4d119ce4d588b91a3aa9cfda507e188c13",
"firmware_reflashed": false,
"saved_configuration": {
"wifi_enabled": true,
"mqtt_enabled": true,
"slot1_preset": "analyzer-us",
"transport": "WSS with existing device-signed JWT authentication",
"region_iata": "SEA",
"report_interval_minutes": 5,
"wifi_password_changed": false,
"admin_password_changed": false,
"other_saved_broker_slots_changed": false,
"radio_settings_changed": false
},
"measurements": {
"connected_with_broker_PUBACK": true,
"setup_pub_ack": 2,
"stability_started_at": "2026-10-21T15:49:59.562699+00:00",
"stability_finished_at": "2026-10-21T15:52:16.929845+00:00",
"stability_elapsed_seconds": 137.367146,
"pub_ack_before": 3,
"pub_ack_after": 5,
"uptime_before": 29881,
"uptime_after": 30017,
"all_core_errors_zero": true,
"all_core_queues_zero": true,
"all_mqtt_outboxes_zero": true,
"all_mqtt_drops_zero": true,
"DMA_free_bytes": [
[
50064,
49140
],
[
50064,
49140
],
[
50056,
49140
],
[
50060,
49140
],
[
50056,
49140
],
[
50064,
49140
]
],
"final_reconnect_after_restoring_5min_interval_pub_ack": 1
},
"limits": [
"Broker acknowledgments confirm accepted publications; independent subscriber payload receipt was not measured",
"The held observation is finite, not a long-duration soak",
"Slot2 analyzer-eu remains saved; its connectivity is not claimed"
],
"evidence_sha256": {
"v4-initial.private.json": "799ce0686dfaf31e9b5d3a0b5452782307cca1dd4bd166f5a96f4cc117ae3ac0",
"v4-config-before.private.json": "beb2e22068855f6bb191ceed9040552a4958c942c81017ac97f7b2821b1c2b04",
"v4-mqtt-setup.private.json": "435d3d64c912cee42055cede3f57898713f442683af9de9c47a5a94af165e3de",
"v4-mqtt-observe.private.json": "03512b2b5a53fce3049e4d05814b31e722628d2f0f328079f63c03f14eee3390",
"v4-mqtt-finish.private.json": "59ac5a0b47733de6fae4031d15e4af347ec4ab5941369d9b672d0d28653d4a48",
"v4-final-handoff.private.json": "178a1ce9daa2aa9b4c2f518b19270ac2834609f358de7fefcf23b1e8c00238ca"
}
},
"g2": {
"status": "PASS",
"board": "Station G2",
"target": "Station_G2_repeater_observer_mqtt",
"source_commit": "a926341f53f25895c1b827e7a9ded3fe3948707e",
"runtime_version": "v1.18.0.1-halo-keymind-cascade-dev-observer-a926341f",
"body_hash": "4233FACEB6C44EAE",
"target_id": "DBB6A855",
"application_sha256": "459f2e1de20460b54ac00cd545dfe11490b13081072c3aed47b1398dd276dcf5",
"application_bytes": 2118264,
"build": {
"passed": true,
"profile": "full",
"available_internal_bytes": 200432,
"required_heap_bytes": 192656,
"required_contiguous_bytes": 21184,
"verified_capabilities": [
"bridge.espnow",
"profile.full",
"release.full.same_partition_successor",
"ota.update.wifi",
"ota.update.lora",
"cli.retry_preset",
"telemetry.history",
"ota.cli",
"web.webconfig",
"logging.usb.packets",
"logging.usb.control",
"logging.usb.output"
],
"physical_OTA_install_tested_this_task": false
},
"installation": {
"method": "USB active-application-slot update via identity-bound real flasher session",
"application_address": 6619136,
"slot_size": 6553600,
"flash_bytes": 16777216,
"CRC_valid_active_OTA_selection": true,
"full_application_readback_verified": true,
"partition_table_unchanged_during_write": true,
"OTA_metadata_unchanged_during_write": true,
"NVS_hashes_unchanged_during_write": true,
"whole_flash_erased": false,
"full_flash_backup_created": false,
"finished_before_runtime_check": "2026-10-21T16:13:57.046009+00:00"
},
"handback": {
"repeater_role_verified": true,
"repeat_on": true,
"repeating_setting_changed": false,
"persisted_public_identity_preserved": true,
"saved_settings_preserved": [
"radio",
"TX power",
"name",
"WiFi SSID",
"MQTT region",
"MQTT slot1 preset",
"MQTT enabled",
"power saving"
],
"radio_MHz": 910.5250244,
"bandwidth_kHz": 62.5,
"SF": 7,
"CR": 5,
"TX_dBm": 19,
"gateway_service": "mctomqtt.service",
"gateway_active_and_owns_exact_USB_radio": true,
"finished_at": "2026-10-21T16:16:16.796932+00:00",
"core": {
"battery_mv": 0,
"uptime_secs": 149,
"errors": 0,
"queue_len": 0
},
"local_packet_counters": {
"recv": 84,
"sent": 18,
"flood_tx": 17,
"direct_tx": 1,
"flood_rx": 84,
"direct_rx": 0,
"recv_errors": 53
}
},
"history": {
"preinstall_version": "v1.17.1.9-halo-keymind-cascade-dev-observer-88c85108 (Build: 07-Oct-2026)",
"preinstall_core": {
"battery_mv": 0,
"uptime_secs": 514679,
"errors": 2,
"queue_len": 0
},
"initial_postboot_core": {
"battery_mv": 0,
"uptime_secs": 13,
"errors": 0,
"queue_len": 1
},
"initial_gate": "First updater required an immediately empty queue and stopped handback when one in-flight packet was present; core errors were zero.",
"followup": "Same installed firmware, exact role/identity/body check and bounded queue settling; final core errors and queue zero; original service restored. No second flash."
},
"evidence_sha256": {
"g2-repeater-mode.private.json": "33bd01887f37976ae57625cc38bed19f4d1b67ceefb138d48a923d6540448007",
"g2-update.private.json": "d5fdd68a7c4b69490e044bb13382aecff6bfac165533667f60a872279c1cb422",
"esptool5-toolchain.safe.json": "b1aa669f926122c685da2bd3b913ce5293b3b032766509abebe5a2a5817a4d0a",
"g2-preflight-maintenance.private.json": "bc64ad47f4f91d083586ea60ea5bf8cce9752eaa64a42aa15127595f9fa19ad7",
"g2-post-update-runtime.private.json": "cadcd09599d017796f6cc40cb806c28b6d876020ebdabab16cfce1521bda9a83",
"g2-initial.private.json": "58ff2cb0cd0cf1c265a443f6e8998512e2dee09f6309465583514ae70134b934",
"g2-app-only.5PDUMy/otadata-before.bin": "062f79dd9748aef0e56afddd5db3112af00549478e9d478e38137d5f3232f3a3",
"g2-app-only.5PDUMy/readback-validation.log": "4a23e7cd0007c14ffa1315243d874da297c8f5d07f4691084a77b5f532020a68",
"g2-app-only.5PDUMy/inputs.json": "c465b370c19591754661313afd5c175c9c5a951071101517561051083a027bb9",
"g2-app-only.5PDUMy/chip-id.log": "4fbc18754870b54011aa466f2d745f41cdf8a3abe625ad21c61267c97891f085",
"g2-app-only.5PDUMy/otadata-after.bin": "062f79dd9748aef0e56afddd5db3112af00549478e9d478e38137d5f3232f3a3",
"g2-app-only.5PDUMy/table-after.bin": "9af3af2b74e944337ba85f2b0027ee80df160579a1ab746ba0f95853f618cd60",
"g2-app-only.5PDUMy/flash-id.log": "7081b077e1d870cac28a1f27a1718d7cc478d77d16c71aaef09bde9925dabaf7",
"g2-app-only.5PDUMy/finish.log": "bf1313b4bcf482b65afac381e7023e6ce4deb2a1fcbb139a434166053ee7d898",
"g2-app-only.5PDUMy/receipt.safe.json": "18ff87dc1063d858b273084d398feb1ac0fe003ee0fe9a30073e9573347a024b",
"g2-app-only.5PDUMy/protected-after-hashes.json": "0d26cc446d400d03279716e6724cb265fd27cbb78031c35dfe9a5a4b14a08c79",
"g2-app-only.5PDUMy/write.log": "d9cd5efaa91bafbf271380ab0eac5124f27393e482fe87596fdf21b3734560b3",
"g2-app-only.5PDUMy/protected-hashes.json": "73679b17f25c18d20608835e8a689ab4e2d536f32d8888cb1ff3ab368166c264",
"g2-app-only.5PDUMy/table-before.bin": "9af3af2b74e944337ba85f2b0027ee80df160579a1ab746ba0f95853f618cd60"
},
"limits": [
"Local radio counters establish observed activity, not independent peer delivery or RF range",
"No physical WiFi/LoRa OTA installation, long-duration load or power measurements in this task",
"Protected NVS/table/OTA hashes refer to the flash-write interval; saved logical settings and identity were separately compared after boot"
]
},
"firmware_source_changed_in_this_task": false,
"other_boards_or_gateway_services_changed": false
}