Ir al contenido

← 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:

c
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