En bref : Deux méthodes d'intégration ESPHome existent. La plateforme standard
ac_dimmerfonctionne directement mais présente des conflits ISR/WiFi sur ESP32. Le composant externe DimmerLink utilise un contrôleur matériel pour une variation fiable et sans scintillement sur n'importe quelle carte.
Comparaison des méthodes
| Fonctionnalité | ac_dimmer standard | Composant DimmerLink |
|---|---|---|
| ESP8266 | ✅ Stable | ✅ Stable |
| ESP32 (double cœur) | ⚠️ Peut scintiller | ✅ Stable |
| ESP32-S2/C3/H2/C6 | ❌ Non supporté | ✅ Supporté |
| DimmerLink | ❌ Non supporté | ✅ Supporté |
| Matériel supplémentaire | Aucun | Module DimmerLink |
| Lignes YAML (minimal) | ~10 | ~30 |
| Capteurs intégrés | Non | Fréquence, luminosité |
| Sélection de courbe de variation | Non | LINEAR / RMS / LOG |
Méthode 1 : Plateforme standard ESPHome ac_dimmer
C'est la plateforme intégrée d'ESPHome. Aucun composant externe requis.
Configuration minimale (ESP8266)
esphome:
name: dimmer-esp8266
platform: ESP8266
board: nodemcuv2
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
api:
encryption:
key: !secret api_key
ota:
password: !secret ota_password
output:
- platform: ac_dimmer
id: dimmer_out
gate_pin: GPIO4 # broche DIM
zero_cross_pin:
number: GPIO5 # broche ZC
mode: INPUT
inverted: yes
method: leading_pulse # par défaut pour TRIAC
light:
- platform: monochromatic
output: dimmer_out
name: "Dimmer"Configuration complète — avec gamma et puissance minimale
output:
- platform: ac_dimmer
id: dimmer_out
gate_pin: GPIO4
zero_cross_pin:
number: GPIO5
mode: INPUT
inverted: yes
method: leading_pulse
min_power: 0.01 # rapport cyclique minimum (1 %) — évite le scintillement à 0
light:
- platform: monochromatic
output: dimmer_out
name: "Dimmer"
gamma_correct: 0 # 0 = linéaire ; 2.8 = courbe de perception humaine
default_transition_length: 500msOptions de méthode de variation
method: leading_pulse # Impulsion brève sur la gâchette — TRIAC standard (défaut)
method: leading # Gâchette maintenue jusqu'au ZC — TRIAC alternatif
method: trailing # Gâchette relâchée en fin de cycle — MOSFET uniquementAvertissement pour ESP32
⚠️ La plateforme standard
ac_dimmerprésente deux problèmes distincts sur le matériel ESP32 :
- ESP32, ESP32-S3 — peut scintiller ; timing ISR perturbé par le WiFi
- ESP32-S2, ESP32-C3, ESP32-H2, ESP32-C6 — pas du tout supporté
Solution : Utilisez la Méthode 2 (DimmerLink) pour toute configuration à base d'ESP32.
Méthode 2 : Composant externe DimmerLink
DimmerLink déporte la détection de passage par zéro et la synchronisation
TRIAC vers un contrôleur dédié Cortex-M0+. ESPHome envoie la luminosité
par I2C (registre 0x10). Aucun ISR ne tourne sur le MCU.
Docs: rbdimmer.com/docs/dimmerlink-esphome
Component source: github.com/robotdyn-dimmer/DimmerLink/tree/main/components
Câblage
DimmerLink → ESP32 (ou tout MCU)
──────────────────────────────────
VCC → 3.3V
GND → GND
SDA → GPIO21
SCL → GPIO22Configuration minimale (~30 lignes)
esphome:
name: dimmerlink
platform: ESP32
board: esp32dev
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
api:
encryption:
key: !secret api_key
ota:
password: !secret ota_password
external_components:
- source:
type: git
url: https://github.com/robotdyn-dimmer/DimmerLink
ref: main
components: [dimmerlink]
i2c:
sda: GPIO21
scl: GPIO22
frequency: 100kHz
light:
- platform: dimmerlink
name: "Dimmer"
address: 0x50Configuration standard — avec capteurs et sélection de courbe
# (blocs external_components + i2c comme ci-dessus)
light:
- platform: dimmerlink
name: "Dimmer"
address: 0x50
sensor:
- platform: dimmerlink
address: 0x50
frequency:
name: "AC Frequency"
unit_of_measurement: "Hz"
brightness:
name: "Dimmer Level"
unit_of_measurement: "%"
select:
- platform: dimmerlink
address: 0x50
dimming_curve:
name: "Dimming Curve"
# Options dans le menu déroulant HA : LINEAR, RMS, LOGARITHMIC
binary_sensor:
- platform: dimmerlink
address: 0x50
status:
name: "Dimmer Online"
button:
- platform: dimmerlink
address: 0x50
reset:
name: "Dimmer Reset"
recalibrate:
name: "Dimmer Recalibrate"Configuration étendue — toutes les entités
# Intégration DimmerLink complète avec diagnostics
sensor:
- platform: dimmerlink
address: 0x50
frequency:
name: "AC Frequency"
brightness:
name: "Dimmer Level"
text_sensor:
- platform: dimmerlink
address: 0x50
firmware_version:
name: "DimmerLink Firmware"
number:
- platform: dimmerlink
address: 0x50
min_brightness:
name: "Min Brightness"
min_value: 0
max_value: 20
select:
- platform: dimmerlink
address: 0x50
dimming_curve:
name: "Dimming Curve"
binary_sensor:
- platform: dimmerlink
address: 0x50
status:
name: "Dimmer OK"
calibration_mode:
name: "Calibration Active"
button:
- platform: dimmerlink
address: 0x50
reset:
name: "Reset"
recalibrate:
name: "Recalibrate"Configuration multi-appareils
Plusieurs modules DimmerLink sur un même bus I2C (adresses différentes) :
light:
- platform: dimmerlink
name: "Kitchen"
address: 0x50
- platform: dimmerlink
name: "Bedroom"
address: 0x51Intégration lambda (avancé)
Pour une logique personnalisée — par exemple, régler la luminosité depuis un bouton physique ou une lecture de capteur — utilisez les fonctions lambda d'ESPHome avec accès direct aux registres I2C.
Docs: rbdimmer.com/docs/dimmerlink-esphome/lambda-integration
Carte des registres I2C DimmerLink (registres principaux)
| Registre | Adresse | Description |
|---|---|---|
| STATUS | 0x00 |
Drapeaux d'état (lecture seule) |
| DIM0_LEVEL | 0x10 |
Luminosité canal 0, 0–100 |
| DIM0_CURVE | 0x11 |
Courbe : 0=LINEAR, 1=RMS, 2=LOG |
| AC_FREQ | 0x20 |
Fréquence AC mesurée (Hz) |
Exemple lambda — régler la luminosité directement
# Sortie template via lambda pour un contrôle personnalisé de la luminosité
output:
- platform: template
id: dimmer_out
type: float
write_action:
- lambda: |-
uint8_t level = (uint8_t)(state * 100.0f);
// nécessite un bloc i2c: dans votre configuration ESPHome
Wire.beginTransmission(0x50);
Wire.write(0x10); // registre DIM0_LEVEL
Wire.write(level);
Wire.endTransmission();
light:
- platform: monochromatic
output: dimmer_out
name: "Dimmer (lambda)"Exemple lambda — un bouton déclenche une préréglage
binary_sensor:
- platform: gpio
pin: GPIO0
name: "Dim Button"
on_press:
- lambda: |-
// Bascule entre 30 % et 80 %
static bool high = false;
uint8_t level = high ? 30 : 80;
high = !high;
Wire.beginTransmission(0x50);
Wire.write(0x10);
Wire.write(level);
Wire.endTransmission();Courbes de variation
| Courbe | Valeur registre | ESPHome dimming_curve |
Idéale pour |
|---|---|---|---|
| Linéaire | 0 | LINEAR |
Chauffages, charges résistives |
| RMS | 1 | RMS |
Incandescence, halogène |
| Logarithmique | 2 | LOGARITHMIC |
Ampoules LED dimmables |
Les courbes RMS et logarithmique compensent la relation non linéaire entre l'angle de phase et la luminosité perçue.
Problèmes courants
| Symptôme | Cause | Solution |
|---|---|---|
| Scintillement avec ESP32 | Conflit ISR/WiFi | Utiliser la méthode DimmerLink |
| Variateur hors ligne après OTA | ISR interrompu pendant le flash | Utiliser DimmerLink |
| Luminosité bloquée à 0 % | min_power trop bas ou câblage ZC |
Vérifier la broche ZC |
| Entité light absente dans HA | ESPHome non adopté dans HA | Ré-adopter l'appareil |
| Composant non trouvé | Mauvais ref: dans external_components |
Utiliser ref: main |
Articles connexes
- Guide complet Home Assistant →
home-automation/home-assistant-ac-dimmer.md - ESP32 WiFi ISR problem → IRAM_ATTR Causes and Fix
- Single-core ESP32 → ESP32-S2/C3/H2 Doesn't Work
- Alternative MQTT →
home-automation/mqtt-esp32-ac-dimmer.md
Encore des questions ?
Ask on forum.rbdimmer.com or open a GitHub Issue.