Retour à l'accueil
   Kryss - Bobineur sur ferrites toroïdales

Réception sondes Météo lien QRZ.com lien eQSL.cc lien vers fil Mastodon lien vers page Youtube


iGate APRS : APRX et les scripts /sh
Par f4guk 4 décembre 2018 dans : APRS
 

APRX 2.8 et les scripts Linux sur RaspberryPi (sous Raspbian, mais la compatibilité avec d’autres OS est probable):

Pour mon iGate/Digipeater APRS, F4GUK-10, j’utilise le logiciel APRX, sur un Raspberry.

C’est avec cette configuration que je récupère les trames APRS du sud-est francilien et que je les route vers les serveur APRS mondiaux (APRS-IS) depuis 2013. Certaines de ces données sont utilisées et affichées par exemple sur aprs.fi. Elles permettent de géolocaliser ceux qui souhaitent l’être, qu’ils soient en station fixe ou mobile, mais également de diffuser des infos météo, s’échanger des messages courts (genre SMS), que l’expéditeur ou le destinataire soient à porté de radio ou pas. Le message « saute » alors de station en station, voire via le réseau internet pour trouver son destinataire.

L’APRS permet bien des choses encore, tel que l’envoi d’emails, d’alertes météo géolocalisées, d’échanges au sein d’un groupe, etc. Des fonctionnalités pourtant funs, mais quasiment pas utilisée chez nous. Nous en parlerons peut-être une autre fois…

Avec le logiciel APRX, même si ce n’est pas directement prévu, on peut aussi générer des balises ou envoyer des messages, bulletins (ou l’age du capitaine), à l’aide scripts externes.

Dans le fichier de configuration aprx.conf, il suffit d’avoir une section du genre:


<beacon>
#Balise generee par script aprxbeacon
beaconmode radio
cycle-size 60m
beacon exec /etc/init.d/aprxbeacon timeout 10
</beacon>



APRS - F4GUK-10
Cartographie APRS

Dans ce fichier, « Beacon exec <et le nom du script> » permet donc de lancer un script externe, et la première ligne que le script affichera sera capturée par APRX et envoyée sur l’air ou vers APRS-IS, ou les deux…

Ca, c’est le peu qui est dit dans la doc: mais la réalité est un poil plus complexe que ça !

Je voulais générer une balise qui envoie la température du Rasberry et une alerte en cas de surcharge mémoire / manque de place sur le disque.

Il faut savoir que le script DOIT absolument avoir comme interpréteur « #!/bin/sh ». Avec les interpréteurs /bin/bash ou /dash, le résultat du script n’est tout simplement pas capturé par APRX. J’ignore pourquoi.

Il faut donc rédiger le script avec la syntaxe spécifique de /bin/sh, Une syntaxe pas des moins exigeantes…

Par exemple, voici mon bout de code pour /bin/sh de Raspbian sur RasberryPi, donc :


#!/bin/sh
# nom: /etc/init.d/aprxbeacon
# Generation d’une balise pour APRX, avec position et temperature
# et alerte memoire / espace disque
# Version 1.00 pour shell /bin/sh
# F4GUK – 23 Juillet 2014

temp=$(/opt/vc/bin/vcgencmd measure_temp) # température du RasbPi
info="!4849.00N/00233.06E& RasPi "$temp # entête de trame APRS avec la position de ma station F4GUK-10 et texte

memoire=$(free -h) # Memoire libre en Human reading
disque=$(df -h) # Espace disque libre en Human reading

freemem=`echo $memoire | cut -c54-56`

if test $freemem \< "200"; then
   info=$info" – Free mem "`echo $memoire | cut -c54-57`
fi

pourcent=`echo $disque | cut -c66-67`

if test $pourcent \> "45"; then
   info=$info" – HD in use: "`echo $disque | cut -c66-68`
fi

echo $info

break

Notez bien qu’à la fin du code, si vous ne collez pas un « break », le texte du script ne sera pas récupéré !

Là encore, un mystère qui m’aura fait chercher un moment…

Notez qu’APRX peut aussi aller récupérer le contenu d’un fichier « texte » pour l’exploiter (beacon file /etc/aprx.beacon par exemple dans aprx.conf). Et là, plus de problème avec les interpréteurs /bin/sh, bin/bash ou même python… on fait ce qu’on veut, tant que le fichier final est cohérent avec la structure des trames APRS.

Mais pour ma part, je ne voulais pas écrire de fichier sur la sdcard (je l’économise !).

Récupérer « au vol » les infos d’un script me paraissait plus sympa… mais ce ne fut pas si facile.

Voilà, si ça peut aider quelqu’un…

 

Survol