Été après été, la même question revient : la filtration a-t-elle tourné suffisamment aujourd'hui ? Pas assez, l'eau verdit. Trop longtemps, la facture d'électricité grimpe. Avec un ESP32 C3 Super Mini, une sonde DS18B20 étanche et un Shelly Plus 1PM, vous pouvez déléguer cette décision à Home Assistant une bonne fois pour toutes — sans plugin HACS supplémentaire, sans cloud, sans PCB sur mesure.
Ce tutoriel couvre l'intégralité de la chaîne : câblage de la sonde de température, YAML ESPHome 2026 prêt-à-copier, installation du Shelly au tableau électrique, automatisation Home Assistant basée sur la règle T°/2 et protection hors gel entièrement locale. La chaîne de contrôle complète coûte moins de 50 € pour un premier achat (moins de 30 € si vous avez déjà un ESP32 C3 sous la main).
Ce dont vous avez besoin
L'architecture retenue sépare clairement les rôles : l'ESP32 C3 mesure la température de l'eau et publie cette donnée dans Home Assistant via l'API native ESPHome. Le Shelly Plus 1PM, installé dans le tableau électrique en coupure sur le circuit de la pompe, reçoit les ordres d'allumage et d'extinction depuis Home Assistant. Aucun des deux ne dépend de l'autre pour fonctionner en cas de panne partielle.
Matériel
- 1 × ESP32 C3 Super Mini (RISC-V 160 MHz, 22 × 18 mm, USB-C)
- 1 × sonde DS18B20 waterproof câble 3 m (inox, protocole 1-Wire)
- 1 × résistance 4,7 kΩ (pull-up obligatoire sur le bus 1-Wire)
- 1 × Shelly Plus 1PM (relais 16 A, mesure de consommation, Wi-Fi Gen2)
- Câbles dupont 3 fils et dominos de raccordement pour le tableau
ESP32-C3 Super Mini
RISC-V 160 MHz · 22×18 mm · Wi-Fi 4 + BT 5.0 · USB-C · Compatible ESPHome
La sonde DS18B20 waterproof est conditionnée avec un câble de 3 m suffisant pour atteindre l'eau depuis le coffret technique placé en bord de bassin. Le modèle AZDelivery est vendu en lot de deux avec la documentation ESPHome intégrée dans le livre numérique fourni.
Sonde DS18B20 waterproof
1-Wire · Inox étanche · Câble 3 m · ±0,5°C · Compatible ESPHome
Prérequis logiciels
- Home Assistant OS ≥ 2026.1 (ou HA Supervised)
- Add-on ESPHome ≥ 2026.4 (disponible dans le store des add-ons officiels)
- Intégration Shelly active dans HA (native depuis HA 2022.x, aucun HACS requis)
Câbler la sonde DS18B20 sur l'ESP32 C3
La sonde DS18B20 waterproof expose trois fils : rouge (VCC 3,3 V), noir (GND) et jaune (DATA). Une résistance de pull-up de 4,7 kΩ est indispensable entre VCC et DATA : sans elle, le bus 1-Wire reste flottant et ESPHome ne détecte aucune valeur.
Connexions sur l'ESP32 C3 Super Mini :
- Fil rouge → broche
3V3 - Fil noir → broche
GND - Fil jaune (DATA) → broche
GPIO10 - Résistance 4,7 kΩ entre
3V3etGPIO10(en parallèle sur le fil DATA)
GPIO10 est recommandé sur le C3 Super Mini : il est libre par défaut, n'interfère pas avec le processus de démarrage (strapping pin absent) et reste accessible sur le bord droit du module. Si vous avez déjà utilisé GPIO10 pour un autre projet, GPIO4 ou GPIO5 conviennent également.
Pour les connexions au boîtier, une petite plaque de prototypage 170 points suffit. L'ensemble ESP32 C3 + sonde peut être logé dans un coffret étanche IP55 vissé à l'arrière du coffret technique de la piscine.
Configuration ESPHome — YAML complet 2026
Depuis ESPHome 2024.6, le composant DS18B20 utilise one_wire: associé à la plateforme dallas_wired. L'ancien composant dallas: présent dans les tutoriels antérieurs à 2024 a été supprimé et provoque une erreur de compilation dans les versions 2026.x.
Le YAML ci-dessous calcule directement dans ESPHome la durée de filtration recommandée selon la règle T°/2 (voir section suivante), ce qui permet à Home Assistant de simplement lire la valeur plutôt que de la calculer lui-même.
esphome:
name: piscine-controller
friendly_name: Piscine
esp32:
board: esp32-c3-mini
framework:
type: esp-idf
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Piscine Fallback"
password: !secret ap_password
ota:
- platform: esphome
password: !secret ota_password
api:
encryption:
key: !secret api_encryption_key
logger:
# ── Bus 1-Wire sur GPIO10 ──────────────────────────────────────────────
one_wire:
- platform: gpio
pin: GPIO10
# ── Capteurs ──────────────────────────────────────────────────────────
sensor:
# Température brute de l'eau
- platform: dallas_wired
name: "Température piscine"
id: temp_piscine
update_interval: 60s
# Durée de filtration recommandée (règle T°/2, bornée entre 3 h et 16 h)
- platform: template
name: "Filtration recommandée"
id: duree_filtration
unit_of_measurement: "h"
icon: mdi:timer-outline
lambda: |-
float t = id(temp_piscine).state;
if (isnan(t)) return {};
if (t < 10.0f) return 3.0f;
if (t > 30.0f) return 16.0f;
return t / 2.0f;
update_interval: 5min
# ── Détecteur de risque de gel (local, sans dépendre de HA) ───────────
binary_sensor:
- platform: template
name: "Risque de gel piscine"
id: risque_gel
lambda: |-
return id(temp_piscine).state < 4.0f;
device_class: cold
Une fois flashé, l'ESP32 C3 apparaît dans Home Assistant sous l'entité sensor.piscine_temperature_piscine, sensor.piscine_filtration_recommandee et binary_sensor.piscine_risque_de_gel_piscine. Ces trois entités sont tout ce dont les automatisations ont besoin.
Connecter le Shelly Plus 1PM à la pompe
Le Shelly Plus 1PM s'installe dans le tableau électrique, en coupure sur le fil de phase du circuit dédié à la pompe. Il est homologué 16 A (3 500 W résistifs à 230 V) et supporte sans problème les pompes de filtration courantes (généralement 400 à 1 500 W). Pour une PAC (pompe à chaleur) dépassant 3 000 W, préférez le Shelly Pro 3 ou un contacteur piloté par le Shelly.
Shelly Plus 1PM
Relais WiFi 16A · Mesure énergie · Boîte 55 mm · Gen2 · Certifié Works with HA
Câblage dans le tableau (intervention à confier à un électricien si vous n'êtes pas habilité) :
- Couper le disjoncteur du circuit pompe.
- Raccorder le fil de phase entrant sur la borne L du Shelly.
- Raccorder la borne O du Shelly vers la phase sortante (direction pompe).
- Raccorder le neutre et la terre en direct (le Shelly ne les commute pas).
- Remettre le disjoncteur sous tension — le Shelly s'alimente directement depuis les bornes L et N déjà raccordées, aucune alimentation séparée n'est nécessaire.
Avant d'installer l'ESP32 C3 dans un coffret étanche, effectuez le premier flash via USB depuis ESPHome — les mises à jour suivantes se font en OTA (sans fil). Une fois dans son boîtier IP55, l'accès physique au port USB n'est plus nécessaire.
Après mise sous tension, le Shelly rejoint votre réseau Wi-Fi et apparaît automatiquement dans l'intégration Shelly de Home Assistant en quelques secondes. Renommez l'entité en switch.pompe_piscine pour simplifier les automatisations.
Durée de filtration dynamique — la règle T°/2 dans Home Assistant
La règle empirique universelle pour les piscines traitées au chlore : filtrer chaque jour un nombre d'heures égal à la moitié de la température de l'eau. À 26 °C, la pompe tourne 13 heures. À 18 °C, 9 heures suffisent. C'est cette logique qu'ESPHome calcule déjà dans l'entité sensor.piscine_filtration_recommandee.
L'automatisation Home Assistant suivante lit cette valeur et découpe la plage de filtration en deux cycles (matin et après-midi) pour répartir l'effort de la pompe :
alias: "Piscine — Gestion filtration quotidienne"
description: "Allume la pompe selon la durée recommandée par ESPHome, en deux cycles"
trigger:
- platform: time
at: "09:00:00"
id: cycle_matin
- platform: time
at: "14:00:00"
id: cycle_apres_midi
condition:
- condition: state
entity_id: binary_sensor.piscine_risque_de_gel_piscine
state: "off"
action:
- choose:
- conditions:
- condition: trigger
id: cycle_matin
sequence:
- service: switch.turn_on
entity_id: switch.pompe_piscine
- delay:
hours: >
{{ (states('sensor.piscine_filtration_recommandee') | float / 2) | round(0) }}
- service: switch.turn_off
entity_id: switch.pompe_piscine
- conditions:
- condition: trigger
id: cycle_apres_midi
sequence:
- service: switch.turn_on
entity_id: switch.pompe_piscine
- delay:
hours: >
{{ (states('sensor.piscine_filtration_recommandee') | float / 2) | round(0) }}
- service: switch.turn_off
entity_id: switch.pompe_piscine
mode: single
La durée totale est ainsi divisée en deux cycles égaux : un le matin (9 h) et un l'après-midi (14 h), ce qui correspond aux deux périodes d'utilisation de la piscine et répartit mieux le chlore dans l'eau.
Si vous êtes abonné à l'offre Tempo d'EDF, vous pouvez affiner l'automatisation pour exclure les heures pleines rouges et décaler la filtration vers les plages heures creuses. Consultez notre article sur la téléinfo Linky en mode standard pour intégrer les données de tarification en temps réel dans vos automatisations.
Protection hors gel automatique
En dessous de 4 °C dans l'eau, les joints de la pompe et les canalisations risquent d'éclater. L'ESP32 calcule déjà le binary_sensor.piscine_risque_de_gel_piscine localement — même si Home Assistant est redémarré. L'automatisation suivante enclenche la pompe dès que ce capteur passe à on :
alias: "Piscine — Protection hors gel"
trigger:
- platform: state
entity_id: binary_sensor.piscine_risque_de_gel_piscine
to: "on"
action:
- service: switch.turn_on
entity_id: switch.pompe_piscine
- service: notify.mobile_app_votre_telephone
data:
title: "Piscine — Alerte gel"
message: >
Température eau : {{ states('sensor.piscine_temperature_piscine') }} °C.
Pompe de filtration déclenchée automatiquement.
mode: single
Une seconde automatisation éteint la pompe lorsque la température remonte au-dessus de 5 °C :
alias: "Piscine — Fin protection gel"
trigger:
- platform: numeric_state
entity_id: sensor.piscine_temperature_piscine
above: 5
action:
- service: switch.turn_off
entity_id: switch.pompe_piscine
mode: single
Ce seuil de 5 °C (supérieur au seuil de déclenchement de 4 °C) évite l'oscillation de la pompe autour du point de consigne, un phénomène classique d'hystérésis que les électroniciens reconnaîtront.
Tableau de bord piscine dans Home Assistant
Un tableau de bord dédié facilite le suivi quotidien. Voici la configuration Lovelace minimale qui regroupe les informations utiles en un coup d'œil :
type: vertical-stack
cards:
- type: gauge
entity: sensor.piscine_temperature_piscine
name: Température eau
min: 0
max: 35
severity:
green: 22
yellow: 28
red: 32
- type: entity
entity: sensor.piscine_filtration_recommandee
name: Filtration recommandée aujourd'hui
icon: mdi:timer-outline
- type: button
entity: switch.pompe_piscine
name: Pompe filtration
tap_action:
action: toggle
- type: entity
entity: binary_sensor.piscine_risque_de_gel_piscine
name: Risque de gel
Pour aller plus loin, le composant history_graph permet de visualiser la courbe de température sur les 7 derniers jours et de détecter les anomalies (chute soudaine liée à un remplissage, montée anormale en cas de défaillance du système de traitement).
Pool Pump Manager ou ESPHome — pourquoi ESPHome gagne
Pool Pump Manager est un add-on HACS populaire qui calcule la durée de filtration selon la même règle T°/2. Il fonctionne bien — mais il ajoute une dépendance externe au pipeline de la piscine. En cas de mise à jour cassante de HACS ou d'une nouvelle version de HA qui déplace les API internes, votre gestion de filtration peut s'arrêter sans prévenir.
L'approche ESPHome décrite ici n'a aucune dépendance externe : le calcul de la durée de filtration vit dans le firmware de l'ESP32, et les automatisations HA utilisent uniquement les entités natives. Si HACS disparaît demain, votre piscine continue à fonctionner.
C'est le même principe qui guide nos articles sur le routeur solaire DIY avec ESPHome : déléguer la logique critique au firmware local, utiliser Home Assistant pour l'interface et les notifications, jamais comme seul point de défaillance.
Pour les utilisateurs qui souhaitent aller plus loin — mesure du pH, du chlore (ORP), niveau d'eau — des sondes spécialisées existent (Atlas Scientific EZO, capteurs ORP analogiques). La même architecture ESP32 C3 + ESPHome supporte ces extensions sans modifier le Shelly ni les automatisations de base décrites ici. Des solutions clés en main comme iopool ou l'analyseur Yago Zigbee offrent également une intégration native dans Home Assistant si vous préférez éviter la partie électronique.
Résumé — votre piscine autonome en 5 étapes
- Câbler le DS18B20 sur GPIO10 de l'ESP32 C3 avec la résistance 4,7 kΩ.
- Flasher l'ESP32 C3 avec le YAML ESPHome 2026 ci-dessus.
- Installer le Shelly Plus 1PM au tableau électrique en coupure sur la phase de la pompe.
- Créer les deux automatisations HA (filtration T°/2 + protection hors gel).
- Vérifier le fonctionnement depuis le tableau de bord et activer les notifications.
Votre piscine filtre maintenant exactement ce qu'il faut, s'arrête seule, et vous alerte en cas de gel — le tout sans aucun abonnement cloud ni plugin tiers.