Scrugo
Terminé DIY Difficulté : ●●●●○

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.

⏱ 6h 💰 22€ 📅
ESPHome UART RS485 Modbus Home Assistant YAML
Piloter une PAC Hayward en wifi avec un ESP32-S3 sous Home Assistant

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.

Composants non montés

ComposantPhotoRôlePrix approx.Lien
TENSTAR ESP32-S3 ZeroESP32-S3 ZeroMicrocontrôleur principal5€AliExpress
Module RS485 TTL isoléModule RS485Conversion UART ↔ RS4853€AliExpress
Mini-360 DC-DC BuckMini-360 BuckAlimentation 12V → 5V2€AliExpress
Kit connecteurs JSTConnecteurs JSTConnecteur Y-cable sur le bus3€AliExpress
Carte PCB prototype 4×6PCB prototypeSupport de soudure2€AliExpress
Fils silicone 22AWGFils siliconeCâblage interne3€AliExpress
Gaine thermorétractable Ø9mmgaine thermorétractable Ø9mmProtection fils1€AliExpress
Boîte plastiqueBoîte plastiqueProtection carte3€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 :

  1. PE (Protected Earth — masse de protection)
  2. Data+ (RS485 A)
  3. Data- (RS485 B)
  4. GND (masse)
  5. +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.

Schéma de câblage câble Y

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).
Schéma de câblage ESP32-S3, RS485 et mini-360

PCB face avant

PCB face arrière

⚠️ 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.

![Installation dans le boîtier](./images/06—final-installation-intégration boitier dans PAC.jpg)

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

RegistreDonnéeFormat
1011Power ON/OFF0=OFF, 1=ON
1012Mode0=COOL, 1=HEAT, 2=AUTO
1013Température consigne°C × 10
2045Température aspiration (T01)°C × 10
2046Température eau entrée (T02)°C × 10
2047Température eau sortie (T03)°C × 10
2048Température évaporateur (T04)°C × 10
2049Température air ambiant (T05)°C × 10
2050Température refoulement (T06)°C × 10
2051Courant compresseur (T07)Ampères
2067Vitesse ventilateur (T17)RPM
3011Flags d’étatBitmask
3015-3017Heure/Minute/SecondeBCD

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 repo grandalos/hayward est un fork maintenu qui fonctionne avec ESP32-S3. L’original cleontin/esphome est 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 :

Carte Lovelace dans Home Assistant

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/hayward est 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

Licence : MIT — Publié le

💬 Discussions & Questions

0 / 5000

📬 Recevoir la newsletter hebdo

Signaler ce contenu