Note : Ce tutoriel est maintenant maintenu sur GitHub et peut évoluer entre les mises à jour du forum. Version toujours à jour : github.com/dasimon135/daikin_madoka/blob/main/docs/tuto-hacf.md
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 :
- Intégration custom HA — connexion Bluetooth directe depuis le serveur HA
- 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) · GitHub (branche main )
Mise à jour : la branche de référence est désormais main (ancienne branche madoka retirée).
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)
Note (mars 2026) : la librairie
pymadokautilisefrom bleak import discover, une fonction supprimée depuis bleak 0.20. Les versions récentes de HA embarquent une version de bleak incompatible. Si vous tombez surcannot import name 'discover' from 'bleak', passez directement à l’option 2 (ESPHome) qui fonctionne sans problème de dépendances.
Installation
- Téléchargez le dossier depuis le repo GitHub
- Copiez-le dans
custom_components/daikin_madoka/de votre config HA - Redémarrez Home Assistant
Via le terminal HA (SSH) en une ligne :
cd /config/custom_components && mkdir -p daikin_madoka && cd daikin_madoka && wget -q https://github.com/dasimon135/daikin_madoka/archive/main.zip && unzip -q main.zip && cp daikin_madoka-main/{__init__,climate,config_flow,const,sensor}.py daikin_madoka-main/{manifest,strings}.json . && cp -r daikin_madoka-main/translations . && rm -rf daikin_madoka-main main.zip
Appairage Bluetooth (obligatoire)
bluetoothctl
agent KeyboardDisplay
remove <MAC_DU_BRC1H>
scan on
scan off
pair <MAC_DU_BRC1H>
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
Docker / VM : configuration DBUS
Si HA tourne dans Docker, ajoutez dans docker-compose.yml :
volumes:
- /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket
privileged: true
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 | Statut |
|---|---|---|
| M5Stack Atom Lite | ESP32 | |
| M5Stack Atom S3 Lite | ESP32-S3 | |
| ESP32 DevKit générique | ESP32 |
Installation des composants
external_components:
- source: github://dasimon135/daikin_madoka@main
components: [ madoka, ble_client ]
Le composant
ble_clientinclus est une version corrigée compatible ESPHome 2025.10.0+.
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:
api:
encryption:
key: !secret api_key
ota:
external_components:
- source: github://dasimon135/daikin_madoka@main
components: [ madoka, ble_client ]
esp32_ble_tracker:
id: ble_tracker # nécessaire pour le switch de ré-appairage (voir plus bas)
max_connections: 2
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)
Ajoutez ou remplacez le bloc esp32 par :
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)
- Flashez la config et ouvrez les logs ESPHome
- Un code à 6 chiffres s’affiche dans les logs — le même s’affiche sur le Madoka
- Confirmez sur le thermostat (bouton OK)
- Les connexions suivantes sont automatiques (bonding enregistré)
Plusieurs thermostats
Un seul ESP32 peut gérer 2 thermostats simultanément (max_connections: 2) :
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
Astuce : reprendre la main avec le téléphone (ré-appairage)
Merci à @Quev1n pour avoir trouvé et partagé cette solution !
Problème : quand on supprime les appairages sur le Madoka pour se reconnecter avec l’application téléphone, l’ESP32 tente de se reconnecter en boucle et empêche le téléphone de s’appairer à nouveau.
Solution : un switch dans Home Assistant pour couper temporairement le scan BLE.
Ajoutez ces blocs à votre config YAML (le id: ble_tracker sur esp32_ble_tracker est requis, comme dans la config ci-dessus) :
switch:
- platform: template
name: "Proxy Madoka Actif"
id: proxy_enabled
optimistic: true
restore_mode: RESTORE_DEFAULT_ON
turn_on_action:
- script.execute: start_ble
turn_off_action:
- script.execute: stop_ble
script:
- id: stop_ble
then:
- logger.log: "Arret BLE"
- lambda: |-
id(ble_tracker).stop_scan();
- id: start_ble
then:
- logger.log: "Demarrage BLE"
- lambda: |-
id(ble_tracker).start_scan();
Procédure :
- Dans HA, passez le switch « Proxy Madoka Actif » sur OFF
- Appairez votre téléphone avec le Madoka et faites vos modifications
- Repassez le switch sur ON — l’ESP32 se reconnecte automatiquement
Dépannage
| Problème | Solution |
|---|---|
cannot import name 'discover' from 'bleak' |
bleak trop récent, passez à l’option ESPHome |
| « device not found » | Thermostat connecté à un autre appareil, déconnectez-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, connexions séquentielles — 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
- Astuce switch de ré-appairage BLE : @Quev1n
GitHub : GitHub - dasimon135/daikin_madoka: Home Assistant custom component integration for the BRC1H thermostat (madoka) · GitHub (branche main)
Si ça vous intéresse ou si vous avez des Madoka chez vous, n’hésitez pas à tester et à faire des retours ! ![]()