Les utilisateurs les plus aguerris des modules Yoctopuce savent que ceux-ci hébergent tous un mini serveur Web qui permet de les piloter. En temps normal, on utilise la librairie Yoctopuce pour communiquer avec les modules, mais parfois il peut être utile d'utiliser directement des requêtes HTTP pour piloter les modules Yoctopuce. Nous vous livrons aujourd'hui quelques petits secrets sur cette fonctionnalité.
Utilisation documentée
Dans le manuel de chaque module Yoctopuce, vous trouverez un chapitre intitulé Utilisation avec les langages non supportés. Une des solutions proposées consiste justement à utiliser des requêtes HTTP, envoyées au module à travers un VirtualHub ou un YoctoHub-Ethernet.
Pour expérimenter cette fonctionnalité, utilisez le lien "Open API Browser" disponible en bas de la fenêtre d'interface de votre module, à l'aide d'un navigateur Web:
Lien pour ouvrir l'interface REST
Dans la fenêtre qui s'ouvre, vous pouvez alors modifier chaque attribut du module, à l'aide du bouton edit, puis en appliquant votre changement avec le bouton apply:
Modification d'un attribut manuellement
Après avoir effectué un changement, si vous descendez tout en bas de la page, vous verrez la requête HTTP qui a été effectuée pour appliquer le changement demandé:
Requête HTTP correspondante
Vous pourrez ainsi facilement découvrir comment accéder aux fonctions essentielles de nos modules par des requêtes HTTP: c'est là tout l'intérêt d'une interface REST, dont l'utilisation se passe normalement d'explications. Si la sémantique d'un attribut en particulier vous échappe, vous pourrez toujours trouver des explications dans le manuel du module.
Et utilisation non-documentée...
Outre l'utilisation pour accéder aux modules Yoctopuce depuis un langage non supporté, il peut y avoir parfois un intérêt à utiliser l'interface REST dans un cas un peu particulier: pour outrepasser le fait que notre librairie de programmation ne permet pas d'accéder aux modules Yoctopuce connectés à un YoctoHub via sa connexion USB.
Commençons par expliquer la limitation: le lien USB avec un YoctoHub a une bande passante très limitée. De plus, pour des raisons de protocole, il ne supporte qu'un seule requête à la fois. Si notre librairie permettait de parler à tous les modules derrière un YoctoHub connecté par USB, les utilisateurs risqueraient de se retrouver dans une situation où une requête est bloquée ou retardée parce qu'une autre requête sur un autre module n'est pas terminée, avec comme résultat une interface peu réactive et pas entièrement prédictible. Nous avons donc préféré privilégier la qualité de service, et imposer l'utilisation du canal réseau, beaucoup plus flexible, pour communiquer avec les sous-modules.
Mais si vous vous trouvez dans un cas particulier où il est vraiment impossible d'utiliser le réseau, vous pouvez en réalité contourner cette limitation en utilisant l'interface REST. Pour cela, commencez par ouvrir l'interface REST sur le YoctoHub lui-même, puisque c'est le seul qui apparaît dans le VirtualHub, et cherchez la section intitulée whitePages:
Section whitePages de l'API REST
Vous y trouvez une entrée pour le hub lui-même, mais aussi une entrée pour chacun des modules connectés au hub. Si vous pressez sur le bouton Open API Browser, une nouvelle fenêtre s'ouvre qui vous permet de contrôler le module à travers son API REST, au travers du lien USB et du YoctoHub.
Si vous allez voir les requêtes HTTP correspondantes en bas de page, vous verrez que le secret consiste à cascader les numéros de série du YoctoHub et du module dans l'URL:
Appel à API REST à travers un YoctoHub
Vous savez désormais que si l'on en a vraiment besoin, il est possible de communiquer par USB à un module Yoctopuce derrière un YoctoHub. Mais si vous utilisez cette fonction un peu à la limite de ce que nous supportons, n'oubliez pas que vous utilisez un canal de communication normalement réservé au hub, et que si vous rencontrez une limitation liée à la concurrence entre deux requêtes, on ne pourra que vous dire qu'on vous avait averti du problème...