Mise en place des « rules »
Les « rules » (règles) d’ESPEasy permettent de définir des règles de fonctionnement de l’ESP à travers un langage de programmation spécifique et relativement simple.
Il y a quatre « banques » de règles, chacune étant limitée à 2048 caractères.
Créer un thermostat avec des sécurités de fonctionnement, des paramètres modifiables et la capacité à accepter des commandes externes peut amener rapidement à saturer les 8000 caractères de l’espace de programmation disponible.
Par ailleurs, le processeur de l’ESP n’est pas très puissant et se retrouve vite saturé. Et lorsqu’il sature, il reboote !
J’ai donc dû rationaliser le code pour utiliser un minimum de caractères et trouver des techniques pour alléger le processeur.
Pour activer les rules (le cas échéant), on va dans ‹ Tools / Bouton Advanced › puis on coche « Rules » et « Old Engine » tout en haut.
Un nouvel onglet « Rules » apparaît.
La liste déroulante permet de choisir une des 4 banques de règles. Il suffit ensuite de cliquer sur « Submit » en bas pour valider le texte entré.
Voici les règles à ajouter dans les 4 différentes banques :
Banque1 :
on System#Boot do
//TaskValueSet 6,1,1
//TaskValueSet 6,2,20
//TaskValueSet 6,3,25
TaskValueSet 3,3,0 //conditions initiales pour restore
TaskValueSet 3,2,1 //conditions initiales pour restore
timerSet,2,7
endon
on BUTTON#state do
if [BUTTON#state]=0
NEX,dim=100
NEX,tsw 255,1
else
NEX,dim=0
NEX,tsw 255,0
endif
endon
on Rules#Timer=1 do
if [BUTTON#state]=1
NEX,dim=0
NEX,tsw 255,0
endif
endon
on Rules#Timer=2 do
NEX,page 2
NEX,tsw 255,1
NEX,click b1,1
endon
on Rules#Timer=3 do
NEX,page 0
event,refresh0
if [BUTTON#state]=1
NEX,dim=0
NEX,tsw 255,0
endif
SendToHTTP 192.168.1.13,80,/core/api/jeeApi.php?apikey=xxxxxxxxx&type=scenario&id=65&action=start
endon
on Rules#Timer=4 do
if %iswifi%=0
reboot
endif
endon
Après mise en place des rules, il faudra décommenter les dernières lignes de la banque1 et rebooter. Cela aura pour effet de fixer quelques paramètres par défaut avant leur sauvegarde dans la mémoire de l’écran. Par la suite vous pourrez supprimer ces lignes. De même il faudra bouger le slider de consigne pour en fixer une première dans l’appareil.
La partie à la fin :
SendToHTTP 192.168.1.13,80,/core/api/jeeApi.php?apikey=xxxxxx&type=scenario&id=65&action=start
…permet de prévenir Jeedom en cas de reboot. Il faut remplacer l’adresse IP, la clef API, et le numéro du scénario à appeler.
Banque2 :
on SENS#temp do
if [BUTTON#state]=0
TaskValueSet 7,1,[SENS#temp]-0.3
TaskValueSet 4,1,[SENS#temp]-0.3
else
TaskValueSet 4,1,[SENS#temp]
endif
TaskValueSet 9,3,(([SENS#temp]-15)*13)+80
NEX,page0.z1.val=[VRB#t_ang]
let,2,[SENS#temp]
let,3,[CNT#consigne]
let,4,[CNT#consigne]+[PAR#hyst]
let,5,[PAR#mini]
let,6,[PAR#maxi]
if [CNT#bypass]=0 and [CNT#on_off]=1
if %v2% < %v3%
GPIO,4,1
TaskValueSet 3,4,1
NEX,wepo "1",22
NEX,page0.q2.picc=1
endif
endif
if [CNT#bypass]=0
if %v2% > %v4%
GPIO,4,0
TaskValueSet 3,4,0
NEX,wepo "0",22
NEX,page0.q2.picc=0
endif
endif
if [CNT#on_off]=1
if %v2%>%v6%
TaskValueSet 3,1,%v3%
TaskValueSet 9,4,%v3%*10
NEX,wepo "[VRB#sav]",1
event,bypass=0
endif
if %v2%<%v5%
TaskValueSet 3,1,%v3%
TaskValueSet 9,4,%v3%*10
NEX,wepo "[VRB#sav]",1
TaskValueSet 3,2,0
NEX,page0.q0.picc=0
NEX,page1.remote.picc=3
TaskValueSet 9,1,((([CNT#consigne]-18)*40)+320)%360
TaskValueSet 9,2,([CNT#consigne]*10)
NEX,page0.z0.val=[VRB#c_ang]
NEX,page0.h0.val=[VRB#c_sld]
NEX,wepo "0",24
endif
endif
if %iswifi%=0
timerset,4,25
endif
endon
on refresh1 do
NEX,page1.hyst.txt="[PAR#hyst]"
NEX,page1.mini.txt="[PAR#mini]"
NEX,page1.maxi.txt="[PAR#maxi]"
if [CNT#bypass]=1
NEX,page1.remote.picc=4
else
NEX,page1.remote.picc=3
endif
endon
on refresh0 do
NEX,tsw 255,1
if [CNT#bypass]=1
NEX,page0.q0.picc=1
NEX,page0.z0.val=260
NEX,page0.h0.val=180
else
NEX,page0.q0.picc=0
TaskValueSet 9,1,((([CNT#consigne]-18)*40)+320)%360
TaskValueSet 9,2,([CNT#consigne]*10)
NEX,page0.z0.val=[VRB#c_ang]
NEX,page0.h0.val=[VRB#c_sld]
endif
TaskValueSet 9,3,(([SENS#temp]-15)*13)+80
NEX,page0.z1.val=[VRB#t_ang]
if [CNT#chauffe]=1
NEX,page0.q2.picc=1
else
NEX,page0.q2.picc=0
endif
if [CNT#on_off]=1
NEX,page0.bt0.val=1
else
NEX,page0.bt0.val=0
endif
endon
A la fin du premier bloc, il y a un test sur le fait que le wifi est connecté ou non. S’il n’est plus connecté, l’ESP reboote au bout de 25s (timer4, en banque 1). A garder en tête si le wifi tombe définitivement. Cela peut aussi être une façon de le forcer à rebooter.
Dans le premier bloc, il y a aussi une correction de température de 0.3°C selon si l’écran est allumé ou pas… voir plus loin l’explication (influence thermique sur la mesure).
On sauvegarde aussi la température corrigée dans la « Task 4 » qui est le dummy device qui reporte à Jeedom (sans quoi c’est la température non corrigée qui est remontée).
Banque3 :
on forceConsigne do
if %eventvalue% >= 18 and %eventvalue% <= 24.5 and [CNT#bypass]=0
NEX,dim=100
NEX,tsw 255,1
TaskValueSet 9,1,(((%eventvalue%-18)*40)+320)%360
TaskValueSet 9,2,(%eventvalue%*10)
NEX,page0.z0.val=[VRB#c_ang]
NEX,page0.h0.val=[VRB#c_sld]
TaskValueSet 3,1,%eventvalue%
NEX,wepo "[VRB#c_sld]",1
timerSet,1,10
endif
endon
on bypass do
TaskValueSet 3,2,%eventvalue%
GPIO,4,0
TaskValueSet 3,4,0
NEX,page0.q2.picc=0
NEX,wepo "0",22
if %eventvalue%=1
NEX,page0.q0.picc=1
NEX,page0.z0.val=260
NEX,page0.h0.val=180
NEX,wepo "1",24
NEX,page1.remote.picc=4
else
NEX,page0.q0.picc=0
NEX,page1.remote.picc=3
TaskValueSet 9,1,((([CNT#consigne]-18)*40)+320)%360
TaskValueSet 9,2,([CNT#consigne]*10)
NEX,page0.z0.val=[VRB#c_ang]
NEX,page0.h0.val=[VRB#c_sld]
NEX,wepo "0",24
endif
endon
on bypass2 do
TaskValueSet 3,2,%eventvalue%
if %eventvalue%=1
NEX,page0.q0.picc=1
NEX,page0.z0.val=260
NEX,page0.h0.val=180
NEX,page0.q2.picc=0
NEX,page1.remote.picc=4
else
NEX,page0.q0.picc=0
NEX,page1.remote.picc=3
TaskValueSet 9,1,((([CNT#consigne]-18)*40)+320)%360
TaskValueSet 9,2,([CNT#consigne]*10)
NEX,page0.z0.val=[VRB#c_ang]
NEX,page0.h0.val=[VRB#c_sld]
endif
endon
on chauffe do
if %eventvalue%=1 and [CNT#bypass]=1 and [CNT#on_off]=1
GPIO,4,1
TaskValueSet 3,4,1
NEX,wepo "1",22
NEX,page0.q2.picc=1
endif
if %eventvalue%=0 and [CNT#bypass]=1 and [CNT#on_off]=1
GPIO,4,0
TaskValueSet 3,4,0
NEX,wepo "0",22
NEX,page0.q2.picc=0
endif
endon
on onoff do
NEX,page0.q0.picc=0
TaskValueSet,3,2,0
NEX,wepo "0",24
NEX,page1.remote.picc=3
TaskValueSet 9,1,((([CNT#consigne]-18)*40)+320)%360
TaskValueSet 9,2,([CNT#consigne]*10)
NEX,page0.z0.val=[VRB#c_ang]
NEX,page0.h0.val=[VRB#c_sld]
GPIO,4,0
TaskValueSet 3,4,0
NEX,wepo "0",22
NEX,page0.q2.picc=0
if [CNT#on_off]=1
NEX,wepo "1",20
else
NEX,wepo "0",20
endif
endon
Banque4 :
on NEX#idx do
if [NEX#idx]=20
if [CNT#bypass]=0
TaskValueSet 9,1,((([NEX#value]-180)*4)+320)%360
NEX,page0.z0.val=[VRB#c_ang]
TaskValueSet 3,1,[NEX#value]/10
NEX,wepo "[NEX#value]",1
timerSet,1,10
else
NEX,page0.z0.val=260
NEX,page0.h0.val=180
endif
endif
if [NEX#idx]=21
TaskValueSet 6,1,[PAR#hyst]-0.1
NEX,page1.hyst.txt="[PAR#hyst]"
TaskValueSet 9,4,[PAR#hyst]*10
NEX,wepo "[VRB#sav]",6
endif
if [NEX#idx]=22
TaskValueSet 6,1,[PAR#hyst]+0.1
NEX,page1.hyst.txt="[PAR#hyst]"
TaskValueSet 9,4,[PAR#hyst]*10
NEX,wepo "[VRB#sav]",6
endif
if [NEX#idx]=28
event,refresh0
endif
if [NEX#idx]=29
event,refresh1
endif
if [NEX#idx]=23
TaskValueSet 6,2,[PAR#mini]-0.1
NEX,page1.mini.txt="[PAR#mini]"
endif
if [NEX#idx]=24
TaskValueSet 6,2,[PAR#mini]+0.1
NEX,page1.mini.txt="[PAR#mini]"
endif
if [NEX#idx]=23 or [NEX#idx]=24
TaskValueSet 9,4,[PAR#mini]*10
NEX,wepo "[VRB#sav]",10
endif
if [NEX#idx]=25
TaskValueSet 6,3,[PAR#maxi]-0.1
NEX,page1.maxi.txt="[PAR#maxi]"
endif
if [NEX#idx]=26
TaskValueSet 6,3,[PAR#maxi]+0.1
NEX,page1.maxi.txt="[PAR#maxi]"
endif
if [NEX#idx]=25 or [NEX#idx]=26
TaskValueSet 9,4,[PAR#maxi]*10
NEX,wepo "[VRB#sav]",15
endif
if [NEX#idx]=30
TaskValueSet 3,3,[NEX#value]
event,onoff
endif
if [NEX#idx]=31
TaskValueSet 6,1,[NEX#value]/10
NEX,click b2,1
endif
if [NEX#idx]=32
TaskValueSet 6,2,[NEX#value]/10
NEX,click b3,1
endif
if [NEX#idx]=33
TaskValueSet 6,3,[NEX#value]/10
NEX,click b6,1
endif
if [NEX#idx]=34
TaskValueSet 3,3,[NEX#value]
NEX,click b0,1
endif
if [NEX#idx]=35
TaskValueSet 3,4,[NEX#value]
if [CNT#chauffe]=1
gpio,4,1
endif
NEX,click b4,1
endif
if [NEX#idx]=36
TaskValueSet 3,2,[NEX#value]
if [CNT#bypass]=1
event,bypass2=1
endif
NEX,click b5,1
endif
if [NEX#idx]=37
TaskValueSet 3,1,[NEX#value]/10
timerSet,3,1
endif
if [NEX#idx]=767
event,bypass=0
endif
endon
Après ça, vous devriez avoir un Thermostat fonctionnel.
La section suivante expliquera plus en détails les principes de fonctionnement et la logique du thermostat.