Débuter avec les Rules d'ESP Easy. Créer un mini serveur domotique à base d'ESP8266 • Domotique et objets connectés à faire soi-même

Depuis la version R108 du firmware ESP Easy, il est possible de créer de petits scénarios (Rules) permettant de transformer n’importe quel module ESP8266 en mini serveur domotique. Les Rules comblent très efficacement l’absence d’éditeur de code.

Ce tutoriel est une synthèse de la documentation officielle disponible sur http://www.esp8266.nu/index.php/Tutorial_Rules

Découvertes du système de Rules d’ESP Easy

ESP Easy dispose d’un moteur de règle (rules) qui permet de créer de petits scénarios domotiques. C’est très pratique car il est possible d’embarquer de la logique directement dans l’objet connecté sans dépendre d’un serveur domotique. C’est largement suffisent pour des usages courants. Allumer un éclairage via un relais lorsqu’on détecte une présence à l’aide d’un détecteur de mouvement ou un radar. Allumer / éteindre un climatiseur lorsqu’on atteint un seuil de température… Bref tout ce qu’on pourrait faire avec une box domotique classique.

L’écriture des rules se fait à l’aide de mots clé. Ce n’est pas un langage de programmation mais cela s’en rapproche très fortement.

Activer la page Rules

La page de configuration n’est pas active par défaut. Pour l’activer, il faut aller à la page Tools puis Advanced. Cochez la case Rules (règles) qui se trouve tout en bas de la page de paramètres.

5urecjul3xwl5kwpavyg-8504189

Après l’enregistrement de la configuration, une nouvelle page Rules est disponible.

Ne vous attendez pas à un éditeur de scénario, on est sur un ESP8266 ! Vous avez juste un champ texte capable de contenir 2048 caractères. Cela semble peu mais c’est déjà suffisant pour créer de petits scénarios comme nous allons le voir. Il faudra être sobre dans les commentaires du code, ou encore mieux avoir un version non commentée pour gagner de précieux caractères.

Syntaxe

Vocabulaire

  • event événement
  • Opérateurs de comparaison : = < et >
  • value value
  • action exécute l’action ou un bloc d’actions
  • […] permet de récupérer la valeur d’une variable d’un Device [Device Name#Value Name] . Par exemple pour récupérer la température (Value name : Température) d’un DHT22 (Device Name : DHT22), on fera [DHT22#Temperature]. La casse n’est pas prise en compte, [dht22#temperature].

Commandes

  • on…endon déclencheur d’action lorsqu’un événement se produit. On récupère l’état d’un déclencheur comme une variable [Device Name#Value Name]. La mise entre crochet n’est pas nécessaire.
  • if..endif ou  if…else…endif test conditionnel

Variables système

  • System#Boot permet de lancer une action au démarrage de l’ESP8266. Par exemple configurer l’état de sorties de GPIO, lancer un timer…

Ecriture

On peut écrire les règles en ligne

[=,][value] do 

ou en bloc

on [=,][value] do
 
 
endon

Timers

  • timerSet déclenche un timer. Par exemple timerSet,1,10. Déclenche le timer 1 pour 10 secondes
    • timerSet,ID,Duree
    • ID identifiant du timer nécessaire pour déclencher une action à la fin timer
    • Duree durée du timer en secondes
  • on Rules#Timer=1 do. Déclenche un action à la fin du timer 1

Actions récurrentes (Time)

Très pratique pour lancer des actions récurrentes, on clock#Time=JOURS,HEURE. Par exemple allumer l’arrosage des plantes tous les matins à 7h30 :

on clock#Time=All,7:00 do

Jours : All (tous les jours) ou un jour en particulier (3 premières lettres du jour en anglais), Sun, Mon, Tue, Wed, Thu, Fri, Sat

Heure au format HH:MM

Déclenche une action depuis un appel HTTP

Il est possible de déclencher une action à l’aide d’une requête HTTP reçue d’un logiciel domotique ou d’un navigateur internet. La requête HTTP sera de la forme

http:///control?cmd=event,ouvrevannearrosage

Sur l’ESP il suffira de créer une Rule qui déclenche l’action appelée comme ceci

on ouvrevannearrosage do
  gpio,2,1       // ouvre la vanne d'arrosage
  timerSet 1,600 // durant 10 minutes
endon

on Rules#Timer=1 do
  gpio,2,0       // ferme la vanne d'arrosage
endon

Déclencher une action sur un autre noeud ESP Easy (SendTo)

Les modules ESP Easy peuvent communiquer entre eux. On peut déclencher des actions sur un autre ESP à l’aide de la commande dont le formalisme est SendTo ,

Sur le premier ESP#1, on envoi la commande d’ouverture de la vanne d’arrosage

on demoEvent do
  sendTo 2,event,ouvrevannearrosage 
endon

Sur l’ESP#2, la règle précédente permet de déclencher l’ouverture de la vanne d’arrosage durant 10 minutes.

LevelControl : déclenchement sur seuil

Le Device Level Control (page du Device en Anglais) permet également de créer un déclencheur lorsqu’un seuil est atteint. L’utilisation la plus courante et la commande d’allumage d’un chauffage lorsqu’une température seuil est atteinte.

Dans la liste Device, choisissez Level Control puis

  • Name donnez une désignation
  • IDX si vous utilisez Domoticz, vous pouvez récupérer l’état du relai de commande. Dans tous les cas, donnez un numéro différent de 0.
  • 1st GPIO la sortie qui pilote le relai
  • Check Task sélectionnez le déclencheur. Par exemple une sonde de température.
  • Check Value valeur de seuil. On choisi la variable de la sonde à vérifier
  • Hysteresis permet de calculer la fourchette dans laquelle doit rester la valeur mesurée.

Comment fonctionne l’algorithme

D’après le code source disponible ici du plugin _P021_Level :

  • Un seuil haut est calculé : seuil + hysteresis / 2
  • Un seuil bas est calculé : seuil – hysteresis / 2
  • L’algorithme vérifie ensuite si la valeur mesurée par la sonde se trouve dans la plage de température (seuil bas à seuil haut)

On est loin d’une boucle de régulation, mais ça peut suffire pour réguler simplement un petit chauffage.

Dummy Device : recopie ou calcul de valeur

On peut enfin réaliser de petits calculs ou ‘recopier’ la valeur d’une variable lorsqu’un événement se déclenche (ou à la fin d’un Timer) et les stocker dans un Dummy Device. Le Dummy Device permet de simuler différents type d’appareil dont on pourra simplement récupérer la valeur dans un logiciel domotique :

  • Single 1 valeur de sortie
  • Temp_Hum Température + Humidité
  • Temp_Baro Température + Baromètre (pression atmosphérique)
  • Temp_Hum_Baro Température + Humidité + Baromètre (pression atmosphérique)
  • Dual 2 valeurs de sortie
  • Triple 3 valeurs de sortie
  • Switch état d’un interrupteur
  • Dimmer niveau d’un variateur

Déclencheur

  • Changement d’état d’un device (mesure actualisée, contacteur…)
  • A la fin d’un timer
  • Au démarrage (on System#Boot do)

Commande

On peut affecter une valeur ou faire un petit calcul (+ , – , / , * ) à l’aide de la commande suivante

TaskValueSet ,,

  • task nr numéro du Device (récupéré dans le tableau Devices, colonne Task)
  • taskvalue nr index de la variable (1 à 4) du Dummy Device
  • value ou formula valeur affectée à la variable, ou calcul.

Par exemple, on affecte la température mesurée par le DHT22 à la 1ère variable du Dummy Device n°5

TaskValueSet;5,1,[DHT22#TempDHT22]

On est encore bien loin de la puissance et des possibilités offertes par un serveur domotique mais les Rules (Règles) d’ESP Easy permettent de déporter des règles de fonctionnement simple. Les Rules peuvent être très intéressante pour certaines applications ou une coupure du réseau WiFi peut s’avérer problématique. Il est plus simple et plus fiable d’automatiser la fermeture d’un portail, d’un système d’arrosage… directement sur l’ESP8266 que sur le serveur domotique. Une défaillance du logiciel, du matériel ou de la connexion WiFi sera sans conséquence sur le fonctionnement du matériel domotisé.

Et maintenant

Convaincu par le système de Rules, voici un petit projet de réalisation d’un thermostat connecté à Jeedom

Avez-vous aimé cet article ?