Ir al contenido

← Web, MQTT & HTTP | Contenido | Siguiente: Referencia →

Funciones avanzadas — Controlador nativo DimmerLink para Tasmota

Curvas de atenuación explicadas

La curva de atenuación determina cómo el porcentaje de brillo se asigna al ángulo de disparo real del TRIAC y, por lo tanto, a la potencia entregada a la carga. Hay tres curvas disponibles, cada una adecuada para diferentes tipos de carga.

LINEAR (valor 0)

El ángulo de fase es proporcional al nivel de brillo solicitado. La relación entre el valor del comando y la potencia eléctrica es lineal.

plaintext
Power delivered
100% |                    /
     |                  /
 50% |              /
     |           /
  0% |        /
     +------------------
     0%     50%     100%
          Level set

Casos de uso: Cargas de uso general, calentadores resistivos, motores de escobillas, cualquier carga donde la potencia eléctrica deba seguir directamente el valor establecido. Adecuado como punto de partida cuando la curva óptima es desconocida.

No recomendado para: Bombillas LED o bombillas incandescentes donde el brillo percibido es importante.

RMS (valor 1)

El ángulo de fase se ajusta de modo que la tensión RMS (y por lo tanto la potencia RMS) sea proporcional al nivel establecido.

plaintext
Perceived brightness (incandescent)
100% |                    /
     |                  /
 50% |              /
     |           /
  0% |        /
     +------------------
     0%     50%     100%
          Level set

Casos de uso: Bombillas incandescentes y lámparas halógenas. Con la curva RMS, un ajuste de 50 produce aproximadamente la mitad del brillo percibido que 100.

No recomendado para: Bombillas LED — los controladores LED regulables regulan la corriente internamente y la relación entre el ángulo de fase y la salida de luz es más compleja.

LOG (valor 2)

El ángulo de fase sigue una curva logarítmica diseñada para producir pasos de brillo perceptualmente uniformes. El ojo humano responde logarítmicamente a la intensidad de la luz (ley de Weber-Fechner), por lo que incrementos iguales producen cambios perceptuales aproximadamente iguales.

plaintext
Perceived brightness (LED)
100% |                         /
     |                    /
 50% |               /
     |         /
  0% |  /
     +------------------
     0%     50%     100%
          Level set

Casos de uso: Bombillas LED regulables, iluminación ambiental, cualquier aplicación donde la atenuación suave a niveles bajos es importante. Evita la queja común de que los LED pasan de "apenas encendidos" a "muy brillantes" en un pequeño rango.

No recomendado para: Cargas resistivas o inductivas donde el seguimiento de potencia (no el brillo percibido) es el objetivo.

Seleccionar la curva correcta

Carga Curva recomendada Comando
LED regulable LOG DlCurve 2
Bombilla incandescente RMS DlCurve 1
Lámpara halógena RMS DlCurve 1
Calentador resistivo LINEAR DlCurve 0
Motor de escobillas (ventilador, mezclador) LINEAR DlCurve 0
Desconocida Probar las tres --

La curva puede cambiarse en cualquier momento sin afectar el nivel de brillo actual. La nueva curva se aplica a partir del siguiente comando de cambio de brillo.


Control de fundido (Fade)

Cómo funciona el fundido

El tiempo de fundido controla cuánto tiempo tarda el hardware del MCU en hacer la transición desde el nivel de brillo actual hasta un nivel recién ordenado. El fundido está implementado completamente en el firmware del MCU — una vez que se escribe un nuevo nivel por I2C, el dispositivo aumenta gradualmente de forma interna sin más interacción con Tasmota.

Cálculo de tiempo

plaintext
Fade time (seconds) = value * 0.1
Valor Tiempo de fundido
0 Instantáneo (sin fundido)
1 100 ms
5 500 ms
10 1,0 segundo
20 2,0 segundos
50 5,0 segundos
100 10,0 segundos
255 25,5 segundos (máximo)

El fundido es por dispositivo, no por canal

Todos los canales de un solo dispositivo comparten el mismo tiempo de fundido. Para tener diferentes velocidades de fundido en diferentes canales, deben estar en dispositivos separados.

Usar fundido con los controles deslizantes de la interfaz web

La configuración de fundido afecta a todos los comandos de cambio de nivel, incluidos los de los controles deslizantes de la interfaz web. Con un valor de fundido distinto de cero, mover el control deslizante envía un nuevo nivel objetivo y el dispositivo hace la transición suavemente. Mover el control deslizante nuevamente antes de que se complete el fundido inicia una nueva transición desde la posición actual.

Establecer y consultar el fundido

plaintext
DlFade 10       # Set device 1 fade to 1.0 second
DlFade2 0       # Set device 2 fade to instant
DlFade          # Query device 1 current fade value

Monitoreo de temperatura

Disponibilidad de la función

El monitoreo de temperatura está disponible cuando el firmware del MCU se compila con FEATURE_TEMPERATURE. El controlador lo detecta automáticamente al arrancar leyendo el registro TEMP_CURRENT (0x40). Si el registro devuelve 0xFF, la temperatura no está disponible y todos los campos de temperatura se suprimen.

Lectura de temperatura

La temperatura bruta se almacena en el registro 0x40 con un desplazamiento de 50:

plaintext
Temperature (Celsius) = register_value - 50

Esto permite un rango de -50 °C (valor de registro 0) a +205 °C (valor de registro 255). El rango de operación normal es de 20 °C a 100 °C.

Estados térmicos

El firmware del MCU gestiona la protección térmica de forma autónoma. Se definen seis estados:

Estado Valor Descripción Acción del controlador
NORMAL 0 Temperatura por debajo del umbral de advertencia Ninguna
WARNING 1 Temperatura por encima del umbral de advertencia Registrado en nivel DEBUG
DERATE 2 Reducción activa de salida para bajar la temperatura Ninguna — el hardware gestiona la salida
CRITICAL 3 Reducción agresiva de salida Registrado en nivel ERROR
SHUTDOWN 4 Todas las salidas deshabilitadas por seguridad Registrado en nivel ERROR
FAULT 5 Fallo del sensor de temperatura Registrado en nivel ERROR

Los estados CRITICAL, SHUTDOWN y FAULT desencadenan una entrada de registro de nivel ERROR:

plaintext
DLK: Dev 0x50 thermal CRITICAL

La protección térmica es gestionada por hardware

El MCU gestiona la reducción y el apagado de forma autónoma. Tasmota no puede anular la protección térmica — si el dispositivo está en estado SHUTDOWN, escribir un valor de brillo no tiene efecto hasta que el dispositivo se enfríe y salga del apagado.

Monitoreo via MQTT

Con la temperatura habilitada, cada mensaje SENSOR incluye la temperatura actual y el estado:

json
{
  "DimmerLink1": {
    "Addr": "0x50",
    "ACFreq": 50,
    "Fade": 0,
    "Ch1": {"Level": 75, "Curve": "LOG"},
    "Temp": 42,
    "Thermal": "NORMAL"
  }
}

Use las reglas de Tasmota o un sistema externo para responder a los cambios de estado térmico.


Direccionamiento de múltiples dispositivos

El controlador admite hasta cuatro dispositivos DimmerLink en el mismo bus I2C (o distribuidos en dos buses). Los dispositivos se numeran del 1 al 4 en el orden detectado durante el escaneo de arranque — en orden ascendente por dirección (0x08 a 0x77).

Numeración de dispositivos

Dirección I2C Orden de detección Número de dispositivo
0x50 1.° encontrado Dispositivo 1 (sufijo 1 o sin sufijo)
0x51 2.° encontrado Dispositivo 2 (sufijo 2)
0x52 3.° encontrado Dispositivo 3 (sufijo 3)

Asignar direcciones únicas

Todos los dispositivos DimmerLink se envían con la dirección I2C 0x50. Para usar múltiples dispositivos, a cada uno se le debe asignar una dirección única uno a la vez antes de conectarlos juntos.

Paso a paso para tres dispositivos:

plaintext
Step 1: Connect Device A only (boots at 0x50)
        Console: DlAddress 0x51
        Result: Device A is now at 0x51
Step 2: Power off. Connect Device B only (boots at 0x50)
        Console: DlAddress 0x52
        Result: Device B is now at 0x52
Step 3: Power off. Connect Device C (keep at 0x50)
        Power on all three together.
        Three devices detected: 0x50, 0x51, 0x52

Verificación de dirección

El controlador verifica el cambio de dirección volviendo a leer el registro VERSION desde la nueva dirección:

c
if (DL_ValidRead8(&ver, new_addr, DL_REG_VERSION, dev->bus) && ver == DL_FW_VERSION) {
    dev->addr = new_addr;
    // success
}

Si la verificación falla, el comando devuelve un error. Es posible que el dispositivo físico ya haya cambiado — ejecute DlStatus para confirmar.

Rango de direcciones válido

Las direcciones deben estar en el rango 0x08 a 0x77 (inclusive). Las direcciones reservadas 0x00-0x07 y 0x78-0x7F son rechazadas.

Notas sobre conflictos de dirección I2C

La dirección predeterminada 0x50 entra en conflicto con dispositivos EEPROM/FRAM comunes (FM24CXX, AT24Cxx, 24C256, 24LC256). El controlador identifica los dispositivos DimmerLink específicamente por el byte de versión del firmware en el registro 0x03, por lo que los dispositivos que no son DimmerLink en la dirección 0x50 se omiten silenciosamente. Sin embargo, para evitar transacciones de bus no deseadas, cambie la dirección de DimmerLink si los dispositivos EEPROM comparten el bus.

Orden de escaneo entre buses

Si hay dos buses I2C activos, el escaneo procesa el bus 0 antes del bus 1. Un dispositivo en el bus 0 con dirección 0x51 se encontrará antes que un dispositivo en el bus 1 con dirección 0x50.


Migración desde el controlador Berry

Si ha estado usando el controlador Berry DimmerLink.be y está cambiando al controlador nativo, tenga en cuenta las siguientes diferencias.

Qué cambia

Aspecto Controlador Berry Controlador nativo
Prefijo de comando DimmerLink, DimmerLink_Kitchen, etc. Dl
Selección de dispositivo Por etiqueta (nombre) Por orden detectado (sufijo numérico)
Direccionamiento de canales Dígito final: DimmerLink_Kitchen2 Sintaxis ch,level: DlDim 2,50
Comando de curva DimmerLink_KitchenCurve 2 DlCurve 2
Comando de fundido DimmerLink_KitchenFade 10 DlFade 10
Relé virtual Sí — Power ON/OFF No proporcionado
Preajustes DimmerLinkPreset night No proporcionado
Escáner de bus DimmerLink.scan() en la consola Berry No proporcionado; usar I2CScan
Instancias con nombre Sí — etiquetas en dimmerlink.json No proporcionado — dispositivos numerados
Configuración /dimmerlink.json en el sistema de archivos user_config_override.h en tiempo de compilación
Clave de telemetría MQTT Etiqueta del dispositivo (p. ej., "Kitchen") DimmerLink1, DimmerLink2, etc.

Pasos de migración

  1. Flashear el nuevo firmware que incluye USE_DIMMERLINK.
  2. Eliminar los archivos del controlador Berry del sistema de archivos (DimmerLink.be, dimmerlink_loader.be) o eliminar la línea load('dimmerlink_loader.be') de autoexec.be. El controlador Berry y el controlador nativo pueden coexistir, pero ambos responderán al mismo dispositivo y generarán telemetría duplicada.
  3. Actualizar las automatizaciones MQTT — cambiar los nombres de comandos DimmerLink_ a DlDim, DlCurve, DlFade.
  4. Actualizar las suscripciones MQTT — cambiar las claves de dispositivos con nombre (p. ej., "Kitchen") a claves numeradas ("DimmerLink1", "DimmerLink2").
  5. Actualizar las llamadas HTTP API — cambiar DimmerLink_Kitchen%2075 a DlDim%2075 (o DlDim2%2075 para el segundo dispositivo).
  6. Relés virtuales — si dependía de Power para alternar dispositivos, implemente la lógica equivalente usando reglas de Tasmota y comandos DlDim.
  7. Preajustes — si usaba DimmerLinkPreset, cree reglas de Tasmota equivalentes o scripts Berry que emitan comandos DlDim.