Accueil / Domotique / Rules ESP Easy : créer un mini serveur domotique à base d’ESP8266

Rules ESP Easy : créer un mini serveur domotique à base d’ESP8266

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 des Rules

Le firmware ESP Easy en détail

 

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.

espeasy advanced tool page

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.

espeasy rules page

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

<event>[=,<,>][value] do <action>

ou en bloc

on <event>[=,<,>][value] do
 <action>
 <action>
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

Remarque : pour le moment il n’est pas encore possible d’exécuter une action à intervalle régulier

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://<ESP-ip>/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 <UnitNrESP>,<command>

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.

esp easy level control mini serveur domotique esp8266

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

esp easy dummy device

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>,<taskvalue nr>,<value|formula>

  • 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é.