Après de plusieurs mois de développement (bien plus que ce que nous avions prévu...), nous sommes enfin en mesure de vous soumettre une grande mise à jour de la librairie de programmation Yoctopuce et des firmwares pour les modules. Cette fois, il ne s'agit pas juste de correctifs, mais de nouvelles fonctionnalités dont vous pourrez profiter par une mise à jour logicielle. Voici un petit tour d'horizon de ce qui va changer et ce qui ne va pas changer dans cette nouvelle version 1.10…
Commençons par un coup d'oeil aux nouvelles fonctionnalités, puis voyons quels impacts ces changements auraient sur vos programmes existants.
1. Le nouvel enregistreur de données
C'est certainement le changement qui était le plus attendu, et celui qui a été l'élément déclencheur de ce grand chantier sur les firmwares et la librairie. Voici les principales caractéristiques de cette nouvelle version, d'abord au niveau des capteurs eux-mêmes:
- La fréquence d'enregistrement des mesures peut être configurée.
- L'enregistreur peut sauver soit des mesures instantanées, soit des valeurs moyennes/min/max par période:
- La fréquence des mesures instantanées peut aller de 1 Hz à 100 Hz.
- La fréquence des mesures moyennées peut aller de 60 par minute à 1 par heure; les échantillons pour calculer les valeurs moyenne, minimale et maximale sont pris 16 fois par seconde.
- Le nouvel enregistreur se met automatiquement à l'heure "réelle" en utilisant l'horloge de son hôte (basée sur le réseau pour le YoctoHub-Ethernet, le RTC et le réseau pour le YoctoHub-Wireless et l'heure du système pour le VirtualHub).
- Afin de faciliter l'utilisation des données, le début et la fin des intervalles de mesure sont automatiquement alignés sur un multiple de la période d'enregistrement
- Pour les modules qui ont plusieurs capteurs:
- L'enregistrement peut être activé ou désactivé individuellement pour chaque capteur;
- La fréquence d'enregistrement peut être choisie individuellement pour chaque capteur.
L'accès aux données enregistrées a aussi été grandement simplifié:
- Les objets de l'API représentant un capteur ont désormais une méthode get_recordedData() qui permet directement de recevoir un DataSet, c'est-à-dire un ensemble de mesures correspondant à un intervalle de temps donné. Le DataSet dispose notamment des méthodes suivantes:
- loadMore() qui permet le chargement itératif de toutes les données depuis le module, en fournissant un indicateur de progression;
- get_preview() qui permet d'obtenir presque instantanément un aperçu résumé de l'ensemble des données du DataSet, sous forme d'un tableau de mesures environ 200 fois plus petit que les mesures détaillées;
- get_measures() qui permet d'obtenir le tableau des mesures détaillées qui ont été chargées.
- Pour les utilisateurs qui n'utilisent pas les librairies de programmation de haut niveau:
- La librairie en ligne de commande peut fournir la même fonctionnalité, en retournant les données au format délimité (CSV)
- Il est aussi beaucoup plus simple de récupérer les données de l'enregistreur par des simples requêtes HTTP.
Le nouvel exemple graphique du datalogger dans la librairie Javascript
2. La classe générique YSensor
L'interface de programmation de la plupart de nos capteurs partage un tronc commun de méthodes identiques, permettant de lire la valeur courante, l'unité de mesure, etc. Voyant comme cette famille de capteurs grandit, il nous a semblé bon de fournir une classe générique, parente de tous les capteurs, qui permette d'énumérer tous les capteurs quels qu'ils soient, de lire leur valeur courante, de demander l'unité de la mesure, etc. Il vous sera ainsi possible de faire des programmes qui affichent les mesures de n'importe quel capteur Yoctopuce, même de ceux qui n'existent pas encore au moment où vous compilez votre programme...
Les capteurs supportés par la classe YSensor sont ceux qui disposent d'un enregistreur de données. D'ailleurs, la classe YSensor dispose aussi de la méthode get_recordedData() permettant d'accéder aux données du nouvel enregistreur de données.
Comme les librairies de haut niveau, la librairie en ligne de commande dispose désormais aussi d'un exécutable YSensor capable d'accéder à tous les capteurs.
Le nouvel utilitaire YSensor permet de lire tous les capteurs
3. Les callbacks périodiques (notifications à intervalle fixe)
Jusqu'à présent, nous vous proposions deux méthodes pour lire la valeur des capteurs: la lecture directe, à l'aide de la méthode get_currentValue(), et la lecture par événement (callback), qui signale chaque changement de valeur. Cette dernière méthode est la plus efficace pour obtenir des mesures en temps réel, mais pour certaines applications elle a le défaut de transmettre parfois trop d'événements (lorsque la mesure bouge beaucoup) et parfois pas assez (quand la valeur ne bouge pas).
Il est maintenant possible de configurer chaque capteur pour qu'il envoie des notifications de valeur périodiques (par callback) à intervalle fixe. Comme pour l'enregistreur de données, ces notifications peuvent être soit des mesures instantanées, soit des valeurs moyennes/min/max par période. Une seule contrainte: si l'enregistreur de données est activé pour un capteur, les notifications de valeur à intervalle fixe se font à la même fréquence que l'enregistrement des données.
L'utilisation combinée de l'enregistreur de données et des notifications à intervalle fixe permet très facilement de construire un graphique des mesures pour les dernières heures par exemple, qui soit ensuite mis à jour automatiquement au fur et à mesure de la disponibilité de nouvelles mesures. Les nouvelles mesures arriveront automatiquement à la même période où les précédentes ont été enregistrées.
info = sensor.get_userData()
print(info['name']+": "+str(measure.get_averageValue())+" "+info['unit'])
# enable timed reports on all sensors
sensor = YSensor.FirstSensor()
while sensor:
sensor.set_reportFrequency("30/m");
sensor.set_userData({ 'name' : sensor.get_friendlyName(),
'unit' : sensor.get_unit() })
sensor.registerTimedReportCallback(sensorTimedReportCallback)
sensor = sensor.nextSensor()
# Event-based processing, nothing to do :-)
while True:
YAPI.Sleep(500, errmsg)
Exemple typique de notifications à intervalle fixe
4. Autres améliorations générales
La librairie en ligne de commande a été complétée pour ressembler ressembler encore plus aux autres librairies. Il est désormais possible d'appliquer des paramètres de calibrations en ligne de commande, de récupérer les données de l'enregistreur de données au format CSV, de tester la connectivité réseau d'un YoctoHub, etc. Il est désormais aussi possible de personnaliser le format de sortie des outils en ligne de commande.
Pour tous les langages, la documentation et les commentaires ont été améliorés. Des exemples de code ont été ajoutés. Nous en avons profité aussi pour re-publier une documentation à jour pour tous les modules.
Compatibilité et migration
Comme pour toute mise à jour de la libraire et des firmwares, nous nous sommes efforcés de rendre la transition aussi transparente que possible. Voici la logique de compatibilité:
Les nouveaux firmwares fonctionnent généralement sans autre avec l'ancienne librairie (avec vos programmes existants). Quelques cas particuliers sont à mentionner:
- Pour installer les nouveaux firmwares, il faut utiliser un VirtualHub au moins aussi récent que le firmware.
- La mise à jour des valeurs de calibration des nouveaux modules n'est pas possible avec l'ancienne librairie.
- L'ancienne librairie n'est pas capable de décoder les données du nouvel enregistreur de données. Si vous voulez continuer à utiliser l'ancien enregistreur de données, il faut soit installer un ancien firmware, soit mettre à jour votre librairie (la nouvelle librairie contient encore l'essentiel des fonctions de l'ancienne API, pour maintenir la compatibilité avec le code existant).
La nouvelle librairie fonctionne généralement comme l'ancienne avec les anciens firmwares (avec vos modules actuels, sans les mettre à jour). Il est toutefois recommandé de mettre à jour les modules. Quelques cas particuliers sont à mentionner:
- Les nouvelles fonctionnalités de la librairie (nouvel enregistreur de données, notifications périodiques, classe YSensor) ne fonctionnent que pour les modules dotés du nouveau firmware.
- La mise à jour des valeurs de calibration n'est possible que pour les modules dotés du nouveau firmware.
Vu l'ampleur des nouveautés (et les risques inhérents), nous n'allons pas immédiatement tout basculer vers cette nouvelle version. Nous vous conseillons de réserver la nouvelle librairie et les nouveaux firmwares pour vos nouveaux développement, et de continuer pour l'instant avec l'ancienne librairie et les anciens firmwares pour vos systèmes en production. La nouvelle librairie remplacera définitivement l'ancienne dès que nous aurons un peu de recul sur la robustesse de cette nouvelle version. En attendant, n'hésitez pas à nous signaler tout problème éventuel par e-mail, et nous ferons de notre mieux pour vous fournir des correctifs dans les meilleurs délais.
Voici les liens pour charger le nouveau VirtualHub:
Système d'exploitation | Téléchargement | Documentation |
---|---|---|
Windows | ||
Linux | ||
Mac OS X |
Voici les liens pour charger la nouvelle librairie:
Langage | Code source | Documentation |
---|---|---|
Command line | ||
Android | ||
C++ | ||
C# | ||
Delphi | ||
Java | ||
Javascript | ||
Node.js | ||
Objective-C | ||
PHP | ||
Python | ||
VisualBasic .Net |
Voici les liens pour charger les nouveaux firmwares:
Extension réseau | Firmware | Documentation |
---|---|---|
YoctoHub-Ethernet | ||
YoctoHub-Wireless | ||
YoctoHub-Wireless-SR |