Introduction
Je vous présente dans ce tuto un petit montage qui permet de mesurer sa consommation de mazout, pellets, gaz, … d’une manière simple, et sans ne rien toucher à sa chaudière. Oui, je vous l’assure !!
En regardant sur Internet, je suis tombé sur un article
http://blog.guiguiabloc.fr/index.php/20 ... /#comments
qui propose de mettre une pince ampèremétrique sur le brûleur, et grâce à cette pince, mesurer le temps de fonctionnement du brûleur et en déduire la consommation, car le débit du gicleur est connu.
Cependant, les nouvelles chaudières (en tout cas la mienne, chaudière à condensation, brûleur Elco) ne sont plus aussi simples et ne permettent pas de placer une telle pince ampèremétrique. Mais, cet article m’a donné l’idée de mesurer le fonctionnement du brûleur grâce au bruit qu’il produit lorsqu’il fonctionne ! Et donc, cette solution fonctionne aussi pour un chauffage au gaz, pellets ou autre.
Avant de vous lancer dans une telle solution, vérifiez que vous pourrez faire une corrélation entre le temps de fonctionnement du brûleur et la consommation. Mon brûleur, donc de marque Elco, est monté avec un gicleur Danfoss qui consomme 0.3 USGal par heure et donc, sachant que 1USGal = 3,785411784 litres, ma chaudière consomme 1.1356235352 litres de mazout par heure.
Côté configuration de la box, ce montage s’appuie sur un script qui tient à jour quatre variables (états virtuels)
• Consommation journalière, de minuit à maintenant
• Consommation mensuelle, du début du mois minuit à maintenant
• Consommation statistique, journalière
• Consommation statistique, mensuel
Et quelques petites règles et 1 actionneur http
Matériel et outils nécessaires
Le matériel nécessaire
• Un module son pour arduino, commandé sur ebay : Sensitivity Control Potentiometer Sound Detection Sensor Module Sound Sensor car au prix de 1.80Euros
• Un module alimentation 220V AC-DC 5V pour arduino, commandé sur ebay : AC-DC 5V 700mA 3.5W Power Supply Buck Converter Step Down Module F Arduino, au prix de 2.57Euros
• Un module relai 5V pour arduino, commandé sur ebay : 1 Channel DC 5V Relay Module Board Interface for Arduino ARM PIC AVR DSP, au prix de 2.48Euro
• Un module ZWave Everspring HAC01
• Un condensateur 15V 220µF
• Une plaque de plastic, pour fixer ces composants. J’ai utilisé un morceau de lino coupé aux dimensions de mon boiter au cutter
• Le boitier : j’ai pris un boitier « Prise étanche extérieur », au prix de 2 Euros
• Un câble 220V avec prise male
• Et divers petits matériels tels que câbles assez fin, toile isolante, sucre
Il vous faudra les outils suivant
• Un fer à souder pour connecter ensemble les modules
• Une perceuse pour les trous dans la plaque de plastique et le boitier (trou au-dessus du micro), donc avec mèches de 4mm et 10mm
• Un multimètre éventuellement, mais pas obligatoire
Le montage du module
Il faut compter 2h à 3h pour réaliser le montage. Voici le schéma, ainsi que les photos de la solution. Ne pas oublier aussi le trou au-dessus du micro. Pour ma part, j’ai fait un trou d’un diamètre de 10mm.
Une fois tout cela monté proprement, connectez au 220V et réglez la sensibilité du micro grâce au potentiomètre sur le module micro, cela en soufflant/parlant sur le micro. Vous entendrez le relais s’enclencher et se déclencher. Mon module est très sensible et la transition entre une détection permanente ou pas de détection du tout se fait avec moins de 2mm de tours de vis !
Quelques informations
• Le condensateur est absolument nécessaire, car sans ce composant, le relais produit des microcoupures, car le module son donne des impulsions par rapport au son capté.
• Consommation du module : 1.4W. Et on peut toujours dessouder les leds, qui décidément ne nous servent pas dans ce boitier, pour gagner quelques mW.
• Je suis parti avec un module zwave Everspring HAC01, car j’en avais un dans mon stock, mais on peut utiliser tous autres modules capables de remonter un événement si un contact est établi. Cependant, celui-ci fonctionne parfaitement, est petit, et cerise sur le gâteau, possède une antenne et donc, peut éventuellement jouer un rôle de répéteur dans votre réseau z-wave.
La configuration de la box
Voilà, tout est prêt maintenant et on peut passer à la partie configuration de la box eedomus. Tout cela en 7 étapes, 15 minutes pour les utilisateurs habitués, 1 heure si vous êtes moins au clair, car je n’explique pas tous les détails tels que comment installer une icône, comment charger un script sur la box, comment inclure un périphérique z-wave, … Pour cela, je vous laisse chercher sur le forum, l’information s’y trouve
Etape 1: Créer une pièce « Mazout », et y mettre une icône représentative. Pour ma part, j’ai mis un jerricane.
Etape 2: Inclure le module ZWave Everspring HAC01 dans votre configuration. Inclus au premier essai pour moi, en connectant simplement mon module au 220V et sur la eedomus, « Ajouter un périphérique Z-Wave ».
• Appeler ce module « Mazout Chaudiere Module ».
• Pièce : Mazout
• Fréquence de polling : toutes les 30min au lieu du défaut, toutes les 2min. Cela dans le menu Configuration du périphérique / Paramètre expert / Fréquence de polling = 30min.
Etape 3: Adapter, dans le script, le débit de votre gicleur :
//Débit du gicleur : A adapter selon le débit du gicleur, doit être en litres par seconde, c’est pour cela que je divise par 3600
$Gicleur = 1.1356235352/3600.0; //1.1356235352 l/h, divisé en 3600 pour obtenir le débit l/s
Etape 4: Créer 4 états virtuels qui vont stocker les Consommations Journalières et Mensuelles, et les statistics journalières et mensuelles
Nom personnalisé : Mazout Minuit à maintenant, Mazout Début du mois à maintenant, MazoutStatJ, et MazoutStatM
Usage : Compteur gaz
Pièce : Mazout
Unité : l (litres)
Type de données : Nombre décimal
Et récupérer les API, dans les "Paramètres Expert" : Mazout Minuit à maintenant=AAAAAA, Mazout Début du mois à maintenant=BBBBBB, MazoutStatJ=CCCCCC, MazoutStatM=DDDDDD
Etape 5: Créer 1 actionneur http
Nom : MazoutChaudiere
Usage : Chauffage
Pièce : Mazout
Notes utilisateur : Lance le script MazoutConsoV1.php qui met à jour les compteurs de Mazout Minuit à maintenant, Début du mois à maintenant, MazoutStatJour et MazoutStatMois
Sur le tab « Valeur », rentrer les valeurs suivantes
”On”: http://localhost/script/?exec=MazoutCon ... atM=DDDDDD
”Off”: http://localhost/script/?exec=MazoutCon ... atM=DDDDDD
”Stats”: http://localhost/script/?exec=MazoutCon ... atM=DDDDDD
”Reset”: http://localhost/script/?exec=MazoutCon ... atM=DDDDDD
Il vaut remplacer les AAAAA, BBBBBBB, CCCCCC et DDDDDD par les valeurs des l’API (vous les trouvez dans le menu « Paramètres Expert » des 4 états virtuels)
Etape 6: Et créer trois règles, très simples :
Nom : Mazout Chaudiere On
Redéclenchement : Immédiatement
Critère : Mazout Chaudiere Module devient maintenant étag à On
Actions : MazoutChaudiere On
Nom : Mazout Chaudiere Off
Redéclenchement : Immédiatement
Critère : Mazout Chaudiere Module devient maintenant étal à Off
Actions : MazoutChaudiere Off
Nom : Mazout Chaudiere Stats
Redéclenchement : Immédiatement
Horaires : Tous les jours, à 23h56
Actions : MazoutChaudiere Stats
Etape 7: Faire un peu d’ordre dans la pièce « Mazout »
Le script
- Code : Tout sélectionner
<?
//Ce script calcule la consommation de mazout, par jour et par mois
//Il est appelé par les règles "Mazout Chaudiere On", "Mazout Chaudiere Off" et "Mazout Chaudiere Stats"
//Version 1.0, Thierry Branca, Mai 2017
//
//Paramètre "Command" peut prendre les valeurs suivantes
//On: Enclenchement du brûleur
//Off: Arrêt du brûleur
//Stats: A exécuter avant minuit, par exemple 23h56. Le script met à jour les variable "MazoutStatJ" et "MazoutStatM",
// et MazoutJ et MazoutM si la chaudière est en fonction.
// Donc important, à exécuter uniquement 1x par jour, et entre 23h00 et minuit.
//Reset: pour remettre à zéro toutes les variables (Etats virtuels + variables sur la box)
//
//Et les autres paramètres:
//Parameter "MazoutJ" = Consommation depuis minuis
//Parameter "MazoutM" = Consommation depuis le début du mois
//Parameter "MazoutStatJ" = Consommation journalière
//Parameter "MazoutStatM" = Consommation mensuelle
//
//Exemple d'appel:
//http://localhost/script/?exec=MazoutConso.php&Command=On&MazoutJ=AAAAAA&MazoutM=BBBBBB&MazoutStatJ=CCCCCC&MazoutStatM=DDDDDD
//
//Mon gicleur
//Gicleur Danfoss, Brûleur Elco VB 1.20
//0.3 USGal/heure, 1USGal = 3,785411784 litres ==> 1.1356235352 l/heure
//
//Variables sauvegardées sur la box eedomus
//ChaudiereElapse :Durée totale d'enclenchement de la chaudière, en secondes
//ChaudiereLastOn :Timestamp dernier enclenchement de la chaudière
////////////////////////////////////////
//MAIN
////////////////////////////////////////
//Débit du gicleur : A adapter selon le débit du gicleur, doit être en litres par seconde
$Gicleur = 1.1356235352/3600.0; //1.1356235352 l/h, divisé en 3600 pour obtenir le débit l/s
$ChaudiereLastOn = loadVariable('ChaudiereLastOn'); //Récupère la variable ChaudiereLastOn sauvée sur la box
$ChaudiereElapse = loadVariable('ChaudiereElapse'); //Récupère la variable ChaudiereElapse sauvée sur la box
$MazoutJ_id = getArg('MazoutJ','-1'); //Récupère le paramètre MazoutJ
$MazoutM_id = getArg('MazoutM','-1'); //Récupère le paramètre MazoutM
$MazoutStatJ_id = getArg('MazoutStatJ','-1'); //Récupère le paramètre MazoutStatJ
$MazoutStatM_id = getArg('MazoutStatM','-1'); //Récupère le paramètre MazoutStatM
//echo "MazoutJ_id: ", $MazoutJ_id , "\n"; //Debug
//echo "MazoutM_id: " , $MazoutM_id , "\n"; //Debug
//echo "MazoutStatJ_id: ", $MazoutStatJ_id , "\n"; //Debug
//echo "MazoutStatM_id: " , $MazoutStatM_id , "\n"; //Debug
$t = getValue($MazoutJ_id); $MazoutJ=$t['value']; //Récupère la valeur prédente de MazoutJ
$t = getValue($MazoutM_id); $MazoutM=$t['value']; //Récupère la valeur prédente de MazoutM
//echo "Previous MazoutJ: ", $MazoutJ , "\n"; //Debug
//echo "Previous MazoutM: " , $MazoutM , "\n"; //Debug
//var_dump($t); //Debug
$Command = getArg('Command','-1'); //Command, doit être On, Off, Stats ou Reset
//echo "Command: " , $Command , "\n"; //Debug
switch ($Command) {
//On/////////////////////
case "On":
If ($ChaudiereLastOn == 0) { //Test la séquence. Erreur si LastOn <> 0. Le script est appelé consécutivement avec "On". Dans ce cas, on ignore
SaveVariable('ChaudiereLastOn', strtotime("now")); //Sauve l'heure actuelle dans la variable sur la box ChaudiereLastOn
} //On ignore donc si mauvaise séquence
break; //And exit
//Off/////////////////////
case "Off":
If ($ChaudiereLastOn <> 0) { //Test la séquence. $ChaudiereLastOn doit être différent de 0
//Met à jour le temps total pendant lequel la chaudière est enclenchée
//Mais ignore les On/Off trop courts (<= 3min), dûs à d'autres bruits (e.g. porte qui claque, etc)
$Now=strtotime("now");
$Elapse = $Now - $ChaudiereLastOn;
If ($Elapse > 180) { //Ignore tout enclenchement inférieur à 180s
$ChaudiereElapse=$ChaudiereElapse + $Elapse ; //Comptabilise le dernier enclenchement
saveVariable('ChaudiereElapse', $ChaudiereElapse); //Sauve le nouveau temps total
setValue($MazoutJ_id, $MazoutJ + $Elapse * $Gicleur); //Met à jour la conso depuis minuit
setValue($MazoutM_id, $MazoutM + $Elapse * $Gicleur); //Met à jour la conso depuis le début du mois
saveVariable('ChaudiereLastOn', 0); //Sauve ChaudiereLastOn à "0" pour contrôler les séquences On-Off. Elles doivent se succéder
}
} //Ne fait rien si la séquence n'est pas bonne
break; //And exit
//Stats/////////////////////
case "Stats":
$Delta=0; //Contiendra la consommation en cours si le brûleur est enclenché
//Comptabilise l'enclenchement en cours si le brûleur est en fonction
If ($ChaudiereLastOn <> 0) { //Chaudière est en fonctionnement si $ChaudiereLastOn <> 0
$Now=strtotime("now");
$Elapse = $Now - $ChaudiereLastOn;
$ChaudiereElapse=$ChaudiereElapse + $Elapse ; //Comptabilise le dernier enclenchement
saveVariable('ChaudiereElapse', $ChaudiereElapse); //Sauve le nouveau temps total
saveVariable('ChaudiereLastOn', strtotime("now")); //Sauve l'heure actuelle dans la variable sur la box ChaudiereLastOn
$Delta=$Elapse * $Gicleur; //Met à jour la variable $Delta avec la consommation du brûleur en cours
}
setValue($MazoutStatJ_id, $MazoutJ + $Delta); //Met à jour la conso du jour précédent
setValue($MazoutJ_id, 0, false); //Réinitialise le compteur journalier
setValue($MazoutM_id, $MazoutM + $Delta); //Met à jour la conso depuis le début du mois
//Nouveau mois?
$tomorrow = date("d", strtotime("+1 day")); //Dernier jour du mois si demain, c'est le 1er
//echo "Tomorrow= ", $tomorrow, "\n"; //Debug
$h=date("G"); //Heure, format 0 to 23
if ($tomorrow == 1 AND $h == 23) {
setValue($MazoutStatM_id, $MazoutM + $Delta, false); //Met à jour la conso du mois précédent
setValue($MazoutM_id, 0, false); //Réinitialise le compteur mensuel
};
break; //And exit
//Reset/////////////////////
case "Reset":
saveVariable('ChaudiereElapse', 0); //Met à zéro les variables sur la box
saveVariable('ChaudiereLastOn', 0);
setValue($MazoutJ_id, 0, false); //Et les Etats virtuels
setValue($MazoutM_id, 0, false);
setValue($MazoutStatJ_id, 0, false);
setValue($MazoutStatM_id, 0, false);
break; //And exit
default: //Au cas ou
break;
} //switch
?>
J’ai essayé de commenter le script au mieux, de manière à pouvoir le comprendre. Mais en quelques points :
Le script possède une machine d’état, On et Off
Si on l’appelle avec le paramètre « On », il enregistre l’heure
Si on l’appelle avec le paramètre « Off », il
• Test la bonne séquence. L’appel précédent devait être à « On »
• Met à jour le temps total pendant lequel la chaudière a été enclenchée, mais ignore les On/Off trop courts (<= 3min), dus à d'autres bruits (e.g. porte qui claque, etc)
• Met à jour les Etats Virtuels « MazoutJ » et « MazoutM »
Si on l’appelle avec le paramètre « Stats »
• Si la chaudière fonctionne, il met à jour les Etats Virtuels « MazoutJ » et « MazoutM »
• Et met à jour les Etats Virtuels « MazoutStatJ » et « MazoutStatM » . Ce dernier état virtuel est mis à jour uniquement le dernier jour du mois.
Si on l’appelle avec le paramètre « Reset », il remet à zéro toutes les variables (les 4 états, ainsi que les variables sauvées sur la box)
On peut tester facilement le bon fonctionnement du script ainsi
• Désactiver les 3 règles Mazout Chaudiere On, Mazout Chaudiere Off et Mazout Chaudiere Stats, pour ne pas qu’elles interagissent avec vos tests
• Dans votre pièce appelée « Mazout », vous pouvez manuellement modifier «MazoutChaudiere » et le fixer à
o « On » pour simuler le démarrage du brûleur
o « Off » pour simuler l’arrêt du brûler
o « Stats » pour que le script renseigne les statistiques journalières
o « Reset » pour tout remettre à zéro
N’oubliez pas
1) Le script ignore les enclenchements inférieurs à 3 minutes, donc il faudra laisser sur « On » pendant plus de 3 minutes (ou modifier le script).
2) Il faudra effacer l’historique des états virtuels, car ces données de test sont évidemment inutiles. Pour cela, allez dans l’historique de chaque état virtuel, et utiliser la fonction « Suppression par plage ».
Améliorations possibles
• Le module Arduino son est vraiment très sensible. Il existe un autre module, avec deux sorties, une analogique et une numérique. Peut-être que ce module est plus simple à régler. Sinon, on peut toujours créer le module, avec un micro et un ampli-op
• Et j’attends vos idées