← Funciones avanzadas | Contenido
Reference & Troubleshooting — DimmerLink Native Tasmota Driver
Solución de problemas
Dispositivo no detectado al arrancar
Síntoma: No hay líneas DLK: en el registro serie. DlStatus devuelve {"Command":"Unknown"} o {"Command":"Error"}.
| Verificación | Resolución |
|---|---|
| Modo I2C | DimmerLink se envía con UART habilitado. Cambie al modo I2C usando el comando UART SWITCH_I2C (0x5B) antes de conectar al bus I2C. |
| Cableado físico | Verifique que SDA, SCL, GND y VCC estén conectados. SDA y SCL se conectan directamente (sin cruzar), a diferencia de UART. |
| Resistencias de pull-up | Añada resistencias de 4,7 kOhm de SDA a 3,3 V y de SCL a 3,3 V. Los pull-ups internos del ESP32/ESP8266 son insuficientes. |
| Pines I2C en Tasmota | Confirme que los pines GPIO están asignados como I2C SDA e I2C SCL en Configuration > Configure Module. |
| Tiempo de encendido del dispositivo | El dispositivo requiere ~2 segundos después del encendido para la calibración de frecuencia AC. Reinicie Tasmota si arrancó antes de que el dispositivo estuviera listo. |
USE_DIMMERLINK no definido |
Confirme que la definición está en user_config_override.h y que el firmware fue recompilado. |
USE_I2C faltante |
Agregue #define USE_I2C a user_config_override.h si compila un entorno reducido. |
| Incompatibilidad de versión de firmware | El controlador requiere que el registro 0x03 devuelva exactamente 0x01. Las versiones de firmware diferentes son omitidas. |
Dispositivo detectado pero comandos ignorados
Síntoma: DlStatus devuelve datos pero DlDim no tiene efecto visible.
| Verificación | Resolución |
|---|---|
| Estado READY del dispositivo | Compruebe DlStatus — si "Ready": false, el dispositivo aún está calibrando. Espere y vuelva a intentar. |
| Código de error en el estado | Compruebe el campo LastError. 0xFE = parámetro fuera de rango. 0xFC = error de escritura EEPROM. |
| Apagado térmico | Si ThermalState es SHUTDOWN, las salidas están deshabilitadas. Permita que el dispositivo se enfríe. |
| Cableado de la carga | Confirme que la carga está correctamente conectada al módulo TRIAC. |
Errores I2C o comunicación intermitente
Síntoma: Dispositivo detectado pero DlStatus muestra datos obsoletos o aparecen errores en el registro.
| Verificación | Resolución |
|---|---|
| Longitud del cable | Mantenga los cables I2C por debajo de 30 cm. Los cables más largos requieren pull-ups más fuertes o buffers I2C. |
| Valor de resistencia de pull-up | Los cables más cortos con pull-ups fuertes (2,2 kOhm) mejoran la integridad de la señal. No use valores por debajo de 1 kOhm. |
| Fuente de alimentación | Agregue un condensador de desacoplamiento de 100 nF entre VCC y GND cerca del dispositivo DimmerLink. |
| Conflicto de direcciones | Use I2CScan para verificar dispositivos que comparten la misma dirección. |
| Conflictos GPIO | No coloque SDA o SCL en pines GPIO utilizados para otros propósitos (ADC, touch, pines de arranque). |
La calibración tarda demasiado
Síntoma: El dispositivo muestra "Ready": false durante un período prolongado.
| Verificación | Resolución |
|---|---|
| Conexión AC | El MCU detecta la frecuencia AC de la red. Si no hay carga AC conectada, la calibración no puede completarse. |
| Detección de frecuencia | Ejecute DlStatus — si ACFreq muestra 0, el dispositivo no ha detectado la frecuencia AC. |
| Forzar recalibración | Envíe DlRecalibrate para reiniciar el ciclo de calibración. |
El cambio de dirección falla
Síntoma: DlAddress 0x51 devuelve un error o el dispositivo desaparece.
| Verificación | Resolución |
|---|---|
| Tiempo de espera de verificación | El controlador lee VERSION desde la nueva dirección después de 50 ms. Si el dispositivo es lento, la verificación puede fallar aunque la dirección haya cambiado. Corte la alimentación y reinicie Tasmota. |
| Conflicto en la nueva dirección | Si otro dispositivo ocupa la dirección objetivo, ocurrirán colisiones. Escanee el bus primero con I2CScan. |
| Encontrar el dispositivo | Ejecute I2CScan o reinicie Tasmota (que vuelve a escanear) para descubrir la dirección actual real. |
Temperatura no mostrada
Síntoma: No hay fila de temperatura en la pantalla de sensores. No hay Temp o Thermal en MQTT.
| Verificación | Resolución |
|---|---|
| Función de firmware | El firmware del MCU debe incluir FEATURE_TEMPERATURE. Consulte con el proveedor del dispositivo. |
| Valor del registro | Al arrancar, el controlador lee el registro 0x40. El valor 0xFF significa que no hay sensor. Cualquier otro valor significa que el sensor está presente. |
Problemas de compilación
| Síntoma | Resolución |
|---|---|
Error USE_DIMMERLINK no definido |
Compruebe que user_config_override.h está en el directorio tasmota/, no en la raíz del proyecto. |
| Controlador ausente en el binario | USE_I2C no está habilitado para el entorno. |
Advertencia de conflicto XI2C_100 |
Compruebe I2CDEVICES.md — el slot 100 está reservado para DimmerLink. |
Error de enlazador en I2cRead8 / I2cWrite8 |
USE_I2C está faltando. |
Códigos de error
| Código | Nombre | Significado |
|---|---|---|
| 0x00 | OK | Sin error |
| 0xF9 | ERR_SYNTAX | Dirección de registro inválida |
| 0xFC | ERR_NOT_READY | Error de escritura EEPROM (fallo de escritura flash) |
| 0xFD | ERR_INDEX | Índice de canal de atenuador inválido |
| 0xFE | ERR_PARAM | Parameter value out of range (level > 100, curve > 2, address outside 0x08-0x77) |
Los códigos de error se leen desde el registro de dispositivo 0x02 después de operaciones de escritura. El comando DlStatus muestra el último código de error si no es cero como "LastError":"0xFE". Los códigos de error se borran automáticamente cuando se completa una operación exitosa posterior.
Mapa de registros I2C
| Dirección | Registro | Acceso | Valores |
|---|---|---|---|
| 0x00 | STATUS | R | Bit 0 = READY, Bit 1 = ERROR |
| 0x01 | COMMAND | W | 0x00=NOP, 0x01=RESET, 0x02=RECALIBRATE |
| 0x02 | ERROR | R | 0x00=OK, 0xF9=SYNTAX, 0xFC=NOT_READY, 0xFD=INDEX, 0xFE=PARAM |
| 0x03 | VERSION | R | 0x01 (firmware version fingerprint) |
| 0x10 | DIM0_LEVEL | R/W | 0-100 |
| 0x11 | DIM0_CURVE | R/W | 0=LINEAR, 1=RMS, 2=LOG |
| 0x12 | DIM1_LEVEL | R/W | 0-100 |
| 0x13 | DIM1_CURVE | R/W | 0=LINEAR, 1=RMS, 2=LOG |
| 0x14 | DIM2_LEVEL | R/W | 0-100 |
| 0x15 | DIM2_CURVE | R/W | 0=LINEAR, 1=RMS, 2=LOG |
| 0x16 | DIM3_LEVEL | R/W | 0-100 |
| 0x17 | DIM3_CURVE | R/W | 0=LINEAR, 1=RMS, 2=LOG |
| 0x18 | FADE | R/W | 0-255 (x100ms) |
| 0x20 | AC_FREQ | R | 50 or 60 |
| 0x21 | AC_PERIOD_L | R | Half-wave period low byte |
| 0x22 | AC_PERIOD_H | R | Half-wave period high byte |
| 0x23 | CALIBRATION | R | 0=busy, 1=complete |
| 0x30 | I2C_ADDRESS | R/W | 0x08-0x77 |
| 0x40 | TEMP_CURRENT | R | raw-50 = Celsius; 0xFF = no sensor |
| 0x41 | TEMP_STATE | R | 0-5 (thermal state) |
Peculiaridad de lectura I2C (requisito de lectura ficticia)
El firmware del MCU requiere una lectura ficticia antes de cada lectura real para establecer correctamente el puntero de registro interno. El controlador maneja esto de manera transparente:
uint8_t DL_Read8(uint8_t addr, uint8_t reg, uint8_t bus) {
I2cRead8(addr, reg, bus); // Dummy: sets register pointer
return I2cRead8(addr, reg, bus); // Real read
}Este comportamiento es un requisito de hardware del MCU y debe preservarse en cualquier código que se comunique directamente con el dispositivo.
Referencia de estados térmicos
| Estado | Valor del registro | Temperatura típica | Comportamiento |
|---|---|---|---|
| NORMAL | 0 | Por debajo de ~60 °C | Operación completa |
| WARNING | 1 | ~60-70 °C | Solo monitoreo; sin cambio en la salida |
| DERATE | 2 | ~70-80 °C | El MCU reduce gradualmente la salida |
| CRITICAL | 3 | ~80-85 °C | El MCU reduce agresivamente la salida |
| SHUTDOWN | 4 | Por encima de ~85 °C | Todas las salidas deshabilitadas |
| FAULT | 5 | N/A | Fallo del sensor de temperatura detectado |