Passa al contenuto

← Web, MQTT & HTTP | Sommario | Avanti: Riferimento →

Funzionalità avanzate — Driver nativo DimmerLink per Tasmota

Curve di attenuazione spiegate

La curva di attenuazione determina come la percentuale di luminosità viene mappata all'angolo di innesco effettivo del TRIAC e quindi alla potenza erogata al carico. Sono disponibili tre curve, ciascuna adatta a diversi tipi di carico.

LINEAR (valore 0)

L'angolo di fase è proporzionale al livello di luminosità richiesto. La relazione tra il valore del comando e la potenza elettrica è lineare.

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

Casi d'uso: Carichi per uso generale, riscaldatori resistivi, motori a spazzole, qualsiasi carico in cui la potenza elettrica deve seguire direttamente il valore impostato. Adatto come punto di partenza quando la curva ottimale è sconosciuta.

Non raccomandato per: Lampadine LED o lampadine a incandescenza dove la luminosità percepita è importante.

RMS (valore 1)

L'angolo di fase viene regolato in modo che la tensione RMS (e quindi la potenza RMS) sia proporzionale al livello impostato.

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

Casi d'uso: Lampadine a incandescenza e lampade alogene. Con la curva RMS, un'impostazione di 50 produce circa la metà della luminosità percepita rispetto a 100.

Non raccomandato per: Lampadine LED — i driver LED dimmerabili regolano la corrente internamente e la relazione tra angolo di fase e uscita luminosa è più complessa.

LOG (valore 2)

L'angolo di fase segue una curva logaritmica progettata per produrre gradini di luminosità percettivamente uniformi. L'occhio umano risponde logaritmicamente all'intensità della luce (legge di Weber-Fechner), quindi incrementi uguali producono variazioni percettive approssimativamente uguali.

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

Casi d'uso: Lampadine LED dimmerabili, illuminazione d'atmosfera, qualsiasi applicazione in cui la regolazione graduale a bassi livelli è importante. Evita il problema comune che i LED passino da "appena accesi" a "molto luminosi" in un piccolo intervallo.

Non raccomandato per: Carichi resistivi o induttivi dove il tracciamento della potenza (non la luminosità percepita) è l'obiettivo.

Selezione della curva corretta

Carico Curva raccomandata Comando
LED dimmerabile LOG DlCurve 2
Lampadina a incandescenza RMS DlCurve 1
Lampada alogena RMS DlCurve 1
Riscaldatore resistivo LINEAR DlCurve 0
Motore a spazzole (ventilatore, mixer) LINEAR DlCurve 0
Sconosciuto Provare tutte e tre --

La curva può essere modificata in qualsiasi momento senza influire sul livello di luminosità corrente. La nuova curva si applica a partire dal successivo comando di cambio luminosità.


Controllo dissolvenza (Fade)

Come funziona la dissolvenza

Il tempo di dissolvenza controlla quanto tempo impiega l'hardware MCU per passare dal livello di luminosità corrente a un livello appena comandato. La dissolvenza è implementata interamente nel firmware MCU — una volta scritto un nuovo livello tramite I2C, il dispositivo sale gradualmente internamente senza ulteriore interazione con Tasmota.

Calcolo del tempo

plaintext
Fade time (seconds) = value * 0.1
Valore Tempo di dissolvenza
0 Istantaneo (senza dissolvenza)
1 100 ms
5 500 ms
10 1,0 secondo
20 2,0 secondi
50 5,0 secondi
100 10,0 secondi
255 25,5 secondi (massimo)

La dissolvenza è per dispositivo, non per canale

Tutti i canali di un singolo dispositivo condividono lo stesso tempo di dissolvenza. Per avere velocità di dissolvenza diverse su canali diversi, devono essere su dispositivi separati.

Utilizzo della dissolvenza con i cursori dell'interfaccia web

L'impostazione della dissolvenza influisce su tutti i comandi di cambio livello, inclusi quelli dai cursori dell'interfaccia web. Con un valore di dissolvenza diverso da zero, spostare il cursore invia un nuovo livello target e il dispositivo effettua la transizione in modo fluido. Spostare nuovamente il cursore prima che la dissolvenza sia completata avvia una nuova transizione dalla posizione corrente.

Impostare e interrogare la dissolvenza

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

Monitoraggio della temperatura

Disponibilità della funzione

Il monitoraggio della temperatura è disponibile quando il firmware MCU viene compilato con FEATURE_TEMPERATURE. Il driver lo rileva automaticamente all'avvio leggendo il registro TEMP_CURRENT (0x40). Se il registro restituisce 0xFF, la temperatura non è disponibile e tutti i campi della temperatura vengono soppressi.

Lettura della temperatura

La temperatura grezza è memorizzata nel registro 0x40 con un offset di 50:

plaintext
Temperature (Celsius) = register_value - 50

Questo consente un intervallo da -50 °C (valore di registro 0) a +205 °C (valore di registro 255). L'intervallo di funzionamento normale è da 20 °C a 100 °C.

Stati termici

Il firmware MCU gestisce la protezione termica in modo autonomo. Sono definiti sei stati:

Stato Valore Descrizione Azione del driver
NORMAL 0 Temperatura al di sotto della soglia di avviso Nessuna
WARNING 1 Temperatura al di sopra della soglia di avviso Registrato al livello DEBUG
DERATE 2 Riduzione attiva dell'uscita per abbassare la temperatura Nessuna — l'hardware gestisce l'uscita
CRITICAL 3 Riduzione aggressiva dell'uscita Registrato al livello ERROR
SHUTDOWN 4 Tutte le uscite disabilitate per sicurezza Registrato al livello ERROR
FAULT 5 Guasto del sensore di temperatura Registrato al livello ERROR

Gli stati CRITICAL, SHUTDOWN e FAULT attivano una voce di registro a livello ERROR:

plaintext
DLK: Dev 0x50 thermal CRITICAL

La protezione termica è gestita dall'hardware

L'MCU gestisce la riduzione e lo spegnimento in modo autonomo. Tasmota non può ignorare la protezione termica — se il dispositivo è nello stato SHUTDOWN, la scrittura di un valore di luminosità non ha effetto finché il dispositivo non si raffredda e non esce dallo spegnimento.

Monitoraggio via MQTT

Con la temperatura abilitata, ogni messaggio SENSOR include la temperatura corrente e lo stato:

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

Utilizzare le regole di Tasmota o un sistema esterno per rispondere ai cambiamenti di stato termico.


Indirizzamento multi-dispositivo

Il driver supporta fino a quattro dispositivi DimmerLink sullo stesso bus I2C (o distribuiti su due bus). I dispositivi sono numerati da 1 a 4 nell'ordine rilevato durante la scansione all'avvio — in ordine crescente per indirizzo (da 0x08 a 0x77).

Numerazione dei dispositivi

Indirizzo I2C Ordine di rilevamento Numero dispositivo
0x50 1° trovato Dispositivo 1 (suffisso 1 o nessun suffisso)
0x51 2° trovato Dispositivo 2 (suffisso 2)
0x52 3° trovato Dispositivo 3 (suffisso 3)

Assegnazione di indirizzi univoci

Tutti i dispositivi DimmerLink vengono forniti con indirizzo I2C 0x50. Per utilizzare più dispositivi, a ciascuno deve essere assegnato un indirizzo univoco uno alla volta prima di collegarli insieme.

Passo dopo passo per tre dispositivi:

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

Verifica dell'indirizzo

Il driver verifica il cambio di indirizzo rileggendo il registro VERSION dal nuovo indirizzo:

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

Se la verifica fallisce, il comando restituisce un errore. Il dispositivo fisico potrebbe aver già cambiato indirizzo — eseguire DlStatus per confermare.

Intervallo di indirizzi valido

Gli indirizzi devono essere nell'intervallo da 0x08 a 0x77 (inclusi). Gli indirizzi riservati 0x00-0x07 e 0x78-0x7F vengono rifiutati.

Note sui conflitti di indirizzi I2C

L'indirizzo predefinito 0x50 è in conflitto con i comuni dispositivi EEPROM/FRAM (FM24CXX, AT24Cxx, 24C256, 24LC256). Il driver identifica i dispositivi DimmerLink specificamente tramite il byte della versione del firmware nel registro 0x03, quindi i dispositivi non-DimmerLink all'indirizzo 0x50 vengono ignorati silenziosamente. Tuttavia, per evitare transazioni di bus indesiderate, cambiare l'indirizzo di DimmerLink se i dispositivi EEPROM condividono il bus.

Ordine di scansione tra i bus

Se sono attivi due bus I2C, la scansione elabora prima il bus 0 e poi il bus 1. Un dispositivo sul bus 0 all'indirizzo 0x51 verrà trovato prima di un dispositivo sul bus 1 all'indirizzo 0x50.


Migrazione dal driver Berry

Se si stava utilizzando il driver Berry DimmerLink.be e si passa al driver nativo, tenere conto delle seguenti differenze.

Cosa cambia

Aspetto Driver Berry Driver nativo
Prefisso del comando DimmerLink, DimmerLink_Kitchen, ecc. Dl
Selezione del dispositivo Per etichetta (nome) Per ordine di rilevamento (suffisso numerico)
Indirizzamento dei canali Cifra finale: DimmerLink_Kitchen2 Sintassi ch,level: DlDim 2,50
Comando curva DimmerLink_KitchenCurve 2 DlCurve 2
Comando dissolvenza DimmerLink_KitchenFade 10 DlFade 10
Relè virtuale Sì — Power ON/OFF Non fornito
Preimpostazioni DimmerLinkPreset night Non fornito
Scanner bus DimmerLink.scan() nella console Berry Non fornito; usare I2CScan
Istanze con nome Sì — etichette in dimmerlink.json Non fornito — dispositivi numerati
Configurazione /dimmerlink.json nel filesystem user_config_override.h in fase di compilazione
Chiave telemetria MQTT Etichetta dispositivo (es. "Kitchen") DimmerLink1, DimmerLink2, ecc.

Passaggi di migrazione

  1. Flashare il nuovo firmware che include USE_DIMMERLINK.
  2. Rimuovere i file del driver Berry dal filesystem (DimmerLink.be, dimmerlink_loader.be) o rimuovere la riga load('dimmerlink_loader.be') da autoexec.be. Il driver Berry e il driver nativo possono coesistere ma risponderanno entrambi allo stesso dispositivo e genereranno telemetria duplicata.
  3. Aggiornare le automazioni MQTT — sostituire i nomi dei comandi DimmerLink_ con DlDim, DlCurve, DlFade.
  4. Aggiornare le sottoscrizioni MQTT — sostituire le chiavi dei dispositivi con nome (es. "Kitchen") con chiavi numerate ("DimmerLink1", "DimmerLink2").
  5. Aggiornare le chiamate HTTP API — sostituire DimmerLink_Kitchen%2075 con DlDim%2075 (o DlDim2%2075 per il secondo dispositivo).
  6. Relè virtuali — se si faceva affidamento su Power per attivare/disattivare i dispositivi, implementare la logica equivalente usando le regole Tasmota e i comandi DlDim.
  7. Preimpostazioni — se si utilizzava DimmerLinkPreset, creare regole Tasmota equivalenti o script Berry che emettono comandi DlDim.