In breve: Tasmota non può pilotare nativamente un dimmer TRIAC con taglio di fase. Usa DimmerLink come slave I2C/UART. Su ESP32 Tasmota: scrivi uno script Berry di 5 righe che associa qualsiasi trigger di regola a una scrittura di registro I2C all'indirizzo 0x50. Su ESP8266: usa
SerialSend5con il formato di pacchetto binario DimmerLink. Home Assistant scopre il dispositivo automaticamente tramite Tasmota MQTT.
Perché Tasmota non può pilotare un TRIAC direttamente
Il comando Dimmer di Tasmota controlla un'uscita PWM interna o un
relè SWITCH. Non supporta il controllo di fase TRIAC (taglio di
fase) perché richiede un interrupt hardware a ogni passaggio per lo zero
AC (ogni 10 ms a 50 Hz) con precisione di attivazione inferiore al
millisecondo.
Tasmota esegue un ciclo di eventi e lo stack WiFi sullo stesso core. Non può garantire una latenza ISR < 1 ms sotto carico WiFi. Collegare direttamente un modulo TRIAC rbdimmer e tentare di sincronizzare gli impulsi di gate da Tasmota produrrà sfarfallio o nessuna dimmerizzazione.
La soluzione: delegare la temporizzazione a DimmerLink. DimmerLink è un controller dedicato Cortex-M0+ che gestisce il rilevamento passaggio per lo zero e l'attivazione del TRIAC in modo autonomo. Tasmota invia il livello di luminosità desiderato (0–100) una sola volta per comando utente — nessun requisito di temporizzazione.
Hardware necessario
- Scheda ESP32 o ESP8266 con firmware Tasmota
- Modulo DimmerLink
- Modulo dimmer AC rbdimmer (qualsiasi portata di corrente)
- Resistenze da 4,7 kΩ × 2 (per pull-up I2C, se si usa la modalità I2C)
Passo 1 — Impostare DimmerLink in modalità I2C
DimmerLink viene spedito in modalità UART di default. Per l'approccio Berry I2C (ESP32) devi prima impostarlo in modalità I2C.
Collega DimmerLink a un qualsiasi adattatore USB-UART (TX → RX, RX → TX, GND → GND, VCC → 3.3V), poi invia il comando SWITCH_I2C a 115200 baud:
Byte sequence: 02 5BIn un qualsiasi terminale seriale (RealTerm, picocom):
- Apri la porta a 115200, 8N1.
- Invia byte grezzi:
02 5B. - Risposta attesa:
00(OK). DimmerLink ora si avvia in modalità I2C dopo ogni accensione.
Dopo il cambio, scollega dall'adattatore UART e cabla per I2C.
Se preferisci lasciare DimmerLink in modalità UART (più semplice per ESP8266), salta questo passo e vai direttamente al Passo 3.
Passo 2 — Cablaggio
Connessione I2C (ESP32 — consigliata)
| DimmerLink | Pin ESP32 | Note |
|---|---|---|
| VCC | 3,3V | Corrispondere alla tensione logica del MCU |
| GND | GND | — |
| SDA (TX/SDA) | GPIO21 | Aggiungere pull-up da 4,7 kΩ a 3.3V |
| SCL (RX/SCL) | GPIO22 | Aggiungere pull-up da 4,7 kΩ a 3.3V |
Collega le resistenze di pull-up da SDA e SCL a 3.3V. Senza di esse il bus I2C non funzionerà in modo affidabile.
3.3V ──┬──────────────┬──
4.7k 4.7k
│ │
ESP32 SDA ──── DL SDA │
ESP32 SCL ──────────── DL SCL
GND ────────────────── DL GND
3.3V ───────────────── DL VCCConnessione UART (ESP8266 o ESP32)
| DimmerLink | ESP8266 | ESP32 | Note |
|---|---|---|---|
| VCC | 3,3V | 3,3V | — |
| GND | GND | GND | — |
| RX (TX/SDA) | GPIO1 TX* | GPIO17 TX2 | DL RX ← MCU TX |
| TX (RX/SCL) | GPIO3 RX* | GPIO16 RX2 | DL TX → MCU RX |
* GPIO1/3 su ESP8266 sono condivisi con l'USB. Usa Serial.swap()
per reindirizzare a GPIO15/GPIO13, oppure usa I2C.
// ESP8266: reindirizzare Serial su GPIO15 (TX) / GPIO13 (RX)
Serial.begin(115200);
Serial.swap(); // TX → GPIO15, RX → GPIO13DimmerLink → Modulo dimmer AC
| DimmerLink | Modulo dimmer |
|---|---|
| VCC | VCC |
| GND | GND |
| Z-C | Z-C |
| Dim | DIM |
The dimmer module connects to mains AC and the load as described in the Hardware Connection Guide.
Passo 3A — Script Berry in Tasmota (ESP32, modalità I2C)
Lo scripting Berry è disponibile solo su Tasmota per ESP32. Offre controllo programmatico completo sull'I2C.
Apri la console web di Tasmota e incolla:
# File: dimmer_i2c.be — controllo DimmerLink via I2C
# Registro 0x10 (DIM0_LEVEL): 0–100 percento
import wire
wire.begin() # inizializzare il bus I2C una volta al caricamento dello script
def set_dimmer(level)
var l = int(level)
if l < 0 then l = 0 end
if l > 100 then l = 100 end
wire.beginTransmission(0x50)
wire.write(0x10) # registro DIM0_LEVEL
wire.write(l)
wire.endTransmission()
end
# Associare il comando Dimmer di Tasmota (0–100) a DimmerLink
tasmota.add_rule("Dimmer#State",
def(value) set_dimmer(value) end)
# Associare il comando Power (on/off) a luminosità piena o zero
tasmota.add_rule("Power#State",
def(value)
if value == 1 then set_dimmer(100)
else set_dimmer(0) end
end)Per caricarlo automaticamente all'avvio, salvalo come autoexec.be
tramite il gestore file di Tasmota (Tools → Manage File System).
Come funziona:
wire.begin()viene chiamato una volta al caricamento dello script per inizializzare il bus I2C — non a ogni comando.wire.beginTransmission(0x50)indirizza DimmerLink all'indirizzo I2C di default.wire.write(0x10)seleziona il registro DIM0_LEVEL.wire.write(l)imposta la luminosità 0–100%.- La regola si attiva ogni volta che Tasmota riceve un comando
Dimmerdalla console, via MQTT o da Home Assistant.
Test dalla console Tasmota
Dimmer 50 → set_dimmer(50) → scrittura I2C 50 in 0x10
Dimmer 0 → set_dimmer(0) → lampada spenta
Power 0 → set_dimmer(0)Passo 3B — UART in Tasmota tramite SerialSend (ESP8266 e ESP32)
Se Berry non è disponibile (ESP8266) o preferisci non scrivere script,
usa SerialSend5 per inviare pacchetti binari grezzi a DimmerLink
via UART.
Formato del pacchetto UART DimmerLink per SET luminosità:
02 53 00 LEVEL
│ │ │ └── luminosità 0–100 (decimale)
│ │ └────── indice del canale (sempre 00)
│ └────────── comando SET (0x53)
└────────────── byte di inizio (sempre 0x02)Nella console Tasmota:
# Impostare luminosità al 50% (0x32 hex = 50 decimale)
SerialSend5 02530032
# Impostare luminosità al 75% (0x4B hex = 75 decimale)
SerialSend5 0253004B
# Spegnere (0x00 = 0%)
SerialSend5 02530000
# Accendere a piena potenza (0x64 hex = 100 decimale)
SerialSend5 02530064Hex conversion:
Dimmer 50→ 50 decimal → 0x32 hex → packet02 53 00 32. Use any hex calculator or the table in the DimmerLink UART docs.
Automatizzare SerialSend con le regole Tasmota
Associa il valore interno Dimmer di Tasmota a un comando SerialSend
usando variabili Mem e il trucco WebCmd — oppure scrivi uno script
Berry per una conversione pulita su ESP32. Per ESP8266 un approccio più
semplice è usare livelli fissi tramite le regole Tasmota:
Rule1
ON Dimmer#State<20 DO SerialSend5 02530000 ENDON
ON Dimmer#State>=20 DO SerialSend5 02530032 ENDONPer un controllo graduale a livello arbitrario su ESP8266, si raccomanda l'approccio Berry su ESP32.
Passo 4 — Integrazione con Home Assistant
Una volta che Tasmota controlla DimmerLink, Home Assistant vede il dispositivo ESP come un nodo Tasmota standard tramite scoperta automatica MQTT.
Abilitare la scoperta automatica MQTT in Tasmota:
SetOption19 1 # Abilitare la scoperta MQTT di Home AssistantHome Assistant crea automaticamente un'entità light con controllo di
luminosità. Lo slider di luminosità di HA (0–255) viene convertito nel
comando Dimmer di Tasmota (0–100), che attiva la regola Berry che
scrive in DimmerLink.
Per la configurazione manuale di HA (se la scoperta automatica è disattivata):
mqtt:
light:
- name: "AC Dimmer"
command_topic: "cmnd/tasmota_dimmer/Dimmer"
brightness_command_topic: "cmnd/tasmota_dimmer/Dimmer"
brightness_scale: 100
payload_on: "100"
payload_off: "0"
state_topic: "stat/tasmota_dimmer/RESULT"
brightness_state_topic: "stat/tasmota_dimmer/RESULT"
brightness_value_template: >
{{ value_json.Dimmer | default(0) }}Errori frequenti
| Problema | Causa | Soluzione |
|---|---|---|
| Berry non disponibile sul dispositivo | Tasmota su ESP8266 | Usare l'approccio UART + SerialSend5 |
Il comando Dimmer non ha effetto |
Regola non caricata o errore di battitura | Verificare la sintassi di tasmota.add_rule; ricaricare Berry |
| DimmerLink non risponde su I2C | Modalità errata (ancora UART) | Inviare prima 02 5B via UART per commutare |
| I2C instabile sotto WiFi | Resistenze di pull-up mancanti | Aggiungere 4,7 kΩ su SDA e SCL |
SerialSend5 invia livello errato |
Errore di conversione hex | 50% = 0x32, 75% = 0x4B, 100% = 0x64 |
| HA mostra il dimmer ma il livello viene ignorato | Incompatibilità di on_command_type |
Usare brightness_scale: 100 nella configurazione MQTT light |
Alternativa — ESPHome al posto di Tasmota
Se l'approccio con scripting Berry in Tasmota sembra complesso, ESPHome offre un'integrazione nativa DimmerLink in 5 righe di YAML e gestisce automaticamente tutta la comunicazione I2C.
See: ESPHome YAML for AC Dimmer and DimmerLink
Checklist rapida
Articoli correlati
- ESPHome alternative → ESPHome YAML for AC Dimmer and DimmerLink
- Home Assistant guide → AC Dimmer with Home Assistant and ESPHome
- DimmerLink I2C not detected → DimmerLink Not Detected: I2C vs UART Mode
- Raspberry Pi control → Raspberry Pi AC Dimmer via DimmerLink
Hai ancora domande?
Ask on forum.rbdimmer.com or open a GitHub Issue.