Cette semaine, nous avons ajouté un nouvel utilitaire à l'API en ligne de commande. Ce nouvel utilitaire s'appel ysh: c'est le shell pour les modules Yoctopuce. Il s'agit d'un utilitaire interactif qui permet d’exécuter n'importe quelle commande sur n'importe quel module. Voyons ce qu'il apporte de nouveau...
Ce nouvel utilitaire ysh permet d'utiliser toutes les fonctions d'un module Yoctopuce. En effet, le même exécutable peut envoyer des commandes au capteur de température d'un Yocto-Meteo mais aussi au capteur d'humidité. Auparavant, il fallait utiliser l'utilitaire YTemperature et l'utilitaire YHumidity. Cet utilitaire est l'union des tous les utilitaires que contenait l'API en ligne de commande.
L'utilitaire ysh permet aussi d’exécuter une suite de commandes depuis un fichier texte. Une commande à exécuter a la syntaxe suivante:
- La <fonction> est le type de fonction sur lequel on va travailler (YRelay, YSensor, YModule, etc...).
- La [cible] est le nom de la fonction auquel la méthode va s'appliquer. Il est aussi possible d'utiliser l'alias "all" pour cibler toutes les fonctions compatibles. Certaines méthodes n'ont pas besoin de cible.
- La <méthode> est la méthode que l'on souhaite exécuter. La quasi-totalité des fonctions disponibles dans les API de programmation classiques sont disponibles.
- Les [paramètres] sont, assez logiquement, les paramètres de la méthode.
Si vous avez déjà utilisé notre API en ligne de commande, vous pouvez remarquer que la syntaxe est similaire aux autres utilitaires. Il faut simplement ajouter le type de fonction que l'on va utiliser comme premier argument. Ce nom de fonction correspond au nom de l'utilitaire qui était utilisé auparavant, de cette manière il est facile de transformer vos scripts pour utiliser ysh.
Par exemple, le script
YLightSensor all get_currentValue
qui utilise les utilitaires YRelay et YLightSensor peut être modifié pour utiliser ysh comme ceci:
ysh YLightSensor all get_currentValue
Maintenant que nous avons vu la syntaxe d'une commande, regardons les différentes solutions pour passer des commandes à exécuter à ysh.
La première méthode est, comme nous l'avons vu plus haut, de passer la commande directement en argument lors de l’exécution de ysh.
L'utilitaire va initialiser la connexion avec le module, exécuter la commande et terminer son exécution. Ce mode de fonctionnement est strictement identique aux utilitaires traditionnels. Le seul avantage est qu'il n'y a qu'un seul exécutable (ysh) à installer.
La deuxième méthode est de lancer ysh en interactif. Dans ce mode ysh affiche un prompt et exécute les commandes que l'utilisateur a tapées.
Pour lancer ysh en mode interactif, il suffit de le lancer sans argument:
> YRelay RELAYHI1-00055.relay1 pulse 20
> YLightSensor all get_currentValue
> _
La troisième méthode est de passer un fichier texte qui contient les commandes à exécuter. Cette méthode est très intéressante car ysh n'initialise la connexion avec les modules qu'une seule fois au démarrage. Ensuite toutes les commandes du fichier sont exécutées les unes après les autres. Par conséquent, exécuter un fichier qui contient deux commandes est beaucoup plus rapide qu’exécuter deux fois ysh avec une commande en argument. Cela permet surtout d’exécuter deux commandes de suite quasi instantanément, ce qui peut est très utile si l'on désire synchroniser plusieurs modules.
Le format du fichier à passer est très simple, chaque ligne est interprétée comme une commande et les lignes qui commence par le caractère "#"" sont ignorées.
YRelay RELAYHI1-00055.relay1 pulse 20
YLightSensor all get_currentValue
L'option --file permet de passer le chemin d’accès du fichier de commandes.
La dernière méthode est d’utiliser le fichier d'entrée standard (stdin). L'utilitaire ysh est capable d’exécuter les commandes qu'il reçoit sur l'entrée standard, et ainsi peut être utilisé conjointement avec d'autres commandes système comme grep, cat, etc..
Voilà, nous avons fait le tour des nouveautés de l'API en ligne de commandes. Ce nouvel utilitaire va certainement être apprécié des utilisateurs qui n'ont pas un grand bagage de programmation, mais qui ont l’habitude d'automatiser des tâches complexes à l'aide de scripts bash.