rx-v2.8.6
rx-v2.8.6 — bidirectional sensor sync + on-device diagnostic console
This release pairs with tx-v2.0.15 and lights up two things I've wanted on the hub for a while: the receiver now understands which sensor each transmitter is actually running, and there's a built-in diagnostic console you can pull straight from the device — no laptop-on-balcony required.
What's new
Per-transmitter sensor selector
Each tank's edit sheet now has a Sensor dropdown (Ultrasonic AJ-SR04M / mmWave HLK-LD2413). The receiver tracks two fields per TX:
sensor_kind— what the hub wants the TX to useactive_sensor— what the TX is actually running, reported back inside each TANK packet
When you save a change from the hub or the PWA, the value gets queued as a remote-config update, sent over LoRa via the existing SET: downlink (now with a :SENSOR= clause), ACKed by the TX, and the next TANK frame closes the loop with active_sensor matching sensor_kind. Mixed-firmware fleets keep working — older TXs that don't yet emit the field parse fine with active_sensor="".
If you change the sensor on the TX directly (via its AP web UI), the hub also learns from it. When the registry sees an active_sensor that diverges from its sensor_kind and no SET is in flight, it auto-syncs the registry to TX-truth. So edits from either side converge.
Diagnostic console
Boot-time logging is now captured into a 4 KB ring buffer inside the receiver and exposed at GET /api/logs. Paired with the diagnostic-mode toggle on the TX firmware, you can pull a live log tail from either device to a terminal:
curl http://<hub-ip>/api/logs # whole tail
curl http://<hub-ip>/api/log_clear # wipe + start freshNo serial cable, no rooftop, no opening the case. The previous LoRa-OTA debug story relied on plugging into the TX — now you can diagnose from anywhere on the LAN.
MQTT bridge for the new field
Cloud telemetry now exposes:
tank_<addr>/sensor_kind(retained) — hub's desired sensor for this TXtank_<addr>/active_sensor(retained) — what the TX is currently runningcmd/set_confignow accepts asensor_kindfield for remote control from the PWA
What changed (file-level)
components/transmitter_registry/— addedsensor_kind+active_sensorfields, bidirectional auto-sync when TX-truth diverges from registry intent,registry_set_sensor_kind()APIcomponents/lora_rylr998/— TANK parser extracts the 11th positional field (active_sensor); backwards-compat with older TXs that omit itcomponents/web_server/— Edit Tank sheet adds the Sensor dropdown (full-width row),/api/transmittersreturns both fields,/api/logs+/api/log_clearadded, max URI handlers bumped to 12 so the new endpoints actually registercomponents/mqtt_client/— publishes both fields as retained topics, acceptssensor_kindoncmd/set_configcomponents/log_buffer/— new component: 4 KB ring buffer wired up viaesp_log_set_vprintf()main/main.c— SET-frame builder appends:SENSOR=...when a sensor change is queued;log_buffer_init()runs first thing inapp_main
OTA + upgrade notes
Standard OTA from any rx-v2.7.x+ build via the Settings → System → Check for updates flow on the hub web UI. The cloud-side OTA proxy and PWA OTA panel both already understand the new version. No manual steps required after upgrade — the new fields default to empty ("") on existing transmitters and populate as soon as each TX reports its active_sensor on the next wake.
If you're also flashing tx-v2.0.15 transmitters: the pair works end-to-end on the bench (Normal Water Tank, addr 2, on my own deployment). For mixed fleets with older TX firmware, the hub gracefully treats them as active_sensor="" and skips sensor-change downlinks until you upgrade them.
Why rx-v2.8.6 instead of rx-v2.8.5?
rx-v2.8.5 already shipped earlier this week as the version-stamping bugfix release (single-VERSION-file pattern). The sensor-sync work outgrew that scope, so it gets its own tag to keep release-history clean. Both 2.8.5 and 2.8.6 are OTA-compatible with any tx-v2.0.x transmitter.
Hardware compatibility
No hardware changes. Works on existing TankSync REV 2.2 PCBs and breadboards. The HLK-LD2413 driver lives on the TX firmware side, not the RX — see the tx-v2.0.15 notes for sensor wiring.
— Ravi