Rundspruch aus der Himbeere

Sven Freitag, DL3SVN

Ausgangssituation

Seit etwa einem Jahr bin ich für das Referat Öffentlichkeitsarbeit meines Distriktes zuständig und somit auch für den Rundspruch. Der Sachsen-Anhalt-Rundspruch wird bisher monatlich über Kurzwelle live gesprochen und über die Repeater DB0HAL auf dem Petersberg im Süden des Landes und über DB0HSB auf dem Brocken als abgespielte Audiodatei gesendet, jeden zweiten Montag im Monat um 19:15 Uhr Küchenzeit.

Um etwas weiter in die nördlichen Regionen im Distrikt vorzudringen, entschloss ich mich, den Rundspruch selbst auf einem der Repeater in der mittig gelegenen Landeshauptstadt Magdeburg zu senden. Ich habe mich für den analogen 70cm-Repeater DM0MGB entschieden, weil dieser auf meinem Hausdach ist. Potentielle Störer kann ich selbst mit 1 Watt "wegdrücken".

Da ich jedoch zur Sendezeit einem anderen Ehrenamt nachgehe und für die DARC-Website sowieso ein Audio-Rundspruch vorgesprochen werden muss, überlasse ich diese Aufgabe meinen Rechenknechten. Ein Raspberry Pi 3 läuft bereits 24/7 in meiner Wohnung, führt automatisierte Backups durch und logt die Luftfeuchte im Raum. Die Himbeere wird hoffentlich auch nicht krank und fährt wahrscheinlich auch nicht in den Urlaub.

Das folgende Projekt wurde in zwei Nächten realisiert. (Wer die Distribution der Rundsprüche über Echolink oder DMR anstrebt, braucht nur den letzten Absatz dieses Artikels lesen.)

Hardware

Als Sender wurde eine Wouxun verwendet, weil sie schlichtweg vorhanden ist. Bei einer Sendeleistung von 1 Watt wird die Büchse mit angeschlossener Fensterbrett-Groundplane höchstens handwarm.

Die Steuerung mittels VOX ist nicht möglich, da diese erst dann senden lässt, wenn eingangsseitig kein Signal anliegt. Da ich in Zukunft jedoch auch die Relaisausgabe nutzen mag, fällt die Idee flach. Es hätte vermutlich auch Probleme mit Sprechpausen gegeben.

Irreführend ist die unterschiedliche Bezeichnung der Pins und deren GPIO-Name softwareseitig. Ich habe den Hardware-Pin 11 genommen (weil GND gleich nebenan und Pin 7 schon für einen Luftfeuchtesensor verwendet wird), dieser hört auf den Namen GPIO 17.

Software

Pakete installieren

Auf meinem Raspberry läuft das Debian GNU/Linux-basierte Betriebssystem Raspbian. Für die Wiedergabe der Audiodateien habe ich das Paket sox nachinstalliert. Die weiterhin benötigten Pakete cron, wget, tar und python sind standardmäßig vorinstalliert.

Crontab erstellen

cron ist ein Deamon, welcher zu definierten Zeiten Befehle ausführen kann. Perfekt also für mein Vorhaben. Diesen nutze ich also, um ein Bash-Script jeden Montag um 19:15 Uhr Lokalzeit auszuführen. Man beachte, dass auf meinem System, wie es bei Servern üblich sein sollte, UTC als Systemzeit eingestellt ist. Dies lässt sich mit dem Befehl date +%Z festellen. Bei mir lautet die Ausgabe GMT. Weiterhin ist zu beachten, dass unixoide Systeme case-senstiv sind, also zwischen Groß- und Kleinschreibung unterscheiden.

Mit dem Befehl crontab -e lässt sich die Crontab des Users (hier senf) bearbeiten. Ich lasse mein Script aus Sicherheitsgründen unter Userrechten laufen.

Der nun erscheinende Editor wird vermutlich (und hoffentlich, denn ich kann mit nano nicht umgehen) vi sein, der wiefolgt bedient wird: Die Taste [i] welchselt in den Eingabemodus, [o] fügt eine leere Zeile ein und welchselt in den Eingabemodus, die Taste [Esc] beendet diesen, und ein nachfolgendes [:wq] speichert den Text ab und beendet den Editor.

In der Cronatb füge ich eine neue Zeile mit folgendem Inhalt ein:
10 17-18 * * 1 [[ $(TZ="Europe/Berlin" date +\%H) = "19" ]] && /home/senf/bin/rundspruch

An jedem Montag (DOW=1, day of week) wird also um 17:10 und 18:10 UTC geprüft, ob die Uhrzeit in Lokalzeit umgerechnet 19:15 Uhr entspricht. Wenn ja, wird das Script rundspruch im Verzeichnis /home/senf/bin ausgeführt.

Verzeichnisse erstellen

Mit dem Befehl mkdir ~/bin erstelle ich mir ein Verzeichnis für ausführbare Dateien, worin nun folgende drei Scripte gespeichert (bzw. mit wget heruntergeladen) und danach mit chmod a+x * als ausführbar (executable) markiert werden. Mit mkdir ~/rundspruch erstelle ich ein Verzeichnis, in welchem die Audiodateien später gespeichert werden.

GPIO steuern

Zwei der Scripte sind in Python geschrieben und sind für die Steuerung des GPIO-Ausgangs gedacht:

Code…

Rechte anpassen

Die Scripte greifen auf die Gerätedatei /dev/gpiomem zu, welche der Gruppe gpio gehört. Um als User darauf zugreifen zu dürfen, muss ich meinen User mit dem Befehl usermod -aG gpio senf (als root ausgeführt) dieser Gruppe hinzufügen. Nach einem erneuten Login bin ich Gruppenmitglied und darf die GPIO-Pins ansteuern. Sollte ich darüber hinaus einen anderen GPIO als 17 (an Pin 11 angeschlossen, Verwirrung pur) verwenden wollen, muss ich dies in diesen beiden Scripten ändern.

Rundspruch verlesen

Das dritte Script ist ein Bash-Script und dient dem Aufruf der GPIO-Scripte und der Wiedergabe der Audiodateien. Es ist weitestgehend selbsterklärend und lässt sich einfach modifizieren.

Variablen

DEVICE Audiogerät an, welches genutzt werden soll
Welche Audiogeräte verfügbar sind, verrät mir der Befehl aplay -l
(Mein Setup verwendet ALSA; um Pulseaudio mache ich zu meiner seelischen Gesundheit einen weiten Bogen).
VOLUME Wiedergabelautstärke
AUDIOPATH Verzeichnis mit den Audiodateien, absoluter Pfad
TARBALL URL mit Audio-Tarball, GPG-signiert (Dateiendung: .tar.gz.sig)

Audiodateien herunterladen

Das Script wird nun beim Aufruf zuerst ein Tarball mit den aktuellen Audiodateien herunterladen und dessen Integrität mit gpg überprüfen. (Der signierte Tarball wird bei der Erstellung des Rundspruchs erstellt und hochgeladen. Weil ich faul bin, macht dies eine Makefile für mich. Generell sei gesagt, dass dank LaTeX nur wenig Zeit für das Erstellen benötigt wird. Die frei gewordene Zeit lässt sich für redaktionelle Aufgaben und dem Einsprechen nutzen, was der Qualität des Rundspruchs entgegenkommt.)

Der Pubkey, mit dem der Tarball signiert wurde, muss vorher in den Keyring importiert werden. Wie GnuPG zu benutzen ist, also wie man einen Schlüssel erstellt, Dateien signiert, und den Pubkey exportiert und importiert, lässt sich hier nachlesen.

Ist das Tarball unversehrt, wird es in den $AUDIOPATH entpackt. Falls nicht, bleiben die bisherigen Audiodateien unverändert; lieber einen alten Rundspruch abspielen als einen kaputten oder verfälschten (Stichworte "fake news" oder "Parolen").

Rundspruch senden

Nun wird jenes Python-Script ausgeführt, welches den Sender einschaltet. Danach wird eine Audiodatei mit 2 Sekunden eines 1750 Hz-Tons abgespielt und der Sender wieder ausgeschaltet. Nach Abwarten der in $RPTTIME festgelegten Zeit in Sekunden (hier 8), in jener der Repeater seine Kennung sendet, wird das Intro abgespielt. Wird der Repeater mit CTCSS gesteuert, können selbstverständlich jene Zeilen auskommentiert werden. Das Intro enthält das Call der Rundspruchstation (hier DL0DSA) und eine Ankündigung, dass in 5 Minuten der Rundspruch beginnt. (Deswegen im Cronjob die Minutenangabe von 10)

Nach Abwarten der 5 Minuten wird der Rundspruch gesendet. Dabei werden, um die maximale Sendezeit nicht zu überschreiten, die Audiodateien aufgeteilt gesendet. In meinem Rundspruch sind dies drei Rubriken je 5 Minuten und einen Abspann mit etwa drei Minuten. Dazwischen wird der Sender kurz aus- und wieder eingeschaltet.

Ergebnis und Ausblick

Wenn ich will, kann ich meinen Rundspruch nun täglich senden lassen und dabei an der Elbe spazieren gehen, weil ich mich nicht selbst kümmern muss. Sollte es Probleme in der Sendung geben, könnte ich per ssh aus der Ferne eingreifen. Schlimmstenfalls, bei Fehlfunktion des GPIO, würde der Sender nach 10 Minuten seine Sendung selbst einstellen.

Eine Aufzeichnung einiger Minuten der Relaisausgabe nach dem Abspielen des Rundspruchs mit der Aufforderung, eine QSL zu hinterlassen, ist künftig angedacht. Die Aufzeichnung mit den Bestätigungen kann später manuell abgehört werden.

In Zukunft wäre ein Mobilgerät ideal, welches ich per CAT-Interface steuern könnte, um einen Frequenzwechsel durchzuführen. Somit könnte ich alle Relais in meiner Umgebung nacheinander "abklappern" oder den Rundspruch vorher via APRS ankündigen. Die Verwendung eines SDR hierfür ist natürlich auch möglich.

Außerdem habe ich vor, das gleiche Gewusel bei meinen Eltern in der Altmark aufzubauen, um auch die dortigen Repeater versorgen zu können.

Repeater, welche mit svxlink betrieben werden, haben auch ohne mein Gemuddel bereits die Möglichkeit, Rundsprüche automatisiert zu senden. Eine entsprechende Anleitung findet sich auf dessen Website. Das ist deutlich einfacher und ausfallsicherer, weil der zusätzliche Sender und Rechner entfallen.