Se rendre au contenu

ESPHome YAML pour variateur AC TRIAC : standard et DimmerLink

Configurations ESPHome YAML prêtes à l'emploi pour variateurs AC TRIAC — d'une configuration minimale de 10 lignes à une intégration DimmerLink complète avec capteurs, sélection de courbe et fonctions lambda.

En bref : Deux méthodes d'intégration ESPHome existent. La plateforme standard ac_dimmer fonctionne 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)

yaml
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

yaml
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: 500ms


Options de méthode de variation

yaml
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 uniquement


Avertissement pour ESP32

⚠️ La plateforme standard ac_dimmer pré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.

See: ESP32 + AC Dimmer: IRAM_ATTR Causes and Fix




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

text
DimmerLink   →   ESP32 (ou tout MCU)
──────────────────────────────────
VCC          →   3.3V
GND          →   GND
SDA          →   GPIO21
SCL          →   GPIO22


Configuration minimale (~30 lignes)

yaml
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: 0x50


Configuration standard — avec capteurs et sélection de courbe

yaml
# (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

yaml
# 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) :

yaml
light:
  - platform: dimmerlink
    name: "Kitchen"
    address: 0x50
  - platform: dimmerlink
    name: "Bedroom"
    address: 0x51



Inté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

yaml
# 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

yaml
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



Encore des questions ?

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

Partager cet article
Se connecter pour laisser un commentaire.