fix(pskr): an opening has to be an opening HERE

A PSK Reporter message says "X was heard BY Y". The watcher measured the
distance and bearing from the operator to X and stopped there, never asking who
had actually heard it — so a station 1400 km away, decoded by somebody in Japan,
counted as evidence. That proves the path from X to JAPAN and says nothing about
whether anything reaches this station. It is how a "2 m opening" came to be
announced out of a KX9X in the United States, and the operator was right to find
the callsign list absurd.

Reports are now kept only when the RECEIVING station is within 300 km. Far
enough to borrow the ears of a whole region — an opening reaches an area, not a
postcode, and waiting for a decode at one's own antenna is just working the band
— and close enough that the ionosphere doing something there is it doing the
same thing here. The transmitter still supplies the direction and the path
length, which is what was always wanted from it.

Also drops 12 m from the watched bands, at the operator's request: at this point
in the cycle it is open often enough that announcing it is a notification rather
than news, and a band that cries wolf costs the ones that do not. One fewer
subscription is also less traffic on a PC that pays for every message.
This commit is contained in:
2026-08-11 14:58:10 +02:00
parent 8aa0e39aff
commit 24668d5981
3 changed files with 54 additions and 17 deletions
+8 -7
View File
@@ -68,14 +68,15 @@ func DefaultConfig() Config {
// Bands watched.
//
// 10 and 12 m are in, and they are HF. The line is not "HF versus VHF" but
// "is an opening here an event": 20 m being open is the normal state of the
// band and saying so is noise, while 10 and 12 m spend most of a solar cycle
// shut and open sharply when they go — which is exactly what an operator wants
// interrupting them for. They also carry the Es that reaches 6 m, often first.
// 10 m is in, and it is HF. The line is not "HF versus VHF" but "is an opening
// here an event": 20 m being open is the normal state of the band and saying so
// is noise, while 10 m spends most of a solar cycle shut and opens sharply when
// it goes — which is what an operator wants interrupting them for.
//
// Anything below 12 m stays out for the reason above.
var watched = map[string]bool{"12m": true, "10m": true, "6m": true, "4m": true, "2m": true}
// 12 m was tried and dropped. It behaves too much like 20 m at this point in the
// cycle: open often enough that announcing it is a notification rather than
// news, and every band that cries wolf costs the ones that do not.
var watched = map[string]bool{"10m": true, "6m": true, "4m": true, "2m": true}
// Watched reports whether a band is one the detector looks at.
func Watched(band string) bool { return watched[strings.ToLower(strings.TrimSpace(band))] }