fix(pskr): a ten-minute window, both directions, and always an answer

Measured against DXHunter on the same station at the same second: 18
decodes here against 27 there.

- The window was five minutes. PSK Reporter's uploaders batch their
  reports, most of them every five, so a five-minute window catches
  about one upload cycle per station. Ten, as DXHunter has always had
  behind a label that says four.

- The history query ran once per target and only on the narrow feed.
  It now runs in both scopes and again every five minutes while a
  station is watched, which is the cadence the uploaders keep.

- It asked only what the target RECEIVED. Both directions now, so
  "who is hearing him" starts full too.

- The suggested call offset looked for a run of empty slots and said
  nothing when there was none — exactly the case it exists for: a
  hundred decodes across a 2800 Hz passband leave no gap. Failing a
  gap it names the quietest slot, ties to the higher offset, never
  above the ceiling.

Chase new: the receiver squares now follow the radius that was asked
for (it was one fixed ring whatever the setting said, so raising it
bought nothing), and the panel says what the feed is doing rather than
leaving an empty list to speak for itself. A change of hunt empties it:
its rows are verdicts reached under the old rule and nothing re-judged
them. Its own band selection, because what a station CAN work and what
is worth watching tonight are different questions.
This commit is contained in:
2026-09-05 21:45:39 +02:00
parent a41626955e
commit 470eaf5d80
4 changed files with 206 additions and 31 deletions
+7
View File
@@ -319,6 +319,12 @@ type Status struct {
LastErr string `json:"last_err,omitempty"`
Broker string `json:"broker"`
Bands []string `json:"bands"`
// What the feed is actually filtered on, so a panel showing nothing can say
// WHY instead of leaving the operator to guess: the radius in force, and how
// many receiver squares it came to. A radius raised in Preferences that
// never reached the subscription is invisible without these two.
NearKm int `json:"near_km"`
Squares int `json:"squares"`
}
func (w *Watcher) Status() Status {
@@ -327,6 +333,7 @@ func (w *Watcher) Status() Status {
st := Status{
Running: w.running, Received: w.received, LastAt: w.lastAt,
LastErr: w.lastErr, Broker: w.cfg.Broker,
NearKm: w.cfg.NearKm, Squares: len(w.cfg.RxGrids),
}
st.Bands = append(st.Bands, w.cfg.Bands...)
return st