← - Intégration Lambda | Sommaire | Suivant : - Entités Lambda →
Intégration ESPHome — Introduction
Intégration de DimmerLink avec Home Assistant via ESPHome.
Sommaire
Sections complémentaires :
- Référence Lambda — référence I2C et registres
- Entités prêtes à l'emploi — blocs de code à copier-coller
- Exemples complets — configurations fonctionnelles
1. Vue d'ensemble
Qu'est-ce que ESPHome ?
ESPHome est un système de création de firmware ESP8266/ESP32 à l'aide de configurations YAML simples. Les appareils ESPHome s'intègrent automatiquement avec Home Assistant.
Pourquoi ESPHome + DimmerLink ?
┌─────────────────┐ I2C ┌─────────────┐ WiFi ┌─────────────────┐
│ DimmerLink │◄────────────►│ ESP32 │◄────────────►│ Home Assistant │
│ (AC Dimmer) │ │ (ESPHome) │ │ │
└─────────────────┘ └─────────────┘ └─────────────────┘
Avantages :
| Fonctionnalité | Description |
|---|---|
| Intégration HA | Le variateur apparaît comme une entité Light |
| Automatisation | Utilisation dans les scénarios Home Assistant |
| Mises à jour OTA | Mises à jour firmware sans fil |
| Contrôle local | Fonctionne sans Internet |
| Faible latence | Connexion directe, sans cloud |
Architecture de la solution
Home Assistant
│
│ WiFi (Native API)
▼
ESP32 + ESPHome
│
│ I2C (100 kHz)
▼
DimmerLink
│
│ Zero-Cross + Gate
▼
AC Dimmer
│
│ AC 110/220V
▼
Lamp
Approche d'intégration
DimmerLink ne dispose pas de composant prêt à l'emploi dans ESPHome. Nous utilisons des fonctions lambda — du code C++ intégré dans la configuration YAML.
Pourquoi lambda ?
- Aucune bibliothèque externe requise
- Contrôle total de la communication I2C
- Compatible avec toute version d'ESPHome
- Facile à adapter pour de nouveaux registres
Aperçu :
output:
- platform: template
id: dimmerlink_output
type: float
write_action:
- lambda: |-
uint8_t level = (uint8_t)(state * 100.0f);
uint8_t data[2] = {0x10, level};
id(bus_a).write(0x50, data, 2, true);
2. Prérequis
Prérequis matériels
| Composant | Exigence | Remarque |
|---|---|---|
| DimmerLink | v1.0+ | En mode I2C |
| ESP32 | Toute variante | ESP32, ESP32-C3, ESP32-S2, ESP32-S3 |
| Variateur AC | Module TRIAC | Avec entrées Z-C et DIM |
| Charge | Dimmable | Ampoules à incandescence, LED (dimmables) |
Cartes ESP32 compatibles
| Carte | I2C par défaut | Remarque |
|---|---|---|
| ESP32 DevKit | GPIO21/GPIO22 | Recommandé |
| ESP32-C3 | GPIO8/GPIO9 | Compact |
| ESP32-S2 | GPIO8/GPIO9 | USB natif |
| ESP32-S3 | GPIO8/GPIO9 | Double cœur |
| ESP32-WROOM | GPIO21/GPIO22 | Classique |
| NodeMCU-32S | GPIO21/GPIO22 | Avec USB |
Prérequis logiciels
| Composant | Version | Où l'obtenir |
|---|---|---|
| ESPHome | 2023.1+ | Add-on Home Assistant ou CLI |
| Home Assistant | 2023.1+ | home-assistant.io |
| Python | 3.9+ | Uniquement pour ESPHome CLI |
Vérifier la version d'ESPHome
In Home Assistant:
Settings → Add-ons → ESPHome → Info
CLI :
esphome version
Avant de commencer
3. Connexion
Schéma de câblage
┌─────────────┐ ┌─────────────────┐ ┌─────────────┐
│ ESP32 │ │ DimmerLink │ │ AC Dimmer │
│ │ │ │ │ │
│ 3.3V ──────┼────────►│ VCC │ │ │
│ GND ───────┼────────►│ GND VCC ├────────►│ VCC │
│ GPIO21 ────┼────────►│ SDA GND ├────────►│ GND │
│ GPIO22 ────┼────────►│ SCL Z-C ├────────►│ Z-C │
│ │ │ DIM ├────────►│ DIM │
└─────────────┘ └─────────────────┘ └─────────────┘
Tableau de connexion
| ESP32 | DimmerLink | Fonction |
|---|---|---|
| 3.3V | VCC | Alimentation |
| GND | GND | Masse |
| GPIO21 | SDA | I2C Data |
| GPIO22 | SCL | I2C Clock |
| DimmerLink | Variateur AC | Fonction |
|---|---|---|
| VCC | VCC | Alimentation |
| GND | GND | Masse |
| Z-C | Z-C | Passage par zéro |
| DIM | DIM | Gate |
Résistances de tirage (pull-up)
ESP32 dispose de pull-ups internes, mais des résistances externes sont recommandées pour un fonctionnement fiable :
| Longueur de câble | Résistances |
|---|---|
| < 10 cm | Peut fonctionner sans externes |
| 10–30 cm | 4,7 kΩ recommandé |
| > 30 cm | 2,2–4,7 kΩ requis |
Basculer DimmerLink en mode I2C
DimmerLink est livré en mode UART. Le mode I2C est requis pour ESPHome.
Via UART (avant la connexion à ESP32) :
import serial
ser = serial.Serial('COM3', 115200)
ser.write(bytes([0x02, 0x5B])) # SWITCH_I2C
# Response: 0x00 = OK
Ou via terminal (mode HEX) :
Send: 02 5B
Response: 00
Après le basculement, DimmerLink enregistre le mode dans l'EEPROM.
Vérification de la connexion
Après la connexion et le flashage de l'ESP32, les logs doivent afficher :
[I][i2c.arduino:XX]: Found i2c device at address 0x50
4. Configuration de base
Étape 1 : Créer le projet
Dans Home Assistant (Add-on) :
- Settings → Add-ons → ESPHome
- "+ NEW DEVICE"
- Nom :
dimmerlink - Sélectionner le type de carte : ESP32
CLI :
esphome wizard dimmerlink.yaml
Étape 2 : YAML de base
Créez le fichier dimmerlink.yaml :
# ============================================================
# DimmerLink + ESPHome — Basic Configuration
# ============================================================
substitutions:
device_name: "dimmerlink"
friendly_name: "DimmerLink"
esphome:
name: ${device_name}
friendly_name: ${friendly_name}
esp32:
board: esp32dev
framework:
type: arduino
# Logging
logger:
level: INFO
# Home Assistant API
api:
encryption:
key: !secret api_key
# OTA updates
ota:
platform: esphome
password: !secret ota_password
# WiFi
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Fallback access point
ap:
ssid: "${device_name}-AP"
password: "12345678"
captive_portal:
# ============================================================
# I2C Bus
# ============================================================
i2c:
sda: GPIO21
scl: GPIO22
scan: true
frequency: 100kHz
id: bus_a
# ============================================================
# Output — Communication with DimmerLink
# ============================================================
output:
- platform: template
id: dimmerlink_output
type: float
write_action:
- lambda: |-
// Convert 0.0-1.0 → 0-100%
uint8_t level = (uint8_t)(state * 100.0f);
if (level > 100) level = 100;
// Write to DIM0_LEVEL register (0x10)
uint8_t data[2] = {0x10, level};
id(bus_a).write(0x50, data, 2, true);
# ============================================================
# Light — What Home Assistant sees
# ============================================================
light:
- platform: monochromatic
name: "Light"
output: dimmerlink_output
default_transition_length: 1s
gamma_correct: 1.0
restore_mode: RESTORE_DEFAULT_OFF
Étape 3 : Fichier secrets.yaml
Créez secrets.yaml dans le même dossier :
wifi_ssid: "YourNetwork"
wifi_password: "YourPassword"
api_key: "generate_via_esphome"
ota_password: "your_ota_password"
Étape 4 : Compiler et téléverser
Dans Home Assistant :
- Click "INSTALL" on the device card
- Select "Plug into this computer" (first time via USB)
- Attendez la fin du téléversement
CLI :
# First upload via USB
esphome run dimmerlink.yaml
# Subsequent updates — over the air
esphome run dimmerlink.yaml --device dimmerlink.local
Étape 5 : Vérification
Dans les logs ESPHome :
[I][i2c.arduino:XX]: Found i2c device at address 0x50
[I][app:XX]: ESPHome version 2024.x.x compiled on ...
[I][wifi:XX]: WiFi Connected!
[I][api:XX]: Home Assistant connected!
Dans Home Assistant :
- Settings → Devices & Services
- Find "ESPHome" → "DimmerLink"
- Une entité Light doit apparaître
Étape 6 : Test
Dans Home Assistant :
- Ouvrez la carte Light
- Déplacez le curseur de luminosité
- La lampe doit changer de luminosité
Via Developer Tools :
service: light.turn_on
target:
entity_id: light.dimmerlink_light
data:
brightness_pct: 50
What's Next?
Étendre les fonctionnalités
Après une configuration de base réussie, ajoutez :
| Fonctionnalité | Section |
|---|---|
| Sélection de la courbe de variation | Entités prêtes → Select |
| Surveillance de la fréquence AC | Entités prêtes → Sensor |
| Bouton physique | Exemples → Avec bouton |
| Plusieurs variateurs | Exemples → Multi-device |
Configuration recommandée
Pour la plupart des utilisateurs, nous recommandons l'exemple standard :
→ 03_examples.md → 7.2 Standard
Comprend :
- Éclairage avec transitions douces
- Sélection de courbe (LINEAR / RMS / LOG)
- Capteur de fréquence AC
- Statut de disponibilité
- Bouton de redémarrage
Documents de référence
| Document | Contenu |
|---|---|
| Référence Lambda | Tous les registres, codes de commande, exemples lambda |
| Entités prêtes à l'emploi | Blocs de code à copier pour chaque type d'entité |
| Exemples complets | 6 configurations prêtes à l'emploi |
Démarrage rapide (TL;DR)
# Minimum for operation — copy and modify WiFi
substitutions:
device_name: "dimmerlink"
esphome:
name: ${device_name}
esp32:
board: esp32dev
logger:
api:
ota:
wifi:
ssid: "YOUR_WIFI"
password: "YOUR_PASSWORD"
i2c:
sda: GPIO21
scl: GPIO22
id: bus_a
output:
- platform: template
id: dimmer_out
type: float
write_action:
- lambda: |-
uint8_t level = (uint8_t)(state * 100.0f);
uint8_t data[2] = {0x10, level};
id(bus_a).write(0x50, data, 2, true);
light:
- platform: monochromatic
name: "Dimmer"
output: dimmer_out
gamma_correct: 1.0
30 lignes — et le variateur est dans Home Assistant !
Historique des versions
| Version | Date | Modifications |
|---|---|---|
| 1.0 | 2026-02 | Version initiale |
← - Intégration Lambda | Sommaire | Suivant : - Entités Lambda →