
MoWaS - Warnmeldungen
Voraussetzung für die Einbindung der MoWaS-Meldungen ist ein Relais, welches via SvxLink gesteuert wird. Diese Anleitung enthält keine Informationen zur grundlegenden Installation von SvxLink. Sie geht jedoch von den folgenden Voraussetzungen aus:
- svxlink läuft unter dem Benutzer svxlink
das Home Verzeichnis lautet /home/svxlink und wird in dieser Anleitung mit ~ abgekürzt
als Zielverzeichnis für den mowas-pushservice lautet /tmp/mowas
die Benachrichtigung vom MoWaS-System wird per (s)ftp empfangen
Wenn diese Voraussetzungen nicht gegeben sind, so muss diese Anleitung ggf. auf die lokalen Gegebenheiten angepasst werden.
1. Schritt: Vorbereiten des System-Service

1. Schritt: Vorbereiten des System-Service
Damit der Repeater die Nachrichten des MoWaS-Systems korrekt verarbeiten kann, benötigt dieser einige externe Scripte. Als erstes muss der Service erstellt werden, welcher auf neue Benachrichtigungen wartet.
/home/svxlink/.config/systemd/user/mowas-message.service
[Unit] Description=Inotify JSON File Watcher [Service] Type=simple ExecStartPre=/bin/mkdir -p /tmp/mowas ExecStart=/home/svxlink/bin/mowas-notifier Restart=always StandardOutput=journal StandardError=journal [Install] WantedBy=default.target
Als nächstes muss das im Service aufgerufene Script erstellt werden. Dieses überwacht das Eingangsverzeichnis auf neue Dateien und führt für diese dann bestimmte Aktionen durch.
~/bin/mowas-notifier
#!/bin/bash inotifywait -m -e create --format '%f' /tmp/mowas | while read FILE; do /home/svxlink/bin/json-processor "/tmp/mowas/$FILE" done
Um die Inhalte der Benachrichtigung auswerten zu können, wird noch ein Script benötigt, welches die empfangenen Daten auswertet.
~/bin/json-processor
#!/bin/bash epoch=$(date +%s) # Aktuelle Zeit in Sekunden seit dem 1. Januar 1970 if [[ "$1" == *.json ]]; then FILE="$1" logger "Verarbeite JSON-Datei: $FILE" ID=$(jq -r '.id' "$FILE") DATE=$(jq -r '.date' "$FILE") TITLE=$(jq -r '.title' "$FILE") TARGET=$(jq -r '.target[]' "$FILE") AUDIO_INTERNET=$(jq -r '.url.audio.internet[0]' "$FILE") #AUDIO_HAMNET=$(jq -r '.url.audio.hamnet[0]' "$FILE") #XML_INTERNET=$(jq -r '.url.xml.internet[0]' "$FILE") #XML_HAMNET=$(jq -r '.url.xml.hamnet[0]' "$FILE") # Ausgabe der extrahierten Daten logger "ID: $ID" logger "Datum: $DATE" logger "Titel: $TITLE" logger "Ziel: $TARGET" logger "Audio (Internet): $AUDIO_INTERNET" #logger "Audio (Hamnet): $AUDIO_HAMNET" #logger "XML (Internet): $XML_INTERNET" #logger "XML (Hamnet): $XML_HAMNET" # Audio-Dateien aus dem Internet herunterladen if [[ -n "$AUDIO_INTERNET" ]]; then logger "Lade Audio von Internet herunter: $AUDIO_INTERNET" wget -O /tmp/mowas/${epoch}.wav "$AUDIO_INTERNET" fi #for url in $AUDIO_INTERNET; do # logger "Lade Audio von Internet herunter: $url" # wget -O "$url" # oder wget "$url" #done # Optional: XML-Dateien herunterladen #for url in $XML_INTERNET; do # logger "Lade XML von Internet herunter: $url" # wget -O "$url" # oder wget "$url" #done rm "$FILE" sh -c "echo '6163912174${epoch}#' > /tmp/svxlink" fi
Im Anschluss müssen diese Scripte noch als ausführbar gekennzeichnet werden
$ chmod +x ~/bin/mowas-notifier $ chmod +x ~/bin/json-processor
2. Schritt: Vorbereiten von SvxLink

2. Schritt: Vorbereiten von SvxLink
Dem SvxLink-Eventhandler muss beigebracht werden, welche DTMF Kommandos ab sofort für MoWaS Meldungen blockiert werden. Hierfür wird unter /usr/share/svxlink/events.d/local/ die Logic.tcl, falls noch nicht vorhanden, mit folgendem Inhalt angelegt. Dieser sorgt dafür, dass alle DTMF Kommandos die mit „6163912174“ (mowas) beginnen ab sofort nicht mehr zur Verfügung stehen. Der Rest des DTMF Kommandos ist der Name des Files, welches gerade abgespielt werden soll. Dabei ist der Filename der epoch Zeitstempel (aktuelle Zeit in Sekunden seit dem 01.01.1970 00:00z).
/usr/share/svxlink/events.d/local/Logic.tcl
namespace eval { proc dtmf_cmd_received {cmd} { if {[string equal [string range $cmd 0 9] "6163912174"]} { playMsg "mowas" [string range $cmd 10 end] return 1 } return 0 } }
Jede aktive Logic muss nun noch so konfiguriert werden, dass DTMF die Kommandos über ein PTY entgegengenommen werden. Dies geschieht, indem das Kommentarzeichen der Zeile „DTMF_CTRL_PTY“ in /etc/svxlink/svxlink.conf entfernt wird. Als Pfad wird der passende Pfad aus dem Script json-processor (Zeile 47) eingestellt, z.B. „/tmp/svxlink“. Sollten mehrere Logics aktiv sein muss ein eindeutiger Pfad für jede Logic erstellt werden. Zusätzlich darf „DTMF_CTRL_PTY“ in keiner aktiven Logic auskommentiert sein. Zusätzlich muss dann das Script json-processor für jede Logic erweitert werden und es muss für jede RepeaterLogic noch das DTMF Kommando 6, zum Öffnen des Repeaters, eingestellt werden. Hierfür wird in /etc/svxlink/svxlink.conf die Zeile „OPEN_ON_DTMF“ um die Ziffer 6 erweitert und eventuell das vorhandene Kommentarzeichen am Anfang der Zeile entfernt.
Damit die runtergeladenen wav Files auch von svxlink gefunden und abgespielt werden können, muss das Download Verzeichnis noch mit dem sounds Verzeichnis von Verlinkt werden.
ln -s /tmp/mowas /usr/share/svxlink/sounds/de_DE/mowas
3. Schritt: Services aktivieren

3. Schritt: Services aktivieren
Abschließend muss der Serivce noch aktiviert werden. Dies geschieht als user svxlink mittels
systemctl –user enable mowas-message.service
Sollte dabei eine Fehlermeldung erscheinen musszusätzlich also root noch der folgende Befehl eingegeben werden. Andernfalls wird der mowas-message.serivce nicht ohne den login vom user svxlink gestartet, bzw. auch sofort nach dessen logout wieder beendet.
loginctl enable-linger svxlink