Le suivi du temps dans l’Internet des Objets

Le suivi du temps dans l’Internet des Objets

Sur un système informatique, l’horodatage des mesures et des événements est considéré comme une évidence et, de nos jours, personne ne s’attend à rencontrer des difficultés à ce sujet. Pourtant, disposer à tout moment de l’heure exacte est loin d’être évident, en particulier si l’on travaille avec des capteurs autonomes, disposant de ressources limitées.



Très concrètement, on nous a très récemment fait remarquer que la présence de fluctuations temporelles dans l’historique des mesures enregistrées par nos modules posait de sérieux problèmes d’interprétation, et qu’il faudrait faire quelque chose pour améliorer ça :


Ce phénomène peut s’expliquer facilement: l’horloge interne du capteur est relativement peu précise, et lorsqu’à intervalle régulier une correction est reçue du PC ou du réseau, elle est appliquée pour que l’heure associée aux mesures soit aussi juste que possible pour les mesures suivantes. Nous nous sommes donc jusqu’à présent satisfaits d’associer à chaque mesure la meilleure heure connue au moment où la mesure a été prise. Simple et efficace, mais... pas très satisfaisant en l’état.

Précision d’une horloge numérique


On peut commencer par se demander si il est bien normal de devoir appliquer une correction de plusieurs secondes sur une horloge interne. Après tout, un processeur, c’est précis, non ? Et bien non, pas tellement en matière de temps, parce que ça n’est pas vraiment nécessaire. Par exemple, deux processeurs peuvent parfaitement communiquer par USB même si l’horloge de l’un va 2% plus vite que l’autre. Mais 2%, sur 5 minutes, cela correspond déjà à 6 secondes de décalage dans le décompte du temps. Après une journée, c’est déjà une demi-heure d’écart qui serait constatée.

Parmi les causes de fluctuations de l'horloge interne, on notera les variations de température, mais surtout les tensions mécaniques sur le circuit: en appuyant sur le haut ou le bas du circuit, on peut faire varier sa fréquence d'horloge de 1 à 2% dans un sens ou dans l'autre.

Overclocking mécanique, ne faîtes pas ça à la maison :-)
Overclocking mécanique, ne faîtes pas ça à la maison :-)


Heureusement on peut améliorer cela en dotant le circuit d’un quartz ou d’un oscillateur, qui lui sera précis à 100 ou 200ppm par exemple. C’est ce que nous avons fait pour l’horloge qui sert à réveiller le YoctoHub-Wifi à des heures prédéfinies. Mais cela reste loin d’être parfait : jusqu’à 8.5 secondes de décalage par jour, soit cinq minutes par mois...

Il existe des quartz de montre plus précis, à 20ppm par exemple. Mais il restera toujours une dérive non négligeable. La seule solution consiste donc à corriger la dérive régulièrement depuis une source absolue, le mieux possible.

Sources de temps absolues


Heureusement pour nous, il existe quelques références fiables pour obtenir une heure qui ne dérive pas. A l’heure d’Internet, la plus simple est d’utiliser un serveur SNTP (qui est lui-même synchronisé sur un serveur doté d’une horloge tenue à l’heure). C’est la stratégie utilisée jusqu’à ce jour par les YoctoHub-Ethernet et YoctoHub-Wireless-g. Attention, si vous travaillez avec une adresse IP fixe, n'oubliez pas de configurer un serveur DNS, car celui-ci est nécessaire pour localiser le serveur SNTP le plus proche de vous.

Pour un module connecté par USB, on peut simplement utiliser l’heure de l'ordinateur auquel est connecté le module, qui a de très fortes chances d’être automatiquement synchronisé sur un serveur NTP. C'est ce que font automatiquement le VirtualHub et l'API Yoctopuce.

Un problème potentiel de la synchronisation sur un serveur SNTP est la latence : suivant les conditions du réseau, il se peut qu’il se passe une ou plusieurs secondes entre le moment où le serveur SNTP envoie l’heure, et le moment où vous la recevez. Pour éviter cela, il existe des serveurs SNTP un peu partout, mais on ne peut pas exclure une congestion locale du réseau.

Pour pallier à cela, il existe une solution ultime : l’utilisation d’un GPS. En effet, les signaux GPS transportent une indication du temps absolu très précise. Pour autant que vous puissiez mettre une antenne en position adéquate, c’est la manière la plus fiable d’avoir une heure absolue en toute autonomie.

Le Yocto-GPS: votre meilleure horloge temps réel
Le Yocto-GPS: votre meilleure horloge temps réel



Utilisation d’une horloge corrigée


Comme mentionné plus haut, jusqu’à présent l’horodatage des mesures sur les capteurs Yoctopuce se faisait sur la base de l’horloge interne du capteur, avec une remise à l’heure immédiate lors du branchement d’un module puis périodiquement, par SNTP en cas de branchement sur le réseau, ou par l’heure de l’ordinateur en cas de branchement par USB. Avec les effets de retour dans le temps constatés lors de la correction.

Si l’on s’autorise à modifier la vitesse de l’horloge des capteurs, il est possible de faire mieux que cela. D’une part, on peut appliquer les corrections progressivement, en rattrapant une seconde toutes les 3 ou 4 minutes par exemple en faisant varier d’une fraction de pourcent la vitesse de l’horloge. D’autre part, sur la base d’une réception chaque minute d’une heure absolue, le module peut à tout moment calculer la déviation de son horloge interne par rapport à la référence, et corriger la vitesse de son horloge interne pour calquer au plus près l’horloge de référence. L’adaptation peut être effectuée en quelques dizaines de minutes, et ainsi réduire considérablement les besoins de corrections ultérieures.

Ce sont ces deux modifications que nous avons publiées aujourd’hui dans les nouveaux firmwares de nos modules. Vous pourrez ainsi vous débarrasser des sauts de secondes peu commodes dans vos enregistrements de mesures.

Petite cerise sur le gâteau : les YoctoHubs sont désormais aussi capables de détecter la présence d’un Yocto-GPS et d’utiliser l’heure obtenue par GPS comme référence (à la place de SNTP) pour tous les modules connectés.

Commenter aucun commentaire
Retour au blog












Yoctopuce, get your stuff connected.