Ein Klick auf die Nummer – das Telefon wählt.
tel:-Links über ein Bluetooth-Telefon wählen – getestet mit dem Gigaset DL500A.
Ein Klick auf eine Telefonnummer in Lagebuch – oder in
jedem anderen Programm, das tel:-Links öffnet – zeigt ein kleines Fenster mit der Nummer. Nach
Wählen baut das Telefon den Anruf auf; das Gespräch wird am Telefon geführt.
Kein Gigaset QuickSync, kein TAPI, keine CSTA-Lizenz, kein Server.
English speakers: the developer documentation starts at For developers.
Im ELW steht das Telefon neben dem Laptop, und die Nummer steht auf dem Bildschirm: im Lagebuch
bei der Einsatzkraft, im Alarmfax, auf einer Webseite. Abtippen kostet Zeit und geht im Einsatz
auch mal schief. Freizeichen macht aus jeder tel:-Nummer einen Klick – Lagebuch selbst muss dafür
nichts über das Telefon wissen, es erzeugt nur gewöhnliche tel:-Links.
Das Telefon stellt über Bluetooth eine serielle Schnittstelle (SPP) bereit und versteht dort
AT-Befehle wie ein Modem. Freizeichen öffnet diese Schnittstelle, sendet ATD <Nummer> und schließt
sie wieder. Der Anruf bleibt danach am Telefon bestehen.
Freizeichen kennt kein bestimmtes Modell. Getestet ist das Gigaset DL500A; jedes Telefon, das über Bluetooth AT-Befehle annimmt, sollte ebenso gehen – siehe Getestete Geräte.
Wie das Protokoll am DL500A gefunden wurde: CodeForFire/lagebuch#617.
- Ein Telefon mit Bluetooth und AT-Befehlen, z. B. das Gigaset DL500A – siehe Getestete Geräte.
- Ein PC mit Bluetooth, auf dem das Telefon gekoppelt ist.
- Das Telefon ist nicht als Audiogerät (Freisprechen/Headset) mit dem PC verbunden. Solange diese Audioverbindung besteht, antwortet das DL500A auf der seriellen Schnittstelle nicht – siehe Fehlerbehebung.
Die Pakete liegen unter Releases.
| System | Paket | Erster Start |
|---|---|---|
| Windows (x64) | freizeichen-<version>-windows-x64.msi ausführen |
SmartScreen → „Weitere Informationen“ → „Trotzdem ausführen“ |
| macOS | .dmg öffnen (arm64 für Apple-Chips, x64 für Intel), Freizeichen in „Programme“ ziehen |
Rechtsklick auf Freizeichen.app → „Öffnen“ |
| Linux (x64) | Debian/Ubuntu: sudo apt install ./freizeichen_<version>_amd64.deb; sonst freizeichen-<version>-linux-x64.tar.gz entpacken |
Port mit rfcomm bind anlegen, Benutzer in die Gruppe dialout; beim .tar.gz „Als Standard festlegen“ |
Die Pakete sind noch nicht signiert. Ob ein Download unverändert ist, zeigt SHA256SUMS.txt im
Release: sha256sum -c SHA256SUMS.txt (Linux) bzw. shasum -a 256 -c SHA256SUMS.txt (macOS).
Freizeichen ohne Nummer starten – es öffnet die Einstellungen. Wie das Telefon unter Windows, macOS und Linux gekoppelt wird, steht ausführlich in Bluetooth einrichten.
- Das Telefon in den Bluetooth-Einstellungen des PCs koppeln, nicht als Audiogerät verbinden.
- Unter Bluetooth-Port den Port des Telefons wählen: unter Windows ein ausgehender
COM-Port, unter macOS
/dev/cu.…, unter Linux/dev/rfcomm0. - Ländervorwahl und, falls die Leitung eine braucht, Amtsholung eintragen, Speichern.
- Verbindung testen – „Telefon antwortet. Alles bereit.“ Ein Testanruf auf das eigene Handy zeigt, dass auch das Wählen klappt.
- Als Standard festlegen, damit
tel:-Links künftig bei Freizeichen landen.
Internationale Nummern im eigenen Land werden zur nationalen Form: tel:+49 89 1234567 wählt
0891234567.
Ein tel:-Link kann von jeder Webseite und jedem Dokument kommen. Freizeichen behandelt ihn
deshalb als fremde Eingabe:
- Nichts wird ohne Bestätigung gewählt. Jeder Link öffnet das Wählfenster; in der ersten Sekunde nach dem Öffnen löst nicht einmal Enter den Anruf aus, damit ein Tastendruck, der für ein anderes Programm gedacht war, nicht wählt.
- Zum Telefon gelangen nur Ziffern (und ein führendes
+), höchstens 32 davon. Ein Link kann so keine eigenen AT-Befehle anhängen und keine Dienstkennzahlen wie*21*…#für eine Rufumleitung an der Vermittlungsstelle auslösen.
Sicherheitslücken bitte vertraulich melden – siehe SECURITY.md.
„Telefon antwortet nicht.“ Fast immer besteht noch eine Audioverbindung (Freisprechen) vom PC zum Telefon. Dann lehnt zumindest das DL500A die serielle Verbindung nicht ab, sie läuft ins Leere. In den Bluetooth-Einstellungen des PCs die Audioverbindung trennen – gekoppelt bleibt das Telefon.
„Port … nicht gefunden.“ Das Telefon ist nicht (mehr) gekoppelt, oder unter Linux fehlt
rfcomm bind. Koppeln, dann in den Einstellungen Aktualisieren.
„Port … ist belegt.“ Ein anderes Programm hält die Schnittstelle offen, oder ein Anruf läuft noch.
Unter Linux spielt tools/fake-dl500a.py ein DL500A auf einem Pseudo-Terminal und zeigt jede
Zeile, die Freizeichen sendet:
make fake-phone # legt /dev/rfcomm9 an (fragt per sudo), SCENARIO=ok
make run # Einstellungen: /dev/rfcomm9 wählen, „Verbindung testen“
make run ARGS=tel:0891234567 # WählfensterSCENARIO steuert die Antwort auf ATD: ok, error, busy, nocarrier, nodialtone oder
silent – Letzteres antwortet gar nicht, wie das DL500A bei bestehender Audioverbindung.
Fehler gefunden, Idee? Issues und Discussions sind offen – in den Discussions gern auf Deutsch. Freizeichen mit einem anderen Telefon ausprobiert? Bitte Gerät melden, ob es geklappt hat oder nicht. Wie Pull Requests aussehen sollen, steht in CONTRIBUTING.md.
Freizeichen is a small .NET 10 / Avalonia 12 desktop app for Windows, macOS and Linux. It
registers as the operating system's tel: handler, shows a confirm window and sends ATD to a
phone over Bluetooth SPP. Nothing in it is specific to one model; the Gigaset DL500A is the one it
is tested with (docs/geraete.md). It exists so that Lagebuch
and every other program in the ELW can keep emitting plain tel: links.
Prerequisite: the .NET SDK pinned in global.json (10.x).
make ci # restore (locked), build, test, format check — what CI runs
make run # settings window
make run ARGS=tel:0891234567 # dial window
make fake-phone # a fake DL500A on /dev/rfcomm9 (Linux, needs sudo)
make screenshots # regenerate docs/screenshots/ for this README
make icon # re-render the app icon from src/Freizeichen.App/Assets/icon.svg
make help # everything elseOn Linux the phone appears as a serial port only after sudo rfcomm bind 0 <phone-mac> 1.
Als Standard festlegen writes ~/.local/share/applications/freizeichen.desktop, pointing at the
running executable, and makes it the x-scheme-handler/tel default with xdg-mime. The .deb
(built by packaging/linux/build-linux.sh) also installs a system entry under the same name in
/usr/share/applications, so a user entry written later shadows it.
| Project | What it holds |
|---|---|
Freizeichen.Domain |
tel: parsing (TelUri), number normalisation, settings. References nothing. |
Freizeichen.Modem |
The AT dial session over an IAtChannel, and the serial port. |
Freizeichen.AppLogic |
View models (CommunityToolkit.Mvvm). No Avalonia reference, so it is testable without a UI. |
Freizeichen.App |
Views, Program, the composition root and the per-OS tel: registration. |
Packaging lives in packaging/: a WiX MSI for Windows and a .dmg for macOS, built
by release.yml when a v* tag is pushed.
- CONTRIBUTING.md: setup, commit rules (Conventional Commits, DCO sign-off, signed commits) and pull requests.
- AGENTS.md: the architecture and code conventions in full, also read by coding agents.
- SECURITY.md: how to report a vulnerability.
- CODE_OF_CONDUCT.md.
MIT © 2026 Thomas Müller. Bundled fonts and libraries are listed with their licences in THIRD-PARTY-NOTICES.md.


