Skip to content

Changelog

Vollständiger Versionsverlauf von HAM-Tools.

1.10.9 — 2026-06-01

Verbindungs-Anzeige in der Logbuch-Leiste: Internet- und DX-Cluster-Status neben dem Akku. Wunsch von Rene HB9HJL.

Logbuch — Top-Bar

  • Internet-Pille: zeigt neben dem Akku, ob der Mac online ist — WLAN, LAN (Ethernet), Mobil (Mobilfunk) oder Offline (rot). Unabhängig vom Akku, also auch auf Desktop-Macs sichtbar. Im Feld (POTA/SOTA) sieht man so auf einen Blick, ob QRZ-Abfragen, Cluster und Uploads erreichbar sind.
  • Cluster-Pille: spiegelt den DX-Cluster-Status (grün = verbunden, gelb = im Aufbau, rot = Fehler, grau = getrennt). Der Tooltip zeigt die Pool-Zählung (z.B. »Verbunden 2/3«).
  • Ist der Mac offline, wird die Cluster-Pille ausgegraut.

1.10.8 — 2026-05-31

CAT teilen mit WSJT-X & Co., Bandfilter folgt dem Funkgerät, Spot-Klick markiert die Weltkarte, echter Yaesu-Tune-Knopf. Eingaben von Rene HB9HJL.

CAT teilen — WSJT-X & HAM-Tools gleichzeitig am selben Radio

Bisher hielt HAM-Tools den seriellen Port exklusiv: solange die CAT-Verbindung stand, konnte WSJT-X nicht aufs Funkgerät zugreifen. Das ist behoben.

  • HAM-Tools' eingebauter rigctld läuft jetzt auf Wunsch als lokaler Server unter 127.0.0.1:4532, an den sich WSJT-X (und andere Hamlib-Programme) parallel anhängen.
  • Aktivieren unter Einstellungen → CAT → »CAT teilen (WSJT-X & Co.)«. Dort steht auch die fertige WSJT-X-Konfiguration zum Abtippen/Kopieren: Rig = Hamlib NET rigctl, Netzwerk-Server = 127.0.0.1:4532, PTT = CAT.
  • Der Server bleibt offen, auch wenn du HAM-Tools' eigene CAT-Verbindung trennst — WSJT-X läuft ununterbrochen weiter. Beendet wird er über »Freigabe beenden« oder beim Schließen der App. Erreichbar ist er nur lokal.

Band folgt TRX

  • Im DX-Cluster lässt sich im Band-Filter-Menü »Band folgt TRX« einschalten. Der Bandfilter folgt dann automatisch der Frequenz des Funkgeräts — Spot-Liste, Weltkarte und Logbuch-Filter ziehen mit. Wechselst du in WSJT-X das Band, sieht HAM-Tools das über den geteilten rigctld und filtert mit. Optional, weil man im Contest oft bewusst alle Bänder sehen will.

DX-Cluster — Spot-Klick zeigt die Position auf der Karte

  • Ein Klick auf einen Spot in der Spot-Liste markiert ihn auf der Weltkarte und zentriert beim Wechsel auf den Karten-Tab darauf. Klick auf einen Pin in der Karte markiert umgekehrt die Liste. Funktioniert im DX-Cluster-Modul wie im Logbuch.

Yaesu — echter TUNE-Knopf

  • Neben der TUN-Pille (Tuner an/aus) gibt es jetzt einen separaten TUNE-Knopf, der einen echten Tuner-Abgleich startet (moderne Yaesu). Vorher schaltete ein Druck den Tuner nur aus, statt zu tunen. Bei Funkgeräten ohne CAT-steuerbaren Tuner (FT-817/857/897) ist der Knopf ausgeblendet.

Neu — Rückmeldung willkommen

Die CAT-/WSJT-X-Funktionen sind frisch. Wenn etwas mit deiner Hardware (Yaesu/Icom + WSJT-X) hakt, gern melden.

1.10.7 — 2026-05-29

Antennen-Rechner gegen Internet-Quellen verifiziert, neuer ATU-Drahtrechner, POTA/WWFF/BOTA-Export schreibt jetzt pro Park/Ref/Bunker ein eigenes File, Contest-Stats mit Operator-Aufschlüsselung, drei neue Sim-Templates.

Antennen-Rechner verifiziert

Alle 27 Antennenrechner wurden gegen offizielle Internet-Quellen (Cebik W4RNL, G3TXQ, DF4SA, Calculator City, ARRL, M0UKD) geprüft.

  • Moxon Rectangle: kritischer Math-Fix. Die früheren Konstanten lieferten eine Antenne, die ~24 % zu lang war (Resonanz bei 11.4 MHz statt 14.2 MHz). Jetzt Cebik MoxGen-Polynome drahtdurchmesser-abhängig (Material-Picker Draht 2 mm / Alurohr 12 mm).
  • Hexbeam: band-spezifische Tabelle aus der offiziellen WiMo HEX6B- Bauanleitung (G3TXQ Rev. V2.1), 20/17/15/12/10/6 m direkt aus Tabelle.
  • Spiderbeam Einzelband: zusätzlicher V-Form-Modus mit Spreader-Halbarm. Multi-Band Lel-Werte nach DF4SA v2.20 §2.3.2 korrigiert.
  • HB9CV: Gamma-Match-Auslegung berechnet (Innenleiter-Ø, Abstand, Trimmer-C).
  • Groundplane: Drift zwischen App und Web behoben.

Neuer ATU-Drahtrechner

Optimale Drahtlängen für automatische Antennentuner (JC-4, SG-230, AH-730, CG-3000). Visuelles Lineal pro Band zeigt Halbwellen-Resonanzen als rote Zonen und Konsens-Bereiche (23-28 m, 46-50 m) als sichere Bereiche. Plus Tuner-Vergleichstabelle, Antennen-Empfehlungen und Counterpoise-Hinweise.

Logbuch — Multi-Park-Split

Beim ADIF-Export aus einem POTA-/WWFF-/WWBOTA-Log mit mehreren Aktivierungs- Refs schreibt HAM-Tools jetzt pro Park/Ref/Bunker eine eigene ADIF-Datei (Filename {call}@{ref} YYYYMMDD.adi). Die Upload-Plattformen erwarten genau dieses Format — vorher landete die Multi-Park-Information als Komma-Liste in einem einzigen File. Activator-Call wird beim Export überall einheitlich auf den Log-Aktivierer gesetzt.

Contest-Stats — Operator-Aufschlüsselung

Im Contest-Stats-Panel gibt es jetzt eine Operator-Sektion mit QSO-Anzahl und %-Anteil pro Operator. Sichtbar nur, sobald im Log mehr als ein Operator auftaucht — also typisch Multi-Op-Contests.

Antennen-Simulator

Drei neue Direkt-Templates: HB9CV, Spiderbeam 20m und Hexbeam 20m — Geometrie aus den verifizierten JSON-Pilots übernommen.

Hintergrund: ADIFCore-Konsolidierung

Die Multi-Park-Split-Logik liegt jetzt in der gemeinsamen Library ADIFCore (v1.13.1) und wird sowohl von HAM-Tools als auch vom Schwester-Projekt MacADIF konsumiert — eine Quelle der Wahrheit.

1.10.6 — 2026-05-26

Die Funkgeräte-Anbindung verbindet zuverlässig, auch beim Wechsel zwischen mehreren TRX, und das Transceiver-Menü ist endlich eindeutig.

Zuverlässiges (Re-)Connect

Nach einem App-Absturz, hartem Beenden oder Umstecken eines USB-Kabels konnte ein unsichtbarer Hintergrundprozess (rigctld) weiterlaufen und den Verbindungs-Port belegen — die nächste Verbindung (oft der zweite TRX) schlug dann fehl. HAM-Tools räumt solche Reste jetzt vor jedem Verbindungsaufbau auf, sodass der Wechsel zwischen zwei Geräten zuverlässig klappt.

Klares Transceiver-Menü

Der Menüeintrag heißt jetzt „CAT verbinden" bzw. „CAT trennen" — passend zum tatsächlichen Zustand. Vorher stand dort „CAT einschalten", obwohl das Gerät verbunden war, und ein Klick trennte die Verbindung. Menü und Start/Stop-Button im CAT-Fenster zeigen nun dasselbe.

1.10.5 — 2026-05-26

Die CAT-Anbindung an Icom-Geräte ist robuster: mehrere Icoms am selben Mac lassen sich sicher unterscheiden, und Verbindungsfehler werden klar benannt.

Mehrere Icoms unterscheiden

Hängen zwei Icom-Transceiver mit USB (CP210x-Chip) am selben Mac — z.B. IC-9700 und IC-7610 an einem Dock — erschienen ihre Ports nur als nicht unterscheidbares usbserial-XXXXX, und man wählte leicht den falschen (Verbindung schlug fehl). Der Port-Picker zeigt jetzt zusätzlich die USB-Identität (Produkt + Seriennummer), sodass der richtige Port eindeutig ist.

Klare Fehlermeldungen

Brach die Verbindung beim Start ab, stand nur „Exit -1 / kein stderr". Jetzt zeigt die Diagnose den echten rigctld-Exit-Code und dessen komplette Ausgabe — der Grund (z.B. falscher Port) ist sofort erkennbar. Zusätzlich warnt die App, wenn die gelesene Frequenz nicht zum gewählten Modell passt (ein UKW-Gerät, das 14 MHz meldet, deutet auf den falschen Port).

Kleinere CAT-Korrekturen

Für Icom-Geräte wird die Flusssteuerung jetzt immer auf None gesetzt (RTS/CTS ist für CI-V nie korrekt), und das CI-V-Feld zeigt als Platzhalter den Modell-Default (z.B. 0xA2 für den IC-9700).

1.10.4 — 2026-05-26

Drei Contest-/Cluster-Fixes aus dem Live-Test und die volle Spec-Konformität der Export-Formate Cabrillo, ADIF und EDI.

Contest-QSO bearbeiten: laufende Nummer & Exchange

Beim Bearbeiten eines Contest-QSOs gab es im Dialog bisher keine Felder für die laufende Nummer oder den Austausch — ein Tippfehler in der Serial ließ sich nicht korrigieren. Der Editor zeigt jetzt S-Nr, Sent Exch und Recv Exch als editierbare Felder, exakt wie die Spalten in der Log-Tabelle.

Rate-Meter realistisch

Die „Rate 10/60 min"-Anzeige im Contest-Panel rechnete die Rate auf die Zeitspanne seit dem ersten QSO im Fenster hoch. Lagen wenige QSOs dicht beieinander, ergab das absurd hohe Werte (z. B. 90 Q/h aus 3 QSOs). Jetzt wird durch die feste Fensterbreite geteilt — wie bei N1MM.

DX-Cluster: „Kont."-Filter nach Spotter-Quelle

Der Kontinent-Filter im DX-Cluster filtert jetzt nach dem Kontinent der Spotter-Quelle statt des gespotteten DX-Rufzeichens. „Kont. = EU" zeigt also nur Spots, die von einem europäischen Spotter gemeldet wurden — die übliche Propagations-Sicht. Land-Spalte und Band-Activity-Heatmap zeigen weiterhin den DX-Kontinent.

Export-Formate spec-konform

Cabrillo, ADIF und EDI wurden gegen die offiziellen Spezifikationen (WWROF Cabrillo v3, ADIF 3.1.5, IARU-R1 REG1TEST) geprüft und angeglichen:

  • Cabrillo: CATEGORY-MODE ist jetzt SSB (statt des QSO-Kürzels PH), die Header CATEGORY-ASSISTED und CATEGORY-TRANSMITTER werden geschrieben, ungültige CATEGORY-TIME-Werte weggelassen, und LOCATION für internationale Stationen automatisch auf DX gesetzt.
  • ADIF: die eigene Antenne wird im standardkonformen Feld MY_ANTENNA exportiert (das blanke ANTENNA ist kein definiertes ADIF-Feld).
  • EDI + Cabrillo: Zeilen enden jetzt mit CR LF, wie von REG1TEST und Cabrillo verlangt.

1.10.3 — 2026-05-25

Der EDI-Export der UKW-Conteste erzeugt jetzt einen RUMlogNG-konformen Wertungsblock.

EDI-/REG1TEST-Export korrigiert

Beim Export eines UKW-Contest-Logs ins EDI-Format (REG1TEST, für die IARU-Region-1-Auswerter) war das Bänder-Feld in den Zähl-Zeilen am Kopf des Logs falsch gesetzt: CQSOs schrieb n;0 statt n;1, und bei CWWLs, CExcs und CDXCs fehlte das dritte Feld ganz (n;0 statt n;0;1).

Das entspricht jetzt der Vorgabe aus dem VHF Managers Handbook und der Ausgabe von RUMlogNG 6.4. Die QSO-Zeilen, QRB-Distanzen (km abgerundet + 1) und Punktsummen waren bereits korrekt — geprüft gegen reale Logs vom IARU-R1-145-MHz- und DARC-UKW-Wettbewerb.

1.10.2 — 2026-05-25

Ein neues „Letzte QSOs"-Panel macht beim DX-Betrieb auf einen Blick sichtbar, ob und wann du eine Station schon gearbeitet hast.

„Letzte QSOs" in der DX-Sidebar

Sobald du im Standard-/DX-Log einen Call ins Auge fasst, blendet die rechte Sidebar — direkt unter Band Activity — deine bisherigen QSOs mit genau diesem Rufzeichen ein. Ausgelöst wird das auf drei Wegen, je nachdem wie du gerade arbeitest:

  • Spot anklicken in der DX-Cluster-Liste,
  • eine Zeile in der QSO-Tabelle auswählen, oder
  • den Call ins Eingabefeld tippen.

Der zuletzt gewählte Call gewinnt. Die Liste zieht die Treffer aus allen Logbüchern (neueste zuerst) und zeigt Datum, Band, Mode und RST. War der Call noch nie im Log, steht dort „Noch nie gearbeitet" — also der schnelle ATNO-Check ohne Umweg über den Previous-Button. Das Panel erscheint nur im Standard-/DX-Log; in Contest- und Outdoor-Logs (POTA/SOTA/WWFF/BOTA) bleibt die Sidebar wie gewohnt, weil dort andere Kriterien zählen.

1.10.1 — 2026-05-25

Kleines Bugfix-Release direkt aus dem Live-Test von 1.10.0. Drei vom Funkbetrieb gemeldete Macken im DX-Cluster und im Logbuch sind beseitigt.

DX-Cluster: ATNO und Mode-Erkennung

Die ATNO-Markierung zeigte fälschlich „NEW MODE" für Länder, die in SSB längst im Log standen. Ursache: Aus der Spot-Frequenz wird oberhalb 10 MHz das Seitenband USB (darunter LSB) abgeleitet — verglichen wurde aber gegen den ADIF-Mode SSB aus dem Logbuch, und USB ≠ SSB. Der Vergleich fasst Seitenbänder jetzt korrekt zusammen (USB/LSB = SSB, ebenso CWR = CW, RTTYR = RTTY).

Außerdem wurden FT8- und FT4-Spots als SSB/USB angezeigt. FT8-Signale liegen nicht exakt auf der Dial-Frequenz, sondern verteilt über das rund 3 kHz breite NF-Passband darüber — die alte Erkennung verlangte aber einen Treffer auf die Dial-QRG auf den Hertz genau. Jetzt erkennt HAM-Tools das ganze Passband, und die Dial-Liste wurde um 4 m und 2 m FT4 ergänzt.

Logbuch: QRZ-Bild

Wenn zu einem Rufzeichen kein QRZ-Bild vorlag, hielt die Profil-Spalte ihre Breite nicht — das Eingabeformular sprang nach rechts und beim nächsten Call mit Bild wieder zurück. Die Bildfläche hat jetzt eine feste Größe mit Platzhalter, nichts springt mehr. Und ein lang gehegter Wunsch: ein Klick aufs QRZ-Bild öffnet es in dreifacher Größe als Popup (bei großen Bildern auf die Bildschirmgröße begrenzt).

Dokumentation

Die Systemvoraussetzungen auf der Hilfe-Seite nannten bisher nur „macOS 14.0 Sonoma oder neuer". Ergänzt um den Hinweis, dass HAM-Tools bis macOS 26 (Tahoe) getestet ist und auf macOS 15 (Sequoia) und 26 einwandfrei läuft.

1.10.0 — 2026-05-24

Gemeinsamer ADIFCore-Kern (mit MacADIF) und ein komplett neu aufgebautes, reglementkonformes Contest-Scoring.

Ein geteilter ADIF-Kern

Die ADIF-Maschinerie von HAM-Tools — der Parser fürs Importieren, die Cabrillo- und EDI-Exporte für Contest-Einreichungen — steckt jetzt in einem eigenständigen, getesteten Baustein namens ADIFCore, den sich HAM-Tools mit dem Schwester-Tool MacADIF teilt. Der Hintergrund: zuletzt wurde derselbe Helvetia-Scoring-Fehler in beiden Programmen getrennt korrigiert — solche Doppelarbeit fällt nun weg, Format- und Wertungs-Fixes landen automatisch in beiden.

Sichtbar für dich ist vor allem ein robusterer ADIF-Import: der neue byte-genaue Parser kommt mit fehlerhaften Längenangaben, ungewöhnlichen Headern und Sonderzeichen (</>) in Feldwerten besser klar. Die Cabrillo- und EDI-Ausgabe bleibt unverändert (Byte für Byte gegengeprüft), nur intern vereinheitlicht.

Contest-Scoring neu — und reglementkonform

Das Live-Score-Panel rechnet ab jetzt über die getestete Scoring-Engine des Kerns. Das verändert angezeigte Punktzahlen, und zwar in Richtung der offiziellen Reglements:

  • Echtes Scoring statt „1 Punkt pro QSO". Viele Conteste zeigten bisher nur einen Platzhalter — IARU HF, Worked All Germany, ARRL DX, WAE DX, USKA Field Day, USKA NMD sowie CQ WW RTTY und CQ WPX RTTY werden jetzt richtig gewertet (Punkte je Beziehung, passende Multiplikatoren).
  • CQ WPX rechnet jetzt bandgruppiert (unterschiedliche Punkte auf den hohen und tiefen Bändern) statt pauschal — so wie es das Reglement vorgibt.
  • Helvetia, CQ WW und USKA 50 MHz bleiben deckungsgleich zur bisherigen Wertung; sie wurden Punkt für Punkt gegen die alte Engine gegengeprüft. Der USKA Weihnachtswettbewerb zählt jetzt korrekt nur QSOs mit Schweizer Stationen.
  • Neu in den Stations-Einstellungen: Felder für die eigene CQ- und ITU-Zone. Sie werden für die IARU-HF-Wertung gebraucht (Punkte für QSOs in der gleichen ITU-Zone).
  • Die Zuordnung Rufzeichen → DXCC-Land fürs Scoring wurde robuster (Schweiz, Deutschland, W/VE, Skandinavien u. a. exakt).

In Erprobung

Das neu aufgebaute Contest-Scoring ist noch nicht vollständig gegen offizielle Resultate validiert. HAM-Tools ist in erster Linie Master-Log und Outdoor-Logger — behandle den Contest-Teil bitte als Beta und prüfe Endpunktzahlen, bevor du ein Log einreichst. Noch ohne eigene Regeln (und daher mit 1 Punkt/QSO gewertet): ARRL RTTY Roundup, Russian DX, All Asian DX, JIDX.

1.9.18 — 2026-05-24

Helvetia-Contest-Scoring nach USKA-Reglement korrigiert.

Aus dem Live-Test gemeldet: das Contest-Stats-Panel zeigte für einen Helvetia-Lauf einen viel zu niedrigen Score. Ein 219-QSO-Testlog kam auf 411 Punkte × 23 Mult = 9 453, nach dem offiziellen USKA-Reglement (§2.7/§2.8) sind es aber 1 328 × 110 = 146 080. Gleich drei Stellen waren falsch.

Punkte: 10 / 1 / 3 statt 1 / 3

Das Reglement vergibt 10 Punkte pro QSO mit einer Schweizer Station, 1 Punkt im gleichen Kontinent (für uns Europa) und 3 Punkte für DX außerhalb des Kontinents. Die App zählte HB-QSOs mit nur 1 Punkt und alle Nicht-HB-QSOs pauschal mit 3 — beides war daneben.

Multiplier: Kantone UND Länder, je Band

Gewertet wurden bisher nur die Kantone, und die auch noch über das ganze Log dedupliziert (jeder Kanton einmal, egal auf wie vielen Bändern). Das Reglement zählt aber Kantone und DXCC-Länder (inklusive Schweiz) getrennt pro Band. Im Testlog: 66 Kantone-pro-Band + 44 Länder-pro-Band = 110 Multiplier statt vorher 23.

Damit der Länder-Multiplier auch dann stimmt, wenn das country-Feld im Contest-Log leer ist (häufig, weil im Pile-Up kein Callbook-Lookup läuft), löst die App das Land jetzt robust auf: Schweiz für alle HB-Calls, sonst das gespeicherte Feld, sonst über den Rufzeichen-Präfix. Die Präfix-Tabelle wurde dafür um fehlende europäische Subpräfixe erweitert — unter anderem der komplette deutsche DA–DR-Block (DF, DB, DC … fehlten), Belgien, Niederlande, Polen und Weißrussland.

Stats-Panel: neue Länd-Spalte, korrekte Summe

Die Kantone-Spalte zeigte pro Band schon die richtigen Zahlen, aber die Summen-Zeile darunter rechnete falsch (23 statt 66). Jetzt gibt es eine zusätzliche Länd-Spalte für die DXCC-Länder, und die Summen-Zeile zählt die Multiplier korrekt pro Band auf — die Tabelle stimmt jetzt mit dem angezeigten Endscore überein.

Außerdem: Export-Buttons in Outdoor-Logs aufgeräumt

In BOTA-, POTA-, SOTA- und WWFF-Logs erschienen bisher auch Cabrillo und EDI (reine Contest-Formate) im Export-Menü, bei SOTA zusätzlich ADIF — obwohl die jeweiligen Portale andere Formate verlangen. Die Buttons richten sich jetzt nach dem Log-Typ: SOTA bietet nur den CSV-Export für sotadata.org.uk, POTA/WWFF/BOTA nur das portal-konforme ADIF, und Standard- bzw. Contest-Logs weiterhin ADIF + Cabrillo + EDI.

1.9.17 — 2026-05-23

Hotfix: Outdoor-Log-Anlage blockierte stumm bei unbekannten Refs.

Fünftes Release des Tages — und ein als critical markierter Hotfix, weil die App-Funktion ohne den Fix unbenutzbar war: alle vier Outdoor-Log-Wizards (BOTA / POTA / SOTA / WWFF) ließen sich nicht beenden, wenn der eingegebene Park-/Summit-/Bunker-/Ref-Code nicht zufällig im lokal gebundelten DB-Bundle stand.

Stumm blockierter »Anlegen«-Button

Beobachtet beim ersten BOTA-Test heute Vormittag: User trägt B/HB-2903 als Bunker ein, vergibt einen Session-Namen, klickt »Anlegen« — nichts passiert. Der Button sah aktiv aus (blauer Borderless-Prominent-Style), war aber unter der Haube .disabled, weil myRefSelected == nil.

Root cause: alle vier Wizards hatten dieselbe canCreate-Logik:

swift
if role == .activator && myRefSelected == nil { return false }

myRefSelected wird aber nur gesetzt wenn der eingegebene Wert einen exakten String-Match in der lokalen DB findet. Neue Refs (die noch nicht in der gebundelten CSV stehen), ungewöhnliche Schreibweisen, oder Refs aus einer Region die die DB gerade nicht enthält — alles führte zu nil und damit zu stillem Block.

Lokale DB ist jetzt Bonus, nicht Pflicht

Die DB-Lookups in den Wizards dienen primär zwei Zwecken:

  1. Auto-Fill der Metadaten — Park-/Summit-Name, Land, Koordinaten, Höhe (SOTA), Bunker-Typ (BOTA), Programm-Country (WWFF). Schön für die spätere Map-Pin und den Hilfetext, aber nicht zwingend für das QSO-Logging.
  2. Schema-Validierung — die DB enthält nur valide Refs.

Punkt 1 ist tatsächlich Bonus. Punkt 2 fängt zwar tippfehler ab, aber wenn ein User einen neuen Bunker aktiviert (der noch nicht im Bundle ist), darf das nicht das Logging blockieren.

Jetzt also: nicht-leerer Query reicht zum Anlegen. Wenn die DB den Ref nicht kennt, erscheint stattdessen eine orange Hinweiszeile unter dem Eingabefeld:

⚠ Bunker nicht in lokaler DB — wird trotzdem gespeichert.

So weiß der User, warum kein grüner Checkmark erscheint und warum die Auto-Fill-Felder leer bleiben — aber er kann sein Log anlegen.

Zusätzlich: Multi-Ref-Hopping greift jetzt auch ohne DB-Match

Die »Multi-Ref-Hopping«-Sektion in den Wizards (für Aktivierungen mit mehreren Refs an einem Tag) war vorher nur sichtbar, wenn der Primär-Ref einen DB-Match hatte. Jetzt erscheint sie sobald ein nicht-leerer Query da ist.

1.9.16 — 2026-05-23

UX-Hotfix: Outdoor-Klick fragt jetzt welches Programm, statt POTA aufzudrängen.

Viertes Release des Tages — von HB9HJI im Live-Betrieb gemeldet. Klick auf den Outdoor-Tab im Logbuch öffnete ohne Wahl direkt das »Neue POTA-Session anlegen«-Sheet. Wer eigentlich SOTA, WWFF oder BOTA aktivieren wollte, musste den POTA-Wizard erst abbrechen und dann über den Sub-Picker zum richtigen Programm navigieren.

Programm-Picker mit allen vier Outdoor-Optionen

Wenn du jetzt auf »Outdoor« klickst und noch kein Outdoor-Log angelegt hast, erscheint ein Picker-Sheet mit vier großen Buttons:

  • POTA — Parks On The Air (grün, Baum-Icon)
  • SOTA — Summits On The Air (braun, Berg-Icon)
  • WWFF — Worldwide Flora & Fauna (mint, Blatt-Icon)
  • BOTA — Bunkers On The Air (grau, Schild-Icon, WWBOTA-Format)

Klick auf einen Button öffnet das jeweilige Anlege-Sheet. Abbruch geht wie gewohnt mit Esc oder dem »Abbrechen«-Button.

Bonus-Fix: WWFF/BOTA-Logs wurden bei Outdoor-Klick ignoriert

Zusätzlich noch ein verwandter Logik-Bug: die »existiert schon ein Outdoor-Log?«-Prüfung beim Outdoor-Klick checkte nur POTA und SOTA. Wer ein WWFF- oder BOTA-Log hatte und auf Outdoor klickte, sah trotzdem den POTA-Wizard, statt zum bestehenden Log zu wechseln.

Jetzt ist die Reihenfolge: POTA → SOTA → WWFF → BOTA. Existiert irgendeines, wird dahin gewechselt. Existiert keines, kommt der Picker (siehe oben).

1.9.15 — 2026-05-23

Privacy-Hotfix: fremder Call »HB9HJI« als Branding-Reste in 3 UI-Stellen entfernt.

Drittes Release des Tages. Während des Memory-Updates für die nächste Session wurde ein neuer Pre-Release-User-Daten-Check etabliert (grep über Sources/ + tools/ vor jedem build-dmg.sh-Aufruf), der prüft, dass keine persönlichen Daten von HB9HJI aus Tests/Setup ins verteilte DMG geraten sind. Bei der Erstanwendung fielen drei Stellen auf, die seit den frühen Versionen unverändert mit dem Call des Autors hardcoded waren — Folge der gleichen Klasse Setup-Reste, die in 1.9.7 schon einmal fünf Stellen erwischt hat.

Im Sidebar-Header (Hauptfenster, unter »HAM-Tools«) stand fest »HB9HJI Funkwelt« als Untertitel. Andere User sahen also fremdes Branding statt eines neutralen oder eigenen Werts. Jetzt liest der Subtitle den Call aus den Station-Settings (@AppStorage("callsign")) — bei leerem Setting bleibt der Subtitle leer.

Previous-QSOs-Popover-Hilfetext nannte »HB9HJI«

Im Empty-State des Previous-QSOs-Popovers (»Dieser Call kommt in keinem deiner Logs vor«) erklärte ein kleiner Hinweistext die Base-Call-Match-Logik mit »HB9HJI ≡ HB9HJI/P« als Beispiel. Jetzt generischer Platzhalter »DL1ABC ≡ DL1ABC/P« — die Funktion ändert sich nicht, nur der Anschauungs-Call.

QTHLocator-Feld zeigte »JN47PN« als Default-aussehender Wert

Das Locator-Feld in der QTH-Berechnung hatte als Placeholder einfach »JN47PN« (HB9HJIs Standort) — sah aus wie ein Default-Wert statt einer Eingabe-Hilfe. Andere Locator-Felder in der App verwenden einheitlich »z.B. JN47PN« um den Beispiel-Charakter klar zu machen. Auf dieselbe Form gebracht.

1.9.14 — 2026-05-23

Outdoor-Logger-Block: SOTA-Export-Sheet + einheitliche Live-Aktivierungs-Anzeige für SOTA / WWFF / POTA + 1 Lookup-Bug.

Zweites Release am selben Tag — die Contest-Welle von 1.9.13 hat gezeigt, wo bei den Outdoor-Programmen noch Asymmetrien sind: SOTA konnte als Chaser nicht exportiert werden, die X/N-QSO-Counter aller drei Aktivitäten zählten stumpf über das ganze Log statt korrekt pro Summit/Park/Ref und UTC-Tag, und Hunter-Logs hatten gar keinen Live-Status. Plus ein selbst gemeldeter Lookup-Bug (BUG-20260522-2040-AW).

SOTA-CSV-Export jetzt als Sheet mit Activator/Chaser/Validierung

Bisher war »Für sotadata.org.uk exportieren« ein One-Click-Button — der einfach das CSV in den Exports-Ordner schrieb. Funktionierte für Activator-Logs mit Single-Summit gut, hatte aber drei Lücken:

  1. Chaser-Logs landeten still im Nirgendwo. Der Exporter prüfte summits.isEmpty und gab eine leere Liste zurück, weil Chaser keinen eigenen Summit hinterlegt. Kein File, keine Warnung. Du hattest also einen sauber geführten Chaser-Trip im Logbuch, aber kein CSV das du irgendwo hochladen konntest. sotadata.org.uk hat aber ein eigenes Chaser-Format — andere Spalten (kein MySummit, dafür WorkedSummit als Pflicht).

  2. Kein Pre-Export-Check. Fehlte ein Summit-Ref im Log oder hatte ein S2S-Eintrag ein Tippfehler-Schema (»HB/BE« ohne Nummer), schrieb der Exporter trotzdem — die DB lehnte den Upload dann ab.

  3. Auswahl wurde ignoriert. Hattest du in der QSO-Tabelle bestimmte Zeilen markiert, wurde trotzdem das ganze Log exportiert.

Neu: Klick öffnet ein Sheet mit Rollen-Picker (Activator / Chaser, Default aus log.role), Scope-Anzeige (»5 ausgewählt von 47« wenn du markiert hast), Validierungs-Block (rote Errors blocken den »Exportieren«-Button, orange Warnungen lassen ihn aktiv) und einer Monospace-Vorschau der ersten 3 CSV-Zeilen damit du siehst was geschrieben wird.

Activator-Layout unverändert: V2,MyCall,MySummit,Date,Time,Band,Mode, WorkedCall,TheirSummit,Notes. Chaser-Layout neu: V2,MyCall,Date,Time, Band,Mode,WorkedCall,WorkedSummit,Notes (kein MySummit, dafür WorkedSummit-Pflicht — sonst wird das QSO im Chaser-Modus stumm übersprungen, mit Warnung im Sheet).

Außerdem trägt die Notes-Spalte jetzt den QSO-Kommentar (Kommas werden auf Space gestrippt, weil sotadata.org.uk kein RFC-4180-Quoting versteht), statt bisher leer.

SOTA/WWFF/POTA: einheitliche Live-Aktivierungs-Anzeige im Eintragungs-Form

Bisher zeigte die Activator-Form pro Programm einen simplen QSO-Counter — »X/4« bei SOTA, »X/10« bei POTA, »X/44« bei WWFF — der über alle QSOs des Logs summierte. Für eine Single-Aktivierung (ein Summit, ein Tag) korrekt. Für Multi-Park-Hopping oder Mehrtages-Trips falsch:

  • Beispiel SOTA: Log mit HB/BE-001 (3 QSOs gemacht) + HB/BE-002 (2 QSOs gemacht) zeigte »5/4 — Aktivierung gültig«, obwohl keine der beiden Aktivierungen für sich die 4 QSOs erreicht hat.
  • Beispiel POTA: Log über 2 Tage auf K-1234 mit Tag 1 = 6 QSOs und Tag 2 = 5 QSOs zeigte »11/10 — gültig«, obwohl Tag 2 für sich invalide ist (POTA zählt pro UTC-Tag).
  • Hunter-Logs hatten gar keinen Status — leere Action-Row.

Drei neue Helper (SOTASessionStatus, WWFFSessionStatus, POTASessionStatus) bilden den korrekten Per-Ref-Per-UTC-Tag-Status ab, dargestellt als kompakte Pillen-Reihe direkt unter dem QSO-Form.

SOTA-Activator: pro Summit + Tag eine Pille wie »HB/JU-001: 5/4 ✓ 10+3p«. Punkte mit aktivem Winterbonus (Dez–März in Nord-, Jun–Sep in Süd-Halbkugel) sind blau eingefärbt zur Hervorhebung. Bei nur einem Summit/Tag bleibt's kompakt, bei Multi-Summit-Hopping wachsen mehrere Pillen nebeneinander mit Ref-Label vor dem Counter. Rechts daneben ein violetter S2S-Counter und eine grüne Punkte-Summe »Σ 28p« sobald min. eine Aktivierung steht.

SOTA-Chaser: dedizierter Block »🥽 7 Summits · Σ 42p · S2S 3« — gechaste Summits unique gezählt, Punkte-Summe aus der Summit-DB (oder falls der Summit nicht in der DB ist: aus dem im QSO gecachten Wert).

WWFF-Activator: analog mit X/44-Pillen pro Ref + Tag. Bei Single-Ref und unter Threshold ein zusätzlicher »noch N«-Hint in Orange. Violette R2R-Pille rechts.

WWFF-Hunter: »🥽 12 Refs · 3 Programme · R2R 5«. Die »Programme«- Pille zeigt im Tooltip die Liste der Programm-Prefixes (DLFF, ONFF, HBFF, …) — alles aus dem ersten Bindestrich-Token der Ref abgeleitet.

POTA-Activator: X/10-Pillen pro Park + Tag, P2P-Counter.

POTA-Hunter: »🥽 12 Parks · 4 Programme · P2P 5« (Country-Prefix K/DE/HB/…).

Tooltip pro Pille zeigt den vollen Park-/Summit-/Ref-Namen aus der jeweiligen DB plus die explizite Aktivierungs-Bedingung (»≥ 4 QSOs« bzw. »noch N QSO(s) bis Aktivierung«).

Bug-Fix BUG-20260522-2040-AW — Country nach 2. QRZ-Lookup hängen geblieben

Selbst gemeldet gestern Abend: »Wenn alle LOG Felder ausgefüllt sind und man ein neues Call eingibt werden nicht alle Felder korrekt neu befüllt.« Root cause war eine subtile Asymmetrie im QSOEntryPanel: clearCallbookFields() (räumt vor dem nächsten Lookup die alten Werte weg) hatte 11 Felder drin, applyCallbookResult() (befüllt nach dem Lookup) schrieb in 12 — country war im Apply, aber nicht im Clear. Da applyCallbookResult() defensiv nur leere Felder schreibt (»überschreibt nichts vom User«), behandelte er das alte Country wie eine User-Eingabe und ließ es stehen.

Eine Zeile Fix (country = "" in clearCallbookFields()) plus ein Symmetrie-Kommentar damit das beim nächsten Feld nicht wieder reißt.

1.9.13 — 2026-05-23

Contest-Export-Konformität (USKA/IARU) + Cluster-Fetcher-Toggles.

Sechs Wochen Contest-Saison haben einige Stellen aufgedeckt, an denen unsere Export-Files zwar funktional waren, aber nicht 1:1 zur USKA/IARU-Spec passten — Cabrillo-3.0 verlangt eine T-Spalte, ADIF-Standard will den eigenen Locator pro QSO statt nur im POTA/SOTA-Header, STX_STRING soll nicht zusätzlich den RST tragen. Plus: neuer EDI-Exporter für IARU R1 VHF/UHF-Conteste, dazu eine kleine UX-Verbesserung im Cluster: die externen Spot-Quellen SOTA/POTA/WWFF lassen sich jetzt einzeln abschalten, wenn man sie gerade nicht braucht.

EDI-Exporter für IARU R1 (USKA 50 MHz Contest)

Bisher gab es im Logbuch nur ADIF- und Cabrillo-Export. Für VHF/UHF- Conteste (z. B. der USKA 50 MHz Contest, 3. Wochenende Juni) verlangt IARU R1 aber das EDI-Format mit km-basiertem Scoring, ODX-Berechnung und einer expliziten Stations-Beschreibung (QTH/Antenne/Sendeleistung).

Neuer Button »Export EDI« im Logbuch-Tab bei Contest-Logs. Schreibt ein Spec-konformes EDI-File:

  • Header mit PCall / PWWLo / PSect / RName / RCall / RAdr1 / RCity / RHBBS / MOpe1 / STXEq / SRXEq / SPowe / SAnte aus den Station-Settings + dem aktiven Log
  • QSO-Block in der [QSORecords]-Sektion, eine Zeile pro QSO im spec-konformen Format Date;Time;Call;Mode;RST_s;NR_s;RST_r;NR_r;EXC_r;WWL_r;Points;…
  • km-basiertes Scoring: 1 Punkt pro km, floor + 1 (so zählt der schwächste 0 km-Self-Test als 1 Punkt, alle anderen je nach QRB)
  • ODX (höchste QRB) automatisch berechnet und im Footer ausgegeben

Pflichtfeld-Validierung vor dem Export: fehlt eines der EDI-Pflichtfelder (PCall, PWWLo, RHBBS, SAnte, SPowe), blockiert der Sheet den »Speichern«-Button mit klarer Fehleranzeige welches Feld fehlt — gegen RUMlog gegen-validiert, damit USKA-Auswertung das File ohne Nachfragen verarbeitet.

Template USKA 50 MHz in contests.json umbenannt zu »USKA / IARU R1 50 MHz Contest«, Datum auf das 3. Wochenende Juni korrigiert (Sa 1400 UTC bis So 1359 UTC, 24 h, vorher 6 h Time-Category).

Cluster: externe Spot-Quellen ein/aus

In Einstellungen → Cluster ist unter der Cluster-Node-Tabelle ein neuer Bereich »Externe Spot-Quellen« mit drei Checkboxen hinzugekommen:

  • SOTA — pollt api2.sota.org.uk alle 60 s
  • POTA — pollt api.pota.app alle 60 s
  • WWFF — pollt wwff-cc.org alle 120 s

Aus = der jeweilige Background-Fetcher läuft nicht mehr. Spart Netz und CPU, wenn man die Quelle gerade nicht braucht (z. B. wer nur Contest-DX über DXSpider macht, kann POTA/SOTA/WWFF komplett abschalten).

Wichtig: das ist nicht dasselbe wie die DX/SOTA/POTA/WWFF-Häkchen in der Filterleiste der DX-Cluster-Ansicht. Die Filterleiste regelt, was in der Spot-Liste angezeigt wird (ein UI-Filter). Die neuen Settings-Toggles regeln, ob die Daten überhaupt abgefragt werden (ein Netz-Filter).

Default: alle drei an — bestehendes Verhalten bleibt unverändert, wer nichts ändert merkt nichts. Wirkt live, kein App-Neustart nötig.

Contest-ADIF: doppelte RST in STX_STRING/SRX_STRING raus

Bisher landete bei Contest-QSOs der gesendete/empfangene RST sowohl in den dedizierten Feldern RST_SENT / RST_RCVD als auch im allgemeinen STX_STRING / SRX_STRING (»59 LU«, »599 001«). Manche Auswerte-Tools (DARC/USKA-Cross-Check) verdoppelten dadurch den Rapport in der Cabrillo/ADIF-Cross-Validierung.

Jetzt enthält STX_STRING / SRX_STRING nur noch das Kontest-Exchange-Datum (Kanton, State, Grid, Zone) — kein RST mehr. Der Rapport steht ausschließlich in den RST-Feldern.

Cabrillo: T-Spalte am Zeilenende ergänzt (Spec-3.0)

Cabrillo-3.0-Spec fordert eine T-Spalte (Transmitter-ID, 0 oder 1) am Ende jeder QSO-Zeile. Für Single-Op-Logs ist der Wert immer 0, für M2-Logs unterscheidet er die beiden Sender. War bei uns bisher nicht ausgegeben — manche Contest-Robots wiesen die Logs deswegen mit »Parse error: missing T-field at column 80« zurück.

Jetzt wird 0 automatisch am Zeilenende geschrieben. Außerdem ist das CREATED-BY-Header-Feld nicht mehr hardcoded »HAM-Tools 1.5«, sondern wird dynamisch aus BuildInfo.appVersion gefüttert — bei Auswertungsproblemen sieht der Contest-Manager direkt, welche App-Version das File geschrieben hat.

ADIF: MY_GRIDSQUARE jetzt für jedes QSO

Bisher wurde MY_GRIDSQUARE (der eigene Locator) im ADIF-Export nur für QSOs in POTA- und SOTA-Logs geschrieben — der Code behandelte das als »Outdoor-Aktivität braucht expliziten Locator«. Bei normalen DX-Logs und Contest-Logs fehlte das Feld komplett.

Konsequenz: LoTW funktionierte nur halbherzig, weil ohne MY_GRIDSQUARE der QRB-Cross-Check für VHF-QSOs (die das Feld in LoTW pflicht ist) fehlschlug, und Club-Log konnte für manche Awards (z. B. WAB) die geografische Zuordnung nicht machen.

Jetzt wird MY_GRIDSQUARE generisch aus den Station-Settings für jedes QSO geschrieben — egal welcher Log-Typ. Zusätzlich spiegelt die Contest-Eingabe-Form den vom Gegner empfangenen Locator jetzt automatisch in qso.locator (für die VHF-QRB-Anzeige und die LoTW-Übergabe).

Contest-Form: Cursor zurück auf »Call«

Workflow-Problem aus dem Contest-Test: nach dem Bestätigen einer QSO mit Enter blieb der Cursor beim Such-/Exchange-Feld stehen. Der Operator musste jedes Mal mit Maus oder Tab zurück auf »Call« klicken — bei 100 QSOs pro Stunde merkbar.

Jetzt setzt das Form per @FocusState den Cursor automatisch zurück auf »Call« nach jedem Enter — der nächste Call kann sofort getippt werden, ohne Maus-/Tab-Detour. Zusätzlich Auto-Uppercase für die typischen Contest-Exchange-Felder (Kanton/State/Grid/Zone), damit »so« nicht als Lowercase im Log landet.

Der Status-Footer unten im RadioControlPanel zeigte früher immer den Text »Idle — nicht verbunden«, auch wenn die CAT-Verbindung längst stand. Hatte ich beim CAT-Refactor in 1.9.4 als TODO drin gelassen und vergessen. Jetzt spiegelt der Footer den echten CATController.Status (Idle / Connecting / Connected / Disconnecting / Error).

1.9.12 — 2026-05-22

CAT-Cockpit-Erweiterung + Logbuch-ADIF-Selektion.

Das CAT-Panel im Logbuch bekommt eine deutliche Erweiterung: Live- Slider für Lautstärke und TX-Leistung, ein SWR-Live-Balken während des Sendens, echte TX/RX-Indikation und Toggle-Pills für die vier Standard-DSP-Funktionen (Noise Blanker, Noise Reducer, Auto-Notch, Antennen-Tuner). Außerdem im Logbuch: ADIF-Export für gezielt ausgewählte QSOs.

Logbuch: ADIF-Export nur für markierte QSOs

Bisher exportierte »Export ADIF« immer das komplette aktive Log. Das war für POTA-Aktivitäten okay (ein Log = ein Trip), aber für ein Lebens-Log unpraktisch, wenn man z. B. nur die letzten 50 QSOs an Club Log nachreichen oder einen einzelnen Contest-Abschnitt exportieren wollte.

Jetzt: markiere eine Auswahl in der QSO-Tabelle (⌘-Klick, ⇧-Klick oder Mehrfach-Auswahl). Der Button wechselt von »Export ADIF« zu »Export ADIF (N)« — und schreibt nur die markierten QSOs in eine eigene .adi-Datei. Im Dateinamen erscheint ein -selectedN- Suffix, damit Teilexporte beim späteren Aufräumen vom Komplettexport unterscheidbar sind. Ohne Auswahl bleibt das Verhalten wie bisher.

POTA-Multi-Park-Split greift weiterhin — wenn die Auswahl mehrere eigene Parks enthält, wird wie gewohnt pro Park eine eigene Datei geschrieben (pota.app erfordert das).

CAT-Panel: AF Vol / RF Pwr Slider

Zwei neue Slider zwischen S-Meter und Status-Badges:

  • AF Vol — Lautstärke am Rig (Hamlib AF-Level, normiert 0–1).
  • RF Pwr — TX-Ausgangsleistung (Hamlib RFPOWER).

Beide arbeiten nach dem Drag-and-Release-Muster: während du den Slider ziehst, läuft das Update nur lokal — beim Loslassen wird der finale Wert ans Radio geschickt. Vermeidet, dass jeder Pixel beim Ziehen einen TCP-Roundtrip zum rigctld auslöst.

Die Slider sind nur sichtbar, wenn das TRX-Backend den Wert auch wirklich liefert. Beim FT-817/857 z. B. fehlt AF-Read in der Firmware — entsprechend wird die Zeile gar nicht erst gerendert, statt einen grauen toten Slider anzuzeigen.

CAT-Panel: SWR-Live-Balken während TX

Zwischen den Slidern erscheint ein SWR-Balken mit numerischem Wert. Während des Sendens liest die App in jedem Poll-Tick den aktuellen SWR-Wert (Hamlib SWR-Level) und färbt den Balken nach Schwellen:

SWRFarbe
≤ 1.5grün
1.5 – 2.0gelb
> 2.0rot

Die Skala läuft von 1.0 (perfekter Match) bis 3.0 (Werte darüber sind geclipt). Im RX bleibt der zuletzt gesehene Wert stehen, graut aber leicht aus.

CAT-Panel: TX / RX-Badges live

Die RX / TX-Badges neben der PWR-Anzeige sind nicht länger statische Platzhalter. Sie reagieren live auf den PTT-Status, den die App in jedem Poll-Tick aus dem Rig liest (Hamlib t):

  • RX leuchtet grün bei verbundener CAT ohne aktive PTT.
  • TX leuchtet rot bei jeder Form von Aussendung — unabhängig davon, ob die PTT vom Mikro, vom Data-Eingang oder vom CAT- Befehl kommt.

CAT-Panel: NB / NR / NCH / TUN Toggle-Pills

Vier neue Pills unter den Status-Badges:

  • NB — Noise Blanker (Hamlib NB)
  • NR — Noise Reducer (Hamlib NR)
  • NCH — Auto Notch Filter (Hamlib ANF)
  • TUN — Antennen-Tuner (Hamlib TUNER)

Aktive Funktionen sind farbig hinterlegt, inaktive grau, vom Backend nicht unterstützte Pills werden ausgeblendet. Klick togglet die jeweilige Funktion am Rig.

Capability-Discovery beim Connect

Damit die UI nur die Slider und Pills zeigt, die das angeschlossene Rig tatsächlich beherrscht, fragt die App beim Verbindungsaufbau einmalig jede optionale Hamlib-Funktion ab (verteilt über die ersten Poll-Ticks, damit der CI-V-Bus nicht durch einen Burst überfahren wird). Erfolgreich gelesene Features werden im Panel sichtbar, fehlgeschlagene bleiben unsichtbar.

Bekannte Einschränkung — IC-7610 Antenna-Read

Auf IC-7610 trennt der Antenna-Read (y) die CAT-Verbindung reproduzierbar nach ~2 Sekunden. Bis das geklärt ist (vermutlich Hamlib-Backend-Bug für ICOM-Rigs mit 2 Antennenbuchsen), sind Antennen-Wahl-Buttons sowie Squelch-, Mic-Gain- und CW-WpM- Slider auf diesem Modell bewusst abgeschaltet. Wird mit dem nächsten Hamlib-Update erneut getestet.

1.9.11 — 2026-05-21

Bug-Fix-Welle nach Live-Test — fünf Punkte aus User-Feedback.

Direkt nach dem 1.9.10-Release kamen über den In-App-Bug-Reporter fünf Meldungen rein. Vier davon waren echte Bugs/UX-Lücken, einer ein wichtiges Feature-Loch. Alle fünf in diesem Release behoben.

Previous-Popover: Suffix-Toleranz

LogbookDatabase.findQSOs(matching:) machte einen exakten Call- Vergleich. Wer als »HB9XYZ« suchte, fand keine als »HB9XYZ/P« geloggten QSOs — bitter für Outdoor-Aktivisten, die häufig mit Portable-Suffix loggen.

Jetzt Base-Call-Match: Portable-Suffixe (/P, /M, /QRP, /MM) und Country-Prefixe (DL/, K/) werden auf beiden Seiten weggeschnitten. Heuristik: der längste Teil zwischen den »/«- Trennern ist der Base-Call.

Bonus: Empty-State des Popovers diagnostiziert jetzt, wenn die Suche tatsächlich gelaufen ist (»X Logs durchsucht · Base-Call- Match«) — vorher sah das aus, als hätte gar nichts stattgefunden.

»Bestätigungen abrufen« auch in den Einstellungen

Bisher waren die QSL-Confirmation-Sync-Buttons nur im QSL-Tab des Logbuchs. User suchten sie in den Lookup-&-Upload-Einstellungen — auch nicht unlogisch, weil dort die Credentials konfiguriert sind.

Jetzt gespiegelt: Einstellungen → Lookup & Upload → QRZ.com hat unter dem API-Key-Status einen »Bestätigungen jetzt abrufen«- Button, LoTW analog unter den Web-Credentials. Beide mit Hint »(auch im QSL-Tab verfügbar)« und Disabled-State wenn Credentials fehlen. Klicks lösen identische Logik aus wie im QSL-Tab.

Contest-Cluster: Worked-Filter + auffälliges MULT-Badge

Zwei Wünsche aus dem Contest-Live-Betrieb:

  1. »Gearbeitete ausblenden«-Toggle oben in der Filter-Bar des Contest-Cluster-Tabs versteckt Spots mit Call+Band+Mode, die bereits im aktiven Contest-Log geloggt sind.
  2. »MULT«-Badge rechts neben dem DX-Call für Multiplikator-Kandidaten — grünes Pillen-Label, sofort erkennbar auch ohne Farbsehen.

Zusätzlich Color-Legende in der Filter-Bar (»MULT = Mult- Kandidat · roter Dot = bereits gearbeitet«). Erscheint nur im Contest-Modus — im Standard-/POTA-/SOTA-/WWFF-Log bleibt der Cluster-Tab unverändert.

Frequenz-Eingabe steuert jetzt tatsächlich das Radio

Das große Frequenz-TextField im RadioControlPanel war optisch editierbar. commitFreqText() setzte aber nur radio.frequencyMHz lokal — kein CAT-QSY ans Radio. Der nachfolgende Poll-Loop überschrieb den Wert ~200ms später mit der echten Frequenz.

User-Sicht: »passiert nichts«.

Jetzt sendet commitFreqText() bei aktiver CAT ein cat.setFrequencyMHz(v) ans Radio. Optimistisches UI-Update vor dem Send → kein Flicker zurück bei nächstem Poll. Tooltip am Feld: »Frequenz eingeben + ↩ — schickt CAT-QSY ans Radio«.

Eingabeformate: 14.250, 14250, 14.250.000 (Ham-Style mit doppeltem Punkt) — alle drei werden geparst.

USB-Pfad-Persistenz: Auto-Migrate

Wenn macOS dem USB-Stick nach Reboot ein anderes Pfad-Suffix vergibt — typisch bei FTDI/CP210x-Chipsätzen — schlug der CAT- Connect stumm fehl. User musste in Einstellungen → CAT den neuen Port manuell wählen, jedes Mal.

Neue SerialPortDiscovery.resolve(stored:)-Logik beim Connect:

SituationVerhalten
Gespeicherter Pfad existiert nochwie bisher, kein neuer Code-Pfad
Pfad weg + genau 1 USB-Serial-Port daautomatisch übernehmen + in CATSettings persistieren + Info-Toast »ℹ️ USB-Pfad migriert«
Pfad weg + mehrere USB-Ports daklare Fehlermeldung mit Kandidaten-Liste
Pfad weg + kein USB-Port da»kein Gerät angeschlossen«

USB-Pattern-Filter erkennt cu.usbserial-*, cu.usbmodem*, cu.SLAB_USB*, cu.wchusbserial* (Bluetooth-Phantom-Ports wie cu.Bluetooth-Incoming-Port werden ausgeschlossen).

Damit muss der CAT-Port nur noch genau einmal gewählt werden; beim nächsten Reboot mit dem gleichen Stick funktioniert es ohne Klick weiter.

1.9.10 — 2026-05-21

LoTW Tqsl.app File-Picker + Yaesu Voice-Memory V5-Slot.

Patch-Release nach Live-Test-Feedback. Zwei Punkte, die beim Einrichten gestolpert haben — beide jetzt behoben.

LoTW: Tqsl.app per Finder-Picker statt Terminal

Bisher war das Feld »tqsl-Binary« in Einstellungen → Lookup & Upload → LoTW ein reines TextField mit Default /Applications/Tqsl.app/Contents/MacOS/tqsl. Wenn die Auto-Detection den Pfad nicht fand (z.B. weil die App in /Applications/TQSL.app mit großem TQSL lag, auf dem Desktop blieb statt in den Programme- Ordner gezogen worden zu sein, oder per Homebrew installiert war), musste der User per mdfind oder find im Terminal suchen — unnötig kompliziert.

Jetzt: »📁 Suchen…«-Button rechts neben dem Feld. Öffnet einen Finder-Picker (startet in /Programme), User klickt einfach Tqsl.app an, HAM-Tools:

  1. Extrahiert automatisch das Binary unter Contents/MacOS/tqsl
  2. Prüft sofort auf Ausführbarkeit (grüner Haken)
  3. Falls das erwartete Binary fehlt: Fallback sucht die erste ausführbare Datei in Contents/MacOS/
  4. Direktauswahl eines CLI-Binarys (z.B. /opt/homebrew/bin/tqsl) funktioniert ebenfalls

Yaesu Voice-Memory: 5 Buttons statt 4

Die Voice-Keyer-Reihe in den QSO-Forms (DX/Contest/Outdoor) zeigte bei Yaesu-Profilen bisher nur V1–V4. Die unterstützten Yaesu-VM- Modelle (FT-991/A, FT-710, FTDX-10, FTDX-101D/MP) haben hardware- seitig aber alle 5 Slots. Der fehlende V5-Button war sogar als TODO im Code-Kommentar markiert — vom Live-Tester gefunden.

Markenspezifisches Mapping bleibt: ICOM (IC-7300/7610/9700/705) zeigt weiter 4 Buttons, weil diese Modelle hardware-seitig nur T1–T4 (PB1–PB4) haben.

Doku

1.9.9 — 2026-05-21

Neues Schedules-Modul — Skeds + DX-Events planen, mit Countdown, QSO-Form-Pre-Fill, Cluster-Filter und macOS-Notifications.

Erstmals seit V1.5.0 wieder ein komplett neuer Tab im Logbuch: Schedules, mit Calendar-Icon in der unteren Tab-Bar. Verwaltet zwei Sorten von geplanten Funkterminen in einer einheitlichen Liste:

  • Skeds — vereinbarte 1:1-QSOs mit konkretem Gegen-Call (»Sonntag 14:30 UTC, HB9XYZ, Antenna-Vergleich«)
  • DX-Events — angekündigte DXpeditions, Net-Slots, Contest-Windows mit optionalem Start→Ende-Window (»3D2A Fiji, EU-Window 18:00 → 22:00 UTC«)

Card-Layout

Jeder Eintrag erscheint als Card mit:

  • Type-Icon (Personen-Symbol für Sked, Globus für DX-Event)
  • Live-Countdown in der Header-Zeile: »in 1h 23m«, »Morgen 09:00«, »läuft jetzt« — farbcodiert je nach Distanz (grün = aktiv, orange = <1h, blau = heute, grau = vergangen)
  • Frequenz/Band/Mode-Zeile
  • Notiz-Snippet (2 Zeilen, lineLimit)
  • Action-Buttons: 📡 Loggen jetzt · 🔍 Cluster-Filter (nur DX-Events) · ✏ Edit · ▾ Status · 🗑 Trash

Smart-Features

  • »Loggen jetzt« öffnet den QSO-Form mit Pre-Fill für Call/Frequenz/Band/Mode/Notiz und schickt automatisch CAT-QSY ans Radio falls verbunden — dein TRX springt auf die geplante Frequenz und in den geplanten Mode, du musst nur noch RST tippen.
  • »Cluster-Filter« (nur bei DX-Events sichtbar) setzt DX-Cluster- Suchfeld auf den Call und Band-Filter auf das geplante Band. So findest du den DX-Spot sofort, wenn das DXpedition-Window startet.
  • Frequenz-zu-Band-Auto-Detection beim Eintippen im Sheet: 14.205 → Band-Picker steht auf 20m, ohne dass du klicken musst.
  • Status-Quick-Menü pro Card: geplant / erledigt / verpasst / abgesagt. Erledigte/verpasste Cards werden abgedimmt, abgesagte fallen in der Sortierung ans Ende.

macOS-Notifications

Wenn du beim Anlegen eine Erinnerung wählst (10 Min / 30 Min / 1 Std / 1 Tag vorher), schickt macOS eine System-Notification:

Sked mit HB9XYZ
In 10 Min · 14.205 MHz · 20m · SSB

Permissions werden lazy beim ersten Add eines Schedules mit Erinnerung angefragt. Re-hydrierte Notifications überleben App-Restart und Reboot (macOS persistiert die Requests systemseitig).

Persistierung

Schedules werden in ~/Documents/HAM-Tools/Cache/schedules.json gespeichert — ISO-Datums-Format, pretty-printed JSON, menschenlesbar.

Filter

Pillen oberhalb der Liste:

  • Type: Alle · Skeds · DX-Events
  • Zeit: Alle Zeiten · Heute · Diese Woche · Zukunft · Vergangen

Kombinierbar. Zähler oben rechts zeigt »X von Y« sichtbare/gesamte Einträge.

Sortierung

Reihenfolge in der Liste:

  1. Gerade laufende DX-Events (mit grünem »läuft jetzt«-Tag)
  2. Zukunfts-Termine aufsteigend nach Startzeit
  3. Vergangene Termine absteigend (jüngste oben), abgedimmt
  4. Abgesagte Termine ganz unten

Volle Doku zum Modul: Module → Schedules.

1.9.8 — 2026-05-21

Yaesu Voice-Keyer-Test-Setup nach Tester-Anfrage.

Die V1–V4-Voice-Keyer-Buttons in den DX-, Contest- und Outdoor-Forms waren bisher hartcodiert auf ICOM zugeschnitten: Label »ICOM Voice«, Modell-Hinweis »IC-7300/7610/9700/705«, und Yaesu/Kenwood/Elecraft-User konnten gar nicht erst klicken. Das war historisch motiviert, weil zum Implementation-Zeitpunkt (V1.9.2) Hamlib send_voice_mem nur für ICOM-Backends ein RPRT 0 lieferte und alle anderen RPRT -11 zurückgaben.

Was sich ändert

  • Markenspezifische Anzeige: Label und Modell-Hinweis kommen jetzt aus dem aktiven TRX-Profil:
    • ICOM: »ICOM Voice / IC-7300/7610/9700/705«
    • Yaesu: »Yaesu Voice / FT-991/A · FT-710 · FTDX-10/101D/MP«
    • Kenwood: »Kenwood Voice / TS-590/890/2000«
    • Elecraft: »Elecraft Voice / K3/K3S/K4«
    • Andere/unbekannt: »TRX Voice«
  • Buttons immer aktiv (sobald CAT verbunden ist), unabhängig von der Marke. Yaesu-Tester können jetzt direkt ausprobieren ob's geht.
  • RPRT -11 wird übersetzt in eine verständliche Status-Zeile: »Funktion wird vom Hamlib-Backend für dieses TRX-Modell (noch) nicht unterstützt« statt »sendVoiceMem abgelehnt: RPRT -11«.

Test-Aufruf für Yaesu-Tester

Wenn du eines von FT-991/A · FT-710 · FTDX-10 · FTDX-101D/MP hast (alle vier Modelle haben Voice-Memory in der Hardware), bitte mit 1.9.8 einmal V1 klicken:

  • 🎉 Voice spielt: Hamlib 4.7.1 hat das Yaesu-newcat-Backend für send_voice_mem erweitert — alle vier Modelle laufen out-of-the-box.
  • »Funktion nicht unterstützt«-Meldung: Hamlib kann es weiterhin nicht; dann folgt Plan B in einer der nächsten Versionen mit eigener PB-Befehl-Verdrahtung pro TRX-Profil.

Bitte das Ergebnis an bugs@funkwelt.net melden — eine Zeile reicht.

Andere Yaesus (FT-891, FT-450/950, FTDX-1200/5000, FT-857/897/817) haben kein VM-Hardware → RPRT -11 ist dort erwartetes Verhalten, kein Bug. Workaround: F1–F8-Macros mit SSB-Aufnahme nutzen, die funktionieren mit jedem TRX.

1.9.7 — 2026-05-21

Privacy-Fix + fünf Tester-Bug-Fixes aus dem produktiven HAM-Mac-Lauf vom 2026-05-20.

Privacy

Beim Inspizieren der App auf Lecks von Autor-Daten in Builds für andere Nutzer wurden drei reale Issues gefunden — alle in V1.9.6 noch enthalten, mit V1.9.7 behoben:

  • DXCluster-Default-Callsign war hardcoded HB9HJI. Wer den Cluster-Tab öffnete BEVOR er sein Rufzeichen in Station-Settings eintrug, loggte sich beim DXSpider mit dem Autor-Call ein. Default jetzt leer — Cluster akzeptiert leeren Call sauber oder du wirst zum Setzen aufgefordert.
  • QTH-Locator-Default war hardcoded JN47PN (Schweiz) in fünf Views: Cluster-Bandmap, Weltkarte (zwei Stellen), QTH-Locator-Modul und Grayline. Karten zoomten initial auf den Autor-Standort, Distanz- Berechnungen waren falsch. Jetzt globaler Default-Span ohne Heim-Punkt.
  • API-User-Agent wurde mit HAMTools/2.0 HB9HJI an pota.app, sotadata.org.uk und wwff-cc.org geschickt — egal wer die App nutzt, Server-Logs identifizierten den Aufruf als HB9HJI. Jetzt versionsbasiert: HAMTools/1.9.7.

Tester-Bug-Fixes vom HAM-Mac-Live-Lauf 2026-05-20

  • Cluster-Spot-Zeiten konsequent in UTC (HHmmZ). RBN-Skimmer (ON8-Familie) schickten teilweise Lokalzeit mit Z-Suffix, und UDP-Bridge-injizierte Spots formatierten in Mac-Lokalzeit ohne Z — die Spot-Liste zeigte »falsche« Zeiten je nach Quelle. Jetzt wird jeder Spot-Timestamp neu in UTC gerendert.
  • Mode-Multi-Select in der DX-Cluster-Spot-Liste: SSB + FT8 + CW gleichzeitig filterbar (vorher nur ein Mode oder »alle«). Plus: Band-Filter-Liste sortiert sich nach Wellenlänge (160m → 70cm) statt alphabetisch.
  • TRX-Setup-Submenu-Flackern: Das »TRX-Setup laden«-Submenu schloss sich jede Sekunde wieder, weil der CAT-Status-Poll-Loop SwiftUI zum vollständigen CommandMenu-Rebuild zwang. Jetzt liest das Menu den Status nur beim Klick, nicht im Body.
  • Spot-Cap 500 → 2000: An Contest-Wochenenden mit 4+ verbundenen DXSpider-Knoten liefen die Spots in unter einer Minute über die alte Grenze, ältere Spots wurden weit vor dem 60-Min-Retention-Filter weggekippt. Jetzt 2000 Spots Reserve.
  • Grayline-Performance: Die SunTerminator-Polygon-Berechnung lief bei jedem View-Render neu (~2592 Polygone × jedes Frame). Jetzt @State-Cache mit Recompute nur bei displayDate-Wechsel, plus Grid-Step 5° → 10° (648 statt 2592 Polygone — auf Welt-Map optisch identisch). Pan + Zoom bleiben aktiv.

1.9.6 — 2026-05-20

LoTW-Polish nach erfolgreichem Live-Test auf HB9HJI's HAM-Mac.

Behoben

  • Station-Location-Picker sucht jetzt zusätzlich in ~/.tqsl/station_data.xml (Standard-Pfad ab tqsl 2.5+). Damit erscheinen deine in tqsl-GUI angelegten Locations automatisch im Picker — keine manuellen Tippfehler mehr möglich.
  • tqsl Exit-Codes 9 und 10 vertauscht in unserem Mapping. Tester bekam Exit 10 (»Station Location could not be found«) und HAM-Tools zeigte »LoTW-Server nicht erreichbar« — falscher Outcome-Typ. Korrekte Reihenfolge laut tqsl 2.8.4: 9 = CONNECTION_FAILED, 10 = COMMAND_ERROR. Network/Reject-Branches entsprechend umsortiert.
  • Klartext-Match für »Station Location X could not be found«: zeigt jetzt direkt »in Einstellungen → LoTW prüfen« statt eines generischen CLI-Argument-Fehlers.

1.9.5 — 2026-05-20

LoTW-Upload robuster + Diagnose-Output im Fehler-Alert.

Behoben

  • Tqsl-Subprocess-Environment minimal: bei einem signed.app- Subprocess fehlten ggf. HOME / PATH. Jetzt explizit befüllt mit ProcessInfo.environment + Fallback auf NSHomeDirectory(). cwd wird zusätzlich auf $HOME gesetzt, weil tqsl seine Config + Output unter ~/.tqsl/ ablegt.
  • Erfolg-False-Positive korrigiert: das Wort »Connection« in einer tqsl-Zwischen-Logzeile triggerte fälschlich »Server nicht erreichbar«, obwohl der Upload tatsächlich erfolgreich war. Erfolgs-Match (»uploaded successfully« / »queued for processing«) läuft jetzt vor den Netzwerk-Heuristiken.
  • Diagnose-Snippet im Fehler-Alert: die letzten 500 Zeichen der rohen tqsl-Ausgabe werden mit angezeigt, damit der Operator sofort sieht was tqsl im Subprocess-Kontext wirklich meldet.

1.9.4 — 2026-05-20

Patch nach Live-Test des LoTW-Uploads auf HB9HJI's HAM-Mac.

Korrigiert

  • tqsl-Exit-Codes neu gemappt für tqsl 2.5+ (ARRL-Current). Mein ursprüngliches 0/3/4/6-Schema war für tqsl 1.x — die aktuelle Version benutzt 0–11 mit komplett anderer Semantik. Quellbasiert nachgezogen und Duplikate-Erkennung über Text-Match in stdout ergänzt (Exit-Code 0
    • »duplicate« im Output → .duplicate statt .accepted).
  • 34 neue i18n-Strings aus dem Macro- und LoTW-System auf Englisch übersetzt — UI ist damit wieder vollständig zweisprachig.

1.9.3 — 2026-05-20

Hotfix für 1.9.2: Startcrash auf macOS 26.3.x.

Ein-Commit-Patch direkt nach 1.9.2.

Behoben

  • App startete nicht mehr auf einigen macOS-26.x-Versionen (gemeldet von HB9HJI auf 26.3.1). Crash war ein EXC_BREAKPOINT in SCPService.loadRawFile — der Service nutzte direkt Bundle.module statt des toleranten AppResource-Helpers (existiert seit 1.8.16 für genau diese Klasse von Bugs). Jetzt umgestellt; SCPService findet die Master-Call-Liste jetzt unabhängig vom Bundle-Format (flat oder canonical Contents/-Layout).

1.9.2 — 2026-05-20

Patch-Release: F1–F8 Contest-Macros + ICOM Voice-Keyer überall.

Drei Feature-Commits direkt nach 1.9.1 — beide Macro-Systeme zusammen machen das Logbuch zu einem vollwertigen Voice-/CW-Keyer ohne zusätzliche Software.

Contest — F1–F8 Macro-System

  • Acht globale Macro-Slots unter dem Contest-Eingabe-Formular, je mit Label, CW-Text und optionaler SSB-Voice-Aufnahme. Mode-Auto- Erkennung über das Radio: TRX im CW → Hamlib send_morse mit aufgelöstem Template; sonst SSB-Pfad mit setPTT(true) → AVAudioPlayer → setPTT(false).
  • Variablen im CW-Text: {MyCall}, {TheirCall}, {Snt} (gesendete Kontrollgruppe), {Rcv} (empfangen), {Cnt} (Serial), {Exch} (Kanton/Zone/State/Age je nach Contest).
  • Werks-Belegung N1MM-Style: CQ · Exch · TU · MyCall · HisCall · ? · 5NN · AGN.
  • Mode-Indikator über der Button-Reihe zeigt aktiv welcher Pfad fährt (Blau = CW, Orange = SSB), pro Button ein kleines Mode-Icon. Stop-Knopf rechts bricht beide Pfade gleichzeitig ab.
  • Einstellungen → Macros: 8-Slot-Editor mit Live-Aufnahme (Sekunden-Timer + Stop), Vorhören ohne PTT, Datei-Löschen, Werks-Belegung-Reset. Audio liegt in Application Support/HAM-Tools/Macros/Contest/.

CAT — ICOM Voice-Keyer V1–V4 in allen Entry-Forms

  • Vier-Button-Reihe (V1 · V2 · V3 · V4 · Stop) eingebaut in alle Entry-Forms — DX, Contest, POTA, SOTA, WWFF, BOTA. Der Operator hat den TRX-internen Voice-Keyer überall griffbereit.
  • Klick → \send_voice_mem N an Hamlib → ICOM spielt T1–T4 ab. PTT triggert sich vom TRX selbst, Audio läuft TRX → Antenne ohne Computer-Audio-Pfad (keine USB-Audio-Latency, keine Pegel-Probleme, klingt exakt wie der OM live).
  • Vorbedingung: T1–T4 im ICOM-Menü vorab aufnehmen (Menu → Set → Voice Memory → Record).
  • Funktioniert mit IC-7300/7610/9700/705 und ähnlichen ICOM-Modellen. Yaesu/Kenwood/Elecraft liefern keine Reaktion — die Marken- Einschränkung steht inline neben der Button-Reihe.

1.9.1 — 2026-05-20

Patch-Release: Matrix-Theme, zehn neue Conteste, Light-Theme-Polish.

Sieben Commits nach 1.9.0 — vor allem Contest-Modul-Ausbau und ein viertes Theme. Keine strukturellen Refactors, daher Patch-Bump.

Theme

  • Matrix-Theme. Viertes Theme zur Auswahl unter Einstellungen → Darstellung → Design: fast-schwarzer Hintergrund mit Grünschimmer, Matrix-Grün (#00FF41) als Body-Text, Cyan-Blau (#00D4FF) für CTA, Active-States und Sidebar-Headlines. Neon-Akzente für Status- Farben (Grün/Rot/Gelb/Orange/Pink). Light/Dark/Ham Classic bleiben unverändert.

Contest — 10 neue Templates

  • USKA National Mountain Day (3. Sonntag im Juli, 80m only, RST + 15-Zeichen-Text als Kontrollgruppe).
  • USKA Weihnachtswettbewerb (1./2. Samstag im Dezember, 80m+40m, RST + Kanton; Multiplikator: Kanton pro Band).
  • CQ WW RTTY (last Sept), CQ WPX RTTY (2nd Feb), ARRL RTTY Roundup (1st Jan).
  • Russian DX Contest (3rd Mar, RST + Oblast/Serial).
  • All Asian DX in CW (3rd Jun) und SSB (1st Sep) — beide Stationen senden RST + eigenes Alter.
  • JIDX Contest in CW (2nd Apr) und SSB (2nd Nov) — JA sendet Präfekturnummer, DX sendet CQ-Zone.

Contest — Bandwahl reglement-konform

  • Neue allowedBands-Whitelist pro Contest-Template. Der Cabrillo- Band-Picker im New-Contest-Sheet zeigt nur die zulässigen Bänder, und der Cluster-Spot-Filter beschränkt sich entsprechend:
    • NMD nur 80m, 50-MHz nur 6m, WAE/WAG ohne 160m
    • Helvetia/Field-Day/CQ-WW-RTTY/ARRL-RTTY-RU: 160–10m HF
    • CQ-WPX-RTTY/RUS-DX/AA-DX/JIDX: inkl. 160m
  • Wer CATEGORY-BAND explizit auf z.B. 20M stellt, sieht weiterhin nur 20m-Spots — der Filter respektiert die Wizard-Wahl.
  • Wizard-Bandwahl wird jetzt pro Log persistiert (contestBandCategory, Schema v12). Damit landen 40m-Single-Band-XMAS-Logs auch korrekt als CATEGORY-BAND: 40M im Cabrillo-Export, und die Stats-Matrix zeigt nur die 40m-Zeile.

Light-Theme — Lesbarkeit nachgezogen

  • CAT-Frequenzanzeige war im Light-Theme schwarz-auf-schwarz — jetzt grün im Radio-Display-Look (theme.logText).
  • Sidebar-Headlines (DX-Spot senden, Propagation, Solar-Daten, Eigene Spots, Band Activity) im sattem Orange (#E07000) statt unleserlichem Pastell-Gold. Dark/Ham Classic bleiben beim klassischen Gold; Matrix nutzt das Cyan-Akzent.

Polish

  • Rechte Sidebar einheitlich breit (min 250 / ideal 285 / max 320) über Standard/Outdoor/Contest hinweg — kein „zu breit"-Sprung mehr beim Log-Typ-Wechsel.
  • „Band Activity"-Headline bleibt zwingend einzeilig (lineLimit(1) + Picker auf 88px) — kein zweizeiliger Umbruch mehr.
  • „Phase 5"-Pille im Radio/CAT-Header entfernt (Phase 5 ist seit Längerem ausgeliefert).

1.9.0 — 2026-05-19

Großer Sprung: zweite Sprache, neue Logger-Brücken, frische UI.

Zwölf Verbesserungen am Stück nach v1.8.16 — daher Minor-Sprung auf 1.9.0.

Sprache

  • HAM-Tools spricht jetzt Englisch. Komplette UI ist zweisprachig (Deutsch / Englisch). Sprachwahl in Einstellungen → Darstellung → „App-Sprache" (System / Deutsch / English). Wechsel wird beim nächsten App-Start wirksam. Über 850 Strings wurden für Englisch übersetzt — die wichtigsten von Hand, der Rest maschinell mit DeepL und Funk-Vokabular-Korrekturen. Falls dir eine seltsame Übersetzung auffällt, gerne kurz melden.

Logbuch

  • Mode kommt aus dem CAT. Das Mode-Feld in DX- und Contest-Form ist weg — der Mode aus dem Radio (USB/CW/FT8/…) wird direkt verwendet. RST-Defaults (59 vs. 599) ziehen sich automatisch mit.
  • eQSL.cc Auto-Upload. Jedes geloggte Standard-QSO wird direkt an eQSL hochgeladen (Einstellung pro User in Lookup & Upload). Settings für Username/Password/Nickname, plus Pro-Log-Override für /P-QTH-Profile. Bulk-Upload via Kontextmenü in der QSO-Tabelle. Damit sind QRZ-Logbook, Club Log und eQSL alle drei Auto-Upload- fähig — LoTW folgt später (braucht tqsl-Signing).

DX-Cluster + Maps

  • Mehrere Bänder gleichzeitig filtern. Der Band-Filter im DX-Cluster und im Logbuch-DXClusters-Tab ist jetzt Multi-Select. Klick auf „Alle Bänder" leert die Auswahl. Im Map-/Bands-Tab gilt dasselbe auch für den Mode-Filter.
  • Eigener QTH auf der Karte sichtbar. Locator-Marker (blauer Kreis mit Antennen-Symbol) zeigt den eigenen Standort. „QTH"- Button neben dem Zeit-Picker fliegt die Karte zurück zum eigenen Standort. Karte ist beim Öffnen automatisch zentriert.
  • DX-Spots auf der Karte mit Call-Beschriftung. Pins zeigen den DX-Call neben dem Punkt (MapKit blendet bei hoher Spot-Dichte kollidierende Labels selbst aus).
  • Weiter herauszoomen. MapKit-Limit aufgehoben — Karten lassen sich bis zur Globus-Sicht herauszoomen.
  • Heatmap-Picker (Solar-Panel rechts) wirkt jetzt. Die 15/30/60- Min-Auswahl filterte vorher nichts mit. Neu mit „5 min"-Option für ruhige Cluster-Phasen.

Externe Logger

  • JS8Call, MSHV und N1MM Logger+ können jetzt mitloggen. Die bisherige WSJT-X-Brücke wurde zu einem flexiblen Multi-Logger-Modul ausgebaut. Mehrere Listener parallel auf eigenen Ports konfigurierbar unter Einstellungen → „Externe Logger". WSJT-X/JTDX/JS8Call/MSHV reden alle dasselbe Protokoll (nur unterschiedliche Default-Ports), N1MM-Logger-Plus liefert XML-Pakete — ContactInfo wird zu QSOs ins aktive Log, Spot-Pakete fließen in den DX-Cluster-Stream.

Contest

  • Super Check Partial (SCP) im Contest-Form. Beim Tippen ins Call-Feld erscheinen Top-Treffer aus einer Master-Call-DB als Chips unter dem Form. Zwei Datenquellen (supercheckpartial.com mit ~50k aktiven Contestern + Club Log mit ~180k Calls weltweit), beim ersten Start ist eine Snapshot-Datei im App-Bundle dabei. Updates via Einstellungen → Daten → „Master Call Database". Nach 14 Tagen Inaktivität gibt's eine sanfte Update-Erinnerung.

Aufgeräumt

  • POTA/SOTA/WWFF/BOTA aus dem „Lookup & Upload"-Service-Picker entfernt. Auto-Upload zu pota.app/wwff.co/wwbota.net ist nicht geplant — die Outdoor-Workflows laufen über manuellen ADIF/CSV- Export aus dem jeweiligen Programm-Log.

Special Thanks

  • HB9HJL Rene für eine wirklich produktive Test-Wunschliste, die fast jede UX-Schwachstelle aufgedeckt hat.

1.8.16 — 2026-05-19

Logger-Polish + Frequenz-Anzeige mit Hz-Auflösung

Bug-Fix-Release mit drei sichtbaren Verbesserungen für den Logger- Alltag.

Logbuch

  • Callbook-Lookup bei Stations-Wechsel wirklich frisch. Wer einen Call lookuppt und dann auf einen anderen Cluster-Spot klickt (oder den Call manuell überschreibt + Tab), bekommt jetzt sauber die neuen Personendaten — Name, QTH, Locator, Email, Zonen. Bisher blieben die Felder der vorigen Station stehen, obwohl Bild und Header schon die neue zeigten.

Radio/CAT

  • Frequenz-Anzeige mit voller Hz-Auflösung. Der rechte Block zeigt jetzt 3 statt 2 Stellen: 7.095.000 statt 7.095.00.

Programm-Maps

  • History-Tab-Schutzschild jetzt auch für POTA/SOTA/WWFF/BOTA. Der Hard-Cap auf 1500 Annotations + 500 Polylines (eingeführt mit 1.8.15 für den History-Tab) gilt jetzt konsistent für alle Programm-Maps. Bei großen Logs gibt's einen Overflow-Banner statt eines MapKit-Stalls.

Special Thanks

  • HB9HJL Rene für sein unermüdliches Testen — danke!

1.8.15 — 2026-05-18

Hotfix: History-Tab überlebt riesige Logs

Beim Klick auf den History-Tab im Logbuch konnte die App komplett „verschwinden" — der Prozess lief weiter, aber kein Fenster wurde mehr sichtbar (auch nach Neustart nicht). Ursache: bei Zeitraum = Alle und einem großen Standard-Log zeichnete der History-Tab pro QSO eine Annotation plus eine Polyline von QTH zur Gegenstation. Bei mehreren tausend QSOs hat MapKit den initialen Render-Pass nicht mehr durchgebracht.

Drei Schutzschichten in 1.8.15:

  • Hard-Cap auf 1500 Annotations — bei mehr Treffern zeigt der Tab die neuesten 1500 QSOs und blendet oben einen Banner ein („N Treffer — Karte zeigt nur die neuesten 1500. Zeitraum/Band/ Mode enger setzen.")
  • Linien-Limit 500 — Polylines sind in MapKit deutlich teurer als Annotations; bei mehr als 500 sichtbaren QSOs werden die QTH→DX-Linien automatisch unterdrückt.
  • „Alle"-Option im Zeitraum-Picker entfernt — statt unbegrenzt steht jetzt „2 Jahre" als Maximum. Altbestand-Werte (days = 0 oder >5 Jahre) werden im Tab automatisch auf 1 Jahr geclamped, damit Bestands-User nicht mehr in den alten Crash laufen.

Default für den „Linien zeigen"-Toggle ist jetzt aus — wer seine Linien will, schaltet sie bewusst ein.

1.8.14 — 2026-05-18

Local Time + Akku + RFPOWER + DX-Spot-Polish + Doku-Ausbau

Sammel-Release mit allen Tester-Wünschen von HB9HJL plus Help-Site- Stubs ausgebaut. Inhaltlich:

Top-Bar 🆕

  • Local Time neben UTC (HH:mm:ss LT), Tooltip mit Zeitzone-ID.
  • Akkustatus-Pille: Symbol + Prozent + Restzeit (z.B. 🔋 85% · 4h 12min), bei Netzbetrieb 🔌, beim Laden ⚡. Auf Desktop-Macs ohne Akku unsichtbar. Farbe wechselt bei ≤20 % auf rot.

Radio/CAT

  • RFPOWER-Anzeige im PWR-Badge: »PWR 80 %« live aus Hamlib, sobald das TRX-Backend einen Wert liefert (Yaesu/Icom/Kenwood ja). Sonst bleibt's beim grauen Platzhalter.
  • Spot-Klick aktualisiert Frequenz + Mode auch ohne aktive CAT. Bisher zog ein Klick auf einen LSB-40m-Spot die Status-Anzeigen nicht mit — jetzt überall konsistent.

DX-Spot-Sender

  • Mode kommt aus Radio/CAT (nicht mehr hardcoded »FT8«). Mode-Liste um FM/AM/DATA erweitert.
  • Mode-Picker entfällt im DX-Spot-Block — Wert ist zuverlässig aus dem Radio-Panel verfügbar.
  • Band-Schnellwahl-Buttons entfallen — Frequenz wird ohnehin aus der CAT prefillt.

Help-Site: Bandplan + Rechner ausgebaut

Beide bisher als »im Aufbau« markierten Seiten haben jetzt substantiellen Inhalt:

  • Bandplan: alle drei Zugriffswege (Sub-Tab im Logbuch, eigenes Fenster via ⌘⇧P, Live-Awareness-Pille in jedem QSO-Form) + vollständige Band-Übersicht 2200 m – 1,25 cm.
  • Rechner: Liste der 25+ Rechner gruppiert nach Funktion (Drahtantennen, Richtstrahler, Spezialantennen, Spulen, Anpassung, Signale).

1.8.13 — 2026-05-18

Update-Check repariert · Multi-Cluster Polish · ATNO-Spalte

Auto-Update funktioniert wieder

Der eingebaute Update-Check (⌘⌥U) verglich bisher ausschließlich das Build-Datum als String — Hotfix-Releases vom selben Tag (1.8.11 → 1.8.12 → 1.8.13) wurden so nie als neuer erkannt, die App meldete »HAM-Tools ist aktuell«. Jetzt: numerischer Versionsvergleich (1.8.13

1.8.12, 1.10.0 > 1.9.9), Build-Datum nur als Tiebreaker bei gleicher Version.

Heißt: ab 1.8.13 funktioniert Auto-Update verlässlich, auch innerhalb desselben Build-Tages. Wer noch auf 1.8.12 oder älter sitzt und das Update-Dialog »aktuell« angezeigt bekommt, muss einmalig manuell von latest.dmg laden — ab 1.8.13 läuft's wieder von alleine.

Multi-Cluster: Status-Pille + »N/M verbunden«-Counter

  • In Einstellungen → Cluster: pro Zeile eine farbige Status-Pille (grün verbunden, gelb Login, rot Fehler, grau getrennt). Live aus dem Pool, ohne Refresh.
  • In allen Top-Bars (Logbuch-Header, DXClusters-Tab, eigenständiges DX-Cluster-Fenster): »N/M verbunden« statt nur »N Cluster aktiv« — zeigt sofort, ob alle Pool-Member wirklich Daten liefern.
  • Host/Port-Edits an aktiven Clustern wirken live: in den Einstellungen Host oder Port ändern → der entsprechende Client startet sich selbst neu, ohne manuellen Aktiv-Toggle-Trick.

ATNO-Markierung als eigene Spalte 🆕

Die ATNO/NEW-BAND/NEW-MODE-Pille im DX-Cluster steht jetzt in einer eigenen Tabellenspalte direkt links vom Rufzeichen, statt am Call zu kleben. Spalte ist über Header-Rechtsklick reorderbar und ausblendbar. Kontinent-Spalte wurde mit »Land« zusammengeführt (»Germany (EU)«), weil SwiftUI nur 10 Spalten pro Tabelle erlaubt.

1.8.12 — 2026-05-18

Hotfix #2: macOS 26.5 Startcrash echte Behebung

Der 1.8.11-Versuch (Bundle-Format kanonisch umbauen) hat den Crash nicht behoben — die App startete auf macOS 26.5 weiter nicht. Wahre Ursache: macOS 26.5's Bundle.init(url:) liefert für SwiftPM-Resource- Bundles in manchen Setups nil, egal in welchem Format. Bundle.module fällt dann auf seinen fatalError zurück.

Ab 1.8.12 wird Bundle.module komplett umgangen. Ein neuer AppResource.url(forResource:withExtension:)-Helper sucht das Resource-Bundle selbst, toleriert verschiedene Bundle-Layouts und gibt nil statt zu crashen. Wirkt für alle fünf Konsumenten in der App (BOTA-Bunker-DB, Bandplan, CAT-TRX-Profile, Contest-Templates, Rechner-Beschreibungen).

Wenn 1.8.10 oder 1.8.11 nicht starteten: Lade das neue DMG direkt von latest.dmg — der eingebaute Update-Check kann dich nicht erreichen, solange die alte App nicht startet.

1.8.11 — 2026-05-18

Hotfix: App-Startcrash auf macOS 26.5 · Multi-Cluster Confidence-Badge

macOS 26.5 — Bundle-Loader-Crash behoben 🚑

1.8.10 ließ sich auf macOS 26.5 nicht starten und crashte beim ersten Zugriff auf eingebettete Resources (BOTA-Bunker-DB-Snapshot). Ursache: Apple verschärft in macOS 26.5 die Anforderungen an eingebettete Resource-Bundles — das von SwiftPM erzeugte »flat« Bundle (Files direkt im .bundle/-Folder) wird als invalides Format abgelehnt.

Der Release-Build konvertiert das Resource-Bundle jetzt vor dem Code-Signing in die kanonische Contents/Info.plist-Struktur und signiert es eigenständig. Wirkt rückwirkend für alle macOS-Versionen (älteres macOS toleriert beide Bundle-Formate, neueres verlangt das kanonische).

Wenn du 1.8.10 nicht starten konntest: DMG manuell von toolbox.funkwelt.net/app/dmg/latest.dmg herunterladen und installieren. Der eingebaute Update-Check kann dich nicht erreichen, solange die alte App nicht startet.

Multi-Cluster-Pool: »+N«-Confidence-Badge

Du kannst seit 1.8.10 bis zu drei DX-Cluster gleichzeitig im Pool verbinden (Einstellungen → Cluster, »Aktiv«-Checkbox). Jetzt zeigt die Spot-Tabelle in der »Spotter / Quelle«-Spalte ein grünes »+N«-Badge, sobald derselbe Spot innerhalb des Dedup-Fensters von mehreren Cluster-Quellen kam. Mehr Quellen → höhere Sicherheit, dass es kein False-Positive ist. Tooltip listet die zusätzlichen Cluster auf.

1.8.10 — 2026-05-18

POTA-Upload-Fix · Mode-Picker ohne CAT nutzbar mit FT8/FT4

POTA-ADIF-Upload jetzt verlässlich

pota.app lehnte Uploads mit »Only a single STATION_CALLSIGN value is supported per log file« ab, wenn das POTA-Log über den WSJT-X-Spot-Stream gefüttert wurde und in WSJT-X mid-session zwischen Home- und Portable-Call gewechselt worden war (z.B. HB9HJIIT/HB9HJI/P). Behoben an zwei Stellen:

  • Wurzelfix: Bei POTA/SOTA/WWFF/BOTA-Logs übernimmt der WSJT-X-Importer jetzt immer den im Log-Wizard gewählten Aktivierungs-Call (Feld »Verwendetes Rufzeichen«) — egal was WSJT-X als my_call mitschickt.
  • Export-Schutz: Beim ADIF-Export eines POTA-Logs werden OPERATOR + STATION_CALLSIGN über alle QSOs vereinheitlicht. Damit lassen sich auch ältere Logs mit gemischten Calls problemlos hochladen — einfach erneut exportieren.

Mode-Picker ohne CAT-Verbindung nutzbar 🆕

Im Radio/CAT-Panel war das Mode-Menü grau und nicht klickbar, solange kein Funkgerät verbunden war. Loggen ganz ohne CAT (oder bei Remote-/Reise-Setup ohne TRX in Reichweite) war damit auf den zuletzt aktiven Mode festgenagelt.

  • Mode-Menü ist jetzt immer klickbar. Ohne CAT wird die Auswahl direkt in den Radio-State geschrieben (USB→SSB, LSB→SSB, CW→CW, PKTUSB→DATA etc.).
  • Zusätzliche Digi-Modes erscheinen nur ohne CAT: FT8, FT4, JT65, JT9, PSK31, JS8, Q65, MSK144. Bei aktiver CAT-Verbindung bleibt die Liste auf Hamlib-Modes (USB/LSB/CW/PKTUSB/…), weil das Radio FT8 & Co. nicht direkt kennt — die laufen am TRX über PKTUSB.

1.8.9 — 2026-05-17

ATNO-Markierung im DX-Cluster · Bandplan-Awareness in QSO-Forms · Club Log live · DX-Log ohne Dupe-Warnung

ATNO-Live-Markierung im DX-Cluster 🆕

Pro Spot im DX-Cluster zeigt jetzt eine farbige Pille direkt links vom Rufzeichen, ob das Land/Band/Mode für dich noch interessant ist:

  • rot »ATNO« — All Time New One, dieses DXCC-Country hast du noch nie gearbeitet
  • orange »NEW BAND« — Country schon gearbeitet, aber nicht auf diesem Band
  • gelb »NEW MODE« — Country+Band schon, aber nicht in dem Mode
  • schon gearbeitet → keine Pille (Liste bleibt ruhig)

Wird live aktualisiert bei jedem geloggten QSO. Im Contest-Log gilt die Dupe/Mult-Färbung weiter (rot dupe, grün mult), in Outdoor- Programmen zeigt der jeweilige Spot-Tab seine eigene Ref-Match-Logik.

Bandplan-Live-Awareness in allen QSO-Forms 🆕

Beim Loggen jedes QSOs zeigt eine Pille in der Status-Bar sofort an, ob Frequenz + Mode IARU-R1-konform sind:

  • grün — im Band, Mode passt zum Subsegment
  • orange — im Band, aber falsches Subsegment (z.B. SSB im CW-Bereich)
  • rot — außerhalb aller Amateurfunkbänder

Reagiert live auf CAT-Frequenzwechsel. Aktiv in allen sechs QSO-Formen: DX, Contest, POTA, SOTA, WWFF, BOTA.

Club Log scharfgeschaltet

Der App-API-Key (zugeteilt von Club Log auf Antrag der HAM-Tools-App) ist jetzt enthalten — du brauchst nichts mehr selbst zu beantragen. In Einstellungen → Lookup & Upload → Club Log einfach Email + Application-Password eintragen (von clublog.org → Settings → Application Passwords, nicht dein Login-Passwort) — Auto-Upload läuft direkt.

Außerdem ein Form-Encoding-Fix: bestimmte Sonderzeichen (z.B. @) im HTTP-Body wurden nicht korrekt kodiert, Club Logs nginx-WAF blockte das mit »403 Forbidden«. Jetzt RFC-3986-strikt — der 403-Bug ist weg.

Standard-DX-Log: keine Dupe-Warnung mehr

Im normalen DX-Log (Lebens-Log, Tages-Log, Stammrunde) ist es legitim, denselben Call mehrfach zu loggen — die »Schon gearbeitet«-Warnung war dort nur lästig. Programm-Logs (POTA/SOTA/WWFF/BOTA) und Contest behalten ihre eigenen Dupe-Regeln in den jeweiligen Eingabemasken.

1.8.8 — 2026-05-17

Outdoor-Programme: Upload jetzt plattform-konform · POTA-Self-Spot · WWBOTA-Live-Anbindung · viele Polishs

ADIF-Export jetzt direkt hochladbar

  • POTA-ADIF entspricht jetzt 1:1 der pota.app-Vorgabe (MY_SIG=POTA + MY_SIG_INFO, kein nicht-dokumentiertes MY_POTA_REF mehr). Wird beim Upload nicht mehr von pota.app abgelehnt.
  • WWBOTA-ADIF mit MY_SIG=WWBOTA und Komma-Liste in MY_SIG_INFO für Multi-Bunker — laut offiziellem WWBOTA-ADIF-Guide.
  • Bei Multi-Park-Hopping (POTA) wird beim Export automatisch pro Park ein eigenes File geschrieben — pota.app erlaubt keine Komma-Listen und verlangt File-pro-Park.

POTA Self-Spot 🆕

Aus dem POTA-Log heraus direkt auf den POTA-Cluster spotten:

  • Im Activator-Modus mit gesetztem Park + Frequenz erscheint in der Status-Bar ein „Spot senden"-Button.
  • Sheet zeigt Vorschau (Call/Park/Frequenz/Mode) + optionales Comment-Feld. Nach „Senden" ist der Spot sofort auf pota.app sichtbar — inklusive Re-Spot-Button für Hunter.

SOTA-CSV für sotadata.org.uk 🆕

Neuer Toolbar-Button in SOTA-Logs: „Für sotadata.org.uk exportieren (CSV)". Schreibt das offizielle V2-CSV-Format inkl. Summit-Gruppierung, S2S-Spalte und Band-Mapping (40m → 7.0MHz). Damit kannst du deine Aktivierungen direkt bei sotadata hochladen.

WWBOTA-Anbindung statt Stub

  • Bunker-Datenbank lädt jetzt von api.wwbota.org (~26.7k Bunker weltweit). Beim ersten Start kommt ein Snapshot direkt aus der App, danach jederzeit aktualisierbar über Einstellungen → BOTA-Reference-Datenbank → „Aktualisieren".
  • Refs durchgängig im offiziellen B/XX-NNNN-Format. Spots aus dem DX-Cluster werden mit + ohne B/-Präfix erkannt.

Logbuch-Polish

  • QRZ-Auto-Fill in Outdoor-Logs (POTA/SOTA/WWFF/BOTA) übernimmt jetzt nicht nur den Namen, sondern auch QTH, Locator, Country, Continent, CQ-/ITU-Zone. Das ADIF-Export- Ergebnis ist damit deutlich vollständiger und DXCC-tracking- tauglich.
  • Beim Anlegen eines POTA/SOTA/WWFF/BOTA-Logs zeigt das Hopping-Feld pro Eintrag den vollständigen Namen + Details des jeweiligen Parks/Summits/Bunkers (vorher nur Häkchen ohne Kontext).
  • Bandplan ist jetzt ein eigenes Fenster (Menü Fenster → Bandplan-Fenster, ⌘⇧P) statt eines beengten Sub-Tabs.
  • Export-Bestätigung zeigt bei Multi-File-Exports alle geschriebenen Dateinamen und einen „Im Finder zeigen"-Button.

1.8.7 — 2026-05-16

Club-Log-Upload · SOTA-Punkte komplett · Update-System gehärtet

Club Log Upload (Phase 6 Schritt 3)

  • Einstellungen → Lookup & Upload → Club Log: nur Email + Application-Password eintragen (nicht das Login-Passwort — kommt aus Club Log → Settings → Application Passwords). Den API-Key, den Club Log seit 2026 zusätzlich verlangt, bringt HAM-Tools intern mit — kein extra Onboarding nötig.
  • Auto-Upload-Toggle schickt jedes neu geloggte DX-QSO im Hintergrund an Club Log. Greift nur in Standard-Logs — Outdoor-Programme (POTA/SOTA/WWFF/ BOTA) bleiben außen vor.
  • Bulk-Upload für historische QSOs: mehrere Zeilen markieren → Rechtsklick → „N QSOs an Club Log hochladen" (ein zusammengefasster ADIF-Batch).
  • ⚠️ Club Log sperrt die IP nach mehreren fehlgeschlagenen Uploads. Bei Auth-Fehlern wird der Auto-Upload automatisch pausiert, damit du eine Chance hast, die Credentials zu fixen, bevor Club Log den Zugriff blockt.
  • Erfolgreich hochgeladene QSOs werden mit „QSL via Club Log gesendet" markiert und tauchen im QSL-Tab sowie in der Tabellen-Übersicht auf.

SOTA — Phase 4d komplett

  • Activator-Punkte-Card im Awards-Tab → SOTA: zeigt die Summe aller gültigen Aktivierungen (≥ 4 QSOs auf demselben Summit / UTC-Tag), inklusive saisonalem Winterbonus (Nord 1. Dez – 15. März, Süd 1. Juni – 15. Sept).
  • Multi-Summit-Hopping korrekt: jeder Summit in der Komma-Liste zählt eigene 4-QSO-Schwelle.
  • Damit ist die SOTA-Funktionalität bis auf den Upload zu sotadata.org.uk (kommt in Phase 6) komplett.

Update-System gehärtet

  • macOS-Mindestversion wird vor dem Anbieten geprüft — numerisch korrekt (vorher hätte ein String-Vergleich z. B. „10.15" als kleiner als „10.9" eingestuft).
  • Inkompatible Updates: der „Download öffnen"-Button im Update-Dialog wird deaktiviert, mit klarer Erklärung warum. Der Dialog erscheint trotzdem, damit du weißt dass es eine neue Version gibt.

1.8.6 — 2026-05-16

QRZ-Logbook-Anbindung · QSL-Tab · Stats-Dashboard · Distance/Bearing · viele Polishs

QRZ Logbook (Phase 6 Schritt 1+2)

Live-Upload jedes QSO an QRZ.com

  • Im Einstellungen → Lookup & Upload → QRZ.com → Logbook den 32-stelligen API-Key eintragen (kommt von qrz.com → »My Account → Settings → Logbook API«).
  • Toggle "Jedes geloggte QSO automatisch hochladen" schickt jedes neu geloggte DX-QSO im Hintergrund an QRZ. Greift nur in Standard-Logs — Outdoor-Programme (POTA/SOTA/WWFF/BOTA) bleiben ausgenommen, weil die eigene Upload-Pfade haben.
  • Bulk-Upload für historische QSOs: mehrere Zeilen markieren → Rechtsklick → "N QSOs an QRZ Logbook hochladen". Läuft parallel (6 Requests gleichzeitig), duplicate-tolerant (war-schon-drin = OK).
  • Status pro QSO in der neuen Spalte "QRZ-LB" (default ausgeblendet, via Spalten-Menü einblenden): grüner Haken = neu hochgeladen, grauer Haken = war bereits in QRZ, rotes ⚠ = fehlgeschlagen (klick = retry), grauer Pfeil = noch nicht versucht (klick = jetzt hochladen).

Bestätigungen abrufen

  • Im QSL-Tab oben: Button "↓ QRZ-Bestätigungen abrufen".
  • Holt paginiert das komplette QRZ-Logbook und merged fehlende LoTW-/eQSL-/Direkt-Bestätigungen additiv in die lokalen QSOs — manuell gesetzte lokale Bestätigungen bleiben unberührt.

Neue Tabs im Logbuch

QSL-Tab (Briefumschlag-Icon)

Übersicht offener Konfirmationen, sortierbar nach Alter, mit:

  • Filter Offen / Bestätigt / Alle
  • Service-Filter (Alle / LoTW / eQSL / Club Log / Direkt-QSL)
  • Status-Badges pro Channel (✓ grün bestätigt, → gelb wartend, — leer)
  • Stift-Icon öffnet das QSO-Edit-Sheet zum manuellen Flag-Setzen

Stats-Dashboard (Balken-Icon)

Live-Auswertungen über das aktive Log:

  • 4 Kennzahl-Karten: QSOs · Best DX (km) · DXCC · aktive Jahre
  • 2×2 Charts: QSOs pro Jahr · Band · Mode · Kontinent
  • 2 Listen: Top-10 DXCC-Länder · Top-5 längste DX-Strecken

Distance & Bearing pro QSO (Phase-3-Rest)

  • Automatische Berechnung beim Anlegen oder Bearbeiten — Großkreis-Distanz und Initial-Bearing aus eigenem QTH-Locator (aus Settings) und dem QSO-Locator.
  • Neue Spalten Distanz (km) und Peil (°) in der QSO-Tabelle (default-hidden).
  • ADIF-Export schreibt DISTANCE + ANT_AZ.
  • Bulk-Backfill für ältere QSOs: Spalten-Menü → "Wartung → Distanz/ Peilung für alle QSOs nachrechnen…".

Workflow-Verbesserungen

  • Bulk-Vervollständigen via Rechtsklick: mehrere QSOs markieren → "N QSOs aus QRZ/HamQTH vervollständigen". Lookups laufen parallel, greifen auf den 30-Tage-Cache zu, befüllen nur leere Felder (vorhandene Daten werden nie überschrieben).
  • QRZ-Profilbild-Cache: Profilbilder aus QRZ-Lookup landen jetzt persistent im Disk-Cache (30 Tage). Beim zweiten Öffnen erscheint das Bild sofort statt mit Lade-Spinner.
  • ADIF-Import läuft async: Bei großen Dateien (z. B. der vollständige QRZ-Logbook-Export, 7 MB / 7000 QSOs) blockiert die UI nicht mehr — Button zeigt "Importiere…"-Spinner, klarer Alert bei 0 erkannten QSOs.

Web/Download

  • Der FAQ-Hinweis "Updates rückgängig machen?" verwies auf /app/dmg/, das lieferte aber 403. Jetzt steht dort das Verzeichnis-Listing aller DMG-Versionen.
  • Top-Nav-Download zeigt jetzt auf eine versionslose latest.dmg — bei jedem Release wird der Symlink automatisch mitgezogen.

1.8.5 — 2026-05-15

Bandmaps in eigenen Fenstern · Grayline-Fenster · UI-Polish

Neues "Fenster"-Menü in der macOS-Menubar

Mehrmonitor-Freundliche Pop-up-Fenster — beide Fenster persistieren Position + Größe und kommen nach App-Neustart automatisch zurück.

Bandmaps als eigene Fenster

  • Pro Klick auf "Fenster → Neue Bandmap → {Band}" öffnet sich ein schmales 320×800-Fenster mit spalten-basierter Bandmap im N1MM/Skookum-Stil
  • Vertikale Frequenz-Skala links (CH-Format "14'060"), Spots als farbige Striche rechts mit Call-Text
  • Mode-Codierung: SSB gold, CW orange, FT8 grün, FT4 blau, RTTY pink, FM lila, DIGI magenta
  • Single-Instance pro Band — zweiter Klick auf dasselbe Band bringt das existierende Fenster nach vorn
  • Wählbare Auflösung: 1/2/4/8/16 px/kHz — bei hohem Zoom scrollt das Fenster vertikal, jeder Spot bekommt seine eigene Zeile
  • Zeit-Filter 5min/15min/30min/60min/2h/6h/Alle
  • Mode-Filter (Default SSB): Alle/SSB/CW/FT8/FT4/RTTY/FM/AM/DIGI
  • Klick auf einen Spot lädt ihn ins Logbuch (analog DX-Cluster-Klick: QSY + Mode an TRX, Auto-QRZ-Lookup, ohne Sub-Tab-Wechsel)

Grayline-Fenster (⌘⇧G)

  • Welt-Karte mit Tag/Nacht-Linie für DX-Propagations-Planning
  • Echte Terminator-Linie als oranger Großkreis (alle Punkte mit Sonnen-Altitude = 0°)
  • Dämmerungs-Zonen in vier Stufen (bürgerlich/nautisch/astronomisch/ Nacht) als feines Grid-Sampling (5°×5°)
  • QTH-Marker (cyan) auf deinem Locator aus den Settings
  • Sonnen-Marker (☀️) am Subsolar-Punkt — dort steht die Sonne gerade im Zenit
  • DatePicker + "Jetzt"-Button + LIVE-Badge im Live-Modus
  • Im Live-Modus tickt die Linie automatisch jede Minute weiter
  • Default-View beim ersten Öffnen: ganze Welt

UI-Polish

  • ⚙️-Zahnrad-Button aus der Logbuch-Top-Bar entfernt — Standard- macOS-Konvention: Einstellungen sind im App-Menü "HAM-Tools → Einstellungen…" (⌘,) sowie im Transceiver-Menü erreichbar

1.8.4 — 2026-05-15

Transceiver-Quick-Switch · Spot-Klick steuert TRX · Auto-QRZ-Lookup · 13"-Polish

Neues Transceiver-Menü (macOS-Menubar)

  • Schneller Wechsel zwischen gespeicherten CAT-Configs ohne Settings-Klick
  • Reset CAT (⌘⇧R) — Reconnect rigctld zur aktiven Config
  • CAT ein/aus (⌘⇧T) — globaler CAT-Toggle
  • TRX-Setup laden ▸ — Untermenü aller Configs mit Häkchen vor der aktiven
  • TRX-Setup speichern… — Dialog für neuen Namen, dupliziert aktive Config
  • Einstellungen… (⌘,) — öffnet das Settings-Fenster

Spot-Klick steuert den TRX

  • Klick auf einen DX/POTA/SOTA/BOTA/WWFF-Spot sendet jetzt Frequenz + Mode an den TRX (vorher nur Frequenz bei POTA/SOTA, gar nichts bei DX-Cluster)
  • "SSB" wird automatisch zu LSB (<10 MHz) bzw. USB (≥10 MHz) — über alle Bänder von 160m bis 70cm
  • CW direkt, FT8/FT4/PSK/JS8/Digital-Modes als PKTUSB bzw. PKTLSB
  • Cluster-Tabellen zeigen entsprechend „LSB" oder „USB" statt generischem „SSB"

Auto-QRZ-Lookup nach Spot-Klick

  • Name, QTH, Locator, Country, CQ-/ITU-Zonen, DXCC-Entity werden direkt vom Callbook (QRZ/HamQTH) in die QSO-Form gezogen
  • Respektiert dein bestehendes „Auto-Lookup bei TAB"-Setting in den Callbook-Einstellungen

Kein Tab-Wechsel mehr beim Spot-Klick

  • Du bleibst im DXClusters-Sub-Tab und beobachtest weiter Spots
  • Der Draft fließt im Hintergrund ins QSO-Form; beim manuellen Wechsel in den Log-Tab sind alle Felder vorbefüllt

DX-Spot-Senden mit Auto-Fill

  • Der „DX-Spot senden"-Block in der rechten Sidebar übernimmt automatisch den aktuellen Their-Call aus der QSO-Form und die Radio-Frequenz
  • Spotten geht in einem Schritt — kein doppeltes Tippen mehr

13"-MacBook-Air-Polish

  • Window-Default 1280×760 → 1180×720pt, Mindestgröße 900×580 → 860×560
  • Rechte Sidebar 40pt schmaler (idealWidth 300 → 260)
  • Propagation-Gauges kompakter (Canvas 110×72 → 95×56, Schrift 28pt → 22pt)
  • Solar-Daten zweispaltig (3×2 statt 6×1)
  • HeatCell-Höhe 16 → 14pt, kompaktere Section-Paddings
  • → rechte Sidebar passt auf einem 13"-MBA ohne Scrollen

Fixes

  • CAT-Verbindung trennte sich beim QSY — Race-Condition zwischen Poll-Loop und Write-Operationen (setFrequencyMHz/setMode/setVFO/setSplit) auf demselben TCP-Socket. Neuer Client-Lock serialisiert alle Operationen
  • Einstellungen-Button im Transceiver-Menü reagierte nicht — alter NSApp.sendAction(showSettingsWindow:)-Selector durch offizielle SwiftUI- API @Environment(\.openSettings) ersetzt

1.8.3 — 2026-05-15

UI-Polish im DX-Log · Spalten-Toolbar · Spot-Tabellen mit Reorder

Neue Spalten-Verwaltung im DX-Log

  • Neuer „Spalten"-Button in der QSO-Toolbar — alle verfügbaren Spalten per Toggle ein-/ausblendbar, plus „Standard-Spalten wiederherstellen"
  • 10 zusätzliche Spalten (alle default-aus): QTH, ITU-Zone, Distanz (km), Peilung (°), Station-Call, QSL Via, My POTA, My SOTA, My WWFF, My BOTA
  • Reihenfolge per Drag im Spaltenkopf verschiebbar
  • Sichtbarkeit + Reihenfolge persistieren pro Log-Typ (Standard / POTA / Contest haben jeweils eigene Konfiguration)

Spot-Tabellen mit Reorder + Hide/Show

  • DX-Cluster, POTA-, SOTA-, BOTA- und WWFF-Spots wurden von der bisherigen Card-Darstellung auf eine spalten-basierte Tabelle umgestellt — mit Drag-Reorder, Hide/Show pro Spalte und Klick- Sortierung auf jedem Spaltenkopf
  • Copy ins Log bleibt via Doppelklick oder Context-Menü erreichbar
  • Sichtbarkeit + Reihenfolge persistieren pro Spots-Quelle

Fixes

  • DX-Standard-Log: Die POTA-Spalten „State" und „Their Park" werden jetzt nur noch in echten POTA-Logs angezeigt (vorher fälschlich auch im Standard-Log)
  • DX-Standard-Log: BOTA-Map Sub-Tab erscheint nur noch in BOTA-Programm-Logs
  • Contest-Wizard: „Neuer Contest"-Sheet ist größer und scrollbar — die Buttons „Abbrechen / Anlegen" im Kategorien-Schritt sind nicht mehr abgeschnitten
  • Spalten-Menü: Toggle-Häkchen entsprechen jetzt der tatsächlich angezeigten Sichtbarkeit (vorher zeigte das Menü Pseudo-Haken für default-ausgeblendete Spalten)

1.8.2 — 2026-05-14

Multi-Call-Lizenz · Pro-Log-Callsign · Multi-Op-Contest · Generator als App-Bundle

Multi-Call-Lizenz + Portabel-Validation

  • Lizenz-Schema akzeptiert mehrere Calls (z.B. Privatcall + Club-Call)
  • Substring-Match an /-Grenzen: HB9HJI, DL/HB9HJI, HB9HJI/P, F/HB9HJI/MM sind ✓ — HB0HJI bleibt ✗ (kein Buchstaben-Drift)

Pro-Log-Callsign (Schema v7 → v8)

  • Jedes Log hält einen eigenen Station-Call (Portabel-/Ausland-/Club-Call)
  • MyCallField im Wizard mit Live-Lizenz-Validation (grünes Häkchen oder orange Warnung)
  • Bei Multi-Call-Lizenz erscheint ein Quick-Picker über dem Feld
  • Pro-Log-Callsign landet in jedem QSO als stationCall + operatorCall
  • Leerlassen → Fallback auf Settings-Default

Multi-Op-Contest (Schema v8 → v9)

  • NewContestLogSheet bekommt ein Feld „Operatoren" (Komma-Liste)
  • ContestEntryForm zeigt einen OP-Switcher rechts in der Header-Bar
  • Awards-Tab im Contest-Modus mit neuem Sub-Tab „OPs" und Pro-Operator-Aufschlüsselung (QSOs + Anteil pro OP, sortiert)

Lizenz-Generator als App-Bundle

  • tools/HAMToolsLicenseGen/build.sh erzeugt signiertes .app-Bundle
  • Drag&Drop nach /Applications — kein swift run mehr nötig
  • Privater Key bleibt extern (Sicherheits-Pattern)

Fixes

  • Awards-Tab im Contest-Modus war komplett ausgeblendet — jetzt sichtbar, damit der neue OPs-Sub-Tab erreichbar ist
  • Help-Site dokumentiert macOS-14-Voraussetzung prominent (nach Beta-Tester-Feedback mit macOS 12.7.6)

1.8.1 — 2026-05-14

WWFF + BOTA komplett · Outdoor-Tab-Refactor · Testlauf-Fixes

Phase 4e — WWFF (Worldwide Flora & Fauna)

  • Lokale Reference-Datenbank mit Doppelpfad: URL-Download von wwff-cc.org oder manueller CSV-Import via Datei-Picker (fail-safe wenn die Haupt-URL nicht erreichbar)
  • NewWWFFLogSheet mit Activator/Hunter + Multi-Reference-Hopping
  • WWFFEntryForm mit 44-QSO-Aktivierungs-Counter (strikter als POTA/SOTA)
  • WWFF-Spots-Tab als gefilterter DX-Cluster-Stream
  • WWFF-Map-Tab mit R2R-Indikator
  • Awards-Sub-Tab mit Activator/Hunter/R2R/Programme-Counter
  • ADIF mit MY_SIG=WWFF, MY_WWFF_REF, WWFF_REF
  • Schema-Migration v5 → v6

Phase 4f — BOTA (Bunkers On The Air)

  • CSV-Import-primärer Pfad (kein zentrales öffentliches API verfügbar)
  • NewBOTALogSheet, BOTAEntryForm ohne QSO-Counter (1 QSO reicht)
  • BOTA-Spots gefiltert aus DX-Cluster mit DB-Lookup (vermeidet Pattern-Konflikte mit POTA/WWFF)
  • BOTA-Map mit Shield-Pins + B2B-Indikator
  • Awards-Sub-Tab mit Activator/Hunter/B2B/Programme
  • Proprietäre APP_HAMTOOLS_MY_BOTA_REF ADIF-Felder
  • Schema-Migration v6 → v7
  • bota_demo.csv im Repo mit 15 echten EU-Bunkern für Sofort-Test

Outdoor-Sammel-Tab

  • QSO-Panel: DX/Contest/Outdoor als drei Haupt-Tabs
  • Outdoor-Sub-Bar mit POTA/SOTA/WWFF/BOTA-Sub-Tabs
  • Skaliert sauber auf weitere zukünftige Award-Programme

Testlauf-Fixes

  • QSO-Tabellen-Spalten programm-abhängig: SOTA → Region + Their Summit, WWFF → Country + Their Reference, BOTA → Their Bunker
  • Bottom-Tab-Bar zeigt im Programm-Modus nur die relevanten Tabs
  • DXClusters-Tab-Label dynamisch: „POTA-Spots" / „SOTA-Spots" / …
  • WWFF-DNS-Fehler-UX: CSV-Import-Button bei Server-Ausfall hervorgehoben
  • Awards-Tab im Programm-Modus auf das jeweilige Programm fokussiert
  • Enter speichert QSO direkt in allen Logging-Forms (statt Cmd+Enter)
  • Update-Check zeigt Alert auch bei „up to date" und „Fehler"
  • Helvetia-Contest: myCanton-Picker in den Station-Settings
  • ContestStatsPanel Alignment .top (war zentriert)

1.8.0 — 2026-05-14

SOTA-Modul komplett (Phase 4d)

Strukturparallel zum POTA-Modul, sieben Sub-Phasen an einem Tag durchgezogen.

Summit-Datenbank

  • Lokale SQLite (summits.sqlite) mit ~181 000 Summits aus sotadata.org.uk/summitslist.csv
  • Refresh-Hinweis nach 30 Tagen
  • Bulk-Replace mit Index-Drop für schnelle Imports (~3-5 Sek auf Mac)

Session-Wizard

  • Activator / Chaser-Modus, Multi-Summit-Hopping als Komma-Liste
  • Summit-Auto-Complete mit Höhe + Punkte pro Vorschlag
  • Auto-generierter Session-Name (SOTA HB/BE-001 2026-05-14)

SOTA-QSO-Form

  • 4-QSO-Aktivierungs-Counter (rot/grün mit „Aktivierung gültig"-Badge)
  • Winterbonus-Anzeige: Status-Bar zeigt 10+3p während des Winter- Fensters (NH: 1. Dez – 15. März, SH: 1. Juni – 15. Sep)
  • Their-Summit-Feld mit Auto-Complete und automatischem Punkte-Lookup
  • Dupe-Markierung (Call+Band+Mode im aktiven Log)

SOTA-Spots-Tab

  • 60-Sek-Polling aus api2.sota.org.uk/api/spots/50/all
  • Filter: Band, Mode, Assoc-Prefix, „Nur manuell" (RBNHole ausblenden)
  • Sort nach Zeit oder Frequenz
  • Copy-Button mit optionalem CAT-QSY

SOTA-Map-Tab

  • Summit-Pins (Mountain-Icon, SOTA-Orange) mit Elevation/Punkte-Tooltip
  • DX-Pins mit Mode-Farbe, S2S-Indikator pro QSO
  • Linien Summit → DX optional
  • Band-Filter persistent

Awards-Sub-Tab SOTA

  • Activator-Summits, Chaser-Summits, S2S, Chaser-Punkte aggregiert
  • Auto-Switch in den SOTA-Sub-Tab beim Log-Wechsel

ADIF-Export

  • MY_SIG=SOTA, MY_SOTA_REF, SIG/SIG_INFO, SOTA_REF
  • MY_GRIDSQUARE aus App-Settings
  • Proprietäres APP_HAMTOOLS_THEIR_SOTA_POINTS für Re-Import

Schema-Migration

  • Logbook-DB-Schema v4 → v5 mit zwei neuen Spalten (log_meta.sotaSummitRefs, qsos.mySotaRefs) für Multi-Summit-Hopping
  • ALTER-TABLE-Migration läuft automatisch beim Öffnen alter .htlog-Dateien

1.7.1 — 2026-05-13

Contest-Polish + Notarisierung

  • Cluster-Click füllt jetzt korrekt das Contest/POTA-Form (Race-Condition behoben)
  • Mode-Picker im Contest auf Cabrillo-Mode-Kategorie eingegrenzt
  • CAT-Config "Speichern unter…"-Button mit klarerem Workflow + Serial-Port wird mitkopiert
  • ICOM CI-V-Adresse als eigenes Feld pro Modell (mit Default und Override)
  • In-App Bug melden… (Cmd+Shift+B) — strukturierte Mails an bugs@funkwelt.net
  • DMG ist Apple-notarisiert — kein Gatekeeper-Workaround mehr nötig

1.7.0 — 2026-05-13

Großer Wurf: Contest + Lizenz + Update-System

Contest-Modus

  • Vollständiger Wizard mit 14 Templates (HB-Helvetia, USKA-FD, USKA-50MHz, CQ-WW, CQ-WPX, IARU, DARC-WAG, ARRL-DX, WAE)
  • Dynamische Exchange-Felder pro Template (Helvetia mit HB/DX-Switch)
  • Live-Score, Rate-Meter, Score-Matrix
  • Dupe-Markierung (Call+Band+Mode)
  • DX-Cluster im Contest gefiltert + Color-Markierung (Dupe rot, Multiplier grün)
  • Contest-Map (QTH-zentriert)
  • Cabrillo V3-Export mit Header aus Wizard

Lizenzsystem

  • Ed25519 offline-signiert (kein Server)
  • 50-QSO-Demo, danach Read-Only (kein Datenverlust)
  • Lifetime + 12 Monate Updates-Modell
  • Settings → Lizenz-Tab mit Status + mailto-Anfrage
  • Separates Generator-Tool für Lizenz- + Manifest-Signing

Update-System

  • Auto-Check 1× / 24h beim Start
  • Manueller Check via Cmd+Opt+U
  • Signiertes Manifest auf toolbox.funkwelt.net/app/updates.json
  • Lizenz-bewusst (zeigt "Update-Verlängerung nötig" wenn Build nach updates_until)
  • Critical-Flag blockiert Skip

Sonstiges

  • Sidebar-Refactor: 3 Top-Punkte (Logbuch / DX-Cluster / Rechner-Akkordeon)
  • Bandplan als Logbuch-Sub-Tab
  • DX-Cluster verbindet global beim App-Start
  • CAT-Profile erweitert auf 24 Modelle (Yaesu, Icom, Kenwood, Elecraft)

1.6.1 — 2026-05-12

POTA: Multi-Park-Hopping, Dupe-Markierung, POTA-Anlege-Route, POTA-Stats aus pota.app, Awards-Auto-Switch, QRZ-Retry.

1.5.x — 2026-05-11

Cabrillo V3-Export, Multi-Log-Architektur, CAT via Hamlib-Subprocess.

Ältere Versionen

Siehe Git-History.

HAM-Tools © HB9HJI · Funkwelt