Mein Asterisk-Server klingt jetzt wie eine alte elektromechanische Vermittlungsstelle

10. Juni 2022 (zuletzt am 14. Juni 2022 aktualisiert)

Mein Ziel war es meine kleine Asterisk-Telefonanlage auf einem Raspberry Pi wie eine alte elektromechanische Vermittlungsstelle wirken zu lassen. Alles begann mit dem Ersetzen des Freitons. Der Freiton ist der Ton, den der Anrufende hört, wenn es beim Angerufenen am anderen Ende der Leitung klingelt. Der Freiton lässt sich in Asterisk durch eine Audiodatei ersetzen. Es gibt Audiodateien mit historischen Freitönen, die von alten Ruf- und Signalmaschinen erzeugt wurden. Andere Hörtöne wie das Besetztzeichen und Ansagen lassen sich ebenfalls einbauen, damit die Asterisk-Telefonanlage eine persönliche Note erhält. Man kann sie zum Beispiel akustisch wie eine alte elektromechanische Vermittlungsstelle erscheinen lassen. Die Audiodateien können auch das typische Rauschen und Übersprechen der alten Ferngespräche liefern.

Von einer echten elektromechanischen Vermittlungsstelle, wie sie unter https://fernmeldemuseum-dresden.de/partner-2/1501-2/ vorgestellt ist, kann ich natürlich nur träumen. Behelfsmäßig muss ich mit Audio-Dateien arbeiten. Abgesehen davon ist es mir nicht möglich eigene Fern- und Transatlantikkabel zu betreiben, die in vergangenen Zeiten durch Rauschen und Übersprechen typische Nebengeräusche erzeugten.

Der Freiton und andere Hörtöne: Der Freiton gehört zu den Hörtönen. Da ich als unheilbarer Nostalgiker alte Telefone verwende, wollte ich nach dem Wählen mit der Wählscheibe auch einen  Freiton hören, der zur damaligen Zeit passt. Die alten Freitöne klangen unregelmäßig in ihrer Frequenz und Amplitude, da sie elektromechanisch mit Ruf- und Signalmaschinen erzeugt wurden (siehe auch auch https://www.waehlamt-worphausen.de/ruf-und-signalmaschine/ ).

Ruf- und Signalmaschine RSM1 ( Bildquelle: Von Es 250, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=18691216 )

Wichtig waren mir auch die Störgeräusche,  das Rauschen, Knattern, Übersprechen und Knistern, wie es bei der alten elektromechanischen Vermittlungstechnik und den Freileitungen üblich war. Mit einer Telefonanlage, die auf Asterisk basiert, ist eine Nachbildung solcher Geräusche teilweise möglich, da es noch Audiodateien gibt, welche dieses Klangerlebnis ermöglichen.

Wenn wie bei mir alte Technik zum Einsatz kommt, dann sollten auch die Hörtöne entsprechend der damaligen Zeit klingen.

Wo bekommt man die alten Hörtöne als Audiodateien? Mein Wunsch war es passend zu meinen alten Wählscheibentelefonen einen Freiton mit Nebengeräuschen einzusetzen, wie sie zu Zeiten der elektromechanischen Vermittlungstechnik vorkamen. Historische Freitöne liegen zum Beispiel auf https://www.ckts.info/downloads/sounds/ im Unterordner tt vor.

Der YouTube-Kanal von Evan Doorbell liefert eine fast unendliche Fülle von Klangbeispielen us-amerikansicher Vermittlungstechnik aus den 1970er Jahren. Die Audiospur der YouTube-Videos lässt sich zum Beispiel mit dem Programm JDownloader 2 herunterladen, wobei die Urheberrechte zu beachten sind.

Angenehm klingender amerikanischer Freiton mit leichten Störgeräuschen.
Alter russischer Freiton mit erheblichen Störgeräuschen im Hintergrund.
Irischer Freiton.


Amerikanische Hörtöne aus den frühen 1970er-Jahren.


Eine wahre Fundgrube von alten Telefongeräuschen, die in einer spannenden Geschichte über das nordamerikanische Telefonnetz der 1970er-Jahre verpackt sind.

Bearbeitung der Audiodateien: Eventuell müssen wir die Audiodateien noch bearbeiten. Als Werkzeug diente mir WavePad, das für private Zwecke kostenlos ist. Damit lassen sich die Audiodateien in der Länge so kürzen, dass sie als Endlosschleife regelmäßig klingen.

Für WAV-Dateien ist diese Einstellung für Asterisk geeignet. Asterisk verlangt eine  Abtastrate von 8000 Hz und eine Abtastgröße von 16 bits. WavePad fragt die Encoderoptionen für dem Abspeichern ab.

Falls notwendig, lassen sich auf https://g711.org/ die Audio-Dateien in ein Format umwandeln, das von Asterisk verstanden wird. Audiodateien, die als Freiton in einer Endlosschleife abgespielt werden, sollten gemäß der Voreinstellung mit “Standard Definition 16-bit WAV” konvertiert werden. G.722 führt bei der Wiederholung in der Endlosschleife zu einem leisen Knackgeräusch.

G711-File-Converter online. Ein Klick auf das Bild ruft den Converter auf, damit die Audio-Dateien für Asterisk optimiert sind.

Programmierung in Asterisk für den Freiton: Im ersten Schritt müssen wir in der musiconhold.conf eine neue Klasse (class) einrichten, die bei mir wie folgt aussieht:

; musiconhold.conf
[oldring]
mode=files
directory=/usr/share/asterisk/sounds/eigene/oldring/ ; in diesen Ordner ist die Audiodatei des Freitons zu kopieren.
sort=alpha

Der Name [oldring] wurde von mir zufällig gewählt. Im Beispiel ist diejenige Datei für den Freiton in den Pfad /usr/share/asterisk/sounds/eigene/oldring/ zu kopieren.

Nun müssen wir noch die Wahlregeln in der extensions.conf abändern:

; Auszug aus der extensions.conf Asterisk 16.2.1
;
; https://stackoverflow.com/questions/62997484/play-moh-instead-of-ringtone-in-asterisk
; Werden Nummern von 1000 bis 1999 angewählt, ist die Audiodatei in der Klasse [oldring]
; der musiconhold.conf als Freiton zu hören.
;
exten => _1XXX,1,NoOP(Nummerngasse von 1000 bis 1999)
        same => n,Dial(SIP/${EXTEN},60,rtTm(oldring))
        same => n,Ringing() ; nicht unbedingt notwendig
;

Nach jeder Änderung ist im CLI von Asterisk der Befehl “reload” auszuführen, damit die Änderungen übernommen werden. Getestet auf Asterisk 16.2.1.

Das ist im CLI von Asterisk zu sehen, wenn  die 1088 die 1073 anruft.

Wir können mehrere Klassen einrichten. Dann kann jede  Rufnummerngasse einen anderen Freiton erhalten. Der Anrufende erkennt dann am Freiton die Nummerngasse, welche er gewählt hat.

Aufrufen anderer Ruftöne und Hinweise: Besetztzeichen und Ansagen wie “Kein Anschluss unter dieser Nummer” lassen sich wie folgt in der extensions.conf eintragen:

; Hinweise für den Anrufer
; Aufrufen mit same => n,Gosub(hinweise,s,1)
[hinweise]
exten => s,1,NoOp("Hinweise für den Anrufer Keine Antwort, Nicht erreichbar, Ueberlastet, Besetzt")
  same => n,GotoIf($[${DIALSTATUS} = NOANSWER]?keineantwort)
  same => n,GotoIf($[${DIALSTATUS} = CHANUNAVAIL]?nichterreichbar)
  same => n,GotoIf($[${DIALSTATUS} = CONGESTION]?ueberlastet)
  same => n,GotoIf($[${DIALSTATUS} = BUSY]?besetzt)
  same => n,Hangup
  same => n(besetzt),Playback(/usr/share/asterisk/sounds/eigene/besetzt-lang)
  same => n,Playback(im-sorry)
  same => n,Playback(telephone-number)     
  same => n,Playback(is-in-use)     
  same => n,Playback(please-try-call-later)                  
  same => n,Hangup             
  same => n(ueberlastet),Playback(beep) ; Ueberlastung des Systems
  same => n,Playback(/usr/share/asterisk/sounds/eigene/fehler)
  same => n,Playback(beep)
  same => n,Playback(tt-somethingwrong)
  same => n,Hangup
  same => n(nichterreichbar),Playback(/usr/share/asterisk/sounds/eigene/nicht_erreichbar)
  same => n,Playback(/usr/share/asterisk/sounds/eigene/bestezt-alt)
  same => n,Playback(ss-noservice) ; Nummer nicht erreichbar
  same => n,Playback(please-try-call-later)
  same => n,Playback(beep)
  same => n,Hangup
  same => n(keineantwort),Playback(/usr/share/asterisk/sounds/eigene/hebt-nicht-ab)
  same => n,Wait(1)
  same => n,Playback(im-sorry)
  same => n,Playback(number-not-answering) ; niemand geht ran
  same => n,Wait(1)
  same => n,Playback(number-not-answering) ; niemand geht ran
  same => n,Wait(1)
  same => n,Playback(goodbye)
  same => n,Wait(1)
  same => n,Hangup

Die GoSub wird dann wie folgt aufgerufen:

exten => _1XXX,1,NoOP(Eingehender Anruf von 1000 bis 1999)
same => n,Playback(/usr/share/asterisk/sounds/eigene/knacksen) ; Geräusch defekter Kontakt 
                                                               ; vor dem Freiton
same => n,Dial(SIP/${EXTEN},60,rtTm(oldring)) ; in oldring ist der Freiton
same => n,Gosub(hinweise,s,1)                 ; Aufruf, falls besezt, Nummer nicht vorhanden u.s.w.
;

Eine IAX2-Verbindung zu einem anderen Asterisk-Server kann man wie folgt auf alt trimmen:

; IAX2-Verbindung zu Adi
exten => _8874X.,1,NoOp(IAX2 - Volker ruft Adis Server mit Vorwahl 8874 an.)
same => n,Playback(/usr/share/asterisk/sounds/eigene/rauschen-knacksen)
same => n,Dial(IAX2/outgoing-dl1hrc/${EXTEN:4})
same => n,Gosub(hinweise,s,1)
;
; Um für dem Anrufer einen Eindruck einer elektromechanischen Verbindungsaufbau
; zu vermitteln, wird vor dem eigentlichen Verbindungsaufbau
; eine kurze Audio-Datei mit Rauschen, Prasseln und Brummen abgespielt.


Geräusche bei der Impulswahl:
Der Freiton ist sofort nach dem Ende des Wählvorgangs zu hören. So war das früher nicht immer der Fall. Bei  elektromechanischen Vermittlungsanlagen dauerte der Wählvorgang durch die Impulswahl noch eine Weile und es waren die Schaltgeräusche der Impulswahl bei manchen Vermittlungsanlagen leise im Hörer zu vernehmen. Die Lösung könnte so aussehen:

; Die 1049 ist ein Wählscheibentelefon und erzeugt durch das Wählen 
; Geräusche der Impulse auf der Leitung
; 
exten => _1XXX,1,NoOP(Nummerngasse von 1000 bis 1999) 
same => n,GotoIf($[${CALLERID(num)} = 1049]?impulswahl:dtmf)
same => n(impulswahl),Playback(/usr/share/asterisk/sounds/eigene/impulswahl) ; Impulswahlgeräusche
same => n,Dial(SIP/${EXTEN},60,rtTm(oldring))   ; in oldring ist der Freiton
same => n,Gosub(hinweise,s,1) ; Aufruf, falls besezt, Nummer nicht vorhanden u.s.w.
same => n(dtmf),Playback(/usr/share/asterisk/sounds/eigene/knacksen) ; Geräusch defekter Kontakt 
                                                                     ; vor dem Freiton 
same => n,Dial(SIP/${EXTEN},60,rtTm(oldring))   ; in oldring ist der Freiton
same => n,Gosub(hinweise,s,1)                   ; Aufruf, falls besezt, Nummer nicht vorhanden u.s.w.

Falls in der Anlage mehrere Wählscheibentelefone vorhanden sind:

;  Impulswahl-Geräusche simulieren für die Wählscheibentelefone 1049, 1050 und 1002
exten => _1XXX,1,NoOP(Nummerngasse von 1000 bis 1999) 
same => n,GotoIf($[${CALLERID(num)} = 1049]?impulswahl:dtmfa)
same => n(dtmfa),NoOP(nicht 1049)
same => n,GotoIf($[${CALLERID(num)} = 1050]?impulswahl:dtmfb)
same => n(dtmfb),NoOP(nicht 1050)
same => n,GotoIf($[${CALLERID(num)} = 1002]?impulswahl:dtmf)
same => n(impulswahl),Playback(/usr/share/asterisk/sounds/eigene/impulswahl-kurz) ; Impulswahlgeräusche
same => n,Playback(/usr/share/asterisk/sounds/eigene/knacksen)
same => n,Dial(SIP/${EXTEN},60,rtTm(oldring))   ; in oldring ist der Freiton
same => n,Gosub(hinweise,s,1) ; Aufruf, falls besezt, Nummer nicht vorhanden u.s.w.
same => n(dtmf),Playback(/usr/share/asterisk/sounds/eigene/knacksen) ; defekter Kontakt vor dem Freiton 
same => n,Dial(SIP/${EXTEN},60,rtTm(oldring))   ; in oldring ist der Freiton
same => n,Gosub(hinweise,s,1)

Der Effekt ist wirklich der Hammer, wenn ich mit meinem alten W49 wähle. Nach Abschluss des Wahlvorgangs hört man für einige Sekunden das Klicken der Wähltöne, dann kommt ein kratzendes Umschaltunggeräusch und danach erfolgt der etwas unregelmäßige Freiton. Im Hintergrund ist immer das typische Rauschen der Vermittlungstellen zu hören.

Fazit: Bei dem Freiton ist es also nicht geblieben. Die Besetztzeichen und die Reaktion auf Nummern, die es nicht gibt, sind jetzt auch auf alt getrimmt. Außerdem sind noch diverse Schaltgeräusche schlechter Relaiskontakte hinzugekommen. Und dann noch die historischen Originalstimmen aus den Vermittlungsstellen.

Wenn von einem bestimmten Wählscheibentelefon angerufen wird, erkennt Asterisk dies und spielt vor dem Freizeichen eine kleine Audiodatei mit den Impulsen einer Impulswahl ab, wie dies bei manchen amerikanischen Fernämtern zu hören war.

Leider konnte ich den eigentlichen Gesprächen kein Rauschen hinterlegen. Bei Asterisk ist das offenbar nicht möglich. Vielleicht ist das auch gut so, denn die Sprachverständlichkeit soll ja nicht leiden.

Der Fachmann erkennt natürlich, dass es sich nicht um eine echte elektromechanische Vermittlungstechnik handelt. Die von mir verwendeten Geräusche sind aber authentisch. Zudem waren Ortsgespräche in Deutschland meistens nahezu störungsfrei. Auf jeden Fall geben diese alten Geräusche einer Telefonanlage für private Zwecke aus der Liebe zur alten Fernmeldetechnik etwas Lebendiges.

Auf einem Raspberry Pi lässt sich ein kompletter Telefonserver betreiben, der seinen Teilnehmern über Landesgrenzen hinweg kostenloses Telefonieren von unterwegs oder daheim ermöglicht.
Asterisk-Telefonserver auf einem Raspberry Pi – Installation, Konfiguration, Programmierung, SIP, IAX2, AGI-Skripte, Sicherheit und Tipps zum praktischen Betrieb – 2.11.2022: Diese Seite richtet sich an jene, welche einen Asterisk-Telefon-Server auf einem Raspberry Pi betreiben möchten und später ein kleines Netzwerk aus Asterisk-Servern planen, um ein eigenständiges Telefonnetz aufzubauen. Los geht es mit der Installation von Raspbian und Asterisk auf einem Raspberry Pi und dann nach Lust und Laune immer tiefer in die Programmierung von Asterisk. Die Themen werden laufend erweitert.

Selbstverständlich muss es nicht unbedingt ein Raspberry Pi sein. Andere Linux-Rechner gehen auch. – weiter