Récepteur connecté, autonome et automatique de radiosondes [MAJ2]

Je vous propose aujourd’hui un tuto d’une activité ou j’ai pris beaucoup de plaisir. Il s’agit de la réalisation d’un récepteur de radiosondes, autonome (qui ne bloque pas un pc), automatique (qui scanne automatiquement les fréquences, et décode automatiquement les radiosondes) et connecté (relié aux réseaux mondiaux de radiosonde et aprs). Je recommande d’avoir un petit peu d’expérience sur Linux pour moins « chercher » en cas d’anomalie.

Voici la liste des ingrédients pour réussir la recette :

  • Un mini ordinateur Orange Pi zero 512Mo (env 15€)
  • Une clef rtl-sdr blindée avec moins de 1ppm de stabilité (meilleurs résultats : env 20€)
  • une carte sd de 8go ou plus (4 à 10€)
  • un chargeur de téléphone usb de 5V 1,5A (pour etre tranquille, j’ai eu des plantages avec 1A) (env 5€)
  • un cable de charge usb vers micro usb (env 2€)
  • une connexion internet par wifi ou ethernet (mieux)

J’ai expérimenté le système sur deux plateformes de nano-ordinateurs : Raspberry pi et Orange pi. Le orange pi a le mérite de générer moins de qrm, mais ce tuto fonctionnera très bien avec un raspberry pi.

1ère étape : Récupérer l’image pour la carte SD. Pour ce faire, il faut télécharger la version raspbian dédiée au Orange pi via ce lien : Cliquez ici Le fichier est compressé. Il faut donc le décompresser avec un utilitaire comme winrar ou 7zip pour obtenir le fichier .img que l’on va utiliser pour generer la carte SD.

2ème étape : Écrire la carte SD. Nous allons le réaliser avec l’utilitaire Win32disk imager. Télécharger la dernière version et la lancer. Choisir le fichier .IMG correspondant à Raspbian que vous venez de télécharger, et la lettre du lecteur correspondant à la carte micro sd. Cliquer sur le bouton Ecrire.

3ème étape : Lancer le Orange pi. Inserer la carte SD dans son emplacement sur la carte Orange Pi. Connecter un cable ethernet au connecteur RJ45. brancher le cable d’alimentation (chargeur) sur la prise micro usb et le chargeur sur la prise de courant. L’Orange pi doit s’allumer (voyant rouge sur le circuit imprimé, et voyants réseau au niveau de la RJ45).
Vous pouvez récuperer l’adresse ip attribuée par le DHCP de votre Box/routeur en utilisant par exemple l’utilitaire Angry IP Scanner. Vous repèrerez l’adresse ip car le « hostname » de l’orange-pi est « OrangePi »

4ème étape : Se connecter et initialiser l’Orange Pi. Il faut utiliser l’utilitaire Putty. Il permet de se connecter à l’Orange Pi en mode terminal. Une fois la fenetre ouverte, saisir l’adresse ip de l’orange pi et cliquer sur Open. Le login par défaut est « root », et le mot de passe « orangepi » (sans les guillemets).
Une fois connecté, il faut réaliser l’initialisation de Raspbian, en étendant le système de fichier puis en mettant à jour l’os :

sudo fs_resize or sudo /usr/local/bin/fs_resize

sudo apt-get update

sudo apt-get dist-upgrade

sudo apt-get upgrade

5ème étape : connecter la clef SDR et installer le composant RTL-SDR. La clef SDR se branche dans la prise usb à coté du connecteur RJ45. Pour limiter les rayonnements parasites liés à l’Orange pi, vous pouvez utiliser une rallonge usb.

Pour vérifier la détection de la clef sdr, lancez la commande « lsusb » :

root@OrangePI:~# lsusb
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@OrangePI:~#

Il faut ensuite désactiver les pilotes linux de la clef sdr, pour pouvoir l’adresser directement, sans générer de conflits : editer le fichier /etc/modprobe.d/rtlsdr-blacklist.conf et y ajouter les lignes suivantes : /etc/modprobe.d/rtlsdr-blacklist.conf

blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830
blacklist dvb_usb_rtl2832u
blacklist dvb_usb_v2
blacklist dvb_core

Lancons l’installation du composant RTL-SDR qui va réaliser le controle de la clef sdr : « apt-get install rtl-sdr »

Pour verifier que le composant est bien installé et que le dialogue se fait avec la clef sdr, lancer la commande « rtl_test ». Vous devez obtenir quelque chose ressemblant à :

root@OrangePI:~# rtl_test
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
Sampling at 2048000 S/s.

Info: This tool will continuously read from the device, and report if
samples get lost. If you observe no further output, everything is fine.

Reading samples in async mode…

Faire <Ctrl><C> pour quitter.

6ème étape : Installer le logiciel de décodage : Radiosonde AutoRX. Ce logiciel est développé par une équipe australienne très dynamique. Bravo à eux pour cette réalisation.
Ce programme étant en constante évolution, l’installation sera plus « manuelle ». En effet, il n’existe pas de package disponible pour une installation automatisée.

Dans un premier temps, il faut ajouter les composants nécessaires à son fonctionnement :

apt-get install python-numpy python-setuptools python-crcmod python-requests python-dateutil python-pip sox git build-essential cmake usbutils libusb-1.0-0-dev rng-tools libsamplerate-dev

pip install flask flask-socketio

A partir d’ici, les choses sont un peu plus compliquées. En effet, il faut télécharger le logiciel et le compiler. En exécutant cette suite de commande, cela doit installer et préconfigurer directement le logiciel :

git clone https://github.com/projecthorus/radiosonde_auto_rx.git
cd radiosonde_auto_rx/auto_rx
./build.sh
cp station.cfg.example station.cfg

Si cela a fonctionné, vous pouvez démarrer le logiciel de décodage :

python auto_rx.py

Et obtenir :

 

2019-10-21 23:12:18,753 INFO:Reading configuration file…
2019-10-21 23:12:20,611 INFO:Config – Tested SDR #0 OK
2019-10-21 23:12:20,612 INFO:Telemetry Logger – Started Telemetry Logger Thread.
2019-10-21 23:12:20,621 INFO:APRS-IS – APRS Uploader Started.
2019-10-21 23:12:20,622 INFO:OziMux – Started OziMux / Payload Summary Exporter
2019-10-21 23:12:20,622 INFO:SDR #0 has been allocated to Scanner.
2019-10-21 23:12:22,480 INFO:Scanner #0 – Starting Scanner Thread
2019-10-21 23:12:22,486 INFO:Scanner #0 – Running frequency scan.
2019-10-21 23:12:24,883 INFO:Habitat – Listener information uploaded.

Faire <Ctrl><C> pour sortir

7ème étape : parametrer le logiciel pour votre utilisation. Le fichier contenant les parametres s’appelle « station.cfg ». L’éditer avec nano ou vi. Voici les éléments essentiels :

ppm = 0 # Rattrapage du calage de la clef
gain = -1 # Gain de la clef, preferer une valeur fixe et maximale determinée avec rtl_test
min_freq = 400.05 # Debut de la bande à scanner
max_freq = 406.0 # Fin de la bande à scanner
rx_timeout = 300 # délais entre la dernière donnée décodée et le redemarrage du scanning
whitelist = [] # scanne uniquement ces fréquences
blacklist = [403.2, 404.996] # Exclue systematiquement ces fréquences du scanning
greylist = [402.0, 402.4, 405.0, 404.0] # Fréquences à scanner en priorité
station_lat = 45.9039 # Lattitude du recepteur (utilisé pour Habitat et aprs)
station_lon = -1.283 # Longitude du recepteur (utilisé pour Habitat et aprs)
station_alt = 10.0 # Altitude du recepteur (utilisé pour Habitat et aprs)
habitat_enabled = True
uploader_callsign = F1ZGE # Indicatif utilisé pour transmettre les données à Habitat
upload_listener_position = True # Valide l’envoi d’info au serveur Habitat (False invalide)
upload_rate = 30 # Délais entre chaque envoi (ne pas descendre en dessous de 30s)
aprs_enabled = False # Envoi vers un serveur aprs (true = validé)
aprs_user = N0CALL # Utilisateur aprs (voir APRS IS)
aprs_pass = 00000 # Mot de passe aprs (voir APRS IS)
upload_rate = 30 # Délai entre chaque envoi vers l’aprs
email_enabled = True # envoi d’alerte par email à chaque detection
smtp_server = ssl0.ovh.net # serveur smtp
smtp_port = 587 # port smtp
smtp_authentication = TLS # type d’authentification
smtp_login = f1zge # user smtp
smtp_password = zge17 #mdp smtp
from = f1zge-sondehub@qrq.fr # adresse expediteur
to = f1ujt@orange.fr # adresse destinataire
web_port = 80 # port du serveur web local (5000 par défaut)
archive_age = 4000 # durée en minutes de conservation des données sur le serveur web
snr_threshold = 10 # niveau en db minimum pour détecter un signal (par rapport au bruit)
max_peaks = 99 # nombre maximum de « pics » détectés
rs41_experimental = True # meilleur décodage des rs41
rs92_experimental = True # meilleur décodage des rs92
dfm_experimental = True # meilleur décodage des dfm
m10_experimental = True # meilleur décodage des m10
lms6-400_experimental = True # meilleur décodage des lms6


8ème étape : tester le serveur web.

http://<adresseip>/

9ème étape : vérifier la présence de votre station sur le serveur Habitat :

https://sondehub.org/


Mise à jour vers la dernière version de « Radiosonde Auto_RX »

1ère étape : Se connecter a votre systeme où Radiosonde Auto_RX est installé, se placer dans le répertoire « radiosonde_auto_rx »

cd ~/radiosonde_auto_rx

Lancer la commande :

git clone https://github.com/projecthorus/radiosonde_auto_rx.git

2ème étape :Recompiler l’application

cd ~/radiosonde_auto_rx/auto_rx
./build.sh

3ème étape : controler les évolutions du fichier de config et  mettre à jour votre fichier station.cfg

diff station.cfg station.cfg.example

nano station.cfg    ou    vi station.cfg

4ème étape : lancer votre application

python auto_rx.py

____________________________________

Créer un service « auto_rx » pour démarer l’application automatiquement  (en cours de rédaction)

En cas de coupure de courant, cela permet à auto_rx de redemarrer de manière automatique et systemétique.

Etape 1 : Dupliquer le fichier « auto_rx.service » dans le dossier systeme des « services »

cp /root/radiosonde_auto_rx/auto_rx/auto_rx.service /etc/systemd/system/

Etape 2 : Modifier correctement le fichier auto_rx.service dupliqué (avec l’éditeur de votre choix)  :

vi /etc/systemd/system/auto_rx.service

Le fichier doit ressembler à ceci :

[Unit]
Description=auto_rx
After=syslog.target

[Service]
ExecStart=/usr/bin/python /root/radiosonde_auto_rx/auto_rx/auto_rx.py -t 0
Restart=always
RestartSec=120
WorkingDirectory=/root/radiosonde_auto_rx/auto_rx/
User=root
SyslogIdentifier=auto_rx

[Install]
WantedBy=multi-user.target

En gras : le chemin vers le script .py et l’utilisateur qui va executer le programme (root chez nous).

3e étape : déclarer le service

systemctl enable auto_rx.service

4e étape : démarrer le service :

systemctl start auto_rx.service  ou  service auto_rx start

Arreter le service :

systemctl start auto_rx.service  ou  service auto_rx start

____________________________________

Pour reconnaitre plus facilement votre « recepteur » sur votre réseau internet : installer Samba (client réseau pour les réseaux microsoft)

apt-get install samba

Editer le nom du serveur (avec l’éditeur de votre choix) et remplacer le nom par défaut par celui de votre choix (max 15 caractères).

vi /etc/hostname

Rebooter

reboot

Consulter le log du service :

journalctl -u auto_rx.service -f -n

73 Sylvain F1UJT

2 réflexions sur « Récepteur connecté, autonome et automatique de radiosondes [MAJ2] »

  1. PLATELLE pATRICE

    Bonjour,
    J’ai tenté de rentrer les données dans station.cfg selon ton tuto mais je n’apparaît pas sur le habhub?
    Quelques idées?
    73
    Patrice F1BSR 02

    Répondre
    1. f1ujt Auteur de l’article

      Bonsoir Patrice,
      Probablement un problème sur la syntaxe des coordonnées géographiques. Il faut le même nombre de décimales que dans le tuto.
      73
      Sylvain

      Répondre

Laisser un commentaire