Yocto-Meteo : Comment récupérer les données

17 février 2017 rdorigny 0 commentaires

Dans un article précédent, je vous avais présenté la sonde météo de chez Yocto. Dans celui-ci, je vais pour expliquer comment faire pour la mettre en oeuvre sur un raspberry.





Pour cela, j'ai utilisé les librairies python fournies par l'éditeur.

Donc notre but consiste à :
  • mettre le script en daemon;
  • créer un thread de récupération des données par la librairie;
  • envoyer une trame http pour transmettre les données;
  • Récupérer les données et les sauvegarder dans une base de données;
  • Afficher les données dans un graphique.


  • Donc pour le script python:
    #***************************************************************************************************** # # Robert DORIGNY - www.doritique.fr le 27 juillet 2016 # # #***************************************************************************************************** import os import sys #import pexpect import time import urllib2 import urllib import threading from yocto_api import * from yocto_humidity import * from yocto_temperature import * from yocto_pressure import * #*******************************************Fonctions************************************ def usage(): scriptname = os.path.basename(sys.argv[0]) print("Usage:") print(scriptname+' <serial_number>') print(scriptname+' <logical_name>') print(scriptname+' any ') sys.exit() def die(msg): sys.exit(msg+' (Verifier le cable USB)') def recup_val(target): #print('target:'+target) errmsg=YRefParam() # Setup the API to use local USB devices if YAPI.RegisterHub("usb", errmsg)!= YAPI.SUCCESS: sys.exit("init error"+errmsg.value) if target=='any': # retreive any humidity sensor sensor = YHumidity.FirstHumidity() if sensor is None : die('No module connected') m = sensor.get_module() target = m.get_serialNumber() else: m = YModule.FindModule(target) if not m.isOnline() : die('device not connected') humSensor = YHumidity.FindHumidity(target+'.humidity') pressSensor = YPressure.FindPressure(target+'.pressure') tempSensor = YTemperature.FindTemperature(target+'.temperature') sendval(tempSensor.get_currentValue(),humSensor.get_currentValue(),pressSensor.get_currentValue()) #Fonction chargee de la transmission des donnees def sendval(temp,hum,pres): data={} data['tp']='{:.2f}'.format(temp) data['hum']='{:.2f}'.format(hum) data['pr']='{:.2f}'.format(pres) data['sonde']='1' url_values=urllib.urlencode(data) #print(url_values) data=urllib2.urlopen("http://www.lesite.fr/api.php"+"?"+url_values) #print("transmission OK") class myThread (threading.Thread): def __init__(self,name,target): threading.Thread.__init__(self) self.name=name self.target=target def run(self): #Transmission des donnees recup_val(self.target) sys.exit() #*******************************************Fonction principale************************************ def main(): #Mise en daemon fpid = os.fork() if fpid!=0: # Fonctionne en daemon desormais. Le PID est fpid sys.exit(0) #Recup de la target if len(sys.argv)<2 : usage() target=sys.argv[1] while True: thread1 = myThread("sensortag",target) thread1.start() thread1.join() time.sleep(900) if __name__ == "__main__": main()

    Le script php: (sans la gestion de la connexion de la base de données)
    <?php// Connexion bdd, vous de gérer cela! if (isset($_GET["tp"])) { $tp=$_GET["tp"]; print("La température reçue :".$tp."<BR>"); } if (isset($_GET["hum"])) { $hum=$_GET["hum"]; print("L'humidité reçue :".$hum."<BR>"); } if (isset($_GET["pr"])) { $pr=$_GET["pr"]; print("La pression reçue :".$pr."<BR>"); } if (isset($_GET["sonde"])) { $sonde=$_GET["sonde"]; print("Le numéro de la sonde :".$sonde."<BR>"); } //Insertion ds la base de l'enregistrement receptionné $date=date('d m Y H:i:s'); print("Date :".$date."<BR>"); $requete="INSERT INTO sonde_PHT (sonde,date,pr,tp,hum) VALUES (".$sonde.",'".$date."',".$pr.",".$tp.",".$hum.")"; print("requête :".$requete."<BR>"); $resultat=mysql_query($requete,$Connection); print("resultat :".$resultat."<BR>"); ?>

    Enfin pour l'affichage des données dans un graphique, je vous renvois vers un article précédent que vous trouverez ici. Ce qui donne par exemple:











    Pseudonyme (obligatoire) :
    Adresse mail (obligatoire) :
    Site web :




    © 2017 www.doritique.fr par Robert DORIGNY