Passa al contenuto

Controllo dimmer AC tramite DimmerLink in Tasmota

Tasmota non ha un driver nativo per il taglio di fase TRIAC. DimmerLink colma questa lacuna — Tasmota invia comandi via I2C (Berry su ESP32) o UART (SerialSend su qualsiasi scheda), e DimmerLink gestisce la temporizzazione precisa del TRIAC.

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 SerialSend5 con 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:

text
Byte sequence: 02 5B

In un qualsiasi terminale seriale (RealTerm, picocom):

  1. Apri la porta a 115200, 8N1.
  2. Invia byte grezzi: 02 5B.
  3. 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.

text
3.3V ──┬──────────────┬──
      4.7k           4.7k
       │               │
ESP32 SDA ──── DL SDA  │
ESP32 SCL ──────────── DL SCL
GND ────────────────── DL GND
3.3V ───────────────── DL VCC


Connessione 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.

cpp
// ESP8266: reindirizzare Serial su GPIO15 (TX) / GPIO13 (RX)
Serial.begin(115200);
Serial.swap();  // TX → GPIO15, RX → GPIO13


DimmerLink → 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:

berry
# 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 Dimmer dalla console, via MQTT o da Home Assistant.


Test dalla console Tasmota

text
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à:

text
02  53  00  LEVEL
│   │   │   └── luminosità 0–100 (decimale)
│   │   └────── indice del canale (sempre 00)
│   └────────── comando SET (0x53)
└────────────── byte di inizio (sempre 0x02)

Nella console Tasmota:

text
# 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 02530064

Hex conversion: Dimmer 50 → 50 decimal → 0x32 hex → packet 02 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:

text
Rule1
  ON Dimmer#State<20 DO SerialSend5 02530000 ENDON
  ON Dimmer#State>=20 DO SerialSend5 02530032 ENDON

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

text
SetOption19 1      # Abilitare la scoperta MQTT di Home Assistant

Home 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):

yaml
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

  • ☐ DimmerLink impostato in modalità I2C (se si usa Berry) — inviare `02 5B` via UART
  • ☐ Resistenze di pull-up installate su SDA e SCL (4,7 kΩ a 3.3V)
  • ☐ Berry autoexec.be salvato e caricato (`tasmota.add_rule` presente)
  • ☐ Console Tasmota: `Dimmer 50` attiva set_dimmer(50) nel log Berry
  • ☐ UART: `SerialSend5 02530032` restituisce risposta `00` nel monitor seriale
  • ☐ Scoperta automatica Tasmota MQTT abilitata (`SetOption19 1`)
  • ☐ L'entità light in HA compare e lo slider controlla la luminosità



  • Articoli correlati



    Hai ancora domande?

    Ask on forum.rbdimmer.com or open a GitHub Issue.

    Condividi articolo
    Accedi per lasciare un commento