Dans la seconde partie de ce projet, je vous ai présenté les capteurs de la station en détail, ainsi que mon installation. Maintenant que toutes les données parviennent à la station de base, nous allons nous intéresser au raccordement de celle ci à un ordinateur, et surtout à la collecte automatisée de ces données depuis une machine sous Linux.
Connection physique
Le câble de connection fourni se branche d’un coté sur un port série, et de l’autre sur un port RJ11. La prise rj11 se branche sur la station. En revanche, pour le port série, ma machine n’en dispose pas. Heureusement, LaCrosse fournit un adaptateur usb-série. L’installation est des plus simples sous linux : j’ai branché l’adaptateur série, puis attendu quelques secondes. Et voila.
J’ai alors pu brancher le cable rj11-serie à l’adaptateur usb-série, et la connection est établie. Reste maintenant à vérifier que l’on transmet des données.
Logiciel de récupération des données : Open2300
Sous linux, j’ai découvert Open2300, qui permet de communiquer avec les stations météo de la série WS23xx de LaCrosse. Il est possible d’utiliser ce programme sous windows via MinGW. L’installation est particulierement simple : téléchargez les sources sur le site officiel, décompressez les, rendez vous dans le répertoire créé, puis tapez make. Si la commande make n’est pas installée sur votre système, il suffira sous ubuntu de taper “sudo apt-get install make”, ou sinon de chercher make dans le gestionnaire de paquets puis de l’installer. Une fois la compilation terminée, le programme est presque utilisable.
Avant de pouvoir s’en servir, toutefois, il y a l’épineuse étape de la configuration. Dans le répertoire d’Open2300, vous trouverez un fichier “open2300-dist.conf”. Faites en une copie sous le nom de “open2300.conf”. Ouvrez ce fichier, et cherchez la ligne “SERIAL_DEVICE”. Si votre station est branchée directement sur un port série, la valeur suivante sur la même ligne devra être “/dev/ttyS0” (sans les guillemets). Si vous utilisez l’adaptateur USB, alors ce sera “/dev/ttyUSB0”. Enfin, sous Windows, ce sera COM1. Bien sur si vous avez d’autres dispositifs série, la valeur pourra etre /dev/ttyS1 ou /dev/ttyUSB1, ou encore COM2. En clair, le dernier chiffre représente le numéro de l’interface série. S’il n’y en a pas d’autre, ce sera à 0 sous linux, et 1 sous windows.
Enfin, dernier détail, il faut donner les droits en écriture sur le port série via la commande “sudo chmod 660 /dev/ttyUSB0” (bien sur, mettez la valeur qui correspond à celle située dans votre fichier de configuration pour le nom du dispositif série).
En fait ce n’était pas si compliqué non? Maintenant Open2300 est paré pour la lecture des données! Pour vérifier cela il suffit alors de lancer l’une des commandes d’open2300, par exemple fetch2300 en tapant “./fetch2300”. Vous devriez alors voir les données de la station apparaître à l’écran. Divers programmes sont présents, par exemple xml2300 qui retourne les données sous forme de XML.
Collecte automatisée et continue des données
On est maintenant capables de collecter les données de la station météo à tout instant. Toutefois, ce fonctionnement ne me suffit pas, puisque je souhaite récupérer les données de la station à chaque fois que possible, et ce de façon automatisée. Nous pourrions pour cela utiliser un cron, mais j’ai préféré faire un petit programme C :
#include <stdio.h>
#include <unistd.h>
#include <time.h>
int main ()
{
int i=0,time01=0,timeStart=time(NULL);//temps de début de l’application
while(1)//boucle infinie, le programme devra etre arrêté par ctrl+C
{
time01=time(NULL);//on récupere le temps actuel
printf(“record %d – h+%8ds\n”,i,time01-timeStart);//affichage d’une ligne de log
if(fork()==0)
{execlp(“./cmd.sh”,”./cmd.sh”,NULL);}
//appel du script
else
{
wait(NULL);//on attend que le script se termine
//tant que 8s ne se sont pas écoulées
while(time(NULL)<(time01+8))
{sleep(1);}//on attend
}
i++;
}
}
Ce programme s’accompagne d’un petit script shell :
#!/bin/bash
./fetch2300 >> log2.txt
date +%H%M%S >> log2.txt
Travail à faire :
Il reste encore à améliorer ce programme, pour proposer divers modes de sortie, un mode réellement minimal, et des modes plus détaillés. Il faudra également que je mette en place un système d’envoi de données vers des serveurs web. Dans ce cas, je réduirai la fréquence d’envoi, en envoyant par exemple des moyennes, car le stockage d’autant de données remplirait mes bases de données (j’ai calculé que cela me ferait environ 350Mio/an) bien trop rapidement. En revanche, la valeur courante pourrait être envoyée à la fréquence maximale, et serait écrasée à chaque fois.
Une partie importante concerne l’étiquetage des données. Pour l’instant, je peux regarder le ciel, et dire s’il fait beau, nuageux, ou s’il pleut. Pour détecter s’il pleut ou pas, c’est simple, il suffit de mesurer la variation des précipitations enregistrées. Si elles augmentent pour deux mesures successives, c’est qu’il pleut. En revanche, je ne vois pas de moyen simple de déterminer si le ciel est ensoleillé, ou s’il est nuageux à partir des données collectées. La solution pour automatiser ce traitement sera de récupérer des données météo en ligne via une source fiable afin d’étiqueter les données.
Il conviendra de mettre au propre le code réalisé (faire un nouvel exécutable plutôt que modifier fetch2300), et probablement réaliser une interface graphique pour contrôler tout cela. Enfin, vu que ce système aura un fonctionnement de type serveur, avec envoi vers d’autres serveurs des données, il faudra pouvoir le contrôler à distance, mais également qu’il soit capable de stocker les informations en cas de coupure d’internet, et d’envoyer tous les enregistrements dès le retour de la connexion. La résistance aux coupures électriques est assurée par le fait que le serveur tourne sur un ordinateur portable, la batterie permettant 3h d’autonomie en cas de coupure, la station météo basculant quand à elle sur les piles en cas de coupure secteur.
Aucun commentaire jusqu'à présent.