Ir al contenido

Control de dimmer AC vía DimmerLink en Tasmota

Tasmota no tiene un controlador nativo de corte de fase TRIAC. DimmerLink cubre esta carencia — Tasmota envía comandos por I2C (Berry en ESP32) o UART (SerialSend en cualquier placa), y DimmerLink se encarga de la sincronización precisa del TRIAC.

Resumen: Tasmota no puede controlar nativamente un dimmer TRIAC con corte de fase. Usa DimmerLink como esclavo I2C/UART. En ESP32 con Tasmota: escribe un script Berry de 5 líneas que asocia cualquier disparador de regla a una escritura de registro I2C en la dirección 0x50. En ESP8266: usa SerialSend5 con el formato de paquete binario de DimmerLink. Home Assistant descubre el dispositivo automáticamente vía Tasmota MQTT.




Por qué Tasmota no puede controlar un TRIAC directamente

El comando Dimmer de Tasmota controla una salida PWM interna o un relé SWITCH. No soporta control de fase TRIAC (corte de fase) porque esto requiere una interrupción de hardware en cada cruce por cero AC (cada 10 ms a 50 Hz) con precisión de disparo inferior al milisegundo.

Tasmota ejecuta un bucle de eventos y la pila WiFi en el mismo núcleo. No puede garantizar una latencia ISR < 1 ms bajo carga WiFi. Conectar directamente un módulo TRIAC rbdimmer e intentar sincronizar los pulsos de compuerta desde Tasmota producirá parpadeo o ninguna atenuación en absoluto.

La solución: delegar la sincronización a DimmerLink. DimmerLink es un controlador dedicado Cortex-M0+ que gestiona la detección de cruce por cero y el disparo del TRIAC de forma autónoma. Tasmota solo envía el nivel de brillo objetivo (0–100) una vez por comando del usuario — sin requisitos de sincronización.




Hardware necesario

  • Placa ESP32 o ESP8266 con firmware Tasmota
  • Módulo DimmerLink
  • Módulo dimmer AC rbdimmer (cualquier capacidad de corriente)
  • Resistencias de 4,7 kΩ × 2 (para pull-ups I2C, si se usa modo I2C)



Paso 1 — Cambiar DimmerLink al modo I2C

DimmerLink viene en modo UART por defecto. Para el enfoque Berry I2C (ESP32) debes cambiarlo primero al modo I2C.

Conecta DimmerLink a cualquier adaptador USB-UART (TX → RX, RX → TX, GND → GND, VCC → 3.3V), luego envía el comando SWITCH_I2C a 115200 baudios:

text
Byte sequence: 02 5B

En cualquier terminal serie (RealTerm, picocom):

  1. Abre el puerto a 115200, 8N1.
  2. Envía bytes crudos: 02 5B.
  3. Respuesta esperada: 00 (OK). DimmerLink ahora arranca en modo I2C tras cada encendido.

Después de cambiar, desconecta del adaptador UART y cablea para I2C.

Si prefieres dejar DimmerLink en modo UART (más sencillo para ESP8266), omite este paso y ve directamente al Paso 3.




Paso 2 — Cableado


Conexión I2C (ESP32 — recomendada)

Cualquier ESP32 Pin ESP32 Notas
VCC 3,3V Coincidir con el voltaje lógico del MCU
GND GND
SDA (TX/SDA) GPIO21 Agregar pull-up de 4,7 kΩ a 3.3V
SCL (RX/SCL) GPIO22 Agregar pull-up de 4,7 kΩ a 3.3V

Conecta resistencias pull-up de SDA y SCL a 3.3V. Sin ellas el bus I2C no funcionará de forma confiable.

text
3.3V ──┬──────────────┬──
      4.7k           4.7k
       │               │
ESP32 SDA ──── DL SDA  │
ESP32 SCL ──────────── DL SCL
GND ────────────────── DL GND
3.3V ───────────────── DL VCC


Conexión UART (ESP8266 o ESP32)

Cualquier ESP32 ESP8266 ❌ no Notas
VCC 3,3V 3,3V
GND GND GND
RX (TX/SDA) GPIO1 TX* GPIO17 TX2 DL RX ← MCU TX
TX (RX/SCL) GPIO3 RX* GPIO16 RX2 DL TX → MCU RX

* GPIO1/3 en ESP8266 se comparten con USB. Usa Serial.swap() para redirigir a GPIO15/GPIO13, o usa I2C en su lugar.

cpp
// ESP8266: redirigir Serial a GPIO15 (TX) / GPIO13 (RX)
Serial.begin(115200);
Serial.swap();  // TX → GPIO15, RX → GPIO13


DimmerLink → Módulo dimmer AC

Cualquier ESP32 Módulo dimmer
VCC VCC
GND GND
Z-C Z-C
Dim DIM

The dimmer module connects to mains AC and the load as described in the Hardware Connection Guide.




Paso 3A — Script Berry en Tasmota (ESP32, modo I2C)

Los scripts Berry solo están disponibles en Tasmota para ESP32. Proporcionan control programático completo sobre I2C.

Abre la consola web de Tasmota y pega:

berry
# Archivo: dimmer_i2c.be — control de DimmerLink por I2C
# Registro 0x10 (DIM0_LEVEL): 0–100 por ciento
import wire
wire.begin()  # inicializar bus I2C una vez al cargar el script
def set_dimmer(level)
    var l = int(level)
    if l < 0 then l = 0 end
    if l > 100 then l = 100 end
    wire.beginTransmission(0x50)
    wire.write(0x10)   # registro DIM0_LEVEL
    wire.write(l)
    wire.endTransmission()
end
# Asociar comando Dimmer de Tasmota (0–100) a DimmerLink
tasmota.add_rule("Dimmer#State",
    def(value) set_dimmer(value) end)
# Asociar comando Power (on/off) a brillo máximo o cero
tasmota.add_rule("Power#State",
    def(value)
        if value == 1 then set_dimmer(100)
        else set_dimmer(0) end
    end)

Para cargarlo automáticamente al iniciar, guárdalo como autoexec.be a través del gestor de archivos de Tasmota (Tools → Manage File System).

Cómo funciona:

  • wire.begin() se llama una vez al cargar el script para inicializar el bus I2C — no en cada comando.
  • wire.beginTransmission(0x50) se dirige a DimmerLink en la dirección I2C por defecto.
  • wire.write(0x10) selecciona el registro DIM0_LEVEL.
  • wire.write(l) establece el brillo 0–100%.
  • La regla se dispara cada vez que Tasmota recibe un comando Dimmer desde la consola, por MQTT o desde Home Assistant.


Prueba desde la consola Tasmota

text
Dimmer 50     → set_dimmer(50) → escritura I2C 50 en 0x10
Dimmer 0      → set_dimmer(0)  → lámpara apagada
Power 0       → set_dimmer(0)



Paso 3B — UART en Tasmota vía SerialSend (ESP8266 y ESP32)

Si Berry no está disponible (ESP8266) o prefieres no escribir scripts, usa SerialSend5 para enviar paquetes binarios crudos a DimmerLink por UART.

Formato de paquete UART de DimmerLink para SET de brillo:

text
02  53  00  LEVEL
│   │   │   └── brillo 0–100 (decimal)
│   │   └────── índice de canal (siempre 00)
│   └────────── comando SET (0x53)
└────────────── byte de inicio (siempre 0x02)

En la consola Tasmota:

text
# Establecer brillo al 50%  (0x32 hex = 50 decimal)
SerialSend5 02530032
# Establecer brillo al 75%  (0x4B hex = 75 decimal)
SerialSend5 0253004B
# Apagar  (0x00 = 0%)
SerialSend5 02530000
# Encender a máxima potencia (0x64 hex = 100 decimal)
SerialSend5 02530064

Hex conversion: Dimmer 50 → 50 decimal → 0x32 hex → packet 02 53 00 32. Use any hex calculator or the table in the DimmerLink UART docs.


Automatizar SerialSend con reglas Tasmota

Asocia el valor interno Dimmer de Tasmota a un comando SerialSend usando variables Mem y el truco WebCmd — o escribe un script Berry para una conversión limpia en ESP32. Para ESP8266 un enfoque más sencillo es usar niveles fijos mediante reglas Tasmota:

text
Rule1
  ON Dimmer#State<20 DO SerialSend5 02530000 ENDON
  ON Dimmer#State>=20 DO SerialSend5 02530032 ENDON

Para un control suave de nivel arbitrario en ESP8266, se recomienda el enfoque Berry en ESP32.




Paso 4 — Integración con Home Assistant

Una vez que Tasmota controla DimmerLink, Home Assistant ve el dispositivo ESP como un nodo Tasmota estándar vía autodescubrimiento MQTT.

Habilita el autodescubrimiento MQTT en Tasmota:

text
SetOption19 1      # Habilitar descubrimiento MQTT de Home Assistant

Home Assistant crea automáticamente una entidad light con control de brillo. El slider de brillo de HA (0–255) se convierte al comando Dimmer de Tasmota (0–100), que dispara la regla Berry que escribe en DimmerLink.

Para configuración manual de HA (si el autodescubrimiento está desactivado):

yaml
mqtt:
  light:
    - name: "AC Dimmer"
      command_topic: "cmnd/tasmota_dimmer/Dimmer"
      brightness_command_topic: "cmnd/tasmota_dimmer/Dimmer"
      brightness_scale: 100
      payload_on: "100"
      payload_off: "0"
      state_topic: "stat/tasmota_dimmer/RESULT"
      brightness_state_topic: "stat/tasmota_dimmer/RESULT"
      brightness_value_template: >
        {{ value_json.Dimmer | default(0) }}



Errores frecuentes

Problema Causa Solución
Berry no disponible en el dispositivo Tasmota en ESP8266 Usar enfoque UART + SerialSend5
El comando Dimmer no tiene efecto Regla no cargada o error tipográfico Verificar sintaxis de tasmota.add_rule; recargar Berry
DimmerLink no responde por I2C Modo incorrecto (aún en UART) Enviar primero 02 5B vía UART para cambiar
I2C inestable bajo WiFi Faltan resistencias pull-up Agregar 4,7 kΩ en SDA y SCL
SerialSend5 envía nivel incorrecto Error de conversión hex 50% = 0x32, 75% = 0x4B, 100% = 0x64
HA muestra el dimmer pero ignora el nivel Incompatibilidad de on_command_type Usar brightness_scale: 100 en la configuración MQTT light



Alternativa — ESPHome en lugar de Tasmota

Si el enfoque de scripts Berry en Tasmota resulta complejo, ESPHome ofrece una integración nativa de DimmerLink en 5 líneas de YAML y gestiona toda la comunicación I2C automáticamente.

See: ESPHome YAML for AC Dimmer and DimmerLink




Checklist rápido

  • ☐ DimmerLink cambiado a modo I2C (si se usa Berry) — enviar `02 5B` vía UART
  • ☐ Resistencias pull-up instaladas en SDA y SCL (4,7 kΩ a 3.3V)
  • ☐ Berry autoexec.be guardado y cargado (`tasmota.add_rule` presente)
  • ☐ Consola Tasmota: `Dimmer 50` dispara set_dimmer(50) en el log Berry
  • ☐ UART: `SerialSend5 02530032` devuelve respuesta `00` en el monitor serie
  • ☐ Autodescubrimiento Tasmota MQTT habilitado (`SetOption19 1`)
  • ☐ La entidad light en HA aparece y el slider controla el brillo



  • 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