Ir al contenido

ESPHome YAML para dimmer AC TRIAC: estándar y DimmerLink

Configuraciones ESPHome YAML listas para usar con dimmers AC TRIAC — desde una configuración mínima de 10 líneas hasta una integración DimmerLink completa con sensores, selección de curva y funciones lambda.

Resumen: Existen dos métodos de integración con ESPHome. La plataforma estándar ac_dimmer funciona directamente pero tiene conflictos ISR/WiFi en ESP32. El componente externo DimmerLink utiliza un controlador de hardware para una atenuación fiable y sin parpadeo en cualquier placa.



Comparación de métodos

Característica ac_dimmer estándar Componente DimmerLink
ESP8266 ✅ Estable ✅ Estable
ESP32 (doble núcleo) ⚠️ Puede parpadear ✅ Estable
ESP32-S2/C3/H2/C6 ❌ No soportado ✅ Soportado
— (sin ISR) ❌ No soportado ✅ Soportado
Hardware adicional Ninguno Módulo DimmerLink
Líneas YAML (mínimo) ~10 ~30
Sensores integrados No Frecuencia, brillo
Selección de curva de atenuación No LINEAR / RMS / LOG



Método 1: Plataforma estándar ESPHome ac_dimmer

Es la plataforma integrada de ESPHome. No se necesitan componentes externos.


Configuración mínima (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          # pin DIM
    zero_cross_pin:
      number: GPIO5          # pin ZC
      mode: INPUT
      inverted: yes
    method: leading_pulse    # por defecto para TRIAC
light:
  - platform: monochromatic
    output: dimmer_out
    name: "Dimmer"


Configuración completa — con gamma y potencia mínima

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          # ciclo de trabajo mínimo (1 %) — evita parpadeo en 0
light:
  - platform: monochromatic
    output: dimmer_out
    name: "Dimmer"
    gamma_correct: 0         # 0 = lineal; 2.8 = curva de percepción humana
    default_transition_length: 500ms


Opciones de método de atenuación

yaml
method: leading_pulse   # Pulso breve en gate — TRIAC estándar (por defecto)
method: leading         # Gate mantenido hasta ZC — TRIAC alternativo
method: trailing        # Gate liberado al final — solo MOSFET


Advertencia para ESP32

⚠️ La plataforma estándar ac_dimmer tiene dos problemas distintos en hardware ESP32:

  • ESP32, ESP32-S3 — puede parpadear; temporización ISR afectada por WiFi
  • ESP32-S2, ESP32-C3, ESP32-H2, ESP32-C6 — no soportados en absoluto

Solución: Usa el Método 2 (DimmerLink) para cualquier configuración basada en ESP32.

See: ESP32 + AC Dimmer: IRAM_ATTR Causes and Fix




Método 2: Componente externo DimmerLink

DimmerLink descarga la detección de cruce por cero y la temporización TRIAC a un controlador dedicado Cortex-M0+. ESPHome envía el brillo por I2C (registro 0x10). No se ejecuta ISR en el MCU.

Docs: rbdimmer.com/docs/dimmerlink-esphome

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


Cableado

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


Configuración mínima (~30 líneas)

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


Configuración estándar — con sensores y selector de curva

yaml
# (bloques external_components + i2c como arriba)
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"
      # Opciones en el desplegable de 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"


Configuración extendida — todas las entidades

yaml
# Integración DimmerLink completa con diagnósticos
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"


Configuración multi-dispositivo

Varios módulos DimmerLink en un mismo bus I2C (diferentes direcciones):

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



Integración lambda (avanzado)

Para lógica personalizada — por ejemplo, establecer el brillo desde un botón físico o la lectura de un sensor — usa funciones lambda de ESPHome con acceso directo a registros I2C.

Docs: rbdimmer.com/docs/dimmerlink-esphome/lambda-integration


Mapa de registros I2C de DimmerLink (registros principales)

Registro Dirección Descripción
STATUS 0x00 Flags de estado (solo lectura)
DIM0_LEVEL 0x10 Brillo canal 0, 0–100
DIM0_CURVE 0x11 Curva: 0=LINEAR, 1=RMS, 2=LOG
AC_FREQ 0x20 Frecuencia AC medida (Hz)


Ejemplo lambda — establecer brillo directamente

yaml
# Salida template mediante lambda para control de brillo personalizado
output:
  - platform: template
    id: dimmer_out
    type: float
    write_action:
      - lambda: |-
          uint8_t level = (uint8_t)(state * 100.0f);
          // requiere bloque i2c: en tu configuración ESPHome
          Wire.beginTransmission(0x50);
          Wire.write(0x10);   // registro DIM0_LEVEL
          Wire.write(level);
          Wire.endTransmission();
light:
  - platform: monochromatic
    output: dimmer_out
    name: "Dimmer (lambda)"


Ejemplo lambda — botón activa preset

yaml
binary_sensor:
  - platform: gpio
    pin: GPIO0
    name: "Dim Button"
    on_press:
      - lambda: |-
          // Alternar entre 30 % y 80 %
          static bool high = false;
          uint8_t level = high ? 30 : 80;
          high = !high;
          Wire.beginTransmission(0x50);
          Wire.write(0x10);
          Wire.write(level);
          Wire.endTransmission();



Curvas de atenuación

Curva Valor de registro ESPHome dimming_curve Ideal para
Lineal 0 LINEAR Calefactores, cargas resistivas
RMS 1 RMS Incandescentes, halógenas
Logarítmica 2 LOGARITHMIC Bombillas LED dimmables

Las curvas RMS y logarítmica compensan la relación no lineal entre el ángulo de fase y el brillo percibido.




Problemas comunes

Síntoma Causa Solución
Parpadeo con ESP32 Conflicto ISR/WiFi Usar método DimmerLink
Dimmer offline tras OTA ISR interrumpido durante flash Usar DimmerLink
Brillo atascado en 0 % min_power muy bajo o cableado ZC Verificar pin ZC
Entidad light no aparece en HA ESPHome no adoptado en HA Re-adoptar dispositivo
Componente no encontrado ref: incorrecto en external_components Usar ref: main



Artículos relacionados



¿Todavía tienes preguntas?

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

Compartir esta publicación
Iniciar sesión para dejar un comentario