[Tuto] Contrôler un thermostat Daikin Madoka BRC1H via Bluetooth avec Home Assistant (intégration custom + ESPHome)

Introduction

Salut à tous !

Je partage ici mon intégration custom pour contrôler les thermostats Daikin Madoka BRC1H depuis Home Assistant via Bluetooth.

Les Madoka BRC1H sont des thermostats muraux design de Daikin, contrôlables uniquement via l’app mobile Daikin (Bluetooth). Pas de Wi-Fi, pas de cloud officiel exploitable. Cette intégration permet de les piloter directement depuis HA.

Deux approches possibles :

  1. Intégration custom HA — connexion Bluetooth directe depuis le serveur HA
  2. Composant ESPHome — un ESP32 sert de proxy Bluetooth (placement libre)

GitHub : GitHub - dasimon135/daikin_madoka: Home Assistant custom component integration for the BRC1H thermostat (madoka) (branche madoka)


Fonctionnalités

  • Contrôle complet : mode (chaud, froid, auto, ventilation, déshumidification), température de consigne, vitesse ventilateur
  • Lecture de la température ambiante (sensor dédié)
  • Modes ventilateur : Auto, Low, Mid, High
  • Plage de température : 16°C - 32°C
  • Reconnexion automatique en cas de déconnexion BLE
  • Compatible ESP32 et ESP32-S3 (M5Stack Atom Lite / Atom S3 Lite)

Option 1 : Intégration Custom HA (Bluetooth direct)

Prérequis

  • Home Assistant avec accès Bluetooth (adaptateur USB BLE si besoin)
  • Si HA tourne en Docker : accès DBUS obligatoire (voir plus bas)
  • Le thermostat doit être à portée Bluetooth du serveur HA (~10m)

Installation

  1. Téléchargez le dossier depuis le repo GitHub
  2. Copiez-le dans custom_components/daikin_madoka/ de votre config HA
  3. Redémarrez Home Assistant

Appairage Bluetooth (obligatoire)

C’est l’étape critique. Le BRC1H nécessite un pairing sécurisé :

# 1. Déconnectez le thermostat de tout autre appareil (menu Bluetooth du Madoka → Oublier)

# 2. Sur le serveur HA (ou la machine avec l'adaptateur BT) :
bluetoothctl
agent KeyboardDisplay
remove <MAC_DU_BRC1H>     # Supprimer un ancien appairage éventuel
scan on                     # Attendre que le BRC1H apparaisse
scan off
pair <MAC_DU_BRC1H>        # Accepter le prompt + confirmer sur le thermostat

:warning: Confirmez rapidement sur le thermostat après pair, sinon le pairing expire.

Configuration dans HA

Allez dans Paramètres → Intégrations → Ajouter → Daikin Madoka et renseignez :

  • Adresse MAC Bluetooth du BRC1H
  • Nom de l’adaptateur Bluetooth (généralement hci0)

Deux entités sont créées :

  • Climate : contrôle complet (mode, température, ventilateur)
  • Sensor : température ambiante mesurée

Docker / VM : configuration DBUS

Si HA tourne dans Docker, DBUS doit être accessible :

# docker-compose.yml
volumes:
  - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket
privileged: true

Pour vérifier que ça fonctionne :

docker exec -ti <container_id> /bin/bash
bleak-lescan -i hci0

Option 2 : Proxy ESP32 via ESPHome (recommandé)

C’est l’approche que j’utilise au quotidien. Un M5Stack Atom Lite (ou tout ESP32) placé à proximité du thermostat sert de proxy Bluetooth.

Avantages

  • Pas besoin que le serveur HA soit à portée Bluetooth
  • Fonctionne parfaitement en Docker/VM sans DBUS
  • Un seul ESP32 peut gérer plusieurs thermostats
  • Fiabilité excellente avec reconnexion automatique

Matériel testé

Plateforme Chip Framework Statut
M5Stack Atom Lite ESP32 ESP-IDF :white_check_mark:
M5Stack Atom S3 Lite ESP32-S3 ESP-IDF 5.x :white_check_mark:
ESP32 DevKit générique ESP32 ESP-IDF / Arduino :white_check_mark:

Installation des composants

external_components:
  # Depuis GitHub directement :
  - source: github://dasimon135/daikin_madoka@madoka
    components: [ madoka, ble_client ]

  # OU en local (copiez esphome_components/ dans votre config ESPHome) :
  # - source:
  #     type: local
  #     path: esphome_components
  #   components: [ madoka, ble_client ]

Le composant ble_client inclus est une version corrigée compatible ESPHome 2025.10.0+ (fix du consume_connection_slots supprimé).

Config complète (M5Stack Atom Lite)

substitutions:
  name: madoka-proxy
  friendly_name: "Madoka BLE Proxy"

esphome:
  name: ${name}
  friendly_name: ${friendly_name}

esp32:
  board: m5stack-atom
  framework:
    type: esp-idf

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

logger:
  level: DEBUG

api:
  encryption:
    key: !secret api_key

ota:

external_components:
  - source: github://dasimon135/daikin_madoka@madoka
    components: [ madoka, ble_client ]

esp32_ble_tracker:
  max_connections: 2

# IMPORTANT : désactiver le proxy BT classique
bluetooth_proxy:
  active: false

ble_client:
  - mac_address: "F0:B3:1E:87:AF:FE"  # ← Votre MAC Madoka
    id: madoka_salon
    on_disconnect:
      then:
        - ble_client.connect: madoka_salon

climate:
  - platform: madoka
    name: "Madoka Salon"
    ble_client_id: madoka_salon
    update_interval: 15s

Config ESP32-S3 (M5Stack Atom S3 Lite)

Pour les ESP32-S3, ajoutez la configuration de sécurité BLE :

esp32:
  board: m5stack-atoms3
  variant: esp32s3
  framework:
    type: esp-idf
    version: recommended
    sdkconfig_options:
      CONFIG_BT_BLE_50_FEATURES_SUPPORTED: y
      CONFIG_BT_BLE_42_FEATURES_SUPPORTED: y

# OBLIGATOIRE pour le pairing Madoka sur ESP32-S3
esp32_ble:
  io_capability: display_yes_no

Processus de pairing (ESP32)

  1. Flashez la config et ouvrez les logs ESPHome
  2. L’ESP32 se connecte au Madoka et lance le pairing
  3. Un code à 6 chiffres s’affiche dans les logs :
╔══════════════════════════════════════════════════════════╗
║  PAIRING CODE: 790440                                   ║
║  Vérifiez que ce code correspond à celui sur le Madoka  ║
║  et CONFIRMEZ sur le thermostat!                        ║
╚══════════════════════════════════════════════════════════╝
  1. Le même code s’affiche sur l’écran du thermostat
  2. Confirmez sur le thermostat (bouton OK) — l’ESP32 confirme automatiquement
  3. Les connexions suivantes sont automatiques (bonding enregistré)

Plusieurs thermostats

Un seul ESP32 peut gérer 2 thermostats simultanément (max_connections: 2). Ajoutez un deuxième ble_client + climate :

ble_client:
  - mac_address: "F0:B3:1E:87:AF:FE"
    id: madoka_salon
    on_disconnect:
      then:
        - ble_client.connect: madoka_salon
  - mac_address: "1C:54:9E:90:E3:0E"
    id: madoka_chambre
    on_disconnect:
      then:
        - ble_client.connect: madoka_chambre

climate:
  - platform: madoka
    name: "Madoka Salon"
    ble_client_id: madoka_salon
    update_interval: 15s
  - platform: madoka
    name: "Madoka Chambre"
    ble_client_id: madoka_chambre
    update_interval: 15s

Dépannage

Problème Solution
« device not found » dans l’intégration HA Le thermostat est connecté à un autre appareil (app mobile). Oubliez-le d’abord.
« cannot connect » DBUS non disponible (Docker) ou adaptateur BT absent
Pairing échoue (erreur 0x52) Sur ESP32-S3 : vérifiez esp32_ble: io_capability: display_yes_no
2ème thermostat ne se connecte pas Normal, ils se connectent un par un. Attendez le pairing du 1er.
AttributeError: consume_connection_slots Utilisez le ble_client corrigé inclus dans le repo

Crédits

  • Intégration HA originale : @mduran80 / pymadoka
  • Composant ESPHome madoka : Petapton/esphome
  • Correctifs de compatibilité ESPHome 2025.10+ et support ESP32-S3 : ce repo

GitHub : GitHub - dasimon135/daikin_madoka: Home Assistant custom component integration for the BRC1H thermostat (madoka) (branche madoka)

Si ça vous intéresse ou si vous avez des Madoka chez vous, n’hésitez pas à tester et à faire des retours ! :slightly_smiling_face: