Trennkommando

  • Hallo,

    ich versteh irgendwas nicht ganz richtig, oder ich mache einen Denkfehler. Ich hab eine Datei erstellt, mit der verhindert werden soll, daß wärend Rundsprüchen ein Trennkommando mit der Raute ausgeführt wird, no_disconnect.tcl. Diese Datei ist ja auf der Webseite so vorhanden und das hab ich auch so übernommen, nur den geheimen Befehl für sofortige Trennung hab ich umgeändert. Danach hab ich das Teil in das Verzeichnis events.d/local/ kopiert. Das Svxlink hab ich dann neu gestartet, aber ich stelle keine Funktion fest, daß das Trennen verhindert wird. Ich hab mich an die Auflistung für das Locale - Konzept gehalten, aber es funktioniert nicht so.

    1) /usr/share/svxlink/events.d/
    2) /usr/share/svxlink/events.d/local/
    3) /usr/share/svxlink/sounds/de_DE/events.d/
    4) /usr/share/svxlink/sounds/de_DE/events.d/local/
    5) /usr/share/svxlink/modules.d/

    Ich denke, daß die Datei noch irgendwo eingetragen werden muss, damit die geladen wird, oder lieg ich da falsch?
    Vielleicht kann mir ja jemand sagen ob und wo da noch was eingetragen werden muss.

    73 Manfred

  • Hallo,

    ich muss noch mal selbst antworten, damit der Beitrag nicht in der Versenkung verschwindet.

    Hat denn keiner eine Lösung für das Trennkommando? Heute war es wieder furchtbar, da lief ein tolles QSO mit England und irgend so ein De.. hat wieder Raute gedrückt und die Verbindung war weg, schade.

    Wenn einer eine Lösung weis, bitte melden dringend.

    Manfred
    DB4ZZ

  • Hallo,

    Du mußt eine TCL-Datei nicht explizit eintragen damit sie gefunden wird. Eigene Erweiterungen in Form von tcl's sollten im Verzeichnis
    /usr/share/svxlink/events.d/local/
    abgelegt werden.
    Wie diese Dateien heißen ist prinzipiell egal so lange sie auf .tcl enden, ABER: diese Dateien werden in alphabetischer Reihenfolge geladen/gesourced und wenn man mehrere Dateien hat, die die selben Prozeduren im gleichen Namespace überladen kann das eventuell zu ungewünschten Ergebnissen führen!

    Für das genannte Problem sollte die no-disconnect.tcl Datei im o.g. Verzeichnis abgelegt werden und fertig. Bei der Datei die Du mir per Mail zugesandt hattest war aber nicht nur das geheime Kommando geändert sondern auch der Namespace und das kann nicht funktionieren! Es muß die Prozedur dtmf_cmd_received{cmd} im Namespace Logic behandet werden, also vom Prinzip her muß die so anfangen:

    Code
    namespace eval Logic {
      proc dtmf_cmd_received{cmd} {
      ...
      ... usw.
      }
    }

    vy 73's de Adi, DL1HRC

  • Ok,
    hab ich so verstanden. Dann darf ich also nur eine Datei der beiden benutzen entweder die nodisconnect.tcl oder die stop.tcl. Weil ja beide den Aufruf:

    proc dtmf_cmd_received {cmd} {

    haben. Den Anfang der Datei für nodisconnect hab ich wieder geändert in Local und auch in das local - Verzeichnis gepackt. Ist es denn wichtig, welche Ziffernfolge das geheime Kommando hat, oder ist das egal?

    Mir ist da noch was in den Sinn gekommen. Ich bin zwar kein Programmierer, aber könnte man die Dateien noDisconnect.tcl und die stop.tcl in einer zusammenfassen? Es sind ja nur ein paar Variablen die gleich sind und somit würde die: proc dtmf_cmd_received {cmd} {
    nur einmal vorkommen und die Auswertung der DTMF - Töne wäre aber unterschiedlich. einmal für das Stop - Kommando und einmal mit dem No Disconnect.
    Ich weis nicht ob das so funktionieren würde, aber das kennst Du wahrscheinlich besser.

    73 Manfred

    Edited once, last by manfred (October 1, 2014 at 4:04 PM).

  • Quote

    hab ich so verstanden. Dann darf ich also nur eine Datei der beiden benutzen entweder die nodisconnect.tcl oder die stop.tcl. Weil ja beide den Aufruf:

    proc dtmf_cmd_received {cmd} {

    ja genau, Du solltest alles in eine tcl-Datei packen oder besser gesagt in eine einzelne Prozedur!
    Wenn Du die selben Prozedurdefinitionen in mehreren Dateien hast und diese Prozeduren einem Namespace zugehörig sind gewinnt der Aufruf, der als letzter getätigt wurde. Die anderen sind dann gegenstandslos da sie vom letzten "source" überschrieben werden.

    Quote

    haben. Den Anfang der Datei für nodisconnect hab ich wieder geändert in Local und auch in das local - Verzeichnis gepackt.


    Meinst Du "Logic"? Es muß zwingend dem Namespace "Logic" angehören, also mit

    Code
    namespace eval Logic {

    beginnen!!!!

    Quote

    Ist es denn wichtig, welche Ziffernfolge das geheime Kommando hat, oder ist das egal?

    Ist vollkommen egal, du solltest allerdings beachten, dass es Funktionen gibt, die ab 4 digits automatisch versuchen eine EchoLink-Verbindung aufzubauen und bei weniger als 3 Digits kommst Du möglicherweise mit Modulaufrufen in Konflikt.

    vy 73's de Adi, DL1HRC

  • Hi,

    hab grad meinen Beitrag noch mal geändert, weil mir was eingefallen war und Du warst so schnell mit der Antwort, daß sich meine Ergänzung schon erledigt hat. Das mit den 2 Digits ist bei uns kein Problem, weil wir alle Kommandos mit der 31 verhindert haben, war sonst zu viel Spielerei von nicht lizensierten, die ihren Spass daran hatten ständig irgendwelche Verbindungen aufzubauen und nicht wieder zu beenden.

    73

    Manfred

  • Hallo ich schon wieder mal.
    Hab alles so gemacht wie das beschrieben ist, aber ich bekomme, wenn ich nur die Datei no_disconnect.tcl starten will immer eine Fehlermeldung:
    Loading module "ModulePropagationMonitor" into logic "RepeaterLogic"
    Module Tcl v1.0.0 starting...
    /usr/share/svxlink/events.tcl in logic RepeaterLogic: can't read "last_el_stream": no such variable
    *** ERROR: Could not initialize Logic object "RepeaterLogic". Skipping...
    *** ERROR: No logics available. Bailing out...

    Also nur, wenn ich den Teil verwende, der das Trennkomando verhindern soll. Ich glaube Adi, Du hast da irgendwas mal geändert, in einer neueren Version, aber ich weis nicht genau wo man nachsehen kann welche Version wir auf dem Repeater laufen haben. Evnetuell auch mal ein Tip wie man das auf die aktuellste Version bringt. Wir haben nämlich hier das Problem, wie viele andere auch, denen passt Echolink nicht und die versuchen ständig die Verbindungen zu trennen. Wenn ich da bin kann ich das zwar mit dem anderen Teil des Moduls verhindern, wenn ich die DTMF Auswertung deaktiviere, aber das ist nicht so praktisch, weil ich ja nicht immer da bin. Kann man das no_disconnect.tcl irgendwie einbauen ohne das ganze System neu aufzusetzen, oder ist das problematisch.

    73 Manfred

  • Hi Manfred,

    ja, ich muß das nur mal wieder vorkramen. Das ist reines TCL, mußt deshalb kein System neu aufsetzen.

    vy 73s de Adi, DL1HRC

  • Hallo Adi,

    so sieht das bei mir aus, allerdings für die * sind Zahlen vorhanden:

    # Verhinderung von DTMF Kommandos
    # DTMF wird erst nach aktivierung wieder zugelassen

    namespace eval Logic {
    proc dtmf_cmd_received {cmd} {
    global active_module
    variable ignore_dtmf;
    global last_el_stream;
    global is_el_rx;
    variable now;
    variable diff;
    set cs $EchoLink::num_connected_stations;
    set now [clock seconds];

    puts "DTMF command received: $cmd";

    if {$cmd == "***"} {
    set ignore_dtmf 1;
    puts "Ignoriere DTMF-Kommandos!";
    return 1;
    }

    if {$ignore_dtmf} {
    if {$cmd == "***"} {
    set ignore_dtmf 0;
    puts "Freigabe DTMF-Kommandos!";
    return 1;
    } else {
    return 1;
    }
    }

    puts "Ausfuehrung DTMF-Kommando $cmd";

    # Verhinderung von Disconnect bei Rundsprüchen
    # Verbindung wird erst nach 10 Sekunden getrennt oder durch Eingabe von *79
    # Trennung erst nach 5 Sekunden oder durch geheimes Kommando "*79"
    set diff [expr {$last_el_stream + 10 - $now}];
    if {$cs > 0} {
    if {(($diff < 0) && !$is_el_rx) || $cmd == "*79"} {
    puts "disconnect OK";
    return 0;
    }
    return 1;
    } else {
    return 0;
    }
    }
    }
    # end of namespace Logic

    namespace eval EchoLink {
    proc is_receiving {isrec} {
    global last_el_stream;
    global is_el_rx;
    set is_el_rx $isrec;
    if {$isrec == 0} {
    set last_el_stream [clock seconds];
    }
    puts "is_receiving $isrec $is_el_rx $last_el_stream";
    }
    }
    # end of namespace EchoLink

    Das deaktivieren der DTMF - Auswertung funktioniert, aber das mit dem geheimen Trennkomando funktioniert nicht. Wenn ich nur das tcl - Script mit dem geheimen Trennkomando verwende bekomme ich immer die Fehlermeldung mit dem "last_el_stream". Woran das liegt versteh ich nicht.

    73 Manfred

  • Hallo zusammen,
    möchte das Thema noch einmal nach oben schieben.

    Bräuchte wohl mal Hilfe dabei, wie ich es unterbinden kann, das unsere Echolink Verbindung von zwei Einstiegen ständig mit der # getrennt wird.

    Im Moment habe auch Autoconnect aktiviert und verbindet dann sofort nach 30 sekunden wieder, ich möchte aber das trennen mal
    für einige Wochen auf eine andere Funktion legen z.B. 0815#.
    Wie hier im Forum schon besprochen.

    Danke und Gruß