Passa al contenuto

← Funzionalità avanzate | Sommario

Reference & Troubleshooting — DimmerLink Native Tasmota Driver

Risoluzione dei problemi

Dispositivo non rilevato all'avvio

Sintomo: Nessuna riga DLK: nel registro seriale. DlStatus restituisce {"Command":"Unknown"} o {"Command":"Error"}.

Verifica Risoluzione
Modalità I2C DimmerLink viene fornito con UART abilitato. Passare alla modalità I2C usando il comando UART SWITCH_I2C (0x5B) prima di collegare al bus I2C.
Cablaggio fisico Verificare che SDA, SCL, GND e VCC siano collegati. SDA e SCL si collegano direttamente (senza incrociare), a differenza di UART.
Resistenze di pull-up Aggiungere resistenze da 4,7 kOhm da SDA a 3,3 V e da SCL a 3,3 V. I pull-up interni dell'ESP32/ESP8266 sono insufficienti.
Pin I2C in Tasmota Confermare che i pin GPIO siano assegnati come I2C SDA e I2C SCL in Configuration > Configure Module.
Tempo di accensione del dispositivo Il dispositivo richiede ~2 secondi dopo l'accensione per la calibrazione della frequenza AC. Riavviare Tasmota se si è avviato prima che il dispositivo fosse pronto.
USE_DIMMERLINK non definito Confermare che la definizione sia in user_config_override.h e che il firmware sia stato ricompilato.
USE_I2C mancante Aggiungere #define USE_I2C a user_config_override.h se si compila un ambiente ridotto.
Incompatibilità versione firmware Il driver richiede che il registro 0x03 restituisca esattamente 0x01. Le versioni di firmware diverse vengono ignorate.

Dispositivo rilevato ma comandi ignorati

Sintomo: DlStatus restituisce dati ma DlDim non ha effetto visibile.

Verifica Risoluzione
Stato READY del dispositivo Controllare DlStatus — se "Ready": false, il dispositivo sta ancora calibrando. Attendere e riprovare.
Codice errore nello stato Controllare il campo LastError. 0xFE = parametro fuori intervallo. 0xFC = errore di scrittura EEPROM.
Spegnimento termico Se ThermalState è SHUTDOWN, le uscite sono disabilitate. Lasciare raffreddare il dispositivo.
Cablaggio del carico Confermare che il carico sia correttamente collegato al modulo TRIAC.

Errori I2C o comunicazione intermittente

Sintomo: Dispositivo rilevato ma DlStatus mostra dati obsoleti o appaiono errori nel registro.

Verifica Risoluzione
Lunghezza del cavo Mantenere i cavi I2C sotto i 30 cm. I cavi più lunghi richiedono pull-up più forti o buffer I2C.
Valore resistenza pull-up Cavi più corti con pull-up forti (2,2 kOhm) migliorano l'integrità del segnale. Non usare valori inferiori a 1 kOhm.
Alimentazione Aggiungere un condensatore di disaccoppiamento da 100 nF tra VCC e GND vicino al dispositivo DimmerLink.
Conflitto di indirizzi Usare I2CScan per verificare dispositivi che condividono lo stesso indirizzo.
Conflitti GPIO Non posizionare SDA o SCL su pin GPIO utilizzati per altri scopi (ADC, touch, pin di strapping).

La calibrazione richiede troppo tempo

Sintomo: Il dispositivo mostra "Ready": false per un periodo prolungato.

Verifica Risoluzione
Connessione AC L'MCU rileva la frequenza AC dalla rete. Se non è collegato alcun carico AC, la calibrazione non può completarsi.
Rilevamento frequenza Eseguire DlStatus — se ACFreq mostra 0, il dispositivo non ha rilevato la frequenza AC.
Forzare la ricalibrazione Inviare DlRecalibrate per riavviare il ciclo di calibrazione.

Il cambio di indirizzo fallisce

Sintomo: DlAddress 0x51 restituisce un errore o il dispositivo scompare.

Verifica Risoluzione
Timeout di verifica Il driver legge VERSION dal nuovo indirizzo dopo 50 ms. Se il dispositivo è lento, la verifica potrebbe fallire anche se l'indirizzo è cambiato. Eseguire un ciclo di alimentazione e riavviare Tasmota.
Conflitto al nuovo indirizzo Se un altro dispositivo occupa l'indirizzo target, si verificheranno collisioni. Scansionare prima il bus con I2CScan.
Trovare il dispositivo Eseguire I2CScan o riavviare Tasmota (che effettua una nuova scansione) per scoprire l'indirizzo corrente effettivo.

Temperatura non visualizzata

Sintomo: Nessuna riga di temperatura nella visualizzazione del sensore. Nessun Temp o Thermal in MQTT.

Verifica Risoluzione
Funzione firmware Il firmware MCU deve includere FEATURE_TEMPERATURE. Verificare con il fornitore del dispositivo.
Valore registro All'avvio, il driver legge il registro 0x40. Il valore 0xFF significa nessun sensore. Qualsiasi altro valore significa che il sensore è presente.

Problemi di compilazione

Sintomo Risoluzione
Errore USE_DIMMERLINK non definito Verificare che user_config_override.h sia nella directory tasmota/, non nella radice del progetto.
Driver assente nel binario USE_I2C non è abilitato per l'ambiente.
Avviso di conflitto XI2C_100 Controllare I2CDEVICES.md — lo slot 100 è riservato per DimmerLink.
Errore del linker su I2cRead8 / I2cWrite8 USE_I2C è mancante.

Codici di errore

Codice Nome Significato
0x00 OK Nessun errore
0xF9 ERR_SYNTAX Indirizzo registro non valido
0xFC ERR_NOT_READY Errore di scrittura EEPROM (scrittura flash fallita)
0xFD ERR_INDEX Indice canale dimmer non valido
0xFE ERR_PARAM Parameter value out of range (level > 100, curve > 2, address outside 0x08-0x77)

I codici di errore vengono letti dal registro del dispositivo 0x02 dopo le operazioni di scrittura. Il comando DlStatus visualizza l'ultimo codice di errore se non è zero come "LastError":"0xFE". I codici di errore si azzerano automaticamente quando viene completata una successiva operazione riuscita.


Mappa dei registri I2C

Indirizzo Registro Accesso Valori
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)

Particolarità di lettura I2C (requisito di lettura fittizia)

Il firmware MCU richiede una lettura fittizia prima di ogni lettura reale per impostare correttamente il puntatore del registro interno. Il driver gestisce questo in modo trasparente:

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
}

Questo comportamento è un requisito hardware dell'MCU e deve essere preservato in qualsiasi codice che comunica direttamente con il dispositivo.


Riferimento agli stati termici

Stato Valore registro Temperatura tipica Comportamento
NORMAL 0 Sotto ~60 °C Funzionamento completo
WARNING 1 ~60-70 °C Solo monitoraggio; nessuna variazione dell'uscita
DERATE 2 ~70-80 °C L'MCU riduce gradualmente l'uscita
CRITICAL 3 ~80-85 °C L'MCU riduce aggressivamente l'uscita
SHUTDOWN 4 Sopra ~85 °C Tutte le uscite disabilitate
FAULT 5 N/A Rilevato guasto del sensore di temperatura