Intégrez votre chauffage central avec Arduino pour un contrôle intelligent
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino UNO | 1 |
| Shield Arduino OpenTherm | 1 |
| Alimentation 24V | 1 |
À propos de ce projet
Vous êtes-vous déjà demandé quand et pourquoi votre chaudière fonctionne et chauffe votre maison ? Voulez-vous automatiser votre système de chauffage avec Arduino ? Le shield OpenTherm est conçu pour vous. Il vous permettra de surveiller et de contrôler votre chaudière OpenTherm avec Arduino.


Contexte
L'année dernière, je voulais combiner ma chaudière à gaz avec un régulateur de cheminée. Ma chaudière BAXI et mon thermostat sont assez intelligents, donc je voulais naturellement étendre la chaudière pour contrôler la cheminée également. J'en avais marre de toutes ces extensions officielles BAXI coûteuses qui me permettraient de le faire.
J'ai donc construit moi-même une passerelle OpenTherm qui m'a permis d'intercepter la communication entre le thermostat et la chaudière et de placer un algorithme qui ferait soit démarrer la chaudière, soit utiliser la chaleur de la cheminée - [en savoir plus sur le régulateur].
Comme il y avait beaucoup de gens qui voulaient quelque chose de similaire, j'ai décidé de créer un module - shield Arduino - qui permettrait à n'importe qui de contrôler très facilement son chauffage domestique.

À quoi sert le shield ?
- Créez votre propre chaudière basée sur Arduino avec un thermostat OpenTherm existant. Peu probable que quelqu'un le fasse mais c'est possible.
- Utilisez le shield pour construire votre propre thermostat basé sur Arduino pour prendre entièrement le contrôle de votre chaudière et du chauffage domestique. Parfait pour la domotique. Cette application ne nécessite qu'une alimentation externe 5V.
- Placez un shield OpenTherm dans les lignes entre la chaudière et le thermostat existants et créez un moniteur pour surveiller quand et comment la chaudière chauffe votre maison. Vous pouvez même intercepter la communication pour contrôler le chauffage sans fil par exemple.
- OpenTherm permet d'avoir un dispositif "man-in-the-middle" (passerelle) qui communique à la fois avec la chaudière et le thermostat. C'est ainsi que j'ai utilisé le shield pour créer un régulateur OpenTherm.
Données et commandes disponibles
- Température de la pièce
- Consigne de température de la pièce
- Température de l'eau de chauffage
- Température de l'eau de retour
- Température de l'eau chaude sanitaire*
- Pression de l'eau chaude sanitaire*
- Débit de l'eau chaude sanitaire*
- Température extérieure*
- Statut de la chaudière (en marche / arrêt / erreur)
- Niveau de modulation
- Température des fumées*
- Statistiques sur la durée de fonctionnement de la chaudière
* Notez que ces données ne sont disponibles que si votre chaudière est équipée des accessoires nécessaires
Construction du shield
Le circuit électronique est basé sur le projet OpenTherm Gateway qui utilise un microcontrôleur PIC. Je l'ai adapté pour l'Arduino et créé une mise en page compatible Arduino UNO.

Vous pouvez utiliser le schéma ci-dessus et les fichiers Gerber pour créer le shield vous-même. Je fais fabriquer mes cartes par PCBWay - PCB Prototype the Easy Way. Vous pouvez les faire créer et expédier ces belles cartes bleues en une semaine seulement. Le masque de soudure bleu coûte le même prix que le vert de base ! J'aime aussi leur service client, rien n'est un problème. Ou vous pouvez commander un kit DIY préemballé.

Utiliser le shield pour créer un thermostat
Le premier exemple vous montrera comment utiliser le shield pour créer votre propre thermostat personnalisé. Ce dont vous avez besoin :
- Chaudière OpenTherm
- Arduino UNO, WeMos D1 ou toute carte compatible Arduino UNO. La seule exigence pour la carte est la prise en charge de l'interruption sur les broches 2 et 3.
- Alimentation 5V. Pas besoin d'alimentation 24V dans cette configuration car elle n'est nécessaire que si vous communiquez avec un thermostat.

Connectez votre chaudière avec le shield Arduino OpenTherm comme indiqué sur l'image ci-dessus, fixez le shield sur votre Arduino et vous pouvez commencer à programmer. La bibliothèque Arduino OpenTherm IO contient l'exemple suivant pour vous montrer comment communiquer avec la chaudière.
void loop() {
if (OPENTHERM::isIdle()) {
message.type = OT_MSGTYPE_READ_DATA;
message.id = OT_MSGID_SLAVE_CONFIG;
message.valueHB = 0;
message.valueLB = 0;
Serial.print("-> ");
OPENTHERM::printToSerial(message);
Serial.println();
OPENTHERM::send(BOILER_OUT, message); // envoyer message à la chaudière
} else if (OPENTHERM::isSent()) {
OPENTHERM::listen(BOILER_IN, 800); // attendre la réponse de la chaudière
} else if (OPENTHERM::getMessage(message)) {
// la chaudière a répondu
OPENTHERM::stop();
Serial.print("<- ");
OPENTHERM::printToSerial(message);
Serial.println();
Serial.println();
delay(100); // délai minimal avant la prochaine communication
} else if (OPENTHERM::isError()) {
OPENTHERM::stop();
Serial.println("<- Timeout");
Serial.println();
}
}
D'abord, vérifiez s'il n'y a pas de commande en attente avec OPENTHERM::isIdle. Sinon, vous pouvez envoyer la suivante. Dans cet exemple, vous demandez les drapeaux de configuration esclave. Si la commande a été envoyée avec succès, vous devez commencer à écouter une réponse de la chaudière avec l'appel OPENTHERM::listen. La méthode OPENTHERM::getMessage renverra true dès qu'il y a une réponse en attente de l'esclave et si quelque chose s'est mal passé ou qu'un timeout s'est produit, la méthode OPENTHERM::isError renverra true. La bibliothèque contient la structure de message OpenTherm qui contient les données décodées du protocole, vous n'avez donc pas à vous soucier des formats. Consultez le code source, il est bien documenté. Tous les types de messages sont listés dans les constantes ou vous pouvez consulter la documentation OpenTherm.
struct OpenthermData {
byte type;
byte id;
byte valueHB;
byte valueLB;
float f88();
void f88(float value);
uint16_t u16();
void u16(uint16_t value);
int16_t s16();
void s16(int16_t value);
}
Utiliser le shield pour créer un moniteur, une passerelle ou un régulateur
Le deuxième exemple vous montrera comment attacher un dispositif "man-in-the-middle" au bus OpenTherm pour surveiller la chaudière et le thermostat ou intercepter leur communication. Ce dont vous avez besoin :
- Thermostat OpenTherm
- Alimentation 24V 500mA

Connectez le shield dans le bus entre la chaudière et le thermostat comme indiqué sur l'image ci-dessus. Vous pouvez voir qu'il interrompt le bus entre ces deux appareils. Maintenant, votre communication est rompue à moins que vous ne téléversiez un logiciel de passerelle dans votre Arduino qui transférera les commandes et les réponses du thermostat vers la chaudière et vice versa. Encore une fois, il y a un excellent exemple dans la bibliothèque Arduino OpenTherm IO.
void loop() {
if (mode == MODE_LISTEN_MASTER) {
if (OPENTHERM::isSent() || OPENTHERM::isIdle() || OPENTHERM::isError()) {
OPENTHERM::listen(THERMOSTAT_IN);
} else if (OPENTHERM::getMessage(message)) {
Serial.print("-> ");
OPENTHERM::printToSerial(message);
Serial.println();
OPENTHERM::send(BOILER_OUT, message); // transférer le message à la chaudière
mode = MODE_LISTEN_SLAVE;
}
} else if (mode == MODE_LISTEN_SLAVE) {
if (OPENTHERM::isSent()) {
OPENTHERM::listen(BOILER_IN, 800); // la réponse doit être renvoyée en 800ms
} else if (OPENTHERM::getMessage(message)) {
Serial.print("<- ");
OPENTHERM::printToSerial(message);
Serial.println();
Serial.println();
OPENTHERM::send(THERMOSTAT_OUT, message); // renvoyer le message au thermostat
mode = MODE_LISTEN_MASTER;
} else if (OPENTHERM::isError()) {
mode = MODE_LISTEN_MASTER;
Serial.println("<- Timeout");
Serial.println();
}
}
}
La passerelle commence simplement à écouter les commandes du thermostat. Si une requête est détectée, elle l'analyse et la transmet à la chaudière. La passerelle commence alors à écouter la réponse de la chaudière. Si une réponse est reçue dans les 800ms, la passerelle la renvoie au thermostat. Le thermostat et la chaudière ne sauront jamais qu'il y a quelque chose de plus entre eux. Comme vous pouvez le voir, il y a beaucoup de place pour écrire votre propre code qui peut capturer les messages et lire des informations utiles (statut, températures, pression, statistiques...). Vous pouvez même remplacer ou jeter les requêtes ou réponses que vous n'aimez pas.
Comme vous pouvez le voir, il est vraiment facile de communiquer avec votre système de chauffage intelligent et de le rendre encore plus intelligent. Dans le prochain article, je vous montrerai une utilisation plus pratique de ce matériel dans mon régulateur OpenTherm.
Code
Bibliothèque Opentherm IO pour Arduino
https://github.com/jpraus/arduino-opentherm
Schémas

Processus de fabrication
- Surveillance de votre chaudière centrale avec Raspberry Pi – Matériel, Logiciel et Guide de configuration
- Construire un réseau de capteurs sans fil abordable pour votre maison
- Connecter un capteur de gaz TGS2600 à un Raspberry Pi pour la détection de gaz nocifs
- Construire un robot piloté par Internet avec streaming vidéo Arduino & Raspberry Pi
- Connecter GrabCAD Print à votre imprimante 3D Stratasys — Guide étape par étape
- Maximisez vos profits : stratégies éprouvées d'efficacité du fioul de chauffage
- Contrôler votre ventilateur de plafond avec Alexa : Guide étape par étape
- Construire un Spybot Arduino piloté par Bluetooth
- FlickMote : Télécommande IR à gestes pour maison connectée