Relais réservé pour les plans d'urgences

Lorsqu'un plan d'urgence est activé localement, les relais radioamateurs sont utilisés par les structures d'aide, tel que la FNRASEC en France. Cette page explique comment configurer un relais SvxLink pour ajouter un mode d'urgence. Une fois le mode activé, une balise d'information “le relais est actuellement réservé pour un plan d'urgence… laisser priorité aux services d'urgence. Merci pour votre compréhension”.

Les messages standards d'ouverture et fermeture de relais, ainsi que les balises standards et régulières ne sont plus diffusées.

Ajouter la déclaration de la variable globale emergency dans le namespace Logic:

###############################################################################
#
# Generic Logic event handlers
#
###############################################################################
#
# This is the namespace in which all functions and variables below will exist.
#
namespace eval Logic {
 
#
# A global variable for emergency mode
#
variable emergency 0;
#
# A variable used to store a timestamp for the last identification.
#
variable prev_ident 0;

Pour activer et désactiver le mode d'urgence par code DTMF, ajouter ce bout de code dans la focntion dtmf_cmd_received de Logic.tcl. Ici nous activons le mode urgence avec le code 281, et désactivons par 280. Il est conseillé de mettre un place un code “compliqué” à diffusion contrôlée. Vous pouvez également sécurisés ce code par le principe des codes sysop.

proc dtmf_cmd_received {cmd} {variable emergency;
if {$cmd == "281"} {
    set emergency 1
    puts "Emergency actived status: $emergency"
    playMsg "SVXCard/Emergency" "EmergencyMode"
    playMsg "repeater_commands" "activating"
    playSilence 500
    playMsg "SVXCard" "Emergency/EmergencyBeacon"
    return 1
  }
if {$cmd == "280"} {
    set emergency 0
    puts "Emergency desactived status: $emergency"
    playMsg "SVXCard/Emergency" "EmergencyMode"
    playMsg "repeater_commands" "deactivating"
    return 1
  }

Dans Logic.tcl, on ajoute également une fonction qui permet de transmettre l'information de l'état de l'activation du mode d'urgence à la logique relais (RepearLogic.tcl).

proc status_emergency {} {
variable emergency;
  return $emergency;
}

Lorsque le mode d'urgence est activée, nous ne voulons plus de l'annonce standard d'ouverture du relais. Le filtre se fait part un test logique de l'état d'activation du mode d'urgence, dans la fonction existante repeater_up de RepeaterLogic.tcl

if ![Logic::status_emergency] {
# Normal Execution 
 
}

Vous pouvez remplace le message d'accueil par la balise d'information en ajoutant les lignes suivantes ( à insérer entre # Normal Execution et } du code précédent ):

} else {
    playMsg "SVXCard" "Emergency/EmergencyBeacon";

Lorsque le relais est en mode d'urgence, nous allons diffuser régulièrement le message d'information. Pour exemple, ce message peut être “le relais est actuellement réservé pour un plan d'urgence… laisser priorité aux services d'urgence. Merci pour votre compréhension.”. Le fichier son au format wav sera positionné dans /usr/share/svxlink/sounds/fr_FR/SVXCard/Emergency/.

Nous allons ajouter le code suivant dans la fonction checkPeriodicIdentify du fichier Logic.tcl positionné entre la fin des déclaration de variable global logic_name; et le test logique if {$short_ident_interval == 0} { ….

proc checkPeriodicIdentify {} {
  variable prev_ident;
  variable short_ident_interval;
  variable long_ident_interval;
  variable min_time_between_ident;
  variable ident_only_after_tx;
  variable need_ident;
  global logic_name;
 
  if {[Logic::status_emergency]} {
    set now [clock seconds];
    set hour [clock format $now -format "%k"];
    regexp {([1-5]?\d)$} [clock format $now -format "%M"] -> minute;
 
    set emergency_ident_interval  2; #period of emergency beacon (in minutes)
    set emergency_ident_now \
              [expr {($hour * 60 + $minute) % $emergency_ident_interval == 0}];
    puts "$hour $now $minute $emergency_ident_now";
 
    if { $emergency_ident_now } {
      puts "$logic_name: Sending Emergency identification...";
      playMsg "SVXCard" "Emergency/EmergencyBeacon"
    }
 
  return;  #Following standard identification no more executed
  }
 
 
  if {$short_ident_interval == 0} {
    return;
  }

La ligne set $emergency_ident_interval 2; indique que la balise d'information du mode d'urgence sera envoyé toutes les deux minutes. La valeur est à personnaliser en fonction de votre besoin.