Articles récents
TI Sensortag : Transmission des données et fiabilisation du script (partie 3)
Maintenant que nous sommes capable de récupérer les données, il est temps de voir comment les transmettre et les stocker.
Autre problématique que nous verrons, fiabiliser et pérenniser le script, l'objectif étant de l'oublier et surtout de ne pas être contraint d'intervenir toutes les cinq minutes pour causes de plantages intempestifs...
1)Transmission et stockage des données
L'idée consiste à envoyer une requête web comme http://monsite.fr/script.php?tp=12.5&hum=65.3&pr=1008.9&sonde=1 avec les données mesurées sur un script PHP. Le script se chargera de récupérer les données et de les enregistrer dans une base de données. Si vous avez un hébergeur comme OVH ou 1and1, vous pouvez utiliser votre hébergement pour stocker vos données dans le cloud.Pour le script php, rien d'extraordinaire:
"); } if (isset($_GET["pr"])) { $pr=$_GET["pr"]; print("La pression reçue :".$pr."
"); } if (isset($_GET["sonde"])) { $sonde=$_GET["sonde"]; print("Le numéro de la sonde :".$sonde."
"); } //Insertion ds la base de l'enregistrement réceptionné $date=date('d m Y H:i:s'); print("Date :".$date."
"); $requete="INSERT INTO matable (sonde,date,pr,tp,hum) VALUES (".$sonde.",'".$date."',".$pr.",".$tp.",".$hum.")"; print("requête :".$requete."
"); $resultat=mysql_query($requete,$Connection); print("resultat :".$resultat."
"); ?>
OK pour la réception, mais comment faire pour envoyer la requête web automatiquement? C'est là que le langage python est puissant, car c'est une affaire traitée en deux lignes de code! Rien à voir avec les 20 lignes que j'aurais eu en C. Et cela grâce au module urllib et urllib2. Donc voici la fonction que j'ai créé pour envoyer notre requête.
2)Fiabilisation du script
Tout d'abord, il faut faire tourner le script en tâche de fond sur notre machine Linux. Pour cela, l'idéal serait de le transformer en daemon. Python propose plusieurs méthodes, j'ai choisi la plus connue :A vrai dire, j'ai lancé le script et il a bien fonctionné durant 3 jours. Mais une coupure réseau l'a fait planter!! Et patatra, arrêt des mesures... Bref, pas terrible. Comment faire? La réponse m'est venue de mes souvenirs de développement d'applications Android. Le framework Android impose que toutes actions lourdes ou risquées, comme un accès au système de fichiers ou au réseau, doit être exécutées en tâche de fond. En gros par un thread en parallèle. Ainsi, si l'action réalisée par le thread plante, elle ne fera pas planter le programme principal. Donc la solution à notre dysfonctionnement est de faire réaliser à un thread la récupération des données et l'envoi de la requête web.
Pour cela:
Ce qui donne le script complet:
Conclusion
Nous avons désormais un script qui semble opérationnel. Dans le prochain article, nous verrons comment afficher nos données sur un beau graphique.
© 2024 www.doritique.fr par Robert DORIGNY