Se rendre au contenu

Variateur AC avec Home Assistant : guide ESPHome et DimmerLink

Deux voies pour piloter un variateur AC depuis Home Assistant : la plateforme standard ESPHome ac_dimmer (configuration rapide, mais risquée sur ESP32+WiFi) et le composant ESPHome DimmerLink (recommandé pour la fiabilité).

En bref : Deux voies d'intégration existent. La Voie A (plateforme standard ESPHome ac_dimmer) est simple mais provoque des conflits ISR/WiFi sur ESP32 double cœur. La Voie B (composant ESPHome DimmerLink) déporte la synchronisation TRIAC vers un contrôleur dédié — pas d'ISR, pas de conflits, fonctionne sur toute plateforme y compris ESP32-C3, Raspberry Pi et HA OS.



Quelle voie choisir ?

Critère Voie A : ESPHome standard Voie B : DimmerLink
Carte ESP8266 (sûr), ESP32 (risqué) Tout ESP32, RPi, tout SBC
Complexité YAML ~10 lignes ~30 lignes
Stabilité WiFi Peut scintiller sous charge WiFi Aucun conflit (I2C uniquement)
ESP32 simple cœur Non supporté Supporté
Matériel supplémentaire Aucun Module DimmerLink
Qualité de variation Bonne Excellente (timing matériel)

⚠️ Pourquoi l'ESP32 est risqué avec la Voie A : la plateforme standard ac_dimmer utilise un ISR logiciel sur l'ESP32. Lorsque le WiFi ou l'API HA est actif, le timing de l'ISR est perturbé, ce qui provoque un scintillement visible ou un gel du variateur. Utilisez la Voie B pour éliminer entièrement l'ISR.

Choisissez la Voie A si vous utilisez un ESP8266 et souhaitez la configuration la plus simple.

Choisissez la Voie B si vous utilisez un ESP32 (toute variante), Raspberry Pi, HA OS sur x86, ou avez besoin d'une variation fiable avec WiFi/MQTT actif.




Voie A : Plateforme standard ESPHome ac_dimmer


Câblage (ESP8266 / ESP32)

text
Module variateur   →   ESP8266 (NodeMCU)
──────────────────────────────────────
ZC-OUT             →   D1 (GPIO5)
DIM                →   D2 (GPIO4)
VCC                →   3.3V
GND                →   GND

Pour l'ESP32, n'importe quel GPIO peut être utilisé pour ZC et DIM.


YAML ESPHome

yaml
esphome:
  name: ac-dimmer
  platform: ESP8266      # ou ESP32
  board: nodemcuv2       # adapter à votre carte
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
    zero_cross_pin:
      number: GPIO5
      mode: INPUT
      inverted: yes
    method: leading_pulse  # par défaut ; 'trailing' pour MOSFET
    min_power: 0.01
light:
  - platform: monochromatic
    output: dimmer_out
    name: "AC Dimmer"
    gamma_correct: 0       # 0 = linéaire, 2.8 = perception LED


Méthodes de variation

Méthode Valeur method: Utilisation
Leading pulse (défaut) leading_pulse Modules TRIAC
Leading (gâchette maintenue) leading TRIAC — alternatif
Trailing trailing Modules MOSFET uniquement


Problème connu : ESP32 + WiFi

⚠️ La plateforme standard ac_dimmer utilise un ISR logiciel sur l'ESP32. Lorsque le WiFi est actif (surtout avec l'API HA ou l'OTA), l'ISR peut être retardé, provoquant un scintillement visible ou un gel du variateur.

This is the same root cause as crashes with the RBDdimmer C++ library. See: ESP32 + AC Dimmer: IRAM_ATTR Causes and Fix

Solution : Utilisez la Voie B (DimmerLink) pour les installations HA sur ESP32.




Voie B : Composant ESPHome DimmerLink

DimmerLink est un contrôleur dédié avec processeur Cortex-M0+ qui gère la détection de passage par zéro et le timing de la gâchette TRIAC en interne. Votre ESP32 envoie une valeur de luminosité (0–100 %) par I2C — aucun ISR ne tourne sur le MCU.


Câblage

text
DimmerLink   →   ESP32
─────────────────────────
VCC          →   3.3V
GND          →   GND
SDA          →   GPIO21
SCL          →   GPIO22

DimmerLink → AC load wiring is identical to the standard module. See: Hardware Connection Guide


Installer le composant ESPHome

Ajoutez le composant externe à votre YAML :

yaml
external_components:
  - source:
      type: git
      url: https://github.com/robotdyn-dimmer/DimmerLink
      ref: main
    components: [dimmerlink]

Component source and docs: github.com/robotdyn-dimmer/DimmerLink/tree/main/components


YAML minimal (~30 lignes)

yaml
esphome:
  name: dimmerlink-ha
  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: 0x50

Flashez, ajoutez à HA, c'est fait.


YAML standard — avec capteurs et sélection de courbe

yaml
# (external_components + i2c comme ci-dessus)
light:
  - platform: dimmerlink
    name: "Dimmer"
    address: 0x50
sensor:
  - platform: dimmerlink
    address: 0x50
    frequency:
      name: "AC Frequency"
    brightness:
      name: "Dimmer Brightness"
select:
  - platform: dimmerlink
    address: 0x50
    dimming_curve:
      name: "Dimming Curve"
      # Options : LINEAR, RMS, LOGARITHMIC
binary_sensor:
  - platform: dimmerlink
    address: 0x50
    status:
      name: "Dimmer Status"


Courbes de variation

Courbe Idéale pour
LINEAR Éléments chauffants, charges résistives
RMS Ampoules à incandescence et halogènes
LOGARITHMIC Ampoules LED dimmables



Vue de l'appareil dans Home Assistant

Après avoir flashé et ajouté l'appareil ESPHome à HA :

  • La Voie A crée une entité light avec un curseur de luminosité (0–255 mappé sur 0–100 %)
  • La Voie B crée une entité light plus des entités capteurs optionnelles (fréquence AC, luminosité %, version firmware) et un sélecteur de courbe de variation — le tout affiché sur une seule carte d'appareil HA



Multi-canal avec DimmerLink

Chaque module DimmerLink gère une charge AC à une adresse I2C (définie par des cavaliers d'adresse sur la carte). Pour contrôler deux charges, connectez deux modules DimmerLink séparés sur le même bus I2C avec des adresses différentes :

yaml
light:
  - platform: dimmerlink
    name: "Channel 1"
    address: 0x50
  - platform: dimmerlink
    name: "Channel 2"
    address: 0x51



Articles connexes



Encore des questions ?

Ask on forum.rbdimmer.com or open a GitHub Issue.

Partager cet article
Se connecter pour laisser un commentaire.