Lorsque l'on met en place un système d'automatisation ou de mesure, il est essentiel de pouvoir le surveiller à distance facilement. Aujourd'hui, nous vous proposons une nouvelle solution pour surveiller et contrôler vos systèmes à base de modules Yoctopuce via Internet, que vous pourrez installer facilement sur (presque) n'importe quel hébergement web: voici le VirtualHub for Web.
Ce n'est pas la première solution que nous vous proposons dans ce but: au cours des dernières années, nous vous avons montré sur ce blog comment intégrer vos solutions avec différents systèmes tiers, comme EmonCMS, Valarm.net, Xively, InfluxDB, PRTG... Mais l'expérience nous a montré que sur la durée, la dépendance envers un service contrôlé par un tiers devenait souvent problématique: les systèmes gratuits ou bon marché le restent rarement longtemps, et le prix demandé pour un simple stockage de mesures est souvent sans comparaison avec le prix qu'on payerait pour transférer et stocker la même quantité de données sur un hébergement standard.
Nous avons donc choisi de vous proposer un nouvel outil gratuit pour vous faciliter l'accès distant aux données de vos modules Yoctopuce. Cet outil vous est fourni avec le code source, et est donc entièrement entre vos mains.
VirtualHub for Web, quésaco ?
Le but du VirtualHub (for Web) est de fournir un accès distant à vos modules Yoctopuce, à travers Internet. C'est donc un logiciel qui doit être installé sur un serveur Web. Vous pouvez l'installer sur n'importe quel hébergement PHP standard raisonnablement à jour, en suivant la procédure décrite plus bas.
Pour connecter un système Yoctopuce au VirtualHub (for Web), il suffit de configurer sur le YoctoHub qui le contrôle un callback HTTP pointant sur ce serveur Web. Lors de chaque callback, le VirtualHub (for Web) se chargera de télécharger automatiquement toutes les informations nécessaires du YoctoHub, notamment la configuration des modules, les dernières données des capteurs, les messages de logs des modules, et même les fichiers nécessaires à l'interface utilisateur.
Lorsque vous vous connectez avec un navigateur Web sur le serveur VirtualHub (for Web), vous obtenez une interface très similaire à celle d'un YoctoHub ou d'un VirtualHub habituel.
L'interface du VirtualHub (for web)
Vous pouvez aller consulter l'état de chaque module, tel qu'il était la dernière fois que le module s'est connecté au serveur. Vous pouvez même changer les réglages du module: les changements seront appliqués lors de la prochaine connexion du module au serveur.
L'interface montre le dernier état connu des modules et permet d'effectuer une configuration différée
Le VirtualHub (for Web) émule de manière assez exhaustive le comportement des hubs Yoctopuce et des modules qui lui sont connectés. Il est même capable d'émuler l'enregistreur de données des modules (fonction dataLogger), puisqu'il stocke très exactement sur le serveur toutes les mesures transmises par les capteurs, au même format que celles-ci sont stockées sur la mémoire flash. Vous pouvez donc même vous y connecter avec des applications basées sur l'API Yoctopuce pour récupérer les données. Par exemple, si vous chargez la dernière version de Yocto-Visualization, vous pourrez ajouter une instance de VirtualHub (for Web) comme source de données et voir les données de hubs distants arriver dans vos graphiques:
Yocto-Visualization peut visualiser les mesures stockées par le VirtualHub (for Web)
Le VirtualHub (for Web) peut être utilisé aussi bien avec un YoctoHub-Ethernet, un YoctoHub-Wireless-n, un YoctoHub-GSM-4G, qu'avec toutes les versions antérieures des YoctoHubs que nous vendons depuis 10 ans. Si vous contrôlez vos modules Yoctopuce par USB, vous pouvez utiliser l'utilitaire VirtualHub habituel pour effectuer les callbacks HTTP équivalents à ceux que ferait un YoctoHub, mais vous devez alors vous assurer que votre application passe par le VirtualHub pour accéder aux modules.
Installation
Installation sur le serveur PHP
Pour simplifier au maximum la mise en place de cet outil, nous avons écrit un petit installeur PHP. Vous trouverez sur notre page d'outils un fichier zip contenant un unique fichier PHP, que vous poserez sur votre serveur Web dans le sous-répertoire où vous désirez utiliser le VirtualHub (for Web). Si vous utilisez un outil FTP pour cela, utilisez le mode binaire. Ouvrez ensuite une fenêtre de navigateur pointant sur ce fichier et suivez les quelques étapes du wizard d'installation.
Lancement de l'installeur du VirtualHub (for Web)
Il n'est pas nécessaire de disposer d'une base de données sur le serveur Web pour utiliser le VirtualHub (for Web): toutes les données récupérées des modules Yoctopuce sont stockées par le code PHP directement dans des fichiers sur le serveur, sous forme d'archive TAR, à raison d'un fichier TAR par module Yoctopuce.
L'installeur vous proposera de créer plusieurs instances du VirtualHub (for Web), si vous le désirez. Sans dupliquer le code sur le serveur Web, cette option vous permet de séparer plusieurs sous-systèmes de modules Yoctopuce qui seront affichés séparément, et dont les données seront stockées dans des répertoires séparés.
A ce jour, nous avons testé l'installeur et le code du serveur sous PHP 7.4, 8.0 et 8.1, avec les intégrations apache2handler, fpm-fcgi et lightspeed.
Configuration des callbacks HTTP sur le YoctoHub ou VirtualHub
Commencez impérativement par mettre à jour les firmwares de vos YoctoHubs (ou mettre à jour votre VirtualHub) à la version 51900 ou plus récente, et les autres modules Yoctopuce en firmware 50730 ou plus récent.
Vous pourrez ensuite configurer les outgoing callbacks de votre hub de la manière suivante:
- Type de callback: Yocto-API callback
- Callback URL: _path_de_l'instance_VirtualHub-4web_/HTTPCallback
- Type de sécurité: MD5 signature
- Password: le même que vous avez mis sur votre serveur pour les incoming callbacks
Transmission des valeurs mesurées
Un des objectifs majeurs du VirtualHub (for Web) est de permettre de transmettre précisément les mesures effectuées par les capteurs Yoctopuce au serveur web, malgré le fait qu'il n'est possible d'accéder à l'enregistreur de données des modules en callback HTTP. Pour faire cela, les YoctoHubs sont désormais capable de transmettre au serveur par callback HTTP les notifications périodiques (les timed reports). Ceux-ci sont gardés en mémoire par le hub durant tout l'intervalle de temps entre deux callbacks HTTP et envoyés en bloc au serveur PHP lors de la connexion, tout en préservant l'heure exacte des mesures.
Grâce à cela, vous pouvez par exemple effectuer des mesures chaque heure durant tout une journée, et les transmettre par un unique callback HTTP quotidien. Ou inversément, vous pouvez configurer un capteur pour mesurer un signal à 10Hz, et ne pas perdre de mesure malgré une fréquence de callback HTTP de 0.3Hz.
Affichage sur Yocto-Visualization d'un signal échantillonné à 10Hz avec un callback toutes les 3[s]
Néanmoins, cette technique a plusieurs conséquences dont il faut tenir compte:
- Ce n'est pas la fréquence d'enregistrement (logFrequency) configurée sur le capteur qui est déterminante, mais la fréquence des notifications périodiques (reportFrequency) pour savoir quelles seront les mesures enregistrées par le VirtualHub (for Web).
- Si vous vous connectez avec la librairie Yoctopuce au VirtualHub (for Web), vous recevrez au moment de chaque callback HTTP le paquet de notifications périodiques qui viennent d'être transmises par le hub. Elles ne seront donc pas transmises au fur et à mesure, mais l'horodatage rendu par get_endTimeUTC sera correct.
- Si l'on désire transmettre l'intégralité des mesures, il faut faire des callbacks HTTP suffisamment souvent pour qu'ils puissent être gardés en mémoire dans le tampon du hub, qui peut stocker environ 150 mesures.
Au besoin, l'interface web du VirtualHub (for Web) vous permet de visualiser si vous êtes très proche de saturer le tampon de transmission des notification périodiques ou pas.
Les callbacks de changements de valeurs ne sont eux pas tous mémorisés par le hub, faute de mémoire suffisante. Seul un callback de changement de valeur par fonction est émulé par VirtualHub (for Web), au moment de la réception du callback HTTP.
Limitations
L'implémentation en PHP d'un émulateur de module Yoctopuce sur la base de simples callbacks HTTP a impliqué un bon nombre d'astuces, visitant des recoins encore jamais exploités de notre API par callback HTTP. De ce fait, nous avons dû faire quelques corrections/améliorations dans les firmwares et les librairies Yoctopuce pour rendre cette magie possible.
Pour pouvoir en profiter, vous devrez donc mettre à jour les firmwares de vos YoctoHubs (ou mettre à jour votre VirtualHub) à la version 51900 ou plus récente, et les autres modules Yoctopuce en firmware 50730 ou plus récent. Si vous voulez vous connecter avec la librairie Yoctopuce ou Yocto-Visualization à un serveur VirtualHub (for Web), utilisez la version 51900 ou plus récente.
Quand vous utilisez le VirtualHub (for Web), n'oubliez pas que l'application des réglages est différée au prochain callback HTTP, ce qui implique forcément un comportement un peu différent d'une connexion directe: par exemple, si vous changez un attribut et que vous relisez directement sa valeur, vous obtiendrez la valeur précédente jusqu'au moment où le réglage sera véritablement appliqué au module et retransmis au VirtualHub (for Web).
Certaines fonctionnalités complexes ne sont pas encore émulées par le VirtualHub (for Web). C'est notamment le cas de la mise à jours distante de firmware de modules, et de l'accès au tampon de communication des modules de transmission série (Yocto-Serial, Yocto-RS232, Yocto-RS485, ...). Avec un peu de chance, ces fonctionnalités devraient apparaître progressivement - dans la mesure du possible.
Comparaison avec GatewayHub
GatewayHub, que nous proposons depuis 2017, ne stocke pas de données sur les hubs. Il offre une connexion directe avec un seul YoctoHub ou un VirtualHub à la fois, mais ne fait que servir de passerelle. Il ne permet donc pas de récupérer les données de hubs qui utiliseraient la fonction de sommeil (sleep) pour économiser l'énergie.
En outre, en raison de la technologie WebSocket sur laquelle il est basé, GatewayHub ne peut pas être installé sur un hébergement PHP standard: GatewayHub a besoin d'un hébergement Node.js. On pensait en 2017 que ceux-ci se démocratiseraient avec la montée en puissance de Node.js, mais cinq ans plus tard, on constate que PHP reste toujours le type d'hébergement le plus répandu et le plus simple à mettre en œuvre. Alors mieux vaut tard que jamais, on corrige le tir... A terme, il est probable que VirtualHub (for web) remplacera GatewayHub.