Ce script n’est plus actif sur le transpondeur, il a été remplacé par ce script

Les données opendata de météofrance étant difficilles à récupérer en automatique, nous utilisons l’API d’Opendatasoft qui les met à disposition au format JSON.

Les données sont récupées par l’intermédiaire d’une page web en php.

$json = file_get_contents("https://data.opendatasoft.com/api/records/1.0/search/?dataset=vigilance-meteorologique%40public&q=isere&facet=couleur");
$parsed_json = json_decode($json);
$nom_dept = $parsed_json->{'records'}[0]->{'fields'}->{'nom_dept'};
$couleur = $parsed_json->{'records'}[0]->{'fields'}->{'couleur'};
$datefin = $parsed_json->{'records'}[0]->{'fields'}->{'dateprevue'};
$risque = $parsed_json->{'records'}[0]->{'fields'}->{'risque_valeur0'};

Les données sont ensuite misent en forme avant d’être envoyées à la synthèse vocale. ex: Bulletin de vigilance météo pour le département: ISERE. Niveau de vigilance: Vert.

$msg_vigi = "Bulletin de vigilance météo pour le département: ".$nom_dept.".";

if (strlen($risque)>0) {
$msg_vigi = $msg_vigi."Alerte vigilance en cours. Niveau ".$couleur." pour ".$risque;
}
else {
$msg_vigi = $msg_vigi . " Niveau de vigilance: ".$couleur.".";
}

La synthèse vocale est réalisée avec l’API de VoiceRSS. VoiceRSS propose un API gratuit allant jusqu’a 350 requêtes par jour ainsi qu’un SDK pour PHP.

<?php
// include SDK VoiceRSS
require_once('/home/xxx/www/xxx/voicerss_tts.php');

$api='xxxxx clé API xxxxxx';

$tts = new VoiceRSS;
$voice = $tts->speech([
'key' => $api,
'hl' => 'fr-FR',
'v' => 'axel',
'src' => $msg_vigi, //Message à synthétiser
'r' => '-1',
'c' => 'wav',
'f' => '16khz_16bit_mono',
'ssml' => 'false',
'b64' => 'false'
]);

//stockage du résultat dans un fichier .wav file_put_contents('/home/xxx/www/xxx/vigi.wav',$voice['response']);

Pour diffuser les annonces de vigilance météo, nous utilisons la fonction d’annonces périodiques de svxlink.

Svxlink dispose de deux types d’annonces périodiques : short et long identification. Dans la config SPOTNIK (/etc/spotnick/svxlink.xxx), “long identification” est diffusée toutes les heures et “short identification” est difusée toutes les 15 minutes.

/etc/spotnik/svxlink.xxx

[SimplexLogic]
...
CALLSIGN=F1ZTH
SHORT_IDENT_INTERVAL=15
LONG_IDENT_INTERVAL=60
...

Dans le fichier Logic.tcl (/usr/share/svxlink/event.d/local/Logic.tcl) on remarque que les fonction qui diffuse les “short et long identification” proposent également de diffuser un message d’annonce.

proc send_short_ident {{hour -1} {minute -1}} {

...

# Play announcement file if enabled
if {$short_announce_enable} {
puts "Playing short announce"
if [file exist "$short_announce_file"] {
playFile "$short_announce_file"
playSilence 500
}
}

Il ne reste alors plus qu’a modifier les variables en tête de fichier:

#
# Short and long identification intervals. They are setup from config
# variables below.
#

...

variable short_voice_id_enable 1
variable short_cw_id_enable 0
variable short_announce_enable 1
variable short_announce_file "/home/f6kex/rcpa.wav"

variable long_voice_id_enable 1
variable long_cw_id_enable 0
variable long_announce_enable 1
variable long_announce_file "/home/f6kex/rcpa.wav"

Après redémarage de svxlink, le fichier rcpa.wav sera diffusé après chaque “short et long identification”.

Il ne reste plus qu’a créer un script pour récupérer et convertir au bon format les fichiers son

#!/bin/bash
#suppression du fichier rcpa.wav
rm rcpa.wav

#téléchargement des derniers fichiers
wget -q "https://f6kex.fr/f1zth/msg.wav" -O /home/f6kex/msg.wav
wget -q "https://f6kex.fr/f1zth/vigi.wav" -O /home/f6kex/vigi.wav

#si le fichier msg.wav existe et non vide
if [ -s /home/f6kex/msg.wav ]
then
# créer un fichiers wav en concaténant msg et vigi
sox /home/f6kex/silence.wav /home/f6kex/msg.wav /home/f6kex/silence.wav /home/f6kex/vigi.wav -r 16000 -b 16 /home/f6kex/tmp.wav

else
# créer un fichier son avec uniquement vigi
sox /home/f6kex/silence.wav i/home/f6kex/vigi.wav -r 16000 -b 16 /home/f6kex/tmp.wav

fi
# augmentation du niveau
sox /home/f6kex/tmp.wav -r 16000 -b 16 /home/f6kex/rcpa.wav vol 6db

Enfin on utilise des job CRON pour rafraichier la page de génération des messages de vigilance (toutes les 15 min) et pour télécharger les fichiers son (toutels les 10 min).

crontab -e

#update page vigi.php pour génération des messages de vigilance
*/15 * * * * /home/f6kex/update_vigi.sh

#download fichiers msg.wav et vigi.wav
*/10 * * * * /home/f6kex/msg.sh

La mise à jour des messages météo se fait avec le script update_vigi.sh qui recharge juste la page vigi.php

#!/bin/bash
wget -q "https://f6kex.fr/f1zth/vigi.php?admin=xxxxx" -O /home/f6kex/vigi.log

Et voila… Le transpondeur annonce maintenant automatiquement le niveau de vigilance météo toutes les 15min. Je ne me suis pas étendu sur le fichier msg.wav, il s’agit juste d’un fichier que l’on peut utiliser pour diffuser n’importe quelle annonce (info du radio club, annonce importante). Il suffit de le créer (enregistrement vocal ou synthèse vocale) et de le déposer au même endroit que vigi.wav

73,

Frédéric (F4IJC)