ESP Easy R120 (et Mega) dispose d’un moteur de script (Rules) qui va permettre de créer un mini thermostat connecté et 100% DIY . Vous pourrez par exemple utiliser cette Rule pour augmenter ou diminuer la consigne du thermostat. Vous pourrez récupérer très facilement cette consigne sur un logiciel domotique (Jeedom, Domoticz…) ou un projet Node-RED ou Javascript.
Pour ce tutoriel, nous allons utiliser deux boutons poussoirs (augmenter, diminuer) ainsi qu’un écran OLED SSD1306 pour afficher la consigne. L’affichage OLED sera piloté par un bouton poussoir.
ESP Easy (R120) ou ESP Easy Mega, attention à la confusion !
Il existe 2 branches (versions) d’ESP Easy ce qui peut entraîner une certaine confusion lorsqu’on débute.
ESP Easy est la version stable (R120) que l’on peut récupérer sur cette page. L’installation à partir de la compilation du code source est difficile (impossible) avec les versions récente de l’IDE Arduino. Suivez ce tutoriel qui explique étape par étape comment installer et configurer le firmware ESPEasy R120 sur un module ESP8266. En cas de problème, utilisez l’utilitaire ESP Tools d’Espressif. Tout est expliqué étape par étape dans ce tutoriel.
ESP Easy Mega est la version en cours de développement disponible ici. Elle embarque plus de plugins, une nouvelle interface et supporte (quelques) cartes de développement ESP32. Pour en savoir plus, vous pouvez lire cet article de présentation. Attention, pour fonctionner votre carte ESP8266 doit au moins disposer d’1MB de mémoire flash (attention à bien choisir votre module ESP-01).
Matériel utilisé
LoLin WeMos D1 Mini (compact et économique) ou n’importe quel autre ESP8266 ESP-12 | |
Alimentation 5/3A micro-usb | |
Ecran OLED monochrome 168×64 pixels 0.96″ | |
Ecran OLED officiel Wemos. Compact à empiler sur la D1 Mini. | |
DHT22 | |
Boutons poussoir (x3 mini switchs) | |
Jumper Dupont (optionnel) | |
Breadboard (optionnel) |
Tous les shields compatibles avec la LoLin d1 Mini
Circuit
Par défaut, le bus I2C est connecté au broches D1 (SCK) et D2 (SDA) de la LoLin Wemos d1 mini. Il est possible de modifier les broches mais dans ce cas, il ne faudra pas oublier d’appliquer les changements sur la page Hardware d’ESP Easy. Il n’y a aucun réglage particulier pour le boutons. Attention à bien utiliser la sortie 3V3 pour ne pas détériorer le GPIO de l’ESP8266.
Configuration des Devices ESP Easy R120
Nous allons créer 4 Devices :
- UP : associé au bouton poussoir augmenter
- DOWN : associé au bouton poussoir diminuer
- CONSIGNE : un Dummy device qui contiendra la valeur de la consigne
- OLED : un affichage permettant de voir la valeur de la consigne à chaque changement.
Voici la configuration terminée.
Bouton augmenter (Switch Input, UP)
Ajoutez un nouveau Device et choisissez le type Switch input dans la liste puis configurez le comme ceci :
- Name : UP
- Delay : inutile d’attribuer un délai, il faut laisser ESP Easy gérer la détection
- IDX : 1 (ou un autre numéro mais différente de 0)
- GPIO : le numéro de la broche sur lequel est branché le bouton, ici D4 (GPIO2)
- Cochez Pull UP et Inversed (inversé)
- Type : Switch
- Switch button Type : ici on utilise un bouton poussoir, on souhaite incrémenter la consigne lorsqu’on appuie dessus, donc choisir Push Button Active Low
- Décochez Send data pour ne pas publier inutilement chaque appui sur le bouton poussoir
- Value name : val (ou un autre nom)
- Enregistrez avec submit
Bouton diminuer (Switch Input, DOWN)
Ajoutez un nouveau Device et choisissez le type Switch input dans la liste puis configurez le comme ceci :
- Name : DOWN
- Delay : 0
- IDX : 2 (ou un autre numéro mais différente de 0)
- GPIO : le numéro de la broche sur lequel est branché le bouton, ici D3 (GPIO0)
- Cochez Pull UP et Inversed (inversé)
- Type : Switch
- Switch button Type : idem, Push Button Active Low
- Décochez Send data
- Value name : val
- Enregistrez avec submit
Consigne (Dummy Device, SENSOR_TYPE_SINGLE)
Ajoutez un nouveau Device et choisissez le type Dummy Device dans la liste puis configurez le comme ceci :
- Name : CONSIGNE (en majuscule)
- Delay : 1 seconde, on souhaite probablement que le logiciel domotique connaisse rapidement la valeur de la nouvelle consigne
- IDX : 3
- Simulate Data Type : choisir SENSOR_TYPE_SINGLE
- Value name : consigne (en minuscule)
- Cochez Send Data
- Decimal : choisissez le nombre de décimales pour la consigne. Ici 1 décimale.
- Enregistrez avec submit
Affichage OLED (SSD1306)
Enfin, nous allons ajouter un affichage pour faciliter le réglage de la consigne. Ajoutez un nouveau Device et choisissez Display – OLED SSD1306. Pour trouver l’adresse de l’écran OLED sur le bus I2C, vous pouvez la trouver avec le scanner I2C qui se trouve dans les Tools. Configuration :
- Name : OLED par exemple
- Delay : délai d’actualisation de l’affichage, 1 seconde
- Consigne : pour afficher la valeur de la consigne sur une ligne (Line), on récupère la valeur de la variable comme ceci [CONSIGNE#consigne]
- Display button : on peut convoquer l’affichage de l’écran à l’aide d’in bouton. Ici, il est branché sur la broche D5 (GPIO14). L’écran reste affiché durant 30 secondes.
- Enregistrez avec submit
Rules (script du thermostat connecté)
Si l’onglet Rule n’est pas visible, allez sur l’onglet Tools puis System -> Advanced et cochez Rules (en bas des réglages).
Comment nous l’avons vu dans le tutoriel précédent dans lequel nous avons créé un BME280 virtuel, pour créer une consigne, l’astuce consiste à créer un Dummy Device. Nous utiliserons le système de Rule pour incrémenter et diminuer la consigne. Pour que cela fonctionne, il faut mettre entre parenthèses la formule de calcul. Comme d’habitude, on récupère la valeur actuelle de la consigne en suivant le formaliste [DEVICE#variable]. On affecte ensuite la nouvelle valeur de la consigne à l’aide de la commande TaskValueSet qui s’écrit comme ceci
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 formule de calcul avec les opérateurs + , – , / , * uniquement.
Ce qui va donner par exemple pour incrémenter le compteur
TaskValueSet 3,1,([CONSIGNE#consigne]+0.5)
On déclenche l’incrément à l’aide du déclencheur on UP#val do . On fait de même pour diminuer on DOWN#val do . Pour éviter que la consigne reste dans une certaine plage, par exemple entre 15°C et 30°C, il suffit d’ajouter un petit test, par exemple si la consigne dépasse 30°C
if [CONSIGNE#consigne]>30 TaskValueSet 3,1,30 endif
Au démarrage, on ne souhaite pas que le chauffage s’arrêt, on va donc initialiser la consigne à une valeur par défaut, par exemple 19°C.
on System#Boot do // Consigne par défaut au démarrage - default value at boot TaskValueSet 3,1,19 endon
Il ne reste plus qu’à coller dans la Rule ce code complet
on System#Boot do // Consigne par défaut au démarrage - default value at boot TaskValueSet 3,1,19 endon on UP#val do // Augmente la consigne - Up setpoint TaskValueSet 3,1,([CONSIGNE#consigne]+0.5) if [CONSIGNE#consigne]>30 TaskValueSet 3,1,30 endif endon on DOWN#val do // Diminue la consigne - down setpoint TaskValueSet 3,1,([CONSIGNE#consigne]-0.5) if [CONSIGNE#consigne]<15 TaskValueSet 3,1,15 endif endon
Voilà, on dispose maintenant d’un petit thermostat connecté fabriqué à moindre coût pour piloter le chauffage depuis un serveur domotique. Il reste quelques petites améliorations à apporter. Il faut maintenir le bouton (+, -) au moins une seconde (c’est probablement à cause de la fréquence de rafraichissement limitée à une seconde au minium du dummy device). Il serait utile de pouvoir récupérer la valeur actuelle du chauffage.
Bonjour,
Très bon tuto, bravo !!!
Par contre j’avais une question sur l’action de règle lors d’un “on System#Boot do” en effet j’essaye une règle qui malheureusement ne fonctionne pas. Que le dummy “[dummy#value] ” soit à 1 la règle déclenche tout de même alors qu’elle devrait le faire lorsqu’il est à 0. Y a t il une autrrer formule de test selon vous ?
Voici la régle:
On System#Boot do //When the ESP boots, do
timerSet,1,10 //Set Timer 1 for the next event in 10 seconds
endon
On Rules#Timer=1 do //When Timer1 expires, do
if [switch#Switch]=1 and [dummy#value]=0 // Test condition
gpio,0,0 // Power ON on GPIO 0
endif
endon
on radia1_on do
gpio,0,0
TaskValueSet 2,1,0
endon
on radia1_off do
gpio,0,1
TaskValueSet 2,1,1
endon
Deux devices déclarés: Un switch input (GPIO,0) et un Generic dummy device
Le but étant de remettre en l’état le relais, lors d’une coupure de courant ou d’un reboot intempestif de l’ESP01S (chose qui arrive très souvent avec les derniers firmwares)
Merci bien et bonne continuation
Bonjour,
Je découvre ESPEasy avec ces petites carte Démis D1 avec cet article bien sympathique.
Alors ok pour créer un mini thermostat autonome (esp32 + rules) qui peut envoyer sa consigne vers une centrale domotique.
Mais comment régler ou envoyer la consigne depuis une centrale domotique vers ce mini thermostat? Agir depuis la centrale sur les boutons UP et DOWN 🤔?
Bonjour,
Y aurait-il un moyen de sauvegarder la consigne dans l’EEPROM pour éviter le “RAZ” au redémarrage?
En tout cas merci pour ce tuto qui m’ouvre plein de possibilités sur ESP easy!
Bonjour,
j’ai des thermostat cantine Cosmi ch110 que je voudrais remplacer pour avoir des thermostats compatible avec jeedom. Je trouve votre solution interessante mais je me demandais une chose, les deux fils actuels reliés à mes thermostat fantini ou est ce que je les branche sur votre projet ?
cordialement.
Bonjour Martin. Si j’ai bien compris votre question, vous voulez intégrer des thermostats Fantini Cosmi CH110 (ce doit être celui-ci) à un serveur domotique Jeedom pour les piloter de façon plus évoluée (présence dans la pièce, météo extérieure…). J’ai pris le temps de regarder la documentation technique mais malheureusement ces thermostats ne disposent d’aucune possibilité de pilotage / communication extérieure. Impossible donc de connaître l’état actuel (consigne, température actuelle, état du relai de commande…) et de piloter manuellement les paramètres depuis un serveur domotique. Si vous voulez pouvoir piloter votre chauffage depuis Homy et/ou un serveur domotique il faudra vous équiper de thermostats ou vannes thermostatiques Z-Wave ou d’un thermostat Netatmo (plus chère). J’espère avoir répondu à votre question. A très bientôt.
Bonjour,
Je vous remercie de votre réponse, et vous avez très bien compris le principe.
Je suis équipé d’une PAC air/air et je cherche à la domotiser effectivement. Je crois qu’elle ai doté d’un zone contrôlé car je peu régler la température de chaque pièce par le biais des thermostats Fantini.
J’avais espoir de trouver une solution moins onéreuse pour contrôler chaque pièce(5 thermostat Fantini en tout), de l’IR par exemple couplé ensuite à jeedom avec un broadlink….
Si vous ou quelqu’un d’autre a une idée je suis preneur ☺️.
Merci.
Et bien je serais bien tenté de vous proposer de remplacer tous vos thermostats fantini par des thermostats virtuels sous Jeedom (ou un autre serveur domotique d’ailleurs). Le plugin thermostat fait exactement la même chose qu’un thermostat matériel https://jeedom.github.io/plugin-thermostat/fr_FR/ très bien expliqué sur cette vidéo https://www.youtube.com/watch?v=T21gqp1SQK0. IL faudra tout de même ajouter des sondes de température dans chaque pièce. Vous pouvez les fabriquer vous même (facile à fabriquer avec ESP Easy) ou acheter des sondes Xiaomi Aqara (ça reviendra moins chère). Enfin il faudra une commande pour piloter les entrées de la PAC. Ce module sans fil Orno 433MHz (54€ pour 3 modules) devrait fonctionner. Il utilise le même protocole que les modules Chacon DiO. Pour les piloter, il faudra une gateway radio RFXCom ou l’équivalent DIY à fabriquer vous même pour moins de 20€ en suivant le projet RFLink. Voilà, j’espère ne rien avoir oublié…mais si tel était le cas, je ne suis pas très loin 🙂 Si l’un d’entre vous à d’autres idées ou l’expérience d’une installation équivalente, n’hésitez pas à la partager avec nous !
Super tuto! Avez vous trouvé une solution pour récupérer la valeur actuel du thermostat dans le serveur domotique (domoticz…)?
Bonjour,
Avant tout, merci pour ce tuto, je l’ai suivit à la lettre et j’ai un comportement des interrupteurs très bizzare, ils fonctionnent de façon très aléatoire.
Je me demande si c’est la meilleur méthode pour utiliser des boutons poussoirs car quand on appuis dessus, la masse est relié a l’entrée et on a un niveau 0 mais une fois relâché, l’entrée n’es plus connecté donc le niveau d’entrée devrait rester à 0 ?
J’aurais plutôt vu un truc du genre :
Entrée relié a la masse – si inter appuyé alors entrée relié au 3v3
Merci d’avance pour votre aide,
Cordialement,
Bonjour JJ et merci beaucoup. Je n’ai pas observé de comportement bizzare, mais un délai de réponse du à la fréquence d’actualisation d’ESPEasy. Par contre, vous avez bien configuré le type Push Button Active Low ? C’est peut être l’origine du problème.
si l’esp le gère sur le port correspondant , il faut cocher pull-up .
cela permet de créer un etat par défaut niveau haut.
cela correspond a une resistance en interne connectée au vcc de l’esp (et non de la batterie ,attention)
sinon il faut rajouter entre la pin d’entrée et l’alimentation esp une résistance de l’ordre de 10K a 100K ,a la grosse…
A+