- Un cas de mise en œuvre du contrôle du chauffage via Home Assistant dans un appartement en location, sans remplacer l’appareil ni faire venir un électricien, en retransmettant les signaux sans fil du thermostat existant
- Le thermostat communiquait avec la chaudière sur la bande
868MHz, et même si le protocole était chiffré, une attaque par rejeu pouvait fonctionner sans connaître le contenu des paquets
- L’analyse avec
rtl_433 a montré un protocole proche de celui de la famille Honeywell ; la valeur demand indiquait l’allumage ou l’arrêt de la chaudière, avec une structure où la chaudière envoyait un accusé de réception
- La configuration finale utilise un clone de
HackRF One et hackrf_transfer pour enregistrer et rejouer les signaux, en reliant un serveur web Docker aux intégrations command_line, average et generic_thermostat de Home Assistant
- Utilisé sans problème depuis début décembre 2024, mais l’émission en
868MHz peut être illégale selon la réglementation locale, et utiliser un HackRF pour une simple commande marche/arrêt est excessif
Pourquoi il est difficile d’automatiser le chauffage dans un logement en location
- Dans cet appartement en location, la chaudière est contrôlée par un unique thermostat sans fil installé par le propriétaire
- Le thermostat utilise son capteur de température intégré pour allumer ou éteindre le chauffage afin d’atteindre la température cible
- En pratique, trois points étaient gênants
- Le capteur ne mesure que la température d’une seule pièce de l’appartement, ce qui rend le chauffage inégal selon les pièces
- Selon la pièce où se trouve l’interface de commande, il est peu pratique de l’utiliser depuis le lit ou le salon
- Si le chauffage n’est pas coupé avant de sortir, cela gaspille une énergie coûteuse
- L’automatisation de la maison était déjà gérée avec Home Assistant, et l’objectif était de contrôler aussi le chauffage de la même manière
- Des solutions commerciales existaient, mais comme elles risquaient de nécessiter la coopération du propriétaire et la visite d’un électricien, le choix s’est porté sur la conservation du thermostat existant
Choisir une attaque par rejeu plutôt que d’interpréter le protocole
- Le point de départ était le fait que le thermostat et la chaudière communiquaient via un protocole sans fil
- Rétroconcevoir le protocole depuis zéro était trop complexe compte tenu du niveau de connaissances radio disponible
- La méthode choisie a été une attaque par rejeu
- Copier le signal entre la chaudière et le thermostat
- Réémettre le signal copié pour faire croire que l’attaquant est le thermostat
- Fonctionne sans comprendre le contenu du protocole
- Cette méthode dépend de la mise en œuvre de l’appareil
- Si la communication utilise un compteur incrémental, les anciens signaux peuvent être ignorés, ce qui empêche l’attaque par rejeu
- Ce thermostat n’utilisait pas ce mécanisme, ce qui rendait le rejeu possible
Vérification de la bande de fréquence et premières observations
- Le modèle exact du thermostat a été trouvé en ligne, et la section RF Communication de sa fiche technique indiquait l’utilisation d’une bande proche de
868MHz
- La fiche technique indiquait
Protocol: Encrypted, mais ce n’était pas un gros problème pour une méthode par rejeu
- Il existait peu de ressources sur la copie de signaux
868MHz
- Il y avait beaucoup de ressources liées à LoRa/Meshtastic
- Beaucoup de posts Reddit cherchaient à copier des appareils comme des ventilateurs de plafond ou des portes de garage, mais avec peu de réponses
- Si la fréquence avait été
433MHz, il y aurait probablement eu beaucoup plus d’outils grand public
- Pour observer le signal, une Software-Defined Radio a été utilisée
- Un RTL-SDR V4 bon marché a été acheté
- Dans SDR++, une pression sur le bouton du thermostat faisait apparaître un signal dans le waterfall
- Le Flipper Zero n’était pas adapté à cette situation
- Le Flipper Zero n’est pas une SDR
- Sa plage de fréquences utilisables est limitée, ce qui empêchait de l’utiliser avec cet appareil
Indices sur le protocole et tentatives d’émission infructueuses
- rtl_433 a été utilisé pour vérifier si le thermostat utilisait un protocole connu
- Malgré son nom, il fonctionne aussi sur d’autres fréquences
- Les appareils plus rares peuvent ne pas être reconnus
- Au final, ce thermostat semblait utiliser le même protocole que d’autres appareils Honeywell
- Dans la communication, l’attribut
demand indique l’état de la chaudière
1 signifie chaudière allumée
0 signifie chaudière éteinte
- La chaudière envoie un accusé de réception, apparemment pour permettre au thermostat de déterminer s’il est hors de portée
- Une tentative ultérieure de créer et d’émettre directement des paquets a échoué
- URH a été utilisé pour rétroconcevoir et reconstruire manuellement les paquets
- L’émission devait se faire avec une carte microcontrôleur
868MHz bon marché
- Ces cartes étaient conçues pour communiquer entre elles, et aller plus loin aurait nécessité de manipuler directement les registres radio
- Cette tâche a été jugée hors de portée techniquement
Enregistrer et rejouer le signal tel quel avec HackRF
- Au final, la solution retenue a été d’utiliser HackRF pour rejouer le signal tel quel, sans en interpréter le contenu
- Le RTL-SDR existant ne pouvant que recevoir, il ne pouvait pas servir à émettre
- Le
HackRF One coûte généralement plus de 400 dollars, mais des clones à environ 40 dollars existaient sur AliExpress
- Depuis, la plupart des résultats trouvables en recherchant “HackRF” sur AliExpress ont disparu
- De nouveaux clones sont disponibles chez OpenSourceSDRLab, mais ils ne sont plus aussi bon marché qu’avant
- Si le budget le permet, il est préférable de soutenir le projet matériel original, comme le HackRF One de Great Scott Gadgets
- Les signaux d’allumage et d’arrêt ont été enregistrés séparément avec hackrf_transfer
# We set the frequency to 868.3Mhz and the sample rate to 2000000.
hackrf_transfer -r turn_off.raw -f 868300000 -s 2000000
hackrf_transfer -r turn_on.raw -f 868300000 -s 2000000
- En rejouant les signaux avec les mêmes paramètres, il était possible d’allumer et d’éteindre la chaudière depuis la CLI
# We use -a to turn on the amplifier and -x to increase the gain a tad.
hackrf_transfer -t turn_off.raw -f 868300000 -s 2000000 -a 1 -x 23
hackrf_transfer -t turn_on.raw -f 868300000 -s 2000000 -a 1 -x 23
- Après l’exécution de la commande, on pouvait entendre le relais physique à l’intérieur de la chaudière s’activer et se désactiver
Intégration avec Home Assistant
- Le HackRF a été branché sur un hub USB alimenté, lui-même connecté au serveur Home Assistant
- Un simple serveur web a été écrit pour exécuter les commandes d’émission dans un conteneur Docker
- Dans Home Assistant, le Average Sensor Plugin a été utilisé, avec une configuration reliant
command_line, average et generic_thermostat
command_line:
- switch:
name: Boiler
command_on: "curl http://docker-vm:1111/api/on"
command_off: "curl http://docker-vm:1111/api/off"
sensor:
- platform: average
name: "Average Temperature"
entities:
- sensor.bedroom_thermostat_temperature
- sensor.kitchen_thermostat_temperature
climate:
- platform: generic_thermostat
name: Boiler Thermostat
heater: switch.boiler
target_sensor: sensor.average_temperature
- Cette configuration a permis de créer un thermostat qui contrôle la chaudière sur la base de la température moyenne des capteurs de température de la chambre et de la cuisine
- L’implémentation reste proche du bricolage temporaire
- Il serait préférable d’écrire un plugin Home Assistant dédié
- Contrôler directement la radio serait plus propre que d’appeler une CLI via le shell
- Faire dépendre le chauffage de
curl est quelque peu inconfortable
Résultats en usage réel et limites restantes
- Cette configuration est utilisée pour contrôler le chauffage de l’appartement depuis début décembre 2024, sans problème depuis
- Pouvoir régler la température depuis un téléphone est pratique
- Exemples d’automatisations
- Baisser la température pendant le sommeil
- Augmenter la température à l’heure du réveil le matin
- Couper le chauffage en sortant en ville
- Rallumer le chauffage quelques arrêts avant de rentrer, afin d’arriver dans un logement chaud
- Le principal regret est de devoir continuer à utiliser une radio puissante comme HackRF pour un simple interrupteur marche/arrêt de chaudière
- Plutôt que de passer davantage de temps à essayer d’adapter de force une petite radio, le choix a été fait d’utiliser un matériel surdimensionné mais fonctionnel
Avertissement juridique sur les émissions sans fil et les commentaires de blog
- Toute émission de signal radio impose de vérifier la réglementation locale
- Dans l’article, la bande
868MHz utilisée est illégale aux États-Unis sans licence
- Depuis l’entrée en vigueur complète de l’Online Safety Act au Royaume-Uni le 16 mars 2025, la gestion de contenus entre utilisateurs, comme les commentaires de blog, implique davantage d’obligations
- Il est peu probable que le régulateur Ofcom contrôle jusqu’aux blogs personnels, mais le risque d’une amende de 18 millions de livres sterling en cas d’infraction a conduit à supprimer la section commentaires
- L’article renvoie aussi à une analyse juridique pertinente sur l’impact de la loi pour les blogs autohébergés et à une discussion liée à l’hobbyist internet
1 commentaires
Avis sur Hacker News
Si l’objectif est d’économiser de l’énergie ou de l’argent, un système capable de faire passer une maison fraîche à une maison bien chaude en 20 minutes est justement ce qu’on ne veut pas
Il vaut mieux faire fonctionner le système avec une température de circulation de l’eau de chauffage beaucoup plus basse, afin de réduire les pertes dans les espaces non chauffés et de chauffer toute la pièce de façon plus homogène. Avec une chaudière à condensation, il suffit de baisser la température de départ cible
En ajoutant en plus une compensation en fonction de la température extérieure (weather compensation), on peut ajuster la température de départ selon la température dehors, de manière à faire fonctionner le système juste assez pour que le bâtiment retrouve à peine la température cible
Quand c’est correctement réglé, le thermostat se comporte comme une limite haute et demande du chauffage 22 à 24 heures par jour, sans surchauffer. En général, la température de départ était d’environ 110 °F les jours doux et 135 °F par temps négatif, et par rapport aux 160 °F fixes de l’hiver précédent, la consommation de gaz a baissé de 8 à 15 %, avec un confort nettement meilleur. En revanche, cette approche implique des temps de remontée en température longs, donc elle se marie mal avec de grands abaissements de consigne ; il faudrait un contrôle plus intelligent qui fonctionne d’ordinaire à basse température de façon précise, mais utilise une eau plus chaude uniquement pendant les phases de reprise
La chaleur se déplace linéairement du chaud vers le froid en fonction de l’écart de température. Hypothétiquement, si la température des tuyaux était la même que celle de l’intérieur, toute la chaleur transmise finirait par sortir au-delà de l’enveloppe ; plus les tuyaux sont chauds, meilleur est ce ratio. Et cela reste vrai quel que soit le pourcentage de tuyauterie situé à l’intérieur de l’enveloppe
En revanche, si l’on chauffe le long des murs extérieurs, par exemple sous les fenêtres, on chauffe le mur extérieur à une température supérieure à celle vue par le thermostat intérieur, ce qui augmente les pertes vers l’extérieur. À l’inverse, le chauffage radiant évite largement cet effet
Autrement dit, dans une maison raisonnablement isolée, maintenir une température basse et constante autour de 20 °C est ce qu’il y a de mieux pour le confort, et cela permet aussi d’abaisser la température de l’eau de chauffage, ce qui améliore le rendement d’une pompe à chaleur ou d’une chaudière
En comparant une température fixe avec le fait de monter, baisser ou couper en partant puis de revenir à la consigne avant le retour, il y avait très peu de différence, et la consommation électrique était similaire
J’aimerais avoir un lien, mais ils ont même testé les situations de réchauffage moins efficaces. Cela incluait aussi le « chauffage d’appoint »
Super hack
Une méthode plus simple consisterait, me semble-t-il, à placer un module Peltier de chauffage/refroidissement sous le thermostat et à le contrôler à distance, afin de prendre le contrôle de la température perçue par le thermostat
Le lien vers le modèle exact de thermostat ne fonctionne pas, donc je ne sais pas dans quelle mesure cette approche correspondrait à sa conception, mais les thermostats que j’ai utilisés étaient généralement muraux, et il n’était pas très difficile de placer une source de chaleur ou de froid en dessous. Il suffit d’éviter que le côté chaud et le côté froid atteignent tous deux le thermostat en même temps, et ce n’est qu’une question de placement
La boîte à outils semble vraiment déterminer l’espace des solutions. En lisant cet article sans rien connaître à la RF, une autre attaque correspondant davantage à mes outils m’est immédiatement venue à l’esprit. Ne pourrait-on pas mettre le thermostat dans une boîte et contrôler mécaniquement la température de cette boîte ?
Cela dit, si l’on a accès à l’intérieur du thermostat, il ne devrait pas être difficile de remplacer le capteur de température par un circuit qui le fait lire très haut ou très bas selon les besoins
Même une première fois, c’est probablement une intervention de 30 minutes, et avec un peu de ruban adhésif double face, on peut facilement revenir à l’état initial. C’est quelque chose qui parlera à n’importe quel Britannique ayant fabriqué Tracy Island. Le risque d’électrocution est réel, mais on peut le réduire complètement en coupant l’alimentation de la chaudière
Cela reste un hack intéressant, et bien réalisé
Je me demande à quoi ressemblerait le thermostat universel idéal.
Le thermostat de notre appartement a une « fonctionnalité » qu’on trouve beaucoup dans les produits américains récents : il faut définir quatre moments ordonnés — réveil, sortie, retour, sommeil — et la température souhaitée pour chaque plage. Je connais très peu de foyers où tout le monde se lève, sort, rentre et se couche tous les jours à la même heure.
Comme je travaille à domicile, je voudrais simplement régler une température et la maintenir indéfiniment, mais avec ce système je dois saisir la température voulue quatre fois et vérifier les quatre plages.
Au final, je pense qu’un thermostat davantage programmable, qu’on puisse configurer pour se comporter comme un vieux thermostat à molette, serait préférable.
La configuration idéale serait d’installer des vannes thermostatiques intelligentes sur tous les radiateurs de la maison, afin de les baisser manuellement quand on n’est pas dans une pièce, ou de les ajuster automatiquement en détectant l’activité et l’ouverture des fenêtres. Mais il faudrait que chaque vanne ait le droit de déclencher la chaudière centrale si nécessaire, et pas seulement le thermostat principal du salon.
La nuit, je préfère qu’il fasse plus frais, donc j’ai réglé un changement de température autour de mon heure habituelle de coucher, et même si j’ai ajusté la température dans la journée, elle revient automatiquement. Si j’utilise un thermostat intelligent, c’est justement pour ne pas avoir à me souvenir de la remettre. Quand je quitte la maison, il le détecte et passe en mode Away ; pendant les vacances, je peux le régler pour seulement maintenir la maison en sécurité, sans chercher le confort, puis le faire revenir à la normale vers l’heure d’atterrissage de mon avion.
Si votre emploi du temps n’est pas complètement aléatoire, ou si vous ne voulez pas toujours la même température que vous soyez en train de dormir, réveillé ou absent, il suffit de mettre un planning de base et d’ajuster manuellement quand nécessaire. Si vous vous levez une heure plus tôt, vous changez vous-même ; si vous vous levez à l’heure, vous n’avez rien à faire.
Le mode d’utilisation que vous voulez est aussi possible. Il suffit de mettre le programme standard à 15 °C, puis, quand nécessaire, d’activer un mode holiday réglé à la température souhaitée. Si vous le faites revenir à 15 °C à une heure raisonnable le soir, il ne restera pas allumé indéfiniment si vous oubliez.
Le Flipper Zero est excellent, et si vous installez un firmware custom, il peut prendre en charge toute la partie hacking et investigation.
Le produit d’origine est livré, de façon compréhensible, avec un firmware très bridé. Probablement pour limiter les reproches adressés à l’entreprise. Mais installer quelque chose comme Flipper Unleashed est très facile, et cela supprime ces restrictions tout en ajoutant beaucoup de fonctionnalités.
Le simple fait de posséder un outil pouvant servir à commettre un crime n’est pas nécessairement un crime. Il faut toutefois faire attention à ce qu’on en fait, et selon le pays, des gens en costume pourraient venir frapper à votre porte.
Personnellement, je voulais rejouer les signaux 433 MHz « chiffrés » de mes propres appareils, par exemple un portail motorisé, des portes à enroulement et des volets roulants, mais c’était désactivé quand le réglage régional du Flipper était sur Australia.
L’exploration technique et la curiosité sont toujours à encourager, mais rien qu’avec l’exemple du Flipper Zero, il y a des choses à garder en tête quelle que soit la juridiction. Ne le transportez pas si vous ne comptez pas vous en servir. Lisez toute la documentation avant de vous entraîner, et entraînez-vous à rester discret. Appliquez l’attitude « ne laisser aucune trace » apprise dans les activités de plein air. Réfléchissez à l’impact de votre présence et de vos actions sur l’environnement et les cibles, à la façon dont elles pourraient être interprétées par un observateur extérieur, et prenez des mesures pour réduire les soupçons.
Ces principes s’appliquent à beaucoup d’appareils, du smartphone jetable au cloneur de cartes RFID bon marché acheté sur Temu.
Les débutants, en particulier, ont tendance à être emportés par leur enthousiasme et à vouloir passer directement au stade où ils ressemblent aux hackers de la télévision et des jeux vidéo. Ce sont des personnages de fiction pour une raison. Que l’action ait été inoffensive ou non, ce qui compte au final, c’est la perception qu’en a l’autorité qui vous interroge.
Si vous voulez le décoder, ce n’est probablement pas si difficile. À l’époque où j’avais fait ça, j’avais aussi essayé d’implémenter la partie émission, mais j’ai déménagé avant d’aller au bout.
https://blog.habets.se/2017/04/Decoding-FSK.html
À votre place, au lieu de toucher au signal radio, je chaufferais ou refroidirais le thermostat lui-même. Il suffit de le couvrir avec une petite boîte et de contrôler la température à l’intérieur avec un petit module Peltier, par exemple. Si vous voulez lancer le chauffage, vous refroidissez l’intérieur de la boîte ; si vous voulez l’arrêter, vous le réchauffez.
Cela dit, comme je fabrique des dispositifs de contrôle thermique en amateur, cette méthode me paraît peut-être beaucoup plus simple qu’elle ne l’est.
[0]: https://thex10shop.com/products/x10-powerhouse-th2807-thermo...
Si l’auteur du billet original passe par ici, il aurait probablement dépensé moins d’argent et évité pas mal de maux de tête en remplaçant simplement le thermostat par un modèle compatible avec la chaudière. Le simple fait qu’il ait trouvé un signal Honeywell dans un projet open source quelconque et que ça ait fonctionné montre que le marché des chaudières est assez ouvert à la concurrence.
Bonne chance pour les prochaines personnalisations d’appartement.
Super projet.
Tous les systèmes de chauffage au gaz naturel (CH4) relativement récents devraient prendre en charge les thermostats modulants via des protocoles comme OpenTherm/eBus. Associé à un thermostat avec sonde de température extérieure, cela augmente l’efficacité du système de quelques pour cent et aide à amortir le coût du thermostat et de l’installation. Au final, on obtient un système de chauffage moderne plus efficace.
La même chose devrait s’appliquer aux systèmes de pompe à chaleur.
J’ai emménagé dans un nouvel appartement, ou plus exactement une maison, qui nécessitait une rénovation complète. Il n’y avait pas d’isolation moderne, mais j’avais calculé que, pour le moment, le retour sur investissement de l’isolation ne se justifiait pas. Comme c’est une maison mitoyenne sur plusieurs niveaux, je voulais un chauffage aussi confortable et économique que possible.
En particulier, je voulais des températures stables et réglables individuellement dans les chambres et le salon, un chauffage au sol dans certaines pièces, des radiateurs dans d’autres, et dans certaines pièces où le chauffage au sol seul pouvait être insuffisant en période de grand froid, une combinaison chauffage au sol + radiateurs.
Je pensais qu’en payant quelqu’un, il pourrait me configurer un système de contrôle. Ça devrait être simple, non ?
J’avais complètement tort. Après avoir passé des heures à comprendre les configurations recommandées par des « experts », j’ai trouvé des cas limites qui entraînaient du gaspillage ou de l’inconfort. Des dépassements ou sous-dépassements de température inutiles et inévitables, par exemple. J’ai eu plusieurs échanges avec Honeywell, Tado, Siemens, etc., mais toutes les solutions avaient de gros défauts.
Cela a un peu bloqué la rénovation, mais la plomberie était prête et je voulais au moins vérifier que les tuyaux et les pompes fonctionnaient. J’ai donc branché les pompes et les vannes sur des prises connectées contrôlées en Zigbee pour voir si elles s’activaient. Ça a bien marché, et l’idée a fait son chemin.
Aujourd’hui, j’ai réparti dans toute la maison des capteurs de température Zigbee à 20 dollars, des prises connectées et relais à 30 dollars pilotent les vannes, les pompes et la chaudière, et Home Assistant contrôle l’ensemble. Tout fonctionne parfaitement, et j’ai même implémenté des fonctions impossibles avec des systèmes prêts à l’emploi. Par exemple, dans une pièce qui a à la fois un chauffage au sol et un radiateur, quand l’écart avec la température cible est important, les deux chauffages tournent pour chauffer rapidement ; puis, quand on approche de la cible, le radiateur s’éteint pour laisser le chauffage au sol prendre le relais. C’est plus confortable et plus économe en énergie que les radiateurs. Les pièces avec radiateurs restent à ±0,4 °C de la cible, celles avec chauffage au sol à ±0,1 °C.
C’est pourquoi ils sont presque toujours légèrement surdimensionnés et inefficaces, afin de tenir compte de ce que les modèles simples ne capturent pas.
Ce n’est pas propre au chauffage : c’est le cas de la plupart de l’ingénierie, et les objets complètement optimisés sont assez rares.
Plutôt que de penser que « tout le secteur du HVAC/chauffage est trop idiot pour faire ça correctement », il vaut mieux se demander si tes hypothèses ou tes critères ne sont pas erronés.
Par exemple, dans un système HVAC ou de chauffage moderne, les sous-dépassements et dépassements ne causent pas de gaspillage ni d’inconfort. Un dépassement de 1 à 2 °F ne signifie pas que l’espace chauffé perd sensiblement plus de chaleur que s’il était exactement au point de consigne. Tu ne veux probablement pas non plus d’un système à réaction instantanée. Si tu ouvres la porte pour recevoir un colis, que tu restes le temps de signer puis que tu refermes, l’air de la pièce devient assez froid.
Le chauffage devrait-il se mettre en marche à ce moment-là ?
Chez toi, j’ai l’impression qu’il le ferait, mais la bonne réponse est non. L’air va rapidement être réchauffé par tous les objets qui étaient à la température de la pièce. Rien qu’en surface, cela représente des milliers de pieds carrés.
Les options résidentielles comme Honeywell, JCI, Siemens, Trane ou Carrier semblent davantage axées sur une application généraliste, tandis que les systèmes BAS commerciaux relèvent plutôt d’une conception sur mesure adaptée à un bâtiment précis, même s’ils utilisent des capteurs et contrôleurs génériques. Pour référence, j’ai travaillé sur des projets d’automatisation de bâtiments avec les cinq entreprises mentionnées.
Certains ont déjà la malchance d’acheter une maison dont la configuration de chaudière a été conçue par un ingénieur mécanicien, avec une chaufferie remplie de vannes et de manomètres comme s’il fallait manœuvrer les moteurs du Titanic.
De nos jours, on dirait que les nouveaux coupables dans ce domaine sont les programmeurs.