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.

- Rules.PNG (27.72 Kio) Consulté 1206 fois
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 :
Code : Tout sélectionner
on System#Boot do
TaskValueSet 3,3,0 //conditions initiales pour restore
TaskValueSet 3,2,1 //conditions initiales pour restore
timerSet,2,2
endon
on BUTTON#state do
if [BUTTON#state]=1
NEX,dim=100
NEX,tsw 255,1
else
NEX,dim=10
NEX,tsw 255,0
endif
endon
on Rules#Timer=1 do
if [BUTTON#state]=0
NEX,dim=10
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]=0
NEX,dim=10
NEX,tsw 255,0
endif
SendToHTTP 192.168.1.13,80,/core/api/jeeApi.php?apikey=xxxxxx&type=scenario&id=65&action=start
//TaskValueSet 6,1,1
//TaskValueSet 6,2,20
//TaskValueSet 6,3,25
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 :
Code : Tout sélectionner
on SENS#temp do
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%
if %v6%<24.5
TaskValueSet 3,1,%v6%
TaskValueSet 9,4,%v6%*10
NEX,wepo "[VRB#sav]",1
else
TaskValueSet 3,1,24.5
NEX,wepo "245",1
endif
event,bypass=0
endif
if %v2%<%v5%
if %v5%>18
TaskValueSet 3,1,%v5%
TaskValueSet 9,4,%v5%*10
NEX,wepo "[VRB#sav]",1
else
TaskValueSet 3,1,18
NEX,wepo "180",1
endif
event,bypass=0
endif
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
Banque3 :
Code : Tout sélectionner
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 :
Code : Tout sélectionner
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.