Plattformunabhängige Desktop-Applikation zur Suche und Anzeige von deutschen Amateurfunk-Rufzeichen aus der offiziellen Liste der Bundesnetzagentur (BNetzA).
Transparenzhinweis: KI-unterstützte Entwicklung
Diese Anwendung wurde zu einem erheblichen Teil mit Unterstützung von KI-Assistenten entwickelt – konkret mit Claude Code von Anthropic. Das betrifft Architektur, Implementierung und Dokumentation. Alle Entscheidungen wurden vom Entwickler (Carsten Nohl, DH1NOC) begleitet, geprüft und abgenommen. Dieses Projekt steht für einen offenen und transparenten Umgang mit KI-gestützter Software-Entwicklung im Amateurfunk-Umfeld.
- Funktionen
- Screenshots
- Download & Installation
- Aus dem Quellcode bauen
- Architektur
- Datenquellen
- Cache-Verzeichnisse
- Datenschutz
- Mitwirken
- Lizenz
- Offline-Suche in ~70.000 deutschen Amateurfunk-Rufzeichen (Quelle: BNetzA) nach Rufzeichen, Name oder Ort/PLZ
- Detailansicht mit Lizenzklasse, Name, Adresse und Nebenstandort
- DMR-ID-Lookup via RadioID.net-Datenbank (~306.000 Einträge)
- Geografische Verortung per interaktiver Karte (OpenStreetMap / Nominatim)
- Statistiken: Lizenzklassen, Bundesländer, Präfixe, Heatmap
- Automatische Aktualisierung der Daten (BNetzA: alle 7 Tage, DMR: alle 30 Tage)
- Selbst-Update: meldet neue Programmversionen und spielt sie auf Wunsch ein (signaturgeprüft)
- QRZ.com-Verfügbarkeitscheck direkt aus der Detailansicht
- Lokales Caching für schnellen Kaltstart ohne Internetverbindung
Hauptfenster – Suche, Detailansicht mit DMR-IDs und interaktiver Karte:
Statistiken – Lizenzklassen, Bundesländer-Verteilung und Heatmap:
![]() |
![]() |
![]() |
|
Das jeweils aktuelle Release mit nativen Installern für alle Plattformen findet sich auf der Releases-Seite:
| Plattform | Datei | Anforderung |
|---|---|---|
| Windows | .msi |
Windows 10 oder neuer |
| macOS | .dmg |
macOS 12 oder neuer (Apple Silicon) |
| Linux | .deb |
Debian / Ubuntu (GTK3) |
Die Installer bringen eine vollständige Java-Laufzeitumgebung mit – Java muss nicht separat installiert werden.
Die installierte Anwendung sucht beim Start im Hintergrund nach einer neueren Version und bietet sie samt Release-Notes an. Wird das Update bestätigt, lädt sie den passenden Installer, prüft ihn und übergibt ihn an das Betriebssystem.
Angeboten wird nur, was sich verifizieren lässt: Zu jedem Release gehört ein mit Ed25519
signiertes Manifest, und ausschließlich daraus stammen die Versionsnummer und die SHA-256-Prüfsumme
des Installers. Eine ältere Fassung kann so nicht als neue untergeschoben werden. Details in
ARCHITECTURE.md.
Die aktuell laufende Version steht rechts in der Werkzeugleiste und unter Über. Dort lassen sich auch die automatische Suche abschalten und Vorabversionen (Beta) einbeziehen.
Im Entwicklungsmodus (
mvn javafx:run) ist die Update-Funktion aus – dort gibt es keine Installation, die ein Installer ersetzen könnte.
| Komponente | Version |
|---|---|
| Java (JDK) | 25 |
| Maven | 3.9+ |
git clone https://github.com/DH1NOC/RufzeichenSucherJava.git
cd RufzeichenSucherJava
mvn javafx:run# macOS – DMG (Apple Silicon, auf macOS ausführen)
mvn -Ppackage-mac verify -DskipTests
# Windows – MSI (auf Windows ausführen, WiX Toolset 3.x erforderlich)
mvn -Ppackage-win verify -DskipTests
# Linux – DEB (auf Linux ausführen, fakeroot erforderlich)
mvn -Ppackage-linux verify -DskipTestsAusgabe liegt jeweils in target/dist/.
Ein Tag vX.Y.Z (bzw. vX.Y.Z-beta.N) startet den Release-Workflow: Er baut die drei
Installer, signiert das Update-Manifest und legt alles als GitHub-Release ab. Ein Tag mit
Bindestrich wird automatisch als Prerelease markiert und nur Nutzern mit aktiviertem
Beta-Kanal angeboten.
Einmalig einzurichten, damit der Updater überhaupt anspringt:
java src/main/packaging/UpdateKeyGenerator.javaPRIMARY/privat → GitHub-SecretUPDATE_SIGN_KEYBACKUP/privat → nur offline sichern (Rückfallebene für eine Schlüsselrotation)- Beide öffentlichen Schlüssel → in
src/main/java/de/rufzeichensucher/update/UpdateKeys.javaeintragen
Solange dort kein Schlüssel steht, bleibt die Update-Funktion stumm — ein nicht prüfbares Manifest ist schlechter als gar kein Update.
┌─────────────────────────────────────────────────────────────┐
│ Java Application │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ DataManager │ │ DMRDatabase │ │ GeocodingService │ │
│ │ (Rufzeichen) │ │ (RadioID) │ │ (Nominatim OSM) │ │
│ └──────┬───────┘ └──────┬───────┘ └────────┬─────────┘ │
│ │ │ │ │
│ ┌──────▼───────────────────────────────────────────────┐ │
│ │ CallsignStatistics │ │
│ │ (Lizenzklassen, Bundesländer, Präfixe, Heatmap) │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ JavaFX UI-Layer │ │
│ │ Hauptfenster (Liste + Detail) │ Statistikfenster │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Technologie-Stack:
| Zweck | Bibliothek |
|---|---|
| UI-Framework | JavaFX 25 |
| PDF-Textextraktion | Apache PDFBox 3.x |
| JSON | Jackson |
| HTTP-Client | java.net.http.HttpClient (JDK built-in) |
| Karte | JavaFX WebView + Leaflet.js |
| Charts | JavaFX Charts |
| Build | Maven |
| Packaging | jpackage (JDK built-in) |
Die vollständige Architekturdokumentation befindet sich in ARCHITECTURE.md.
| Quelle | Beschreibung | Lizenz / Nutzung |
|---|---|---|
| Bundesnetzagentur | Offizielle Rufzeichenliste (PDF) | Open Data |
| RadioID.net | DMR-Datenbank (CSV) | Frei nutzbar |
| OpenStreetMap / Nominatim | Geocoding | ODbL, max. 1 req/s |
zipcodes.de.json |
PLZ → Bundesland + Koordinaten | Gebündelt |
state_population.json |
Bevölkerungsdaten je Bundesland | Gebündelt |
Die Anwendung speichert Caches und Einstellungen plattformkonform:
| Betriebssystem | Pfad |
|---|---|
| Windows | %APPDATA%\RufzeichenSucher\ |
| Linux | ~/.local/share/RufzeichenSucher/ |
| macOS | ~/Library/Application Support/RufzeichenSucher/ |
- Die Anwendung überträgt keine personenbezogenen Daten an Dritte.
- Beim Geocoding wird die Adresse des jeweiligen Rufzeichen-Inhabers an Nominatim (OpenStreetMap) übermittelt. Dies geschieht nur auf explizite Nutzerinteraktion (Auswahl eines Eintrags) und ist durch die Nominatim Usage Policy gedeckt.
- Der QRZ.com-Verfügbarkeitscheck überträgt lediglich das gesuchte Rufzeichen.
- Alle anderen Datenbankabfragen erfolgen vollständig lokal.
Pull Requests und Issues sind willkommen!
- Fork erstellen
- Feature-Branch anlegen:
git checkout -b feature/mein-feature - Änderungen committen:
git commit -m 'feat: mein Feature' - Branch pushen:
git push origin feature/mein-feature - Pull Request öffnen
Bitte halte dich an die Konventionen in AGENTS.md.
Jeder Push und jeder Pull Request wird von GitHub Actions unter Linux, Windows und macOS
gebaut und getestet (.github/workflows/ci.yml). Lokal entspricht das:
mvn verifyMIT License – siehe LICENSE für Details.
73 de DH1NOC



