Piloter une PAC Hayward en wifi avec un ESP32-S3 sous Home Assistant
Comment connecter une pompe à chaleur Hayward de piscine à Home Assistant via un ESP32-S3 Zero, un module RS485 et ESPHome. Guide complet : hardware, soudure, sniffing Modbus, YAML et intégration Lovelace.
Pourquoi ce projet ?
Les pompes à chaleur Hayward pour piscine sont des machines performantes, mais elles n’offrent aucune connectivité native pour Home Assistant. Pas de Wi-Fi, pas d’API, pas de module Zigbee. Pourtant, après avoir épluché les forums, une piste prometteuse émerge : le panneau de contrôle tactile communique avec la carte mère en Modbus RS485. Si on arrive à se brancher sur ce bus, on peut intercepter les données et prendre le contrôle.
La communauté Jeedom a fait le gros du travail de rétro-ingénierie. Plusieurs projets open-source ont vu le jour sur GitHub (freddye83/esp8266_warmpool, cribskip/esp8266_poolstar, grandalos/hayward). Ce guide s’appuie sur ces travaux pour vous proposer une intégration clé en main avec ESPHome et un ESP32-S3 Zero.
Le matériel nécessaire
Avant de se lancer, voici la liste des composants. Budget total : environ 22€ chez AliExpress.

| Composant | Photo | Rôle | Prix approx. | Lien |
|---|---|---|---|---|
| TENSTAR ESP32-S3 Zero | ![]() | Microcontrôleur principal | 5€ | AliExpress |
| Module RS485 TTL isolé | ![]() | Conversion UART ↔ RS485 | 3€ | AliExpress |
| Mini-360 DC-DC Buck | ![]() | Alimentation 12V → 5V | 2€ | AliExpress |
| Kit connecteurs JST | ![]() | Connecteur Y-cable sur le bus | 3€ | AliExpress |
| Carte PCB prototype 4×6 | ![]() | Support de soudure | 2€ | AliExpress |
| Fils silicone 22AWG | Câblage interne | 3€ | AliExpress | |
| Gaine thermorétractable Ø9mm | ![]() | Protection fils | 1€ | AliExpress |
| Boîte plastique | ![]() | Protection carte | 3€ | AliExpress |
| Total | ~22€ |
Câblage et soudure
Le connecteur JST de la PAC
La carte mère Hayward expose un connecteur JST 5 broches qui relie le panneau tactile. Les broches transportent :
- PE (Protected Earth — masse de protection)
- Data+ (RS485 A)
- Data- (RS485 B)
- GND (masse)
- +12V (alimentation)
L’astuce consiste à fabriquer un câble en Y qui se branche entre le panneau et la carte mère, sans rien couper. On récupère ainsi le 12V, la masse, et les deux fils de données.
Montage sur PCB
Le circuit est simple :
- Le 12V de la PAC alimente le module Mini-360 DC-DC Buck, réglé pour sortir du 5V.
- Ce 5V alimente l’ESP32-S3 Zero et le module RS485 TTL.
- Les fils Data+ / Data- vont sur les entrées A / B du RS485.
- Côté ESP32 ↔ RS485 : TX → DI, RX → RO, et un GPIO pour le flow control (DE/RE reliés ensemble).


⚠️ Sécurité : Débranchez impérativement la PAC du secteur avant toute intervention. Travailler sous tension risque d’endommager la carte mère (plusieurs centaines d’euros) et présente un danger électrique mortel.
Installation finale
Le module se glisse à l’intérieur du boîtier de la PAC, à côté de la carte mère. Une fois le capot refermé, l’installation est totalement invisible.

Comprendre le protocole Modbus
Avant d’écrire la configuration ESPHome, il faut comprendre comment la PAC communique. Modbus est un protocole série maître-esclave où les données sont organisées en registres numérotés.
Topologie du bus
La carte mère (maître, adresse 0x00) dialogue avec deux esclaves :
- Adresse
0x01: le panneau tactile - Adresse
0x02: emplacement libre (normalement réservé au module Wi-Fi optionnel)
Notre ESP32 va se faire passer pour l’adresse 0x02.
Messages observés
Toutes les secondes, la carte mère envoie un broadcast (adresse 0x00)
contenant 90 registres à partir de l’adresse 2001. Ce sont les données des
capteurs (températures, pressions, vitesses).
Elle interroge aussi périodiquement l’adresse 0x01 pour 30 registres à
partir de 3001 (état, commandes). L’adresse 0x02 reçoit les mêmes
requêtes — c’est là qu’on se branche.
Registres clés identifiés
| Registre | Donnée | Format |
|---|---|---|
| 1011 | Power ON/OFF | 0=OFF, 1=ON |
| 1012 | Mode | 0=COOL, 1=HEAT, 2=AUTO |
| 1013 | Température consigne | °C × 10 |
| 2045 | Température aspiration (T01) | °C × 10 |
| 2046 | Température eau entrée (T02) | °C × 10 |
| 2047 | Température eau sortie (T03) | °C × 10 |
| 2048 | Température évaporateur (T04) | °C × 10 |
| 2049 | Température air ambiant (T05) | °C × 10 |
| 2050 | Température refoulement (T06) | °C × 10 |
| 2051 | Courant compresseur (T07) | Ampères |
| 2067 | Vitesse ventilateur (T17) | RPM |
| 3011 | Flags d’état | Bitmask |
| 3015-3017 | Heure/Minute/Seconde | BCD |
Configuration ESPHome
Voici le fichier YAML complet pour flasher l’ESP32-S3 Zero. Il utilise le
composant externe grandalos/hayward
qui gère toute la couche Modbus.
esphome:
name: pac-piscine
friendly_name: PAC Hayward Piscine
esp32:
board: esp32-s3-devkitc-1
variant: esp32s3
# Remplacez par vos identifiants Wi-Fi
wifi:
ssid: "XIAOMI_BE5000_2.4GHz"
password: "8f@42A2D28B"
# Active l'API pour communiquer avec Home Assistant
api:
# Permet les futures mises à jour sans fil (OTA)
ota:
- platform: esphome
# Affiche les logs pour le diagnostic (optionnel)
logger:
level: INFO
# Importation du projet Grandalos
external_components:
- source:
type: git
url: https://github.com/grandalos/hayward
ref: main
components: [hayward]
# Configuration de la communication Série (UART) sur les GPIO choisis
uart:
id: bus_pac
baud_rate: 9600
tx_pin: GPIO9
rx_pin: GPIO8
rx_buffer_size: 512
stop_bits: 1
parity: NONE
# Configuration de la Pompe à Chaleur
hayward:
id: hayward_bus
uart_id: bus_pac
send_writes: true
# L'entité principale du Thermostat
ctrl_climate:
id: pac_climate
name: "Thermostat PAC"
# --- Les Capteurs Pratiques (Diagnostic) ---
diag_power_state:
name: "État Alimentation PAC"
diag_compressor_running:
name: "Compresseur en marche"
diag_water_pump_active:
name: "Pompe à eau active"
diag_inlet_temperature:
name: "Température Eau Entrée"
diag_outlet_temperature:
name: "Température Eau Sortie"
diag_ambient_temperature:
name: "Température Air Extérieur"
diag_error_descriptions:
name: "Dernière Erreur PAC"
# Commutateur pour le mode silence (idéal pour la nuit)
ctrl_silent_active_switch:
name: "Mode Silencieux"
Points importants de la config
send_writes: true: indispensable pour que l’ESP32 puisse envoyer des commandes à la PAC (changement de température, mode, ON/OFF). Sans cette option, vous êtes en lecture seule.uart: les GPIO 8 et 9 sont utilisés ici. Adaptez selon votre câblage (le TENSTAR ESP32-S3 Zero a des GPIO compatibles sur ces broches).external_components: le repograndalos/haywardest un fork maintenu qui fonctionne avec ESP32-S3. L’originalcleontin/esphomeest conçu pour ESP8266.
Intégration Lovelace
Une fois l’ESP32 flashé et connecté au Wi-Fi, Home Assistant le découvre automatiquement via l’API ESPHome. Voici une carte Lovelace complète pour piloter la PAC :

type: custom:stack-in-card
cards:
- type: entities
title: PAC Piscine
show_header_toggle: false
entities:
- entity: switch.0x08ddebfffe88699d
name: ON/OFF
type: custom:multiple-entity-row
secondary_info: last-changed
state_color: true
toggle: true
- entity: switch.pac_hayward_piscine_mode_silencieux
name: Mode Silencieux
secondary_info: last-changed
state_color: true
toggle: true
- type: thermostat
entity: climate.pac_hayward_piscine_thermostat_pac
name: Thermostat PAC
features:
- type: climate-hvac-modes
hvac_modes:
- off
- cool
- heat
- auto
- type: entities
entities:
- entity: binary_sensor.pac_hayward_piscine_etat_alimentation_pac
name: État Alimentation PAC
secondary_info: last-changed
- entity: sensor.pac_hayward_piscine_temperature_eau_entree
name: Température Eau Entrée
secondary_info: last-changed
- entity: sensor.pac_hayward_piscine_temperature_eau_sortie
name: Température Eau Sortie
secondary_info: last-changed
- entity: sensor.pac_hayward_piscine_temperature_air_exterieur
name: Température Air Extérieur
secondary_info: last-changed
- entity: sensor.0x08ddebfffe88699d_power
name: Puissance
type: custom:multiple-entity-row
secondary_info: last-changed
state_color: false
toggle: false
- entity: sensor.0x08ddebfffe88699d_current
name: Courant
type: custom:multiple-entity-row
secondary_info: last-changed
state_color: false
toggle: false
- entity: sensor.0x08ddebfffe88699d_energy
name: Conso cumulée
type: custom:multiple-entity-row
secondary_info: last-changed
state_color: false
toggle: false
- entity: binary_sensor.pac_hayward_piscine_pompe_a_eau_active
name: Pompe à eau active
secondary_info: last-changed
- entity: binary_sensor.pac_hayward_piscine_compresseur_en_marche
name: Compresseur en marche
secondary_info: last-changed
- entity: sensor.pac_hayward_piscine_derniere_erreur_pac
name: Dernière Erreur PAC
secondary_info: last-changed
Cette carte utilise les intégrations HACS suivantes (à installer au préalable) :
Résultat final
Une fois tout en place, vous obtenez :
- Un thermostat complet dans Home Assistant (ON/OFF, modes Chaud/Froid/Auto, température de consigne)
- Les capteurs de température en temps réel (entrée eau, sortie eau, air extérieur)
- Les données électriques (puissance, courant, consommation cumulée) si vous avez un module de mesure sur la ligne
- Le mode silencieux activable depuis l’interface
- La détection d’erreurs remontée par la PAC
Le tout pour moins de 25€ de matériel et une après-midi de soudure.
Aller plus loin
- Le composant
grandalos/haywardest activement maintenu. Si vous découvrez de nouveaux registres, contribuez au projet ! - Il est possible d’ajouter un capteur de puissance (type PZEM-004T) sur la ligne d’alimentation pour obtenir la consommation réelle, indépendamment des estimations de la PAC.
- Pour les piscines avec électrolyseur au sel ou pompe de filtration séparée, le même principe Modbus peut s’appliquer — chaque équipement a son propre bus, il suffit de répéter l’opération.
Vous avez réalisé ce projet ? Vous avez des questions ? Les commentaires
et télécharger les fichiers sources






