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