Page web, Yocto-Visualization et actuateurs (suite)

Page web, Yocto-Visualization et actuateurs (suite)

Il y a trois semaines, on vous a montré comment intégrer sur une page web du code qui gère des actuateurs Yoctopuce tout en utilisant Yocto-Visualization (for web). Mais il y avait une limitation: on ne pouvant pas utiliser les callbacks DeviceArrival et DeviceRemoval parce qu'ils sont déjà utilisés par Yocto-Visualization (for web) d'où un code un peu bancal pour vérifier si les actuateurs concernés sont connectés ou non. Comme ça nous chiffonnait un peu, on a légèrement amélioré Yocto-Visualization (for web)...

Des callbacks Arrival et Removal dans YWebPage

YWebPage est la classe statique qui décrit l'instance de Yocto-Visualization (for web). On a ajouté les fonctions RegisterDeviceArrivalCallback et RegisterDeviceRemovalCallback qui se comportent exactement comme celles de YAPI. Lorsque que les utilisez, Yocto-Visualization (for web) va d'abord faire son petit travail sur les modules concernés puis ensuite appeler votre callback. Du coup, si on reprend notre fonction Init, on peut se débarrasser de l'affreuse fonction testRelay() et enregistrer nos callbacks à la place.

 async function init()
 {
    if (await YAPI.InitAPI(YAPI.DETECT_NONE,errmsg) == YAPI.SUCCESS)
     {
        relay = YRelay.FindRelay("ONOFF");
        input.disabled = !(await relay.isOnline());
        input.addEventListener('change', inputChanged)
        relay.registerValueCallback(relayStateChanged)
        YWebPage.RegisterDeviceArrivalCallback(arrival);
        YWebPage.RegisterDeviceRemovalCallback(removal);

     } else document.write(errmsg.msg);
}


Notez que pour que la classe YWebPage soit accessible, il ne faut pas oublier de la rajouter dans la liste des imports

import {YAPI,YErrorMsg,YWebPage}   from  "./yv4web-full.min.js";



Utilisation

On remplace donc notre fonction testRelay() par le traitement de nos deux callback. Là, il y a une petite astuce dont on ne vous probablement jamais parlé, même si on l'utilise souvent dans nos propres programmes. On cherche à savoir quand notre relais "ONOFF" est connecté, mais le paramètre du callback est de type YModule. Logique puisque ce callback sert à prévenir de l'arrivée d'un module. Par conséquent, comment savoir si notre relais en fait partie? Réponse: en utilisant les fonctions

on peut assez facilement écrire du code qui retrouve une fonction d'un module en se basant sur son type et son nom. Par exemple la fonction ci-dessous nous renvoie le nom matériel complet d'une fonction si elle trouve une fonction de type ftype, nommée fname dans un module. fname peut tout aussi bien être un nom logique qu'un nom matériel.

async function findFunction(m, ftype, fname)
 {
   for (var i=0;i<await m.functionCount();i++)
    {
      if  (await m.functionType(i)==ftype)
      {
        if  (await m.functionName(i)==fname) // test logical name
          return await  m.get_serialNumber()+"."+ await m.functionId(i);
        if  (await m.functionId(i)==fname)   // test hardware name
          return await  m.get_serialNumber()+"."+ await m.functionId(i);
      }
    }
   return  "";
 }



On a maintenant toutes les briques pour gérer proprement la connexion et la déconnexion de notre relais à l'aide de callbacks.

async function arrival(m)
 {
   if (await findFunction(m, "Relay", "ONOFF") != "") input.disabled =false;
 }

async function removal(m)
 {
   if (!await relay.isOnline()) input.disabled =true;
 }


Vous trouverez le code complet ici, pour qu'il fonctionne, vous aurez besoin de la version 56436 ou ultérieure de Yocto-Visualization (for web).

Voilà, c'est tout pour cette semaine, si vous voulez en savoir plus sur les petits secrets de Yocto-Visualization (for web), voici une liste de liens qui vous permettra d'approfondir.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.