[TUTO] Domotiser son poêle à granulés

Vos échanges, bricolages, idées et questions concernant l'ESP8266, les NodeMCU,Weemos, et consort
stephdes
Messages : 264
Enregistré le : 06 oct. 2016, 20:50

[TUTO] Domotiser son poêle à granulés

Message par stephdes » 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

Image

__________________________________________________________________________________________________________________

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 :

Image


__________________________________________________________________________________________________________________

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 !

Image


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".


Image


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 :

Image


__________________________________________________________________________________________________________________

CONFIG DU WEMOS :

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

Image


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.

Image


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 commandArray
NIVEAU DE PELLET :

Code : 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 commandArray

TEMPS 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
FONCTIONNEMENT DU POELE (Blocky)

Image

Image


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...
MiniPC W10 + RFXCom 433e Ext1013 + RFLINK R45; 1 temp Bresser + 4 Banggood, lumières+volets+prises:Blyss
Autre modules volets chinois - RM Mini3 + RM PRO 2
Conso élec : OWL 180+ -- 2 Wattmètres OTIO
Imperihome+Sarah+MDAH+Domoticz (merci easydomoticz !)

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


stephdes
Messages : 264
Enregistré le : 06 oct. 2016, 20:50

Re: [TUTO] Domotiser son poêle à granulés

Message par stephdes » 30 oct. 2017, 19:04

J'ai juste oublié de préciser que lorsque le poêle chauffe fort, j'ai des altérations de mesure de la hauteur de pellet dans la cuve.

Je pense que lorsque la température augmente dans la cuve, le capteur ultrasons est perturbé et renvoie des valeur genre 140cm... (environ 1 mesure sur 3). C'est pour cette raison que je filtre les valeurs supérieures au maxi (45cm).
MiniPC W10 + RFXCom 433e Ext1013 + RFLINK R45; 1 temp Bresser + 4 Banggood, lumières+volets+prises:Blyss
Autre modules volets chinois - RM Mini3 + RM PRO 2
Conso élec : OWL 180+ -- 2 Wattmètres OTIO
Imperihome+Sarah+MDAH+Domoticz (merci easydomoticz !)

david2001
Messages : 10
Enregistré le : 30 sept. 2017, 08:00

Re: [TUTO] Domotiser son poêle à granulés

Message par david2001 » 05 nov. 2017, 10:15

Super installation !
Ça donne vraiment des idées.

Ninipc
Messages : 101
Enregistré le : 28 nov. 2016, 20:07

Re: [TUTO] Domotiser son poêle à granulés

Message par Ninipc » 08 nov. 2017, 13:29

Super taf ! :)

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


i9987popo
Messages : 10
Enregistré le : 24 oct. 2017, 14:18

Re: [TUTO] Domotiser son poêle à granulés

Message par i9987popo » 14 nov. 2017, 21:08

Bonjour à tous, moi j'ai un Jotul, je gère également le poêle a granulés avec le contact sec, maintenant j'aimerais également jouer sur la puissance de la flamme et de la ventilation, mais la cela se complique. Si des personnes ont des infos sur les poeles Jotul ou Palazetti (Jotul utilise l’électronique de Palazetti) je suis preneur.
Il y a derrière le poele un prise ressemblant a RJ11, quelqu'un sait a quoi elle sert ? C'est peut être par cette prise que l'on pourrait commander la flamme et la ventilation non ?

n1n162
Messages : 19
Enregistré le : 23 juin 2017, 22:14

Re: [TUTO] Domotiser son poêle à granulés

Message par n1n162 » 23 nov. 2017, 09:17

Bonjour,

Bravo beau boulot. J'ai moi même un poêle MCZ musa 2.0 et je pense qu'un jour ou l'autre je le domotiserais.
Pour la température des fumées, le poêle est déjà équipé d'un capteur de température, ne peut on pas récupérer la valeur de ce capteur?
Pour le niveau de pellets, ne peut on pas remédier au problème de perturbation du capteur ultrason en utilisant un capteur laser?

En tout cas félicitation.

stephdes
Messages : 264
Enregistré le : 06 oct. 2016, 20:50

Re: [TUTO] Domotiser son poêle à granulés

Message par stephdes » 24 nov. 2017, 11:18

Rien à voir mais depuis hier ma Wemos de test est récalcitrante.

Mes sketch qui fonctionnaient bien avant ne fonctionnent plus malgré une installation propre..

Du coup ce soir je pense essayer ceci : http://www.pratikpanda.com/completely-f ... sh-memory/
MiniPC W10 + RFXCom 433e Ext1013 + RFLINK R45; 1 temp Bresser + 4 Banggood, lumières+volets+prises:Blyss
Autre modules volets chinois - RM Mini3 + RM PRO 2
Conso élec : OWL 180+ -- 2 Wattmètres OTIO
Imperihome+Sarah+MDAH+Domoticz (merci easydomoticz !)

stephdes
Messages : 264
Enregistré le : 06 oct. 2016, 20:50

Re: [TUTO] Domotiser son poêle à granulés

Message par stephdes » 24 nov. 2017, 13:17

Merci pour vos encouragements

Le poêle est effectivement équipé d'un capteur de température mais j'ai renoncé dès le début à l'utiliser pour trois raisons :

- Je voulais être le moins intrusif possible surtour sur l'électronique du poêle
- Je ne sais pas quel type de capteur est utiliser donc pas sûr de trouver une librairie qui corresponde et pas le temps/envie d'en faire une rien que pour cette utilisation
- Reprendre une mesure en parallèle peut perturber la lecture de la sonde par le poêle et fausser les résultats.

Pour le capteur de niveau, j'ai testé en premier lieu des capteurs à contact mais pas adapté aux granulés. Ensuite j'ai cherché un capteur peu cher et dont la librairie existe et qui serait compatible ESP8266. Un capteur laser éviterait les aléas de mesure MAIS le capteur laser ne "mesure" que sur un point. Là où l'ultrason mesures sur un cercle. A l'utilisation, les granulés forment un creux au centre du poêle (aligné à la vis sans fin) du coup il aurait fallu viser pour la mesure avec un laser (c'est rien à faire mais bon). J'ai choisi la simplicité et le budget.

Concernant le pilotage, il faut absolument que je travaille sur l'émulation de la télécommande. J'ai déjà pas mal d'info mais pour l'instant je ne vois pas comment faire le lien entre Domoticz et l'envoie de trame RF (433Mhz). Et puis il faut que je trouve le temps
MiniPC W10 + RFXCom 433e Ext1013 + RFLINK R45; 1 temp Bresser + 4 Banggood, lumières+volets+prises:Blyss
Autre modules volets chinois - RM Mini3 + RM PRO 2
Conso élec : OWL 180+ -- 2 Wattmètres OTIO
Imperihome+Sarah+MDAH+Domoticz (merci easydomoticz !)

Gaz
Messages : 221
Enregistré le : 17 oct. 2015, 10:30

Re: [TUTO] Domotiser son poêle à granulés

Message par Gaz » 24 nov. 2017, 20:03

Super tuto.
Merci beaucoup cela ma permis d'avoir une idée du niveau de la cuve.
Chez moi les notifications ne fonctionnent pas, comment as tu procédé ?
@+++

stephdes
Messages : 264
Enregistré le : 06 oct. 2016, 20:50

Re: [TUTO] Domotiser son poêle à granulés

Message par stephdes » 28 nov. 2017, 20:34

Gaz a écrit :Super tuto.
Merci beaucoup cela ma permis d'avoir une idée du niveau de la cuve.
Chez moi les notifications ne fonctionnent pas, comment as tu procédé ?
@+++
J'ai modifié le script pour apporter 2 améliorations :

- Lisser encore plus les mesures (erreurs de lecture en raison de la température à l'intérieur de la cuve)

- Fiabiliser les notifications

Nécessite une variable "pellet" de type chaîne :

Code : Tout sélectionner

--[[   
auteur : Steph D
version : 2.0
MAJ : 28/11/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 à 50cm : 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 = 6                  -- Seuil mini de prise en compte valeur           
val_pelletmax = 49                  --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_pellet = (val_pellet - val_pelletmini)
val_pelletupdate = tonumber(otherdevices_svalues[pellet])
val_pellet = ((val_pelletmax-val_pellet)/val_pelletmax)*100
val_pellet = arrondir (val_pellet,0)
val_delta = (uservariables['pellet'] - val_pellet)


if (val_pelletupdate < 56) and (val_delta<10) then
commandArray={['UpdateDevice']= pelletid .. "|0|" .. val_pellet}
commandArray['Variable:pellet']= tostring(val_pellet)
end


if (val_pellet<20) and (val_pellet>10) and (val_delta<10) then
commandArray['SendNotification']='Poêle: niv. <20% !'
elseif (val_pellet<10) and (val_delta<10) then
commandArray['SendNotification']='Poêle: niv. <10% !'
end

end
return commandArray
MiniPC W10 + RFXCom 433e Ext1013 + RFLINK R45; 1 temp Bresser + 4 Banggood, lumières+volets+prises:Blyss
Autre modules volets chinois - RM Mini3 + RM PRO 2
Conso élec : OWL 180+ -- 2 Wattmètres OTIO
Imperihome+Sarah+MDAH+Domoticz (merci easydomoticz !)

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre