Domoticz : script Lua pour créer un affichage déporté OLED avec ESP Easy

Dans le tutoriel précédent, nous avons vu comment créer un affichage déporté pour le serveur domotique Jeedom à l’aide d’un écran OLED configuré avec le firmware ESP Easy. Impossible de ne pas expliquer comment faire la même chose avec Domoticz ! On doit faire avec les contraintes du firmware ESP Easy, sauf à développer son propre plugin (tout est expliqué ici), on va devoir piloter l’affichage directement à l’aide de requêtes HTTP depuis Domoticz.

Les scripts Lua

Je ne vais pas refaire un tutoriel sur les scripts Lua (sauf si vous insistez ;-)), il y a en  déjà de très bons sur internet comme celui d’easydomoticz.com (en Français). Nous avons juste besoin de faire quelques rappels rapides :

  • Les scripts Lua sont stockés dans le répertoire ~/domoticz/scripts/lua 
  • Il existe trois types de script. Domoticz fait la différence à partir du nom de fichier.
    • script_device_NomDuDevice : le nom du device doit être identique, il est donc interdit d’utiliser des espaces et des caractères accentués ou spéciaux ( 😥 )
    • script_time_NomScript.lua : le script est exécuté chaque minute. Le script a 10 secondes pour se terminer. Au delà, il est arrêté par Domoticz pour ne pas pénaliser les autres scripts et le système en général.
    • script_variable_NomVariable.lua : se lance sur un changement de la variable indiquée.
  • Ils doivent porter l’extension lua

Le Wiki complet sur les scripts Lua est ici.

Comment créer le script Lua (SSH)

Pour une raison qui m’échappe encore (bug ?), il ne semble pas possible d’éditer les scripts présents dans le répertoire scripts depuis le gestionnaire d’événements. Il va donc falloir le créer sur un éditeur de texte puis télécharger le fichier en FTP ou éditer directement le script sur le serveur Domoticz en SSH à l’aide de nano. J’ai opté pour cette solution afin de ne pas rencontrer de problème d’encodage (UTF-8) et de caractères de fin de ligne. Si vous débutez avec Linux, suivez ce guide pour tout savoir sur SSH.

Connectez vous à Domoticz en SSH (à l’aide de putty sur Windows, depuis le Terminal sur macOS et Linux). Placez vous dans le répertoire des scripts.

Astuce. Pour les utilisateurs Mac, le tilde (~) s’obtient avec la combinaison de touche ALT + N. Merci Steve !

Ouvrez un nouveau script nommé script_device_Exterieur.lua . Ici, on va envoyez sur l’écran déporté la température d’une sonde extérieure qui fonctionne avec le firmware MySensors.

Quelques éléments de langage Lua avant de commencer

Avant de nous lancer dans le script, voici quelques éléments de langage qui pourront vous servir pour d’autres scripts

Permet de mettre en commentaire une ligne. Par exemple

— ceci est un commentaire

print() Permet d’afficher un message dans le journal (Log) accessible depuis le menu Réglages. Exemple

print(“Ajoute un message au journal”)

chaine=”%20″ Pour créer une variable contenant une chaine de caractères, il suffit de la déclarer et lui affecter une valeur. Par exemple

point=”%2E”

..chaine

..variable

Assemble des chaines de caractères (également une variable contenant une chaine). Par exemple

baseurlESP..’oled,1,3,Temp’..space

fin de ligne Contrairement à beaucoup de langages (C++, Javascript…), il n’y a pas de caractère de fin de ligne. Attention donc à l’encodage du fichier !

devicechanged[‘Device’]

Permet de savoir si un device a changé d’état ou de valeur. Inutile dans un script _device puisqu’il est justement déclenché lorsque le Device change.

if () then

end

la boucle if en lua

otherdevices_svalues[‘Device’]

Récupère la valeur du Device indiqué.

Encoder les caractères spéciaux par le code ASCII correspondant

On va donc devoir gérer nous même l’encodage des caractères spéciaux. Le mieux est de créer une variable pour chaque caractère qui sera utilisé dans la requête HTTP envoyée à l’ESP8266. En voici quelques uns, vous devriez tous les trouver ici.

On en profite également pour créer la base de l’URL qui est toujours identique. Il suffira de modifier l’adresse IP qui correspond à votre ESP8266.

Tous les scripts Lua pour Domoticz doivent renvoyer un commandArray qui contient les commandes à exécuter. On en profite pour afficher dans le journal que le script vient de s’exécuter.

On doit envoyer une série de requêtes HTTP à ESP Easy. Pour cela, on doit simplement ajouter une commande dans le tableau commandArray pour chaque requête HTTP. Pour commencer on efface l’écran

Maintenant on actualise ligne par ligne l’écran. Par exemple on écrit sur la ligne 3 et la colonne 1, Temp: 19.5*C. On assemble la chaine en remplaçant les espaces et caractères spéciaux par le code ASCII.

Le degré (°) ne fonctionne pas (ou je n’ai pas encore trouvé comment faire !).

Enfin, on peut forcer l’allumage de l’écran avec la commande oledcmd,on.

Le script doit obligatoirement retourner un tableau commandArray

Et voici le script dans son intégralité qu’il vous suffit de coller dans le fichier.

Enregistrez le script avec CTRL + X puis O (ou Y si Raspbian est en anglais). Dès que le Device sera actualisée, l’affichage déporté sera actualisée également. Si rien ne se passe, allez dans le journal (Log) pour vérifier s’il n’y a pas une erreur dans le script.

Pourquoi ne pas utiliser Blocky ?

Ce doit être possible mais Blocky est un peu blocké (pardon bloqué) pour faire ça. Contrairement à Jeedom qui sait encoder l’URL à la volée (remplacer les espaces et les caractères spéciaux par leur code ASCII), avec Domoticz il faut tout faire soi-même. Ce n’est pas un problème en soi, mais avec Blocky, ça risque de vite devenir galère.

Préparer l’affichage OLED SSD1306 déporté

Egalement une petite piqûre pour rappeler comment câbler et configurer un affichage OLED monochrome miniature (SSD1306).

Ici, je vous propose d’ajouter un bouton pour allumer l’écran durant un certain temps (ici 10 secondes). Ca peut être intéressant d’éteindre l’écran ou tout simplement par écologie. On va mettre un délai d’actualisation très long, ou au moins supérieur à la fréquence de rafraichissement des données envoyée par Domoticz. C’est nécessaire pour éviter que l’affichage ne soit ré-initialisé par ESP Easy. Comme ESP Easy ne dispose pas des données à afficher (elles sont envoyées par Domoticz directement), l’écran deviendra noir tout simplement.

L’écran OLED se connecte sur le bus I2C. Par défaut ce sont les broches GPIO4 (SDA, D2 de l’ESP8266) et GPIO5 (SCL, D1 de l’EP8266) qui sont utilisées.

esp8266 Wemos D1 mini Wemos D1 Mini (compact et économique) ou n’importe quel autre ESP8266 ESP-12
oled ssd1306 ecran i2c Ecran OLED monochrome 168×64 pixels 0.96″

SSD1306

wemos d1 mini oled shield Ecran OLED officiel Wemos. Compact, à empiler sur la D1 Mini.

environ 4,40€

mini switch Boutons poussoir (x3 mini switchs)
jumper dupont Jumper Dupont (optionnel)
breadboard Breadboard (optionnel)

Voici le résultat obtenu avec le script Lua proposé.

espeay esp easy domoticz script lua ssd1306 oled display deported dht22

Inscrivez-vous à la newsletter hebdomadaire

Aucun spam et aucun autre usage ne sera fait de votre email. Vous pouvez vous désinscrire à tout moment.

Tags: