Informationsansagen zeitlich gesteuert mit cron

Vorbereitete Informationsansagen kann man relativ einfach kurz vor dem Abfallen des Relais aussenden — also zu einem Zeitpunkt, an dem noch jemand zuhört, aber eigentlich niemand mehr sprechen möchte. Zu diesem Zeitpunkt gibt es zumeist mindestens einen Zuhörer, der vorher das Relais vielleicht nur aufgetastet hatte.

Die Informationsansagen sollten nicht mehr als 20 s lang sein. Dazu werden die vorbereiteten WAV-Dateien in einem Verzeichnis unterhalb von
/usr/share/svxlink/sounds/de_DE abgelegt, z.B. in LocalAudio. Die Dateien sollten alle mit „Idle-“ beginnen, also zB. Idle-00-OV-Abend-Einladung.wav

Weitere Ansagen zur Benutzung des Relais, den vereinbarten Kurzwahlen, helfen Durchreisenden oder anderen noch nicht umfassend Informierten, sich schneller zurecht zu finden.

Mit der folgenden Prozedur unter /usr/share/svxlink/sounds/de_DE/events.d/local können die vorbereiteten Sounddateien jedes Mal durchgesehen und dann abgespielt werden.

#
# Abspielen von Info-wav bei Idle des Relais
#
# Entwurf DK5HH
#

namespace eval RepeaterLogic {

 #Counter which Idle-sound shall be the next
 variable idle_nr 0;
 variable last_idlesound 100000000;

 # minimum time between 2 idle sounds in seconds
 variable min_time_between_idlesound 300;

 proc repeater_idle {} {
  set filelist [get_idle_files];
  set idle_max [llength $filelist];
  set filelist [lsort -ascii $filelist];
  variable idle_nr;
  variable last_idlesound;
  variable min_time_between_idlesound;
  set now [clock seconds];
  # more than 300 s since last idlesound
  if {$now - $last_idlesound > $min_time_between_idlesound } {
    set last_idlesound $now;
    if { $idle_nr >= $idle_max } {
     set idle_nr 0;
    }
    set psound [lindex $filelist $idle_nr]
    set idle_nr [expr {$idle_nr + 1} ];
    puts "playing Idle-Sound $psound. $idle_nr\/$idle_max";
    playMsg "LocalAudio" $psound;
    playSilence 800;
  }
 }
 proc get_idle_files {} {
  variable dir "/usr/share/svxlink/sounds/de_DE/LocalAudio";
  variable ext "wav";
  variable files "";
  foreach file [glob -nocomplain -directory $dir Idle-*.wav] {
    set foundfile [file tail [file rootname $file]];
    lappend files $foundfile;
  }
  return $files;
 }

}
# end Namespace RepeaterLogic

 

Durch  cron kann man die Ansagen durch Umbenennen zu einem bestimmten Zeitpunkt aktivieren oder deaktivieren — also zum OV-Abend eine Woche vorher die Ansage aktivieren und während des OV-Abends wieder deaktivieren. Also: z.B. aus Idle-…. ein idle-…. machen. — Dann kann die Ansage „nächste Woche Dienstag ist OV-Abend, willst Du nicht auch kommen?“ einladend wirken.

Ein beliebiger User der Gruppe svxlink kann einen Eintrag mit crontab -e anlegen. Dabei wird das folgende kleine Shell-Skript idle-activate.sh verwendet:

#! /bin/bash
# wird mit cron aufgerufen zum Aktivieren / Dekativieren
# von Idle-Sounds
DIR=/usr/share/svxlink/sounds/de_DE/LocalAudio/
cd $DIR
ACTIVE=$1
if [ -z $ACTIVE ]
  then
    echo "usage: Parameter EIN|AUS \"Datei-pattern\""
  fi
#U_ACT=tr '[:lower:]' '[:upper:]' $ACTIVE
if [ $ACTIVE = "EIN" ]
  then
    for renfile in $(find ./ -name "$2" )
      do
        re1=$(basename $renfile)
        re2=${re1/idl/Idl}
        mv $re1  $re2
      done
fi
if [ $ACTIVE = "AUS" ]
  then
    for renfile in $(find ./ -name "$2" )
      do
        re1=$(basename $renfile)
        re2=${re1/Idl/idl}
        mv $re1  $re2
      done
fi

das kleine Shell-Hilfsskript idle-activate.sh legen wir im $HOME-Verzeichnis dieses Benutzers (zB dk5hh) ab und machen es mit

chmod 775 idle-activate.sh

ausführbar.

Als Eintrag in der crontab wird erforderlich (mit crontab -e aufrufen)

# normaler OV-Abend: erster Dienstag
#2 21 * * 2     [ $(date +"\%m") -ne $(date -d 7days +"\%m") ] && /home/dk5hh/idle-activate.sh EIN "*OV-abend*"
#2 21 * * 2     [ $(date +"\%m") -eq $(date -d 7days +"\%m") ] && /home/dk5hh/idle-activate.sh AUS "*OV-abend*"
# verschoben auf zweiten Dienstag OV-Abend
2 21 * * 2      [ `date +\%e` -gt 0 -a `date +\%e` -lt 8 ] && /home/dk5hh/idle-activate.sh EIN "*OV-abend*"
2 21 * * 2      [ `date +\%e` -gt 7 -a `date +\%e` -lt 15 ] && /home/dk5hh/idle-activate.sh AUS "*OV-abend*"

Die Einträge in der crontab werden jeweils (hier im Beispiel) um 21:02 an jedem Dienstag aufgerufen, wenn der Eintrag nicht mit einem „#“ als Kommentar ausgeschaltet werden — hier die ersten beiden Zeilen.
Der Aufruf des auszuführenden Programms ist eine logische Zusammensetzung mit „&&“. Ist der erste Teil logisch wahr, wird der zweite Teil ausgeführt.
Auch der erste Teil in [ … ] ist eine logische Verknüpfung mit „-a“ (and). Es wird das Kommando date verwendet, um den Tag des Monats vom aktuellen Datum zu finden und zu verknüpfen.

Für den OV-Abend am ersten Dienstag des Monats ist es besonders einfach. Wir prüfen einfach, ob der Monat von heutigen Dienstag und der Monat des nächsten Dienstags in 7 Tagen den gleichen Monat haben — wenn nicht, dann schalten wir den Idle-Sound aktiv.

Haben wir sehr viele allgemeine Informationsansagen die nicht zeitabhängig sind und wollen wir einzelne Ansagen häufiger abspielen, legen wir einfach einen Link an auf die Sounddatei Idle-00-OV-abend-Einladung.wav:

ln -s Idle-00-OV-Abend-Einladung.wav Idle-10-OV-Abend-link.wav

Mehrere Links mit unterschiedliche Zahlen streuen die Ansage zwischen die anderen. Die Liste der abzuspielenden wav-Dateien wird in der oben gezeigten TCL-Prozedur jeweils neu alphabetisch geordnet.

Anmerkung: Aus unserer Erfahrung scheint es gut, für die Aufbereitung der Ansagen ein TTS-System (Text-to Speech) mit einer angenehmen Stimme zu verwenden.

One Response to Informationsansagen zeitlich gesteuert mit cron

  1. Pingback: Informationsansagen zeitlich gesteuert mit cron | SvxLink.de

Comments are closed.