Skip to content

Repository files navigation

📡 Rufzeichen-Sucher

Plattformunabhängige Desktop-Applikation zur Suche und Anzeige von deutschen Amateurfunk-Rufzeichen aus der offiziellen Liste der Bundesnetzagentur (BNetzA).

Java JavaFX License Platform


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.


Inhalt


Funktionen

  • 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

Screenshots

Hauptfenster – Suche, Detailansicht mit DMR-IDs und interaktiver Karte:

Hauptfenster

Statistiken – Lizenzklassen, Bundesländer-Verteilung und Heatmap:

Lizenzklassen Bundesländer
Heatmap

Download & Installation

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.

Programm-Updates

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.


Aus dem Quellcode bauen

Voraussetzungen

Komponente Version
Java (JDK) 25
Maven 3.9+

Starten (Entwicklungsmodus)

git clone https://github.com/DH1NOC/RufzeichenSucherJava.git
cd RufzeichenSucherJava
mvn javafx:run

Nativen Installer bauen

# 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 -DskipTests

Ausgabe liegt jeweils in target/dist/.

Release veröffentlichen

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.java
  1. PRIMARY/privat → GitHub-Secret UPDATE_SIGN_KEY
  2. BACKUP/privat → nur offline sichern (Rückfallebene für eine Schlüsselrotation)
  3. Beide öffentlichen Schlüssel → in src/main/java/de/rufzeichensucher/update/UpdateKeys.java eintragen

Solange dort kein Schlüssel steht, bleibt die Update-Funktion stumm — ein nicht prüfbares Manifest ist schlechter als gar kein Update.


Architektur

┌─────────────────────────────────────────────────────────────┐
│                        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.


Datenquellen

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

Cache-Verzeichnisse

Die Anwendung speichert Caches und Einstellungen plattformkonform:

Betriebssystem Pfad
Windows %APPDATA%\RufzeichenSucher\
Linux ~/.local/share/RufzeichenSucher/
macOS ~/Library/Application Support/RufzeichenSucher/

Datenschutz

  • 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.

Mitwirken

Pull Requests und Issues sind willkommen!

  1. Fork erstellen
  2. Feature-Branch anlegen: git checkout -b feature/mein-feature
  3. Änderungen committen: git commit -m 'feat: mein Feature'
  4. Branch pushen: git push origin feature/mein-feature
  5. 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 verify

Lizenz

MIT License – siehe LICENSE für Details.


73 de DH1NOC

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages