Chez Yoctopuce, certains développeurs ont des ados qui aiment beaucoup les jeux vidéo. Lors des repas, il est parfois très souvent difficile de les décrocher de leur PC, en particulier lorsqu’ils jouent avec un casque audio. Cette semaine, on va essayer de résoudre ce problème à la manière Yoctopuce.
Le plan est d'installer discrètement un petit service sur les PC des enfants pour diffuser un message sur la sortie audio quand un interrupteur distant est pressé. Lorsque le repas est prêt, il suffit d’actionner l’interrupteur installé dans la cuisine pour que tous les PC de la maison diffusent un message annonçant que le repas est prêt. De cette manière, même si l'ado utilise un casque, il entendra l'annonce et les parents n'auront plus besoin de crier à travers le logement.
Pour ce faire, nous avons besoin d'un bouton type "arrêt d'urgence" que nous allons relier à un Yocto-Knob (ou n'importe quel autre module Yoctopuce qui a une entrée anButton). Ce Yocto-Knob est branché à un YoctoHub-Wireless-n afin de le rendre accessible par toutes les machines de réseau local.
Le schéma du système
Tout ceci est intégré de manière discrète dans le meuble de la cuisine.
Le bouton intégré dans la cuisine
Une fois le bouton installé, il ne reste plus qu'à réaliser le service Windows à installer sur les machines.
Le service Windows
Le service est assez simple. Au démarrage, il configure la librairie Yoctopuce pour établir la connexion avec le YoctoHub-Wireless-n et récupère l'objet de type YAnButton qui permet d'interagir avec l'entrée du Yocto-Knob sur lequel est branché le bouton. Il configure le synthétiseur vocal et un timer est en charge d'appeler la méthode CheckButton toutes les 5 secondes.
// Registers the connection to the YoctoHub
string errmsg = "";
if (YAPI.PreregisterHub(_url, ref errmsg) != YAPI.SUCCESS) {
FatalError("YAPI.PreregisterHub failed:" + errmsg);
}
// Instantiates an YAnButton object to interact with button
_button = YAnButton.FindAnButton(_hwid);
// Configures Text2Speech
_synth = new SpeechSynthesizer();
// Creates a timer that calls CheckButton every 5 seconds
_timer = new Timer(CheckButton, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
...
Si vous avez l'habitude d’utiliser notre librairie, rien de bien particulier si ce n'est l'utilisation de la méthode YAPI.PreregisterHub qui ne retourne pas d'erreur lorsque le YoctoHub-Wireless-n n'est pas atteignable. Pour plus de détails sur cette méthode, vous pouvez consulter notre article "RegisterHub() vs PreregisterHub()".
La méthode CheckButton est aussi très simple. Elle vérifie que le bouton est en ligne avec la méthode isOnline(). Si c'est le cas, elle teste l'état du bouton avec la méthode get_isPressed() et lit le message à l'aide du synthétiseur vocal de Windows en fonction de l'état du bouton.
{
if (_button.isOnline()) {
if (_button.get_isPressed() == YAnButton.ISPRESSED_TRUE) {
_synth.Speak(_message);
}
} else {
EventLog.WriteEntry("CheckButtonService", "Button is offline",
EventLogEntryType.Error);
}
}
Comme vous pouvez le voir, le code pour interagir avec le Yocto-Knob est très simple. La première raison est que la librairie Yoctopuce cache toute la complexité de la connexion entre les modules Yoctopuce et l'application. L'autre raison est que nous utilisons un bouton d’arrêt d'urgence. Comme ce bouton reste activé, il n'est pas nécessaire d'être super réactif et d'enregistrer un callback pour capturer immédiatement la transition.
Le projet complet est disponible sur GitHub. Le repository contient tout le code source du service ainsi qu'une version compilée et directement utilisable dans le sous-répertoire bin/Release.
Tester et installer le service
Maintenant que nous avons un service fonctionnel, il ne reste plus qu'à le tester et l'installer sur les ordinateurs. La première étape est de copier tout le répertoire bin/Release sur l'ordinateur, idéalement dans un répertoire caché pour qu'il ne soit pas trop facilement détectable.
Il faut ensuite ouvrir un terminal avec les droits administrateur et lancer l'application YoctoStopTheGamer.exe avec l'option --test suivi de l'adresse IP du YoctoHub-Wireless-n. Il faut aussi passer le HardwareID ou le nom logique de l'entrée sur laquelle on a branché notre bouton d'arrêt d'urgence. Si les concepts de HardwareID et de nom logique ne vous sont pas familiers, vous pouvez lire notre article "Structure logique des modules Yoctopuce" qui explique en détail le fonctionnement de nos modules. Par défaut, l'application lit le message "Stop playing" mais il est possible de changer ce message avec l'option --msg
L'exemple suivant lit le message "A table!" quand l'entrée anButton1 du Yocto-Knob YBUTTON1-2F471 est activée.
C:\hidden>.\YoctoStopTheGamer.exe --test 192.168.2.49 YBUTTON1-2F471.anButton1 --msg "A table!" Yoctopuce Lib version is :2.0.62875 (2.0.62875) Hub URL :localhost Button :input1 Message :A table! Locale : Selected voice:Microsoft Hortense Desktop (lang=fr-FR)
Unne fois ces paramètres validé, il suffit de remplacer l'option --test par --install pour installer le service et le démarrer.
C:\hidden>.\YoctoStopTheGamer.exe --install 192.168.2.49 YBUTTON1-2F471.anButton1 --msg "A table!" C:\hidden>
Une fois le service installé il sera démarré automatiquement à chaque démarrage et aucune fenêtre ne sera visible. Pour ne pas trop éveiller de soupçons, le service est listé comme "Gamer Compliance Service" dans la liste des services.
Le service s'appelle Gamer Compliance Service
Notez que l'application permet aussi de désinstaller le service en utilisant l'option --uninstall
Conclusion
Voilà, grâce au Gamer Compliance Service, les ados accros aux jeux vidéo n'auront plus d'excuse pour manquer un repas... En tout cas jusqu'à ce qu’il tombe sur cet article :-)