Comment bien paramétrer et utiliser l’extension « Interceptor » avec Weewx janvier 8, 2021 Les temps derniers je m’étais intéressé a la récupération des données de ma station météo Froggit WH-6000 par les ondes radio. Après quelques essais, le captage des données se faisait sur les capteurs (donc à l’extérieur) de la station. Ces réceptions par onde radio (868Mhz environ) fonctionnent aléatoirement. En effet divers facteurs rentrent en ligne de compte : Utilisation d’une clef TNT USB avec un chipset spécial Eloignement de la station Antenne spéciale de 868Mhz Perturbation radio /épaisseur des murs etc … De plus la captation est aléatoire et il manque des mesures comme par exemple la pression atmosphérique (cette valeur venant de la base et non de la station). il faut donc trouver une solution… Actuellement la base est connectée en Wifi sur mon réseau local et upload les data directement sur Weather Underground via un paramétrage de compte : ca, ça fonctionne ! D’ailleurs c’est comme ca qu’à l’inverse je récupère les datas uploadées sur le site de WU pour les récupérer a travers un utilitaire de Weewx , l’utilitaire wee_import. Et ça aussi ça fonctionne mais avec des limitations. Actuellement je l’exécute toutes les 24 heures via un cron : je récupère la date du jour (-1 journée pour avoir la veille) et je lance une importation depuis Weather Undeground, ensuite je génère les rapports de template que j’uploade en rsync sur ce site. Ma station fonctionne de cette façon actuellement mais avec 1 jour de décallage (et sans weewx) Mais je cherche une solution autonome, je ne veux pas être dépendant de Weather Undeground. l’extension Interceptor : je l’ai testé ! Premier pré-requis : posséder un raspberry Pi avec du réseau LAN et WIFI Installer un Weewx Tout est expliqué ici (en anglais) : https://github.com/matthewwall/weewx-interceptor Un second pré-requis IMPORTANT : le sniffer de réseau. Afin de sniffer le réseau il va falloir installer un utilitaire sudo pip install pypcap ou sudo apt-get install libcap-dev ou sudo apt-get install python-libpcap Installation de l’extension après avoir installé libpcap Télécharger la dernière version de l’extension wget -O weewx-interceptor.zip https://github.com/matthewwall/weewx-interceptor/archive/master.zip Installer l’extension sudo wee_extension --install weewx-interceptor.zip Configurer le driver wee_config --reconfigure --driver=user.interceptor --no-prompt Paramétrage de Interceptor dans Weewx : extrait du fichier weewx.conf [Interceptor] # This section is for the network traffic interceptor driver. # The driver to use: driver = user.interceptor # wu-client - any hardware that uses the weather underground protocol device_type = wu-client port = 80 address = 192.168.0.32 mode = sniff iface = wlan0 Extrait de la doc (en ligne) : =============================================================================== Example: sniff mode for any WU client This example assumes two network interfaces on the computer running weewx. 1) Plug the computer into the local network using the first interface (eth0). Plug the device into the second interface (eth1). Bridge the two network interfaces. If you run any web services on the computer, configure them to listen on interface eth0, not eth1. 2) Set parameters in the weewx configuration file. The device has IP address of X.X.X.X [Interceptor] driver = user.interceptor device_type = wu-client mode = sniff iface = eth1 pcap_filter = src X.X.X.X and dst port 80 =============================================================================== l’adresse 192.168.0.32 est l’adresse de ma carte réseau WIFI sur mon Raspberry. Paramétrage de la base de la station une fois que le sniffer est en place que vous avez installé l’extension, vous allez devoir reprogrammer la base de la station de façon complète. 1- Appuyer 10 secondes sur le bouton Wifi de la base ( la led clignote en vert) La station va passer en mode AP A l’aide d’un smartphone, il faut scanner le réseau WIFI et se connecter au réseau WIFI ouvert : PWSXXXX Saisir dans un navigateur sur votre smartphone l’adresse suivante : http://192.168.1.1 (adresse ip de la base provisoire) Saisir le réseau wifi local de votre box : Saisir le serveur : mettre l’adresse ip de votre carte réseau WLAN à la place de rtupdate.wunderground.com (mettre des valeurs dans l’ID de la station et dans le mot de passe , mais ca ne servira pas) Renseigner le serveur de temps : Renseigner votre locator (coordonnées lat /long) Et sauvegarder … Si tout se passe bien , la petite led clignote bleue quelques instants sur la base puis reste fixe bleue , les paramètres ont bien été enregistrés. Désormais vous pouvez utilisez la solution weewx avec l’extention. Les tests effectués Pour le test dans le fichier weewx.conf passer la valeur de debug à 1 Démarrer le service weewx : #service weewx start En une ligne de commande, vous pouvez tester si l’interception fonctionne (Attention j’ai quelque peu modifié la ligne de commande python => python2 et le chemin de l’extension, vous noterez que nous allons surveiller l’adresse ip 192.168.0.36 sur le port 80 ( adresse de la base de la station) PYTHONPATH=/usr/share/weewx python2 /usr/share/weewx/user/interceptor.py --device=observer --mode=sniff --iface=wlan0 --filter="src 192.168.0.36 and dst port 80" Et voici les logs ( /var/log/syslog) : Jan 7 13:42:00 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter rtfreq=5 Jan 7 13:42:00 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter action=updateraww Jan 7 13:42:00 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter PASSWORD=XXXXXXXX Jan 7 13:42:00 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter ID=XXXXX Jan 7 13:42:00 Rpi2 weewx[28578] DEBUG user.interceptor: raw packet: {'wind_speed': 0.0, 'humidity_in': 49.0, 'temperature_in': 66.3, 'barometer': 30.68, 'wind_gust': 0.0, 'dewpoint': 35.2, 'humidity_out': 85.0, 'uv': 1.3, 'rain': 0.0, 'dateTime': 1610023320, 'temperature_out': 39.3, 'wind_dir': 135.0, 'rain_total': 0.0, 'usUnits': 1} Jan 7 13:42:00 Rpi2 weewx[28578] DEBUG user.interceptor: mapped packet: {'barometer': 30.68, 'dewpoint': 35.2, 'outHumidity': 85.0, 'UV': 1.3, 'rain': 0.0, 'dateTime': 1610023320, 'windDir': 135.0, 'outTemp': 39.3, 'windSpeed': 0.0, 'inHumidity': 49.0, 'inTemp': 66.3, 'windGust': 0.0, 'usUnits': 1} Jan 7 13:42:10 Rpi2 weewx[28578] DEBUG user.interceptor: empty queue Jan 7 13:42:12 Rpi2 weewx[28578] DEBUG user.interceptor: GET: ID=XXXXX&PASSWORD=XXXX&action=updateraww&realtime=1&rtfreq=5&dateutc=now&baromin=30.68&tempf=39.3&humidity=85&windspeedmph=0&windgustmph=0&winddir=135&dewptf=35.2&rainin=0&dailyrainin=0&UV=1.3&indoortempf=66.3&indoorhumidity=49 Jan 7 13:42:12 Rpi2 weewx[28578] DEBUG user.interceptor: raw data: ID=XXXXX&PASSWORD=YYYYY&action=updateraww&realtime=1&rtfreq=5&dateutc=now&baromin=30.68&tempf=39.3&humidity=85&windspeedmph=0&windgustmph=0&winddir=135&dewptf=35.2&rainin=0&dailyrainin=0&UV=1.3&indoortempf=66.3&indoorhumidity=49 Jan 7 13:42:12 Rpi2 weewx[28578] DEBUG user.interceptor: using rain_total 0.0 from dailyrainin Jan 7 13:42:12 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter realtime=1 Jan 7 13:42:12 Rpi2 weewx[28578] INFO user.interceptor: unrecognized parameter rainin=0 Jan 7 13:42:12 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter rtfreq=5 Jan 7 13:42:12 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter action=updateraww Jan 7 13:42:12 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter PASSWORD=XXXXXXXX Jan 7 13:42:12 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter ID=XXXXX Jan 7 13:42:12 Rpi2 weewx[28578] DEBUG user.interceptor: raw packet: {'wind_speed': 0.0, 'humidity_in': 49.0, 'temperature_in': 66.3, 'barometer': 30.68, 'wind_gust': 0.0, 'dewpoint': 35.2, 'humidity_out': 85.0, 'uv': 1.3, 'rain': 0.0, 'dateTime': 1610023333, 'temperature_out': 39.3, 'wind_dir': 135.0, 'rain_total': 0.0, 'usUnits': 1} Jan 7 13:42:12 Rpi2 weewx[28578] DEBUG user.interceptor: mapped packet: {'barometer': 30.68, 'dewpoint': 35.2, 'outHumidity': 85.0, 'UV': 1.3, 'rain': 0.0, 'dateTime': 1610023333, 'windDir': 135.0, 'outTemp': 39.3, 'windSpeed': 0.0, 'inHumidity': 49.0, 'inTemp': 66.3, 'windGust': 0.0, 'usUnits': 1} Jan 7 13:42:22 Rpi2 weewx[28578] DEBUG user.interceptor: empty queue Jan 7 13:42:25 Rpi2 weewx[28578] DEBUG user.interceptor: GET: ID=XXXXX&PASSWORD=XXXX&action=updateraww&realtime=1&rtfreq=5&dateutc=now&baromin=30.68&tempf=39.3&humidity=85&windspeedmph=0.2&windgustmph=0.2&winddir=135&dewptf=35.2&rainin=0&dailyrainin=0&UV=1.3&indoortempf=66.3&indoorhumidity=49 Jan 7 13:42:25 Rpi2 weewx[28578] DEBUG user.interceptor: raw data: ID=XXXXX&PASSWORD=YYYYY&action=updateraww&realtime=1&rtfreq=5&dateutc=now&baromin=30.68&tempf=39.3&humidity=85&windspeedmph=0.2&windgustmph=0.2&winddir=135&dewptf=35.2&rainin=0&dailyrainin=0&UV=1.3&indoortempf=66.3&indoorhumidity=49 Jan 7 13:42:25 Rpi2 weewx[28578] DEBUG user.interceptor: using rain_total 0.0 from dailyrainin Jan 7 13:42:25 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter realtime=1 Jan 7 13:42:25 Rpi2 weewx[28578] INFO user.interceptor: unrecognized parameter rainin=0 Jan 7 13:42:25 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter rtfreq=5 Jan 7 13:42:25 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter action=updateraww Jan 7 13:42:25 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter PASSWORD=XXXXXXXX Jan 7 13:42:25 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter ID=XXXXX Jan 7 13:42:25 Rpi2 weewx[28578] DEBUG user.interceptor: raw packet: {'wind_speed': 0.2, 'humidity_in': 49.0, 'temperature_in': 66.3, 'barometer': 30.68, 'wind_gust': 0.2, 'dewpoint': 35.2, 'humidity_out': 85.0, 'uv': 1.3, 'rain': 0.0, 'dateTime': 1610023345, 'temperature_out': 39.3, 'wind_dir': 135.0, 'rain_total': 0.0, 'usUnits': 1} Jan 7 13:42:25 Rpi2 weewx[28578] DEBUG user.interceptor: mapped packet: {'barometer': 30.68, 'dewpoint': 35.2, 'outHumidity': 85.0, 'UV': 1.3, 'rain': 0.0, 'dateTime': 1610023345, 'windDir': 135.0, 'outTemp': 39.3, 'windSpeed': 0.2, 'inHumidity': 49.0, 'inTemp': 66.3, 'windGust': 0.2, 'usUnits': 1} Jan 7 13:42:35 Rpi2 weewx[28578] DEBUG user.interceptor: empty queue Jan 7 13:42:37 Rpi2 weewx[28578] DEBUG user.interceptor: GET: ID=XXXXX&PASSWORD=XXXX&action=updateraww&realtime=1&rtfreq=5&dateutc=now&baromin=30.68&tempf=39.3&humidity=85&windspeedmph=0&windgustmph=0&winddir=135&dewptf=35.2&rainin=0&dailyrainin=0&UV=1.3&indoortempf=66.3&indoorhumidity=49 Jan 7 13:42:37 Rpi2 weewx[28578] DEBUG user.interceptor: raw data: ID=XXXXX&PASSWORD=YYYYY&action=updateraww&realtime=1&rtfreq=5&dateutc=now&baromin=30.68&tempf=39.3&humidity=85&windspeedmph=0&windgustmph=0&winddir=135&dewptf=35.2&rainin=0&dailyrainin=0&UV=1.3&indoortempf=66.3&indoorhumidity=49 Jan 7 13:42:37 Rpi2 weewx[28578] DEBUG user.interceptor: using rain_total 0.0 from dailyrainin Jan 7 13:42:37 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter realtime=1 Jan 7 13:42:37 Rpi2 weewx[28578] INFO user.interceptor: unrecognized parameter rainin=0 Jan 7 13:42:37 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter rtfreq=5 Jan 7 13:42:37 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter action=updateraww Jan 7 13:42:37 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter PASSWORD=XXXXXXXX Jan 7 13:42:37 Rpi2 weewx[28578] DEBUG user.interceptor: ignored parameter ID=XXXXX Jan 7 13:42:37 Rpi2 weewx[28578] DEBUG user.interceptor: raw packet: {'wind_speed': 0.0, 'humidity_in': 49.0, 'temperature_in': 66.3, 'barometer': 30.68, 'wind_gust': 0.0, 'dewpoint': 35.2, 'humidity_out': 85.0, 'uv': 1.3, 'rain': 0.0, 'dateTime': 1610023358, 'temperature_out': 39.3, 'wind_dir': 135.0, 'rain_total': 0.0, 'usUnits': 1} Jan 7 13:42:37 Rpi2 weewx[28578] DEBUG user.interceptor: mapped packet: {'barometer': 30.68, 'dewpoint': 35.2, 'outHumidity': 85.0, 'UV': 1.3, 'rain': 0.0, 'dateTime': 1610023358, 'windDir': 135.0, 'outTemp': 39.3, 'windSpeed': 0.0, 'inHumidity': 49.0, 'inTemp': 66.3, 'windGust': 0.0, 'usUnits': 1} Jan 7 13:42:47 Rpi2 weewx[28578] DEBUG user.interceptor: empty queue ca fonctionne ! et on récupère même la pression atmosphérique. Conclusion je pense mettre cette méthode en production en lieu et en place de la solution de wee_import mais mon rpi de « production » est déjà bien chargé et j’appréhende l’installation des pré-requis. A suivre donc … dans un prochain article. Navigation de l’article De belles images de la région Bretagne – Morbihan – LorientInterceptor Wifi sur la Froggit – WH6000 : de la théorie …. à la pratique