Dans ce tutoriel, nous allons analyser le signal radio envoyé par un capteur de température d’une station météo. Il s’agit en général de dispositifs relativement simples à analyser car ils transmettent les mesures sans chiffrement.
J’utilise pour cet exemple un capteur de ma station météo, dont la référence est TFA Dostmann 30.3120.90.
Ce type de dispositif radio émet généralement sur la bande de fréquences 433 MHz. Cette bande de fréquences est en effet très populaire pour de nombreuses applications à courte portée, principalement en raison de sa disponibilité dans de nombreux pays sans nécessiter de licence. Elle fait partie des bandes ISM (Industrial, Scientific, and Medical), souvent utilisée pour des communications domestiques (télécommandes, capteurs, babyphones, variateurs de lumière…) et industrielles.
Comme nous ne connaissons pas la fréquence précise d’émission du capteur, il est préférable de configurer le paramètre Input rate (fréquence d’échantillonnage de la source d’entrée) dans I/O Devices avec une valeur élevée (limité à 3.200.000 Hz sur mon dongle USB). En effet, la fréquence d’échantillonnage détermine la largeur de la bande de fréquence que votre SDR peut capturer à un moment donné, et une valeur de Input rate élevée permet donc un affichage d’une bande de fréquence plus large.
Il suffit donc de régler la fréquence 433.000.000 Hz dans Gqrx et d’attendre qu’un signal soit émit par ce capteur (mon capteur émet un signal toutes les minutes).
Vous devez ensuite configurer précisément la fréquence du filtre en déplaçant le curseur de la souris sur la zone centrale du spectre du signal reçu (zone rouge centrale dans l’historique du spectre). On voit par exemple dans la capture ci-dessous que mon capteur émet sur la fréquence 432,55 MHz.
Notez qu’une deuxième fréquence est affichée dans l’onglet Receiver Options. Il affiche le décalage de la fréquence du filtre par rapport au centre du spectre de fréquence (la fréquence matérielle du récepteur).
Le plus simple est de laisser ce décalage à zéro (0.000 kHz), mais lorsque vous sélectionnez une fréquence en déplaçant le curseur de la souris dans la zone d’affichage du spectre ou de l’historique du spectre, gqrx ne modifie pas la fréquence matérielle mais applique un décalage sur la fréquence du filtre.
Par exemple dans les deux images ci-dessous, la fréquence analysée est 432550,000 kHz, mais dans un cas le décalage est nul (fréquence matérielle = 432.550000 MHz ; décalage = 0.000 kHz) et dans l’autre un décalage est configuré (fréquence matérielle = 433.006200 MHz ; décalage = -456.200 kHz) .
Note : vous remarquerez la fâcheuse confusion dans l’utilisation des “.” et “,” sur les affichages du logiciel, liée à la traduction partielle de certains champs… 🙁
Le décodage du signal radio du capteur de température
Pour être en mesure de décoder ce signal, il existe plusieurs méthodes. Nous allons utiliser la plus simple, puisqu’il s’agit d’enregistrer le signal en mode Raw I/Q sous forme de fichier son (.wav) dans gqrx et de le visualiser ensuite avec l’outil Audacity.
Note : Le mode Raw I/Q permet d’enregistrer les données brutes du signal sous forme d’échantillons complexes I/Q (In-phase = la composante réelle du signal / Quadrature = la composante imaginaire du signal). Cela permet de conserver toutes les informations sur le signal, y compris l’amplitude, la phase et la fréquence. Il est ainsi possible de démoduler divers types de signaux après coup (AM, FM, SSB, etc.).
Il faut ensuite ouvrir le fichier son enregistré dans le logiciel Audacity et zoomer sur la partie correspondant au signal reçu.
On voit que le capteur de température émet 3 bursts radio, qui après analyse se révèlent être identiques.
En zoomant sur chaque burst, on voit qu’il sont composés de 44 pulsations. Il y a des pulsations courtes (2 fronts montants) et des pulsations plus longues (4 fronts montants).
La documentation trouvée sur internet(1) indique que le protocole de ce capteur est composé de trames de 44 bits, ce qui correspond à notre observation. Une pulsation correspondant donc à 1 bit d’une trame de ce protocole. La documentation indique également qu’une pulsation longue représente un 0 et une pulsation courte représente un 1. Nous pouvons donc convertir le signal radio en une trame composée de 44 chiffres binaires (bits).
Une autre documentation trouvée sur internet(2) détaille l’encodage de cette trame de 44 bits :
- 8 bits (blanc) : séquence de démarrage
- 4 bits (jaune) : type de mesure (0000 = thermo, 1110 = hygro)
- 7 bits (bleu) : adresse du capteur
- 1 bit (violet) : bit de parité
- 12 bits (vert) : mesure
- 8 bits (gris) : recopie des 8 premiers bits de la mesure
- 4 bits (rouge) : somme de contrôle (checksum)
Le décodage de la trame suivant ce schéma permet d’identifier facilement la mesure remontée par le capteur. Par exemple, dans la capture suivante, le capteur remonte une température (indiqué par le 3ième nibble qui est égal à 0000, correspondant au type de mesure thermo). La mesure de cette température est contenue dans les 3 nibbles indiqués en rouge.
La documentation du capteur indique que la mesure d’une température est codée en utilisant le principe du décimal codé binaire, dont la valeur correspond à la température en dixième de °C additionnés de 50°C (afin de pouvoir mesurer des températures négatives).
La mesure remontée par le capteur (691) correspond donc à une température de 19,1°C (691 dixième de °C = 69,1°C ; 69,1°C – 50°C = 19,1°C).
Programme rtl_433
Vous pouvez aussi utiliser l’excellent logiciel rtl_433, il décode automatiquement les données transmisses par les appareils radios émettant sur les bandes ISM.
Pour installer ce logiciel sous linux, rien de plus simple :
sudo apt update
sudo apt install rtl-433
Et pour le lancer :
rtl_433
Dans la capture d’écran ci-dessous rtl_433 décode les informations reçues par mon capteur (modèle LaCrosse-TX) et affiche directement la température 18,7°C.
⚠️ Considérations importantes : La surveillance de certaines transmissions peut être restreinte selon les lois locales. Émettre sans autorisation sur des fréquences non libres peut entraîner des sanctions pénales sévères, car cela peut perturber d’autres services (aviation, sécurité publique, etc.).
J’espère que cet article vous aura intéressé. N’hésitez pas à donner votre avis en cliquant sur les étoiles ci-dessous.