Domotisation d'une chaudière avec le RaspberryPi
Introduction
Mon but était de pouvoir allumer le chauffage (chaudière) d’une maison secondaire à distance.
La chaudière est équipée d’un thermostat qui peut maintenir une température programmée automatiquement, mais le besoin est de pouvoir passer, à la demande, et à distance, du mode “Hors gel” au mode “JeVeux18°C”.
Par exemple X semaines sans rien chauffer du tout.. puis du jour au lendemain décider de vouloir 18°C. (Si vous pensez que ce n’est pas grave d’arriver dans une maison à 2°C, vous n’avez probablement pas encore d’enfants ;) )
Trève de blabla.. en vrac:
- La chaudière est équipée d’un “boitier/thermostat” filaire déporté, qui permet de contrôler la chaudière.
- La première idée était de voir si le fabriquant ne proposait pas un module permettant de réaliser ceci. -> Oui, a priori c’est possible mon bon Monsieur, en échange d’un peu plus de 300€ HT.
- Mmmm… j’achète 10 Rasp pour ce prix là moi
- On va donc partir sur l’utilisation du Rasp, qui de toute façon est déjà sur place ;)
- La seconde idée est de voir quel est le protocole utilisé entre le thermostat et la chaudière.. pour ensuite essayer de l’implémenter sur le Rasp.
- Après investigations, il s’agit du protocole eBUS
- A première vue, cela semblerais à peu près jouable de l’implémenter (UART etc.. ) même si le “projet” à l’air d’être complètement mort.
- Mais très vite, cela semble quand même bien galère… Une partie du peu de doc est en Allemand.. Risque de péter la chaudière et le thermostat, beaucoup de temps à passer pour (essayer d') implémenter le protocole et trouver les bons menus..le tout sans être sûr d’y parvenir..et le tout pour un protocole déjà mort.
- On en vient donc finalement rapidement à la 3ème idée: simuler la séquence d’appui sur les boutons du thermostat filaire existant, qui permet de passer du mode “HorsGel” au mode “JeVeux18°C”
Approche
- Démontage du thermostat existant.
- On trouve rapidement les contacts des 2 boutons utilisés pour aller dans les menus.
- On soude les 4 fils, on les fait sortir sur le coté.. et on referme le tout.
- Le thermostat pourra donc toujours être utilisé en “local” en appuyant sur les boutons.. mais ensuite en plus à distance par le Rasp.
- Maintenant il faut pouvoir faire “contact” entre les 2 fils de chaque bouton pour simuler l’appui.
- On est en courant continu.. et avec un ampèremètre, on le mesure l’histoire de voir.
- Plusieurs solutions sont envisageables pour créer le contact et donc simuler l’appui sur le bouton; transistor, relai “normal”, reed relay, circuit intégré, etc..
- J’écarte l’idée du transistor, car je ne sais pas ce qu’il y a devant et derrière les boutons “interrupteurs” du thermostat.. n’étant pas spécialiste, je n’ai pas envie de cramer le tout… (qui coûte certainement le même prix que le module de commande à distance.
- Après recherche sur le net.. le 74HCT4066 est censé faire l’affaire.
- Je prends mon 74HCT4066, je n’ai aucun problème pour allumer/éteindre une LED par exemple.. mais cela ne marche pas sur les contacts de la chaudière.. Je ne sais pas pourquoi… (Trop faible intensité ? J’ai bien mis à la masse les entrées non utilisées, j’ai aussi testé avec une résistance de 50 Ohms.. bref..)
- On passe à la solution de backup (c’est que l’hiver approchait .. des Reed Relay que j’avais en stock. (Commandés aussi pour un autre besoin).
- Les miens (1.8€) sont en “5V” (3,7V minimum pour se fermer) et un “level shifter” est donc nécessaire pour “monter” les 3.3V de la GPIO du Rasp à 5V.
- Je ne m’étend pas sur les Level Shifter dans ce billet. Cela pourra être l’objet d’un autre.
- L’intensité est largement en dessous de la limite.. donc c’est ok.
Schémas
Je n’ai pas vraiment le temps de faire un beau schéma sous Fritzing.
Donc vous aurez la version “moche/papier”
Mise en place
- Test sur breadboard avec donc les level shifter et 2 reed relais.
- Les entrées des relais sont donc commandées par 2 GPIOs du Rasp (17 et 18 dans mon cas).
- J’installe wiringPi parce que c’est plus simple (et parce que je le vaux bien).
- Je passe les 2 GPIOs en “sortie”
$ gpio mode 0 out
$ gpio mode 1 out
- Je créé les contacts en passant à 1 les GPIOs pendant 0.3 secondes.
- Pour moi la séquence est assez simple (Bouton A / Bouton B / Bouton A):
gpio write 0 1 && sleep 0.3 && gpio write 0 0 && sleep 1 && gpio write 1 1 && sleep 0.3 && gpio write 1 0 && sleep 1 && gpio write 0 1 && sleep 0.3 && gpio write 0 0
- Les tests sont concluants… \\o/
- On dégaine le fer à souder
- On soude le tout comme sur la breadboard de test..
- On rajoute un DS18B20 (1€) et sa résistance pour pouvoir connaitre la température à distance. (Je ne détaille pas cette partie, voir par exemple ici ou là.
- On rajoute une LED pour montrer que le montage est sous tension. (Et pour impressionner Madame).
- On force les GPIOs en mode “sortie” et à 0 dès le boot dans le /etc/rc.local
- On refait un petit script plus propre.
- On re-teste..
- C’est OK, on peut aller boire une bière.
Futur
- Finaliser le boitier et les câbles vers le thermostat
- Interface web (en plus de SSH) pour avoir la température et allumer la chaudière.
- Voir si on veut commander la chaudière par SMS avec Gammu
- Voir si on veut implémenter d’autres séquences (passage en HorsGel en cas d’oubli en partant)
Il n’y a pas difficulté particulière à réaliser ceci.. Et pas réellement d’intérêt à publier ces informations propres à une chaudière.. Le but est juste de montrer qu’avec un peu de motivation, un esprit un peu DIY et quelques Euros de composants, on peut facilement utiliser le Rasp pour domotiser plein de choses.. et j’espère que cela donnera des idées à certains pour mettre en place leurs propres projets domotiques.