[Tuto] Domotiser son poêle à granulés
Publié : 30 oct. 2017, 14:01
Heureux propriétaire d'un poêle MCZ Musa 2.0 Comfort Air depuis l'année dernière, il a bien fallu que je l'intègre à ma domotique...
J'ai réalisé les modifs sur un MCZ mais c'est parfaitement applicable à d'autres marques.
OBJECTIFS :
1/ Connaître l'état du poêle (marche / arrêt)
2/ Connaître la quantité de pellets dans le réservoir
3/ Comptabiliser le nombre d'allumage du poêle
4/ Comptabiliser le temps de fonctionnement du poêle
5/ Pouvoir mettre en marche / arrêter le poêle à distance si oubli de programmation / mise en marche télécommande

__________________________________________________________________________________________________________________
MATERIEL REQUIS :
1 x WEMOS D1 mini : https://fr.aliexpress.com/item/5pcs-lot ... 0.0.JyPFhD
1 x module ultrasons HC-SR04 : https://fr.aliexpress.com/item/5pcs-HC- ... 0.0.JyPFhD
1 x Thermocouple MAX6675 : https://fr.aliexpress.com/item/MAX6675- ... 0.0.WRcqfb
1 x Shield relay : https://fr.aliexpress.com/item/New-Rela ... 0.0.WRcqfb
1 x plaque montage : https://www.amazon.fr/gp/product/B01AAC ... UTF8&psc=1
__________________________________________________________________________________________________________________
BRANCHEMENTS COTE WEMOS :

__________________________________________________________________________________________________________________
BRANCHEMENTS COTE POELE :
THERMOCOUPLE :
La sonde du thermocouple est fixée dans le tuyau d'extraction des fumées (j'ai ajouté une rondelle cuivre mais pas vraiment nécessaire). Un petit trou dans le tuyau, on passe la sonde, on serre l'écrou et c'est fait !

SHIELD RELAY :
C'est ici que cela va dépendre de votre poêle. Je conseille, si vous en avez une, d'utiliser l'entrée contact sec de votre poêle. Par ex contact de sonde de température externe. Sur le MCZ, j'ai connecté le NO du shield relay aux bornes "DOM" de la carte du poêle : entouré en rouge sur la photo.
Entouré en jaune vous verrez le port USB sur lequel est branché une rallonge qui déporte la prise USB à l'arrière du poêle. Pour faire mes essais, j'avais connecté le Wemos à cette prise (directement sur la carte). A vous de voir mais j'ai préféré par la suite rajouter un transfo 5V "à part".

CAPTEUR ULTRASONS :
Pour une finition plus soignée, si vous avez accès à une imprimante 3D je peux vous conseiller cette pièce : https://www.thingiverse.com/thing:1708627
Le capteur est collé au centre du couvercle du réservoir :

__________________________________________________________________________________________________________________
CONFIG DU WEMOS :
Ici rien d'extraordinaire, il suffit de déclarer les différents capteurs et régler les IDX domoticz...

Il vous faudra noter la distance mesurée par le capteur ultrasons lorsque votre réservoir est vide. Cela servira de base de calcul pour la quantité de pellet restante.
__________________________________________________________________________________________________________________
CONFIG DOMOTICZ :
Côté Domoticz, il vous faudra créer plusieurs Dummy & custom sensor :
- 1 x Dummy température pour récolter la température des fumées du poêle
- 1 x compteur incrémental pour mesurer la durée de fonctionnement
- 1 switch virtuel pour l'état du poêle (marche / arrêt)
- 1 custom pour comptabiliser le nombre d'allumage
- 1 custom pour relayer la hauteur de "vide" entre le capteur et le pellet
- 1 custom pour afficher la quantité de pellet restante
J'ai également créé une variable utilisateur "Nb allumage poele" mais c'est optionnel.

Côté script :
ALLUMAGE DU POELE :
NIVEAU DE PELLET :
TEMPS DE FONCTIONNEMENT (j'ai utilisé le script de Ycahome : full credits et merci à lui)
FONCTIONNEMENT DU POELE (Blocky)


Voila pour l'essentiel
J'ai également un dummy selector avec une position AUTO qui laisse la télécommande du poêle gérer. Une position ON qui envoie une commande pulse au relais du Wemos pour mettre en marche le poêle. Et une position OFF qui envoie également une impulsion au relais du Wemos pour l'arrêter. Mais c'est bien là LA LIMITE du système car mon poêle donne TOUJOURS la priorité à la télécommande. Il faut que cette dernière soit éteinte pour que les impulsions aient un effet sur le poêle.
J'ai également une alerte NMA pour me prévenir du niveau bas de pellet (inf à 20%)
Si ça peut vous inspirer...
J'ai réalisé les modifs sur un MCZ mais c'est parfaitement applicable à d'autres marques.
OBJECTIFS :
1/ Connaître l'état du poêle (marche / arrêt)
2/ Connaître la quantité de pellets dans le réservoir
3/ Comptabiliser le nombre d'allumage du poêle
4/ Comptabiliser le temps de fonctionnement du poêle
5/ Pouvoir mettre en marche / arrêter le poêle à distance si oubli de programmation / mise en marche télécommande

__________________________________________________________________________________________________________________
MATERIEL REQUIS :
1 x WEMOS D1 mini : https://fr.aliexpress.com/item/5pcs-lot ... 0.0.JyPFhD
1 x module ultrasons HC-SR04 : https://fr.aliexpress.com/item/5pcs-HC- ... 0.0.JyPFhD
1 x Thermocouple MAX6675 : https://fr.aliexpress.com/item/MAX6675- ... 0.0.WRcqfb
1 x Shield relay : https://fr.aliexpress.com/item/New-Rela ... 0.0.WRcqfb
1 x plaque montage : https://www.amazon.fr/gp/product/B01AAC ... UTF8&psc=1
__________________________________________________________________________________________________________________
BRANCHEMENTS COTE WEMOS :

__________________________________________________________________________________________________________________
BRANCHEMENTS COTE POELE :
THERMOCOUPLE :
La sonde du thermocouple est fixée dans le tuyau d'extraction des fumées (j'ai ajouté une rondelle cuivre mais pas vraiment nécessaire). Un petit trou dans le tuyau, on passe la sonde, on serre l'écrou et c'est fait !

SHIELD RELAY :
C'est ici que cela va dépendre de votre poêle. Je conseille, si vous en avez une, d'utiliser l'entrée contact sec de votre poêle. Par ex contact de sonde de température externe. Sur le MCZ, j'ai connecté le NO du shield relay aux bornes "DOM" de la carte du poêle : entouré en rouge sur la photo.
Entouré en jaune vous verrez le port USB sur lequel est branché une rallonge qui déporte la prise USB à l'arrière du poêle. Pour faire mes essais, j'avais connecté le Wemos à cette prise (directement sur la carte). A vous de voir mais j'ai préféré par la suite rajouter un transfo 5V "à part".

CAPTEUR ULTRASONS :
Pour une finition plus soignée, si vous avez accès à une imprimante 3D je peux vous conseiller cette pièce : https://www.thingiverse.com/thing:1708627
Le capteur est collé au centre du couvercle du réservoir :

__________________________________________________________________________________________________________________
CONFIG DU WEMOS :
Ici rien d'extraordinaire, il suffit de déclarer les différents capteurs et régler les IDX domoticz...

Il vous faudra noter la distance mesurée par le capteur ultrasons lorsque votre réservoir est vide. Cela servira de base de calcul pour la quantité de pellet restante.
__________________________________________________________________________________________________________________
CONFIG DOMOTICZ :
Côté Domoticz, il vous faudra créer plusieurs Dummy & custom sensor :
- 1 x Dummy température pour récolter la température des fumées du poêle
- 1 x compteur incrémental pour mesurer la durée de fonctionnement
- 1 switch virtuel pour l'état du poêle (marche / arrêt)
- 1 custom pour comptabiliser le nombre d'allumage
- 1 custom pour relayer la hauteur de "vide" entre le capteur et le pellet
- 1 custom pour afficher la quantité de pellet restante
J'ai également créé une variable utilisateur "Nb allumage poele" mais c'est optionnel.

Côté script :
ALLUMAGE DU POELE :
Code : Tout sélectionner
--[[
auteur : Steph D
version : 1.0
MAJ : 11/10/2017
création : 11/10/2017
Principe :
Compter le nombre d'allumage du poele à granulés
]]--
local localvar1 = 374
commandArray = {}
--------------------------------------------
---------------- Fonction -----------------
--------------------------------------------
if devicechanged['Poele Granulés'] == 'On' then
commandArray['Variable:Nb allumage poele']= tostring(uservariables["Nb allumage poele"] +1)
commandArray['UpdateDevice'] = localvar1 .. '|0|' .. tostring(uservariables["Nb allumage poele"]+1)
--print ("compteur poele OK !!!!!!!!!")
end
return commandArrayCode : Tout sélectionner
--[[
auteur : Steph D
version : 1.0
MAJ : 28/10/2017
création : 28/10/2017
Principe :
Calculer en % le niveau de pellet dans un poêle MCZ Musa 2.0.
Cela fonctionnera si :
- La hauteur mesurée de pellet dans le réservoir est inférieur à 45cm : cela évite les erreurs de lecture liées à la température dans la cuve.
]]--
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local pellet = 'Lecture pellet' -- nom du capteur de lecture niveau pellet
local pelletid = 377 -- Idx du dummy pellet
val_pelletmini = 0 -- Seuil mini de prise en compte valeur
val_pelletmax = 45 --Seuil maxi de prise en compte valeur
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
------------------- --------------------
-- Fonction arrondir à deux décimales --
------------------- --------------------
function arrondir(num, dec)
if num == 0 then
return 0
else
local mult = 10^(dec or 2)
return math.floor(num * mult + 0.5) / mult
end
end
----------------------------------------
commandArray = {}
now=os.date("*t")
if (devicechanged[pellet])then
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
val_pellet = tonumber(otherdevices_svalues[pellet])
val_pelletupdate = tonumber(otherdevices_svalues[pellet])
val_pellet = ((val_pelletmax-val_pellet)/val_pelletmax)*100
val_pellet = arrondir (val_pellet,0)
if (val_pelletupdate < val_pelletmax) then
commandArray={['UpdateDevice']= pelletid .. "|0|" .. val_pellet}
end
end
return commandArrayTEMPS DE FONCTIONNEMENT (j'ai utilisé le script de Ycahome : full credits et merci à lui)
Code : Tout sélectionner
--
-- Switch Timer for Domoticz via LUA Script
--
-- Ycahome, 2017
-- https://www.domoticz.com/forum
--
--
function timedifference(s)
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
function trim1(s)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
commandArray = {}
debuglevel = 0
local function update(idx, value1, value2)
local cmd = idx.."|"..value1.."|"..value2
--local cmd = string.format("%d|0|%f;%f", idx, value1, value2)
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
end
for i, v in pairs(otherdevices) do
timeon = 240
tc = tostring(i)
--v = i:sub(1,4)
v = string.sub(i, -5)
if (v == '(TMR)') then
if (debuglevel > 0) then print("Timer Device Detected:".. i) end
tc2 = string.len(i)
--print("Len:".. tc2)
vname = trim1(tostring(string.sub(i,1,tc2-5)))
if (otherdevices[vname] == 'On') then
if (debuglevel > 0) then print("Timed Device:".. vname) end
print("Timed Device Detected ON:" ..vname)
if (debuglevel > 0) then print("Timer Dev Idx:".. otherdevices_idx[i]) end
if (debuglevel > 0) then print("Timed Dev Idx:".. otherdevices_idx[vname]) end
if (debuglevel > 0) then print("Current Value:".. otherdevices[i]) end
newvalue = otherdevices[i] + 1
--newvalue = 1
if (debuglevel > 0) then print("New Value:".. newvalue) end
--commandArray['UpdateDevice'] = otherdevices_idx[i]..'|1|'..newvalue
update (otherdevices_idx[i], 1, newvalue)
end
end
if (v == 'PIR----') then
difference = timedifference(otherdevices_lastupdate[tc])
if (difference > timeon and difference < (timeon + 60)) then
tempdiff = tostring(difference)
c = i:sub(4)
tempmessage = c.." Light Off - after at least " .. (timeon+1) .. "secs up - actually - " .. tempdiff .. "seconds"
print(tempmessage)
commandArray[c] = 'Off'
end
end
end
return commandArray

Voila pour l'essentiel
J'ai également un dummy selector avec une position AUTO qui laisse la télécommande du poêle gérer. Une position ON qui envoie une commande pulse au relais du Wemos pour mettre en marche le poêle. Et une position OFF qui envoie également une impulsion au relais du Wemos pour l'arrêter. Mais c'est bien là LA LIMITE du système car mon poêle donne TOUJOURS la priorité à la télécommande. Il faut que cette dernière soit éteinte pour que les impulsions aient un effet sur le poêle.
J'ai également une alerte NMA pour me prévenir du niveau bas de pellet (inf à 20%)
Si ça peut vous inspirer...