MoWaS-Warnmeldungen - SvxLink Implementation

    MoWaS-Warnmeldungen - SvxLink Implementation

      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
          



      Diese Website nutzt ausschließlich technisch erforderliche Cookies. Wir benutzen keine Cookies, die eine Einwilligung erfordern würden. Weitere Informationen finden Sie in unserer Datenschutzerklärung. X