Parameter zur Laufzeit ändern

Es gibt eine relativ einfache Möglichkeit, TCL-Variablen zur Laufzeit von SvxLink zu ändern und diese innerhalb der TCL-Funktionen auszuwerten. Ein kleines Beispiel soll das Prinzip verdeutlichen.

Gefordert sei: Beim Connect einer Station via EchoLink soll an diese Station eine konfigurierbare Ansage erfolgen, die z.B. darüber informiert, dass z.B. DL1ABC nicht an der Station ist.

Erstellen Sie eine Datei (z.B. /tmp/user_params.tcl), die verschiedene Variablendefinitionen enthält:

set away 1;
set ansage abwesenheitsinformation;

Erstellen Sie eine Datei (/usr/share/svxlink/events.d/locale/el.tcl) nach dem locale-Prinzip.

namespace eval EchoLink {
  proc remote_greeting {} {
    variable away;
    variable ansage;
    source "/tmp/user_params.tcl";
    playSilence 1500;
    if {$away == 1} {
    playMsg $ansage;
  }
 }
}

Um die Parameter zu ändern, kann man einfach das file /tmp/user_params.tcl bearbeiten oder mein kleines Webinterface installieren (apache2, perl, perl::CGI sind notwendig). Im Beispiel wird für die eingehende EchoLink-Verbindung die Audiodatei abwesenheitsinformation.wav abgespielt, wenn away=1 gesetzt ist.

Einfaches SvxLink Webinterface mit Perl::CGI

Einfaches SvxLink Webinterface mit Perl::CGI

Auf diese Weise könnte man z.B. auch Wetterdaten aus einem File einlesen, welches periodisch mit den aktuellen Daten einer angeschlossenen Wetterstation gefüttert wird. Das File müsste dann in Form eines einfachen TCL-Files erstellt werden, d.h. in folgender Form (/tmp/wetterdaten.tcl):

set wind 100;
set temperatur 33;
set taupunkt 22;

…usw

Zur vollen Stunde könnte dieses File gesourced werden und neben der aktuellen Uhrzeit kann die aktuelle Temperatur mit ausgegeben werden, hier das Prinzip:

...
source "/tmp/wetterdaten.tcl";
playMsg "die_temperatur_betraegt";
playNumber $temperatur;
playMsg "grad_celsius";
...