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
SerialSend5con 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:
Byte sequence: 02 5BEn cualquier terminal serie (RealTerm, picocom):
- Abre el puerto a 115200, 8N1.
- Envía bytes crudos:
02 5B. - 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.
3.3V ──┬──────────────┬──
4.7k 4.7k
│ │
ESP32 SDA ──── DL SDA │
ESP32 SCL ──────────── DL SCL
GND ────────────────── DL GND
3.3V ───────────────── DL VCCConexió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.
// ESP8266: redirigir Serial a GPIO15 (TX) / GPIO13 (RX)
Serial.begin(115200);
Serial.swap(); // TX → GPIO15, RX → GPIO13DimmerLink → 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:
# 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
Dimmerdesde la consola, por MQTT o desde Home Assistant.
Prueba desde la consola Tasmota
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:
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:
# 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 02530064Hex conversion:
Dimmer 50→ 50 decimal → 0x32 hex → packet02 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:
Rule1
ON Dimmer#State<20 DO SerialSend5 02530000 ENDON
ON Dimmer#State>=20 DO SerialSend5 02530032 ENDONPara 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:
SetOption19 1 # Habilitar descubrimiento MQTT de Home AssistantHome 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):
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
Artículos relacionados
- ESPHome alternative → ESPHome YAML for AC Dimmer and DimmerLink
- Home Assistant guide → AC Dimmer with Home Assistant and ESPHome
- DimmerLink I2C not detected → DimmerLink Not Detected: I2C vs UART Mode
- Raspberry Pi control → Raspberry Pi AC Dimmer via DimmerLink
¿Todavía tienes preguntas?
Ask on forum.rbdimmer.com or open a GitHub Issue.