feat(bandopen): read PSK Reporter, and arrange the sources the watch needs

The detection shipped reading whatever the operator's cluster nodes happened to
carry. On VHF that is a few hundred skimmers, nearly all of them on HF: a 6 m
opening carrying 869 stations reached OpsLog as a handful of spots or none, and
Nexus flagged it on the same PC while OpsLog stayed silent.

internal/pskr subscribes to pskr/filter/v2/<band>/# on PSK Reporter's MQTT
broker. Every ordinary station running WSJT-X reports what it decodes, so the
difference is two orders of magnitude rather than a threshold. The feed's shape
suits us exactly: BOTH grids are in each message, so distance and bearing are
arithmetic — no lookup, and no DXCC-centre approximation, which is what made the
cluster path's bearings coarse. The geometry is injected from app.go so it stays
the same arithmetic the cluster path uses; two answers to one question is how a
bearing quietly becomes wrong.

Volume was the design constraint, not the protocol. Six metres open is thousands
of messages a minute and this runs on some very old PCs, so nothing is kept or
persisted in the watcher: each message is parsed, measured and handed on or
dropped, and the detector's existing window does the deciding.

And the part that was the real bug: enabling the watch now ARRANGES ITS OWN
SOURCES. It adds the two RBN nodes when missing and brings the feed up. A
feature that silently depends on sources nobody can know are needed does not
look unconfigured, it looks broken. Matched on host and port, not name, so an
operator who renamed theirs does not get a duplicate — which the detector would
read as twice as many stations, and announce an opening that is not there.

Turning it off leaves the nodes alone: they may have been wanted for their own
sake, and removing a node someone is using is worse than leaving one they are not.
This commit is contained in:
2026-08-11 12:48:29 +02:00
parent 2d3bfa704e
commit 8afba2c4e8
12 changed files with 601 additions and 12 deletions
+12
View File
@@ -718,6 +718,10 @@ export function GetBackupSettings() {
return window['go']['main']['App']['GetBackupSettings']();
}
export function GetBandOpenSettings() {
return window['go']['main']['App']['GetBandOpenSettings']();
}
export function GetBandOpenings() {
return window['go']['main']['App']['GetBandOpenings']();
}
@@ -874,6 +878,10 @@ export function GetPOTAToken() {
return window['go']['main']['App']['GetPOTAToken']();
}
export function GetPSKReporterStatus() {
return window['go']['main']['App']['GetPSKReporterStatus']();
}
export function GetPendingQSOs() {
return window['go']['main']['App']['GetPendingQSOs']();
}
@@ -1690,6 +1698,10 @@ export function SaveBackupSettings(arg1) {
return window['go']['main']['App']['SaveBackupSettings'](arg1);
}
export function SaveBandOpenSettings(arg1) {
return window['go']['main']['App']['SaveBandOpenSettings'](arg1);
}
export function SaveCATSettings(arg1) {
return window['go']['main']['App']['SaveCATSettings'](arg1);
}