Aujourd'hui, j'inaugure une nouvelle catégorie. Je vous y présenterais un peu plus de mon travail.

Commençons donc par un système un peu différent de mon quotidien...

Besoin : le client souhaite signaler de manière lumineuse l'état des agents d'un centre de support informatique intégré. Car dans cette entreprise, les agents du support technique peuvent répondre au téléphone, mais également recevoir la visite de leurs collègues qui viennent poser des questions ou rapporter leurs ordinateurs pour divers travaux. Le but est que les agents disponibles soient rapidement identifiés par les visiteurs du service.

Le client dispose des voyants lumineux fabriqués en interne, à base de bande de LEDs RGB et de Plexigas. La première image montre à quoi ils ressemblent (j'ai toutefois effacé le Logo de la photo), ils mesurent environ 8 cm de haut :

Le client souhaite indiquer plusieurs états :

  • Agent délogué : voyant éteint
  • Agent logué et disponible : voyant vert
  • Agent logué et en ligne : voyant rouge
  • Agent en pause : voyant jaune
  • Plus deux variantes clignotantes du rouge et du jaune en cas de dépassement d'une limite temporelle prédéfinie.

Le jaune est obtenu par mélange du vert et du rouge. Pour des raisons économiques, le bleu n'est pas câblé, ce qui limite à 2 au lieu de 3 le nombre de commande nécessaire par poste.

Le système de téléphonie est basé sur Asterisk, un logiciel IPBX open source réputé.

Problématique : comment récupérer des données sur un serveur informatique, et transformer ces données en action sur des voyants ?

La solution a été d'utiliser un système Crestron, qui se connecte à Asterisk via l'API du logiciel. L'automate Crestron se connecte à Asterisk, par l'intermédiaire d'un socket TCP/IP. L'automate interroge le serveur, puis traite les informations reçues et décide d'actionner des relais en fonction du résultat. Les LEDs sont commandées en tout ou rien (suffisant pour de la signalisation), pour des raisons de coût par rapport à une solution avec des modules RGB pour LEDs.

Il y a donc 16 relais dans le cas présent pour gérer 8 postes de travail :

Et voici le résultat final :

La mise au point a posé quelques soucis (il faut justifier son salaire, hein)... Le premier jet du programme fonctionnait ainsi : l'automate se connectait à Asterisk de manière passive et recevait les "Events" du système de téléphonie. Deux problèmes se sont posés : d'une part, la quantité de données à traiter est directement proportionnelle au nombre de postes connectés et à leur activité. Et pas moyen de calmer suffisamment Asterisk car les filtres disponibles n'interviennent pas poste par poste mais par catégorie d'"Events". D'autre part, les systèmes Crestron ont un système d'exploitation qui bride à 20 ms le temps d'exécution d'un module Simpl+ (avant de forcer un task switching - cette limitation a pour but de limiter les plantages dûs à un module Simpl+, écrit en C). Résultat : l'automate recevait les informations plus vite qu'il ne pouvait les traiter, amenant à des latences qui pouvaient dépasser la minute !

La seconde version du système fonctionne de manière opposée : cette fois-ci c'est l'automate qui interroge Asterisk (les "Events" étant désactivés). D'une part, on n'interroge que les variables qui nous intéressent, ce qui limite la quantité de données à traiter et en augmente la pertinence, d'autre part l'automate ne refait une requète au serveur une fois seulement que toutes les données reçues ont été traitées. La latence passe ainsi sous la seconde, ce qui est tout à fait acceptable. Tellement acceptable que l'action que de se loguer ou de se déloguer générait un passage furtif au rouge des voyants ! En effet, ces actions créent un appel vers le serveur, que le Crestron détectait dans de nombreux cas. La solution a été d'ajouter (par programmation) une latence supplémentaire dans la détection de la prise d'appel, et donc de l'affichage du rouge.

Et vous, vous faites quoi avec Crestron ?

PS : j'ai retouché les photos pour cacher les marques et les noms des opérateurs.