Ir al contenido

Dimmer AC con Home Assistant: guía de ESPHome y DimmerLink

Dos caminos para controlar un dimmer AC desde Home Assistant: la plataforma estándar ESPHome ac_dimmer (configuración rápida, pero arriesgada en ESP32+WiFi) y el componente ESPHome DimmerLink (recomendado por fiabilidad).

Resumen: Existen dos caminos de integración. El Camino A (plataforma estándar ESPHome ac_dimmer) es simple pero causa conflictos ISR/WiFi en ESP32 de doble núcleo. El Camino B (componente ESPHome DimmerLink) descarga la temporización TRIAC a un controlador dedicado — sin ISR, sin conflictos, funciona en cualquier plataforma incluyendo ESP32-C3, Raspberry Pi y HA OS.



¿Qué camino deberías usar?

Criterio Camino A: ESPHome estándar Camino B: DimmerLink
Placa ESP8266 (seguro), ESP32 (arriesgado) Cualquier ESP32, RPi, cualquier SBC
Complejidad YAML ~10 líneas ~30 líneas
Estabilidad WiFi Puede parpadear con carga WiFi Sin conflicto (solo I2C)
ESP32 de un solo núcleo No soportado Soportado
Hardware adicional Ninguno Módulo DimmerLink
Calidad de atenuación Buena Excelente (temporización por hardware)

⚠️ Por qué el ESP32 es arriesgado con el Camino A: la plataforma estándar ac_dimmer usa un ISR por software en el ESP32. Cuando el WiFi o la API de HA están activos, la temporización del ISR se altera, causando parpadeo visible o congelamiento del dimmer. Usa el Camino B para eliminar el ISR por completo.

Elige el Camino A si usas ESP8266 y quieres la configuración más simple.

Elige el Camino B si usas ESP32 (cualquier variante), Raspberry Pi, HA OS en x86, o necesitas atenuación fiable con WiFi/MQTT activo.




Camino A: Plataforma estándar ESPHome ac_dimmer


Cableado (ESP8266 / ESP32)

text
Módulo dimmer   →   ESP8266 (NodeMCU)
──────────────────────────────────────
ZC-OUT          →   D1 (GPIO5)
DIM             →   D2 (GPIO4)
VCC             →   3.3V
GND             →   GND

Para ESP32, cualquier GPIO puede usarse para ZC y DIM.


YAML de ESPHome

yaml
esphome:
  name: ac-dimmer
  platform: ESP8266      # o ESP32
  board: nodemcuv2       # ajustar a tu placa
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  # por defecto; 'trailing' para MOSFET
    min_power: 0.01
light:
  - platform: monochromatic
    output: dimmer_out
    name: "AC Dimmer"
    gamma_correct: 0       # 0 = lineal, 2.8 = percepción LED


Métodos de atenuación

Método Valor method: Uso con
Leading pulse (por defecto) leading_pulse Módulos TRIAC
Leading (gate mantenido) leading TRIAC — alternativo
Trailing trailing Solo módulos MOSFET


Problema conocido: ESP32 + WiFi

⚠️ La plataforma estándar ac_dimmer usa un ISR por software en el ESP32. Cuando el WiFi está activo (especialmente con la API de HA u OTA), el ISR puede retrasarse, causando parpadeo visible o congelamiento del dimmer.

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

Solución: Usa el Camino B (DimmerLink) para instalaciones HA basadas en ESP32.




Camino B: Componente ESPHome DimmerLink

DimmerLink es un controlador dedicado con procesador Cortex-M0+ que gestiona la detección de cruce por cero y la temporización del gate TRIAC internamente. Tu ESP32 envía un valor de brillo (0–100 %) por I2C — ningún ISR se ejecuta en el MCU.


Cableado

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


Instalar el componente ESPHome

Añade el componente externo a tu 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 mínimo (~30 líneas)

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

Flashea, añade a HA, listo.


YAML estándar — con sensores y selector de curva

yaml
# (external_components + i2c como arriba)
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"
      # Opciones: LINEAR, RMS, LOGARITHMIC
binary_sensor:
  - platform: dimmerlink
    address: 0x50
    status:
      name: "Dimmer Status"


Curvas de atenuación

Curva Ideal para
LINEAR Elementos calefactores, cargas resistivas
RMS Bombillas incandescentes y halógenas
LOGARITHMIC Bombillas LED dimmables



Vista del dispositivo en Home Assistant

Tras flashear y añadir el dispositivo ESPHome a HA:

  • El Camino A crea una entidad light con un deslizador de brillo (0–255 mapeado a 0–100 %)
  • El Camino B crea una entidad light más entidades de sensores opcionales (frecuencia AC, brillo %, versión de firmware) y un selector de curva de atenuación — todo mostrado en una sola tarjeta de dispositivo HA



Multi-canal con DimmerLink

Cada módulo DimmerLink gestiona una carga AC en una dirección I2C (configurada mediante jumpers de dirección en la placa). Para controlar dos cargas, conecta dos módulos DimmerLink separados en el mismo bus I2C con diferentes direcciones:

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



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