Le cauchemar des factures qui explosent
J’étais au bord de la crise de nerfs chaque fois que la facture de chauffage arrivait. Entre les matins glacés où le radiateur refusait de monter à 20 °C, les soirées où le thermostat restait bloqué à 15 °C, et les week‑ends où la maison se transformait en sauna parce que j’avais oublié d’éteindre le chauffage, la gestion manuelle de la chaleur était devenue un vrai parcours du combattant. Et pendant ce temps, les compteurs d’électricité clignotaient en rouge à chaque fois que le réseau était en pointe. J’avais besoin d’une solution qui ne se contente pas de régler la température, mais qui anticipe, apprend et optimise en temps réel.
La solution : un chauffage « prévisionnel » piloté par IA
Ce qui m’a vraiment changé la donne, c’est d’associer trois briques technologiques déjà accessibles :
- Un Raspberry Pi 4 comme cœur de calcul, capable de tourner Home Assistant 24 h/24.
- Des thermostats et vannes radiateurs connectés (ex. Eurotronic Spirit Zigbee ou Tado Smart Radiator Thermostat) qui permettent de commander chaque pièce séparément.
- Une routine d’automatisation IA qui combine les prévisions météo, le tarif dynamique de l’électricité et les données d’occupation (capteurs de présence, géolocalisation du smartphone) pour créer un planning de chauffage ultra‑optimisé.
En bref : le système préchauffe la maison juste avant votre arrivée, baisse la température pendant les pics tarifaires et garde chaque pièce à la température idéale en fonction de qui y est présent. Le tout est orchestré par un script Python qui s’exécute dans Home Assistant.
Guide d’installation pas à pas
1. Rassembler le matériel
- Raspberry Pi 4 (4 GB de RAM) + alimentation officielle.
- Carte micro‑SD 32 Go (classe 10).
- Clé USB Wi‑Fi (si le Pi n’a pas de Wi‑Fi intégré).
- Hub Zigbee ou Z‑Wave (ex. ConBee II ou Aeotec Z‑Wave Stick).
- Thermostat principal compatible (Ecobee, Tado, Netatmo).
- Vannes radiateurs connectées (Eurotronic Spirit Zigbee).
- Capteurs de présence Aqara (ou tout autre détecteur Zigbee).
- Prise connectée pour la chaudière (ex. Sonoff S31).
- Accès à l’API du fournisseur d’énergie (tarif dynamique) – généralement disponible via le tableau de bord du compteur Linky ou d’un abonnement « Tempo ».
2. Installer Home Assistant OS
1. Téléchargez l’image Home Assistant OS pour Raspberry Pi.
2. Utilisez BalenaEtcher pour flasher la carte micro‑SD.
3. Insérez la carte, branchez le Pi, connectez‑le à votre réseau et accédez à http://homeassistant.local:8123 depuis votre navigateur.
4. Suivez l’assistant de configuration initiale (compte admin, localisation, etc.).
3. Ajouter les intégrations
- Zigbee2MQTT (ou Z‑Wave JS) pour faire parler vos vannes et capteurs.
- Ecobee / Tado via l’intégration native Home Assistant.
- OpenWeatherMap pour les prévisions météo (clé API gratuite).
- Energy‑Price – utilisez l’intégration
sensor.restpour récupérer le tarif horaire depuis l’API du fournisseur. - Device Tracker – géolocalisation du smartphone via l’application Home Assistant Companion.
4. Créer le script IA
Nous allons créer un petit script Python qui s’exécute chaque heure, calcule le « coût marginal » du chauffage et ajuste les consignes des vannes. Copiez le code suivant dans le répertoire config/python_scripts (créé si besoin) sous le nom smart_heating.py :
import datetime
import requests
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers import entity_registry as er
# Configuration
WEATHER_API = "https://api.openweathermap.org/data/2.5/onecall"
WEATHER_KEY = "VOTRE_CLÉ_OPENWEATHER"
LAT = 48.8566
LON = 2.3522
ENERGY_API = "https://api.monfournisseur.fr/price"
ENERGY_TOKEN = "VOTRE_TOKEN_ENERGIE"
def get_weather():
params = {"lat": LAT, "lon": LON, "exclude": "minutely,daily,alerts", "appid": WEATHER_KEY, "units": "metric"}
r = requests.get(WEATHER_API, params=params)
return r.json()["hourly"]
def get_energy_prices():
headers = {"Authorization": f"Bearer {ENERGY_TOKEN}"}
r = requests.get(ENERGY_API, headers=headers)
return r.json()["prices"] # liste de dict {hour: "2026-10-30T14:00:00Z", price: 0.158}
def calculate_target_temp(outdoor_temp, price):
# Base 20 °C, on diminue de 0.5 °C par degré extérieur en dessous de 10 °C
base = 20
if outdoor_temp < 10:
base -= (10 - outdoor_temp) * 0.5
# On augmente si le prix est très bas (<0.10 €/kWh) pour profiter du surplus
if price < 0.10:
base += 1
return max(16, min(base, 22))
def main(hass):
weather = get_weather()
prices = get_energy_prices()
now = datetime.datetime.utcnow()
# Trouver l'heure courante dans les deux listes
hour_index = next(i for i, h in enumerate(weather) if datetime.datetime.utcfromtimestamp(h["dt"]) >= now)
outdoor = weather[hour_index]["temp"]
price = prices[hour_index]["price"]
target = calculate_target_temp(outdoor, price)
# Appliquer la consigne à chaque zone
zones = ["climate.living_room", "climate.bedroom", "climate.kitchen"]
for entity_id in zones:
hass.services.call("climate", "set_temperature", {"entity_id": entity_id, "temperature": target})
# Exécution
main(hass)
Ce script effectue trois actions clés :
- Récupère la température extérieure prévue pour l’heure suivante.
- Récupère le tarif horaire de l’électricité.
- Calcule une température cible qui diminue quand il fait froid dehors (pour éviter les surchauffes) et qui monte légèrement quand l’énergie est bon marché.
Ensuite, il envoie la nouvelle consigne à chaque thermostat via le service climate.set_temperature.
5. Automatiser le script
Dans Home Assistant, créez une automatisation qui déclenche le script chaque heure :
- Menu Automations & Scenes → Add Automation → Start with an empty automation.
- Trigger :
Time Pattern → minutes: 0(à chaque heure). - Action :
Call Service → python_script.smart_heating. - Enregistrez et activez.
6. Affiner avec la présence
📖 À découvrir aussi sur id2frere :
