Exporter des mesures consolidées au format CSV

Exporter des mesures consolidées au format CSV

Parmi les questions qui reviennent régulièrement au support Yoctopuce, on trouve en bonne position la question de la génération d'un fichier CSV avec les données enregistrées par plusieurs capteurs. Alors pour vous gagner un peu de temps, nous avons finalement décidé d'ajouter cette fonction directement dans la librairie de programmation.



La récupération des données enregistrées capteur par capteur a déjà fait l'objet d'un article précédent dans la série des tutoriels. Nous ne nous étendrons donc pas sur les concepts de base comme la mise en marche de l'enregistreur de données, etc.

La partie qui nous intéresse aujourd'hui est la récupération en parallèle des données de plusieurs capteurs. A priori, il ne s'agit que de parcourir en parallèle les tableaux de mesures de chaque capteur, ce qui n'est pas sorcier. Mais si on désire que le code soit robuste, il faut prendre en compte le fait que les capteurs n'ont pas forcément été mis sous tension au même moment et n'enregistrent pas forcément les données à la même fréquence, donc peuvent ne pas contenir tous les mesures pour les mêmes instants.

La nouvelle fonction que nous vous proposons gère donc correctement l'absence de données sans créer de décalage dans les mesures. Pour garder l'interface la plus simple possible, elle retourne les mesures via un simple tableau de nombres réels, mais dans le cas où une mesure manque pour un capteur, la valeur sera le nombre spécial Not a Number (NaN), qui a l'avantage de se propager naturellement et se détecte facilement dans tous les langages à l'aide de la fonction isnan (appelée parfois isNan ou is_nan).

La classe YConsolidatedDataSet


Nous avons donc créé une nouvelle classe YConsolidatedSensorData, que vous pourrez instancier en donnant en paramètre:

  • les timestamps Unix correspondant aux dates de début et de fin des données que vous souhaitez récupérer, ou 0 et 0 pour récupérer l'intégralité des données
  • le tableau d'objets YSensor (ou YTemperature, YHumidity, etc.) dont vous voulez récupérer les données consolidées

Appelez ensuite en boucle la méthode nextRecord() en lui passant en paramètre par référence une liste de nombres réels (ou un tableau, selon les langages). Tant que des mesures seront trouvées, la fonction retournera vrai et remplira la liste passée en paramètre avec le timestamp suivant et les mesures correspondantes. Lorsque toutes les mesures seront épuisées, la fonction retournera faux.

Exemple


Voici un exemple d'utilisation de cette nouvelle classe, en Python, pour générer un fichier CSV, avec la date au format ISO standardisé:

# Enumère tous les capteurs connectés
sensorList = []
sensor = YSensor.FirstSensor()
while sensor is not None:
    sensorList.append(sensor)
    sensor = sensor.nextSensor()

# Génère des données CSV consolidées pour tous les capteurs
data = YConsolidatedDataSet(0, 0, sensorList)
record = []
while data.nextRecord(record):
    line = datetime.datetime.fromtimestamp(record[0]).isoformat()
    for idx in range(1, len(record)):
        line += ";%.3f" % record[idx]
    print(line)


Vous trouverez ce même exemple dans chacune des librairies de programmation Yoctopuce, dans le sous-répertoire Prog-ExportCSV.

Conclusion


Cette nouvelle classe devrait faciliter la récupération des données aux utilisateurs moins expérimentés en programmation. Afin de maintenir l'interface la plus simple possible, nous avons intentionnellement omis certaines fonctionnalités avancées telles que la possibilité de lire les valeurs min/max en plus des valeurs moyennes, et la possibilité de lire le timestamp du début de la mesure en plus du timestamp de fin de mesure. Mais le code source étant fourni dans la librairie, vous pouvez aussi partir de cette classe pour en faire votre propre version améliorée pour vos besoins.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.