Lumière sur Taulas, un protocol HTTP simplifié pour interroger ses senseurs montés sur Arduino + ESP8266

Aujourd'hui, je voudrais mettre en lumière le travail de Nicolas Mora autour de Angharad - un système domotique avec une interface basée sur REST/JSON.
Je voudrais surtout attirer l'attention sur Taulas... abordé un peu plus loin.

BabelOuest (aka Nicolas Mora) à, par ailleurs, écrit un petit article intéressant sur LinuxFr.org
Source: Cet article de BabelOuest sur LinuxFr

Le composant qui nous intéresse est Taulas... un des éléments composant Angharad.

Taulas
Selon l'auteur, Taulas est "Arduino Source files for Angharad system device".
Il s'agit surtout d'un protocole simple permettant d'obtenir les informations des senseurs branchés sur un Arduino.
Principalement accessible par l'intermédiaire du port-série d'Arduino, Taulas à été étendu pour supporter une interface REST.

Taulas_tls0
Il existe plusieurs implémentations dans dépôt GitHub de Taulas.
L'implémentation de taulas_tls0.ino (pour Arduino) est vraiment très intéressante si vous savez lire du code Arduino.
Ce croquis attend des instructions sur port série et renvoi les données des senseurs au format JSON.

Dans les sources, nous avons cet exemple de commande:
<SENSOR/TEMPINT0/1>

Notez que la commande utilise < comme préfixe et > comme suffixe. "SENSOR" est la commande et "/tempint0/1" le paramètre de la commande.
Ce qui produit la réponse suivante:

<SENSOR/TEMPINT0/1:{"value":23.5}>

On y retrouve le préfix/suffixe ainsi que la commande suivit d'un ":".
Vient ensuite la réponse au format JSON {"value":23.5}

A noter qu'il existe également la commande "OVERVIEW" qui retourne la valeur de tous les senseurs dans une structure JSON nettement plus riche.

taulas_esp8266_webserver
Le croquis taulas_esp8266_webserver.ino permet de transformer un ESP8266 en webservice Taulas pour relayer les requêtes http vers un Arduino (via le port série). Cela permet d'interroger les senseurs branché sur l'Arduino (grâce au croquis taulas_tls0.ino) puis de retourner l'information via le port série vers l'ESP8266 qui lui renverra le contenu en réponse à la requête HTTP.

Le service rest du webserveur fonctionne comme suit:

WEBSERVER_PREFIX?command=<COMMAND>

Une commande de test (dans un navigateur internet) devrait donc ressembler à ceci:
http://192.168.1.200:858?command=SENSOR/TEMPINT0/1


Vous noterez qu'il ne faut pas indiquer les signes < et > dans l'URL.
En réponse, le serveur http retourne simplement le contenu JSON (et uniquement lui) retourné par l'Arduino.

Des infos en plus concernant Taulas_tls0
En consultant le code de taulas_esp8266_webserver.ino j'y ait découvert des commandes série complémentaires adressée à taulas_tls0.ino .

Commande série <NAME>
Permet d'obtenir le devicename, nom attribué au périphérique Arduino.
A la suite, duquel j'ai remarqué les commandes:
  • <COMMENT: HELLO  devicename> pour s'annoncer auprès du périphérique
  • <COMMENT: NAME ERROR> si la réponse renvoyée par port série n'est pas correct.

Commande série <MARCO>
Qui est en fait un PING pour s'assurer que le module Arduino soit toujours fonctionnel. Ce dernier doit répondre POLO.
Chouette clin d'oeil.

Commande série - retour d'alerte
Le programme Arduino à la possibilité de retourner une alerte par l'intermédiaire de la valeur JSON spéciale "alert".
Cette alerte, traitée par le taulas_esp8266_webserver fait un appel à l'URL d'alerte (si celle-ci est configurée).

Des infos en plus sur taulas_esp8266_webserver
Toujours en consultant le code de taulas_esp8266_webserver.ino ont y trouve au API Rest complémentaire
WEBSERVER_PREFIX/alertCb?url=<URL_CALLBACK>

Qui permet de passer une URL de rappel pour être informé des différents messages d'alertes/erreur/autre concernant l'application ESP8266, Erreur de liaison série OU encore erreur du module Arduino.
C'est une idée vraiment très astucieuse...

En cas d'alerte, l'URL de rappel est appelée avec des paramètre complémentaires.
<alertCallbackUrl>/alert/@submodule_name/@source/@element/@message/

Pourquoi s'intéresser à Taulas?
IoT est un domaine dans lequel il y a vraiment beaucoup d'activité... surtout dans le monde open-source.

Il est toujours possible de développer son propre protocol pour réaliser son installation maison.

Mais si quelqu'un à une bonne idée... y a investit du temps...  et bien le mieux que l'on puisse faire, c'est de s'y pencher pour ne pas réinventer la roue une fois de plus.

Taulas est vraiment intéressant, surtout la version HTTP.
Passer un peu de temps dans le code était vraiment très intéressant.