diff --git a/drb-edge-node/app/internal/health.py b/drb-edge-node/app/internal/health.py
index be95a1e..064222e 100644
--- a/drb-edge-node/app/internal/health.py
+++ b/drb-edge-node/app/internal/health.py
@@ -182,6 +182,7 @@ def build_checks(f: Dict[str, Any]) -> List[Dict[str, str]]:
freq = _mhz(chans[0].get("freq")) if chans else None
checks.append(_check(
"decode", "Decoding", OK, f"Tuned to {freq or 'the analog frequency'} (analog FM — no decoding needed).",
+ "Live listening only: analog calls are not recorded or uploaded yet (node-26#20).",
))
else:
trunk = console.get("trunk") or []
diff --git a/drb-edge-node/app/templates/scanner.html b/drb-edge-node/app/templates/scanner.html
index 9d0eaaf..2b5d286 100644
--- a/drb-edge-node/app/templates/scanner.html
+++ b/drb-edge-node/app/templates/scanner.html
@@ -124,7 +124,7 @@
}
.softkey:last-child { border-right: none; }
- /* Overlay UI (Volume, Hold) */
+ /* Overlay UI (Volume, status) */
.overlay {
position: absolute;
top: 50%; left: 50%;
@@ -153,7 +153,6 @@
- Up Arrow Volume Up
- Down Arrow Volume Down
- - Enter / H Toggle Hold (UI mock)
- P Play/Pause Stream
- S Select System
- R Revert Override
@@ -211,7 +210,7 @@
PLAY (P)
- HOLD
+
@@ -230,7 +229,6 @@
const elOverlay = document.getElementById('overlay');
let currentIcecastUrl = null;
- let isHolding = false;
let volume = 1.0;
// Clock updater
@@ -372,25 +370,20 @@
}
closeSystemModal();
showOverlay("APPLYING MANUAL", 3000);
- const manualConfig = {
- system_id: "manual-override",
- name: `Freq ${freqVal} (${typeVal})`,
- type: typeVal,
- config: {
- control_channels: [freqVal],
- talkgroups: []
- }
- };
+ // Same validated path as the dashboard's "Listen locally" (MHz range check).
+ const mode = typeVal === 'NBFM' ? 'analog' : 'p25';
+ const freqs = freqVal.split(/[\s,;]+/).filter(Boolean).map(Number);
try {
- const res = await fetch('/api/config/override', {
+ const res = await fetch('/api/listen', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({ system_config: manualConfig })
+ body: JSON.stringify({ mode, frequencies: freqs })
});
if (res.ok) {
- showOverlay('MANUAL OVERRIDE OK', 1500);
+ showOverlay('MANUAL OK', 1500);
} else {
- showOverlay('MANUAL OVERRIDE FAIL', 2000);
+ const d = await res.json().catch(() => ({}));
+ showOverlay((d.detail || 'MANUAL FAILED').slice(0, 60), 4000);
}
} catch (err) {
showOverlay('ERROR APPLYING', 2000);
@@ -443,9 +436,6 @@
audioPlayer.volume = volume;
elVol.textContent = `VOL: ${Math.round(volume * 100)}%`;
showOverlay(`VOL: ${Math.round(volume * 100)}%`);
- } else if (e.key === 'Enter' || e.key === 'h' || e.key === 'H') {
- isHolding = !isHolding;
- showOverlay(isHolding ? 'HOLD ON' : 'HOLD OFF');
} else if (e.key === 'p' || e.key === 'P') {
if (audioPlayer.paused) {
audioPlayer.play();
diff --git a/drb-edge-node/tests/test_local_dashboard.py b/drb-edge-node/tests/test_local_dashboard.py
index 445a90f..99889b8 100644
--- a/drb-edge-node/tests/test_local_dashboard.py
+++ b/drb-edge-node/tests/test_local_dashboard.py
@@ -126,6 +126,7 @@ def test_analog_needs_no_control_channel():
console={"last_poll_epoch": now, "channels": [{"freq": 154430000}], "trunk": [], "last_heard": None},
)))
assert c["decode"]["state"] == "ok" and "154.4300 MHz" in c["decode"]["summary"]
+ assert "not recorded" in c["decode"]["action"]
assert "this dashboard" in c["source"]["summary"]