diff --git a/docs/_javascript/firmware_picker.js b/docs/_javascript/firmware_picker.js index 3bb2c9d7..816a1d22 100644 --- a/docs/_javascript/firmware_picker.js +++ b/docs/_javascript/firmware_picker.js @@ -49,7 +49,7 @@ }); const MODE_LABELS = Object.freeze({ - standard: "Standard", + standard: "Standard / no separate bridge", full: "Full Companion transports", ble: "Bluetooth LE", usb: "USB", @@ -57,7 +57,6 @@ wifi: "Wi-Fi", serial: "Serial / UART", ethernet: "Ethernet", - mqtt: "MQTT observer", espnow: "ESP-NOW bridge", rs232: "RS-232 bridge", }); @@ -285,7 +284,11 @@ if (/^ethernet(?:$|[_-])/.test(value)) return "ethernet"; return "standard"; } - if (value.includes("observer_mqtt")) return "mqtt"; + // MQTT is an output capability selected under Logging / MQTT. Keeping it + // out of the connection facet avoids asking for the same choice twice. + // ESP-NOW, RS-232, and Ethernet remain here because they select distinct + // bridge firmware or hardware paths. + if (value.includes("observer_mqtt")) return "standard"; if (value.includes("bridge_espnow")) return "espnow"; if (value.includes("bridge_rs232")) return "rs232"; if (value.includes("ethernet")) return "ethernet"; @@ -822,7 +825,7 @@ const loggingOrder = ["none", "usb", "wifi", "both"]; const otaOrder = ["none", "lora-receiver", "lora-source"]; const featureOrder = ["standard", "full"]; - const modeOrder = ["standard", "full", "ble", "usb", "wifi", "serial", "ethernet", "mqtt", "espnow", "rs232"]; + const modeOrder = ["standard", "full", "ble", "usb", "wifi", "serial", "ethernet", "espnow", "rs232"]; const orders = { role: roleOrder, logging: loggingOrder, diff --git a/docs/firmware_picker.md b/docs/firmware_picker.md index 1b2a8b52..36b4f979 100644 --- a/docs/firmware_picker.md +++ b/docs/firmware_picker.md @@ -146,8 +146,9 @@ Ethernet transports. Normal repeater firmware includes runtime-controlled RS-232 support where the board has room; use `set bridge.enabled on` after configuring `bridge.uart` and `bridge.baud`. The Wio-E5 remains the capacity exception and offers a separate -RS-232 image. Repeaters may also offer separate ESP-NOW, Ethernet, or MQTT -observer modes. +RS-232 image. Choose Wi-Fi MQTT under **Logging / MQTT**; it is an output mode, +not a second connection choice. Repeaters may still offer separate ESP-NOW or +Ethernet bridge firmware because those paths use different compiled drivers. An ESP-NOW bridge target keeps LoRa as its primary mesh radio. Its runtime `bridge.format` setting chooses the peer protocol: `wrapped` (the diff --git a/test/test_firmware_picker.js b/test/test_firmware_picker.js index e9c081af..c1c4065c 100644 --- a/test/test_firmware_picker.js +++ b/test/test_firmware_picker.js @@ -524,9 +524,26 @@ assert.strictEqual(fullLogging.variant, "default"); const mqtt = profile("Station_G2_repeater_observer_mqtt-full-usb-wifi"); assert.strictEqual(mqtt.logging, "runtime"); assert.deepStrictEqual(mqtt.loggingModes, ["none", "usb", "wifi", "both"]); -assert.strictEqual(mqtt.mode, "mqtt"); +assert.strictEqual(mqtt.mode, "standard"); assert.strictEqual(mqtt.ota, "lora-receiver"); assert.strictEqual(mqtt.variant, "default"); +assert.strictEqual( + picker.parseTargetProfile("Station_G2_repeater_observer_mqtt").mode, + "standard" +); +assert.strictEqual( + picker.MODE_LABELS.standard, + "Standard / no separate bridge" +); +assert(!Object.prototype.hasOwnProperty.call(picker.MODE_LABELS, "mqtt")); +assert(!picker.uniqueValues(catalog.profiles, "mode").includes("mqtt")); +assert(picker.profileMatchesFacets(mqtt, { + role: "repeater", + logging: "wifi", + ota: "lora-receiver", + mode: "standard", + feature: "full", +})); const fullCompanionSteps = picker.installSteps(v4Full, "merged-bin"); assert(fullCompanionSteps.some(function (step) {