chaudière sur barbecue La transition énergétique allemande à l'œuvre.

Voici une suite d'articles portant sur un exemple de domotisation d'une chaudière Chaffoteaux à l'aide de la plateforme de domotique Home Assistant.

Cet article couvre la description du matériel, l'étape de rétro-ingénierie du protocole propriétaire BridgeNet/eBus2 et l'installation du service ebusd pour interroger la chaudière. L'investissement se limitera à quelques euros et un Raspberry Pi ou équivalent que vous aurez eu l'intuition d'acheter avant "la crise", pour héberger Home Assistant.

Qu'on se le dise l'Internet des Objets (IoT) bénéficie surtout à celui qui vend la solution complète avec ses accessoires. Les chaudières connectées ne dérogent pas à la règle. En vous promettant par exemple "jusqu'à" 4% d'économies théoriques avec telle ou telle solution on vous assure surtout de pouvoir amortir vos investissements dans un délai non raisonnable...

La solution exposée ici démontre que le seul intérêt pour le particulier réside dans la mise à disposition de matériel et de protocoles ouverts dont peuvent s'emparer la concurrence et les bricoleurs avertis. Révélation : Cela n'arrivera jamais. Il me semble important de rappeler que la rétro-ingénierie n'est pas une étape normale dans l'appropriation d'un matériel que l'on a acheté.

Sachez qu'en plus d'héberger les fichiers requis dans ce tuto, le dépôt sur GitHub vous apportera des informations plus précises et techniques sur des aspects volontairement laissés de côté ici. Voir GitHub : ebusd_configuration_chaffoteaux_bridgenet.

Sommaire

Matériel concerné

La chaudière dont il sera question est une Chaffoteaux Mira C Green, modèle très courant dans les immeubles d'habitation. La marque Chaffoteaux & Maury appartient au groupe italien Ariston, de même que Elco, Régent, etc. ; par conséquent il est fortement probable que ce qui suit concerne aussi ces marques.

eBUS vs BridgeNet : Un protocole de gestion (entr)ouvert pour parler à sa chaudière

eBUS (energy bus) est un moyen de communication d'origine allemande, de type série assez répandu dans le monde du matériel de chauffage et du matériel solaire (voir Wikipédia). Deux fils sont nécessaires pour faire transiter les données et alimenter certains appareils se contentant de peu d'énergie.

Si les spécifications sont publiques les fabricants se limitent néanmoins à assurer la compatibilité de leurs produits vis-à-vis des couches physique (matériel) et de liaison de données. Le reste relève de l'applicatif et est malheureusement propre à chaque constructeur voire chaque modèle ou pire, version de modèle...

Par exemple, du matériel Vaillant ou Saunier Duval bien qu'utilisant eBUS ne sera pas compatible avec du matériel Ariston/Chaffoteaux. La bonne nouvelle est que le matériel pour se connecter au bus sera le même.

Chaffoteaux utilise ainsi sa propre implémentation appelée eBus2 ou BridgeNet.

Accessoires

Plusieurs périphériques peuvent être utilisés avec la chaudière, selon les fonctionnalités et les modes de régulation voulus (j'y reviens dans un prochain article).

Emplacements pour accessoires Chaffoteaux sur la chaudière Mira C Green Emplacements pour accessoires Chaffoteaux sur la chaudière Mira C Green.
Bornes T & B : broches eBus ; théoriquement les appareils compatibles sont protégés contre les inversions de polarité (cf. schéma plus bas) ; SE : Emplacement pour la sonde filaire de température externe ; TA1 : Emplacement pour un thermostat utilisant des contacts secs (ON/OFF ou Tout ou Rien).

À toutes fins utiles, voici une liste des références de ces produits ainsi qu'une indication de leur prix.

Thermostats :

Régulation d'ambiance tout ou rien (ON/OFF) :
    Thermostat Basic Control                        3318605
    Thermostat Programmable Easy Control            3318601
    Thermostat Programmable Easy Control R          3318602
    Thermostat Programmable Easy Control Bus        3318604 150€ <=

Régulation d'ambiance modulante
    Expert Control                                  3318870 220€
    Chaffolink Expert Control Link                  3318992 390€
    Zone Control                                    3318597

Sans fil (868-868.6MHz), avec piles/option 230V possibles :
    1138591
    3318602
Avec piles
    3318601
    3318590
    3318602
    1138591
Avec bus BridgeNet
    3318604     <=
    3318593

Warning

Certains thermostats ON/OFF fonctionnent par activation de relais sur la tension secteur 230V, ou par contacts secs. Ces versions ne SONT PAS compatibles eBus et leur manipulation comporte des risques pour vous et/ou un matériel mal branché ! Vérifiez que vous avez bien affaire à du matériel eBus avant d'y mettre les doigts.

Sondes extérieures :

Filaire :   3318599 50€
Sans fil :  3319091 60€
Récepteur : 3319120 110€

Il existe des marques génériques compatibles avec plusieurs fabricants. Je ne citerai pas ces marques qui ont des stratégies marketing franchement douteuses mais toujours est-il que les prix ont aussi de quoi faire frémir. Comme quoi la concurrence n'apporte pas forcément une baisse des tarifs...

Rétro-ingénierie du matériel

Thermostat

L'article se poursuivra avec le régulateur "Easy Control Bus" vendu par Chaffoteaux et fabriqué par Honeywell, présent sur mon installation et seul thermostat ON/OFF (bas de gamme) compatible avec eBus.

Un thermostat de type ON/OFF ou Tout ou Rien est différent d'une sonde d'ambiance capable de calculs "avancés". Toutefois le modèle en question est assez évolué pour transmettre ses ordres de chauffage et mesures de températures sur eBus.

PCB

Photo du PCB du thermostat Photo du PCB du thermostat "Easy Control Bus" et identification des composants essentiels.
A: Atmega 329 en tant que microcontrôleur et driver d'écran LCD ; B: LDO 3.3V ; C: LM393A.

Le circuit est alimenté par le bus lui-même.

L'alimentation du mcu est réalisée par un régulateur de tension linéaire de 3.3V. Le comparateur de tension LM393A est alimenté directement depuis ce LDO. L'Atmega 329 est maintenu sous tension par un condensateur de 1F à 2.95V lorsque le courant est coupé.

Pour accélérer le processus j'ai délibérément choisi de détourner l'étage de traitement des paquets en branchant un ESP8266 (ESP12) sur la carte (voir les fils blancs sur l'image). Le mieux étant évidemment de faire appel à une interface indépendante (voir plus bas). L'alimentation se fait via une source externe de 3.3V. Les broches RX et TX de l'ESP sont respectivement connectées aux broches RX et TX de la carte.

À propos du bricolage

  • Le LDO n'est pas suffisant pour alimenter un appareil annexe tel qu'un ESP qui consomme au moins 75mA en Wi-Fi. Tout le circuit voit alors sa tension chuter à 1.5V ce qui occasionne des glitchs et redémarrages des microcontrôleurs.

  • L'alimentation externe ne doit être utilisée que si le plan de masse entre les 2 circuits est commun. C.-à-d. que les broches GND de chaque circuit doivent être reliées. Si cela n'est pas fait, vous risquez au mieux d'avoir un système instable avec de nombreux paquets perdus, et au pire de griller des composants.

  • Un tel branchement va rendre muet le thermostat ; la broche TX de l'ESP a manifestement la priorité sur celle de l'Atmega. Ça tombe bien puisque le but est de remplacer ce thermostat.

  • Vous ne pouvez recevoir ce que vous envoyez sur le bus. Pour sniffer les données envoyées par le thermostat il faudra connecter la broche RX de l'ESP sur la broche TX de l'Atmega.

Schéma typique du branchement minimal d'un ESP12 Pinout et schéma d'application d'un ESP12 (ESP8266). Les broches RX et TX sont utilisées dans le cadre du projet.

Circuit eBUS

Tous les composants relatifs aux lignes TX/RX sont représentés sur le schéma suivant. Seules les valeurs des condensateurs sont inconnues.

Schéma électronique de l'étage de traitement des données à partir du bus eBUS Schéma de l'étage de traitement des données à partir du bus eBUS, essentiellement conçu autour d'un comparateur de tension.

Sonde de température extérieure

Voici les spécifications de la sonde filaire officielle :

10 K +/- 1% β=3977
Câble EBUS2*
Max. 50m
Min. 0,5 mm2

C'est une thermistance classique NTC dont la résistance est de 10kΩ à 25°C.

illustration d'une thermistance Une thermistance de 10kΩ, un composant à quelques dizaines de cts.

Ce genre de composant coûte au plus quelques dizaines de centimes et peut être récupéré sur des batteries au lithium (ils servent à surveiller la température des accumulateurs). Le fabricant réalise ici une plus-value de plus de 20x le cout de revient...

Vous pouvez simuler sa présence en branchant simplement une résistance fixe de valeur appropriée aux bornes conçues à cet effet (cf. Accessoires).

Le dépôt contient des informations additionnelles qui pourraient servir à simuler une sonde extérieure avec quelques composants ainsi qu'un tableau d'équivalences résistance/température (voir lien).


Initier une communication

Établir un lien avec les appareils connectés au bus nécessite une interface et un logiciel de type service capable de recevoir et interpréter ou encoder et émettre les paquets de données.

Les interfaces matérielles

Plusieurs interfaces existent. Pour ma part je privilégierais toujours les projets qui publient leurs sources pour le matériel et les logiciels ; à la fois pour permettre les modifications, et garantir l'usage du matériel si l'auteur du projet s'en lasse un jour.

Projet officiel lié à ebusd mais non libre, interfaces filaire et sans fil :

Projet alternatif aux interfaces ebusd, code (auquel j'ai moi-même contribué) et schéma libres :

Les auteurs de ces 2 projets peuvent vous vendre une interface assemblée et fonctionnelle.

ebusd, la solution pour parler à sa chaudière

ebusd est un service libre et open-source qui gère les communications avec les appareils compatibles eBUS.

  • Le matériel supporté peut utiliser plusieurs canaux : Série (USB ou UART), TCP, UDP ;
  • Il propose une intégration automatique MQTT que je présenterai plus loin ;
  • Il propose un client en ligne de commande pour récupérer les messages et en envoyer.

Installation des fichiers de configuration

Après des dizaines d'heures d'analyse je propose des fichiers de configuration dédiés à ma chaudière, bien que théoriquement compatibles avec d'autres références de Chaffoteaux et Ariston.

Copiez les fichiers .csv (lien) dans le dossier de votre choix puis lancez le service ebusd avec le paramètre --configpath pointant vers ce dossier.

Exemple de commande :

$ ebusd -d 192.168.1.65:3333 --latency=200000 --configpath=/path_to_your_config_files/ --enablehex --receivetimeout=100 --sendretries=2

Les journaux seront générés dans le fichier /var/log/ebusd.log. En ajustant la verbosité du processus via le paramètre --loglevel=notice vous pourrez conserver puis trier les messages encore inconnus pour les décortiquer.

Un mot sur le protocole et l'utilisation d'ebusd

Le wiki de ebusd contient des informations précieuses qui vous aideront à comprendre comment les paquets sont formés et comment rédiger/lire un fichier de configuration :

Les paquets sont tous constitués selon la structure suivante :

[QQ]  [ZZ]  [PBSB]  [LEN]  [ID]  [DATA]
^ addr source       ^ data length + command id length
      ^ addr dest          ^ command id
            ^ command            ^ data bytes

Ainsi le paquet 31 fe 2020 03 0120 01 (espaces volontairement ajoutées) sera décomposé en :

addr src: 31
addr dest: fe
command: 2020
length: 03
command id: 0120
data: 01

Chaque appareil possède une adresse d'émission et une adresse de réception (cette dernière correspond à la valeur de l'adresse d'émission + 5). L'adresse 0xfe est l'adresse de broadcast par convention ; ainsi l'adresse 0x3c est l'adresse de réception d'un appareil ayant l'adresse d'émission 0x37. Chez Chaffoteaux l'adresse 0x37 est manifestement réservée à l'appareil principal : la chaudière. Tandis que le couple d'adresses 0x31/0x36 correspond aux adresses par défaut du service ebusd.

La commande 2020 est une demande d'écriture de la valeur data:0x01 dans le registre spécifié par l'id:0120. La signification des commandes et ids est présentée sur le readme du projet de reversing : lien.

Par expérience toutes les valeurs sont échangées par broadcast. Les appareils capables de les utiliser les prennent en compte depuis leurs registres ainsi mis à jour.

Le paquet suivant a une action identique mais est explicitement destiné à la chaudière (adresse 0x3c) : 31 3c 2020 03 0120 01.

Notons que l'adresse d'émission est automatiquement gérée par ebusd. L'envoi du paquet précédent se fait via la commande :

$ ebusctl hex 3c 2020 03 0120 01


Grâce aux fichiers csv de mapping décrivant la signification des paquets, on constate que 0120 correspond au registre stockant le statut du chauffage (activé/désactivé) (à ne pas confondre avec l'ordre de mise en température de l'eau).

# type (r[1-9];w;u)circuitnamecommentQQZZPBSBIDfieldpart (m/s)typevalues
wboilerheating_statusHeating status3c20000120sBCD0=off;1=on
wboilerz1_heating_activationZ1 Activation of the heatingfe20201919sBCD0=off;1=on

Pour faciliter l'usage on pourrait tout à fait faire appel à la commande suivante et obtenir le même résultat :

$ ebusctl write -c boiler heating_status on


Identifier la signification des paquets se fait par observation passive dans un premier temps. Ensuite, la manipulation des paramètres via les menus de la chaudière génèrera de nouveaux paquets à étudier.

Pour afficher les paquets inconnus reçus et actualiser cette liste toutes les 3 secondes, faites :

$ watch -n 3 -d ebusctl grab result

Vous pouvez aussi travailler sur le journal :

$ cat /var/log/ebusd.log | grep "received unknown BC cmd"

Conclusion

Vous avez maintenant les connaissances requises pour vous connecter au bus eBUS de nombreuses marques de chaudières. Vous savez comment le protocole fonctionne et comment décortiquer les paquets inconnus. Le travail est déjà fait pour ce qui est de la chaudière Mira C Green et de ses sœurs.

Cela représente de nombreuses heures investies de mon côté ; si ce travail vous a été utile faites le savoir :p

Les prochains articles porteront sur la vraie mise en place de la solution domotique avec Home Assistant, une plateforme très connue et utilisée dans ce domaine.

Sources