Passa al contenuto

ESPHome YAML per dimmer AC TRIAC: standard e DimmerLink

Configurazioni ESPHome YAML pronte all'uso per dimmer AC TRIAC — da una configurazione minima di 10 righe a un'integrazione DimmerLink completa con sensori, selezione della curva e funzioni lambda.

In breve: Esistono due metodi di integrazione ESPHome. La piattaforma standard ac_dimmer funziona subito ma presenta conflitti ISR/WiFi su ESP32. Il componente esterno DimmerLink usa un controller hardware per una dimmerizzazione affidabile e senza sfarfallio su qualsiasi scheda.



Confronto dei metodi

Caratteristica ac_dimmer standard Componente DimmerLink
ESP8266 ✅ Stabile ✅ Stabile
ESP32 (dual-core) ⚠️ Possibile sfarfallio ✅ Stabile
ESP32-S2/C3/H2/C6 ❌ Non supportato ✅ Supportato
Raspberry Pi ❌ Non supportato ✅ Supportato
Hardware aggiuntivo Nessuno Modulo DimmerLink
Righe YAML (minimo) ~10 ~30
Sensori integrati No Frequenza, luminosità
Selezione curva di dimmerizzazione No LINEAR / RMS / LOG



Metodo 1: Piattaforma standard ESPHome ac_dimmer

Questa è la piattaforma integrata di ESPHome. Non servono componenti esterni.


Configurazione minima (ESP8266)

yaml
esphome:
  name: dimmer-esp8266
  platform: ESP8266
  board: nodemcuv2
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
api:
  encryption:
    key: !secret api_key
ota:
  password: !secret ota_password
output:
  - platform: ac_dimmer
    id: dimmer_out
    gate_pin: GPIO4          # pin DIM
    zero_cross_pin:
      number: GPIO5          # pin ZC
      mode: INPUT
      inverted: yes
    method: leading_pulse    # predefinito per TRIAC
light:
  - platform: monochromatic
    output: dimmer_out
    name: "Dimmer"


Configurazione completa — con gamma e potenza minima

yaml
output:
  - platform: ac_dimmer
    id: dimmer_out
    gate_pin: GPIO4
    zero_cross_pin:
      number: GPIO5
      mode: INPUT
      inverted: yes
    method: leading_pulse
    min_power: 0.01          # duty cycle minimo (1 %) — evita sfarfallio a 0
light:
  - platform: monochromatic
    output: dimmer_out
    name: "Dimmer"
    gamma_correct: 0         # 0 = lineare; 2.8 = curva di percezione umana
    default_transition_length: 500ms


Opzioni del metodo di dimmerizzazione

yaml
method: leading_pulse   # Impulso breve sul gate — TRIAC standard (predefinito)
method: leading         # Gate mantenuto fino al ZC — TRIAC alternativo
method: trailing        # Gate rilasciato alla fine — solo MOSFET


Avviso per ESP32

⚠️ La piattaforma standard ac_dimmer ha due problemi distinti su hardware ESP32:

  • ESP32, ESP32-S3 — possibile sfarfallio; temporizzazione ISR disturbata dal WiFi
  • ESP32-S2, ESP32-C3, ESP32-H2, ESP32-C6 — non supportati affatto

Soluzione: Usa il Metodo 2 (DimmerLink) per qualsiasi configurazione basata su ESP32.

See: ESP32 + AC Dimmer: IRAM_ATTR Causes and Fix




Metodo 2: Componente esterno DimmerLink

DimmerLink scarica il rilevamento passaggio per lo zero e la temporizzazione TRIAC su un controller dedicato Cortex-M0+. ESPHome invia la luminosità via I2C (registro 0x10). Nessun ISR viene eseguito sul MCU.

Docs: rbdimmer.com/docs/dimmerlink-esphome

Component source: github.com/robotdyn-dimmer/DimmerLink/tree/main/components


Cablaggio

text
DimmerLink   →   ESP32 (o qualsiasi MCU)
──────────────────────────────────
VCC          →   3.3V
GND          →   GND
SDA          →   GPIO21
SCL          →   GPIO22


Configurazione minima (~30 righe)

yaml
esphome:
  name: dimmerlink
  platform: ESP32
  board: esp32dev
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
api:
  encryption:
    key: !secret api_key
ota:
  password: !secret ota_password
external_components:
  - source:
      type: git
      url: https://github.com/robotdyn-dimmer/DimmerLink
      ref: main
    components: [dimmerlink]
i2c:
  sda: GPIO21
  scl: GPIO22
  frequency: 100kHz
light:
  - platform: dimmerlink
    name: "Dimmer"
    address: 0x50


Configurazione standard — con sensori e selettore di curva

yaml
# (blocchi external_components + i2c come sopra)
light:
  - platform: dimmerlink
    name: "Dimmer"
    address: 0x50
sensor:
  - platform: dimmerlink
    address: 0x50
    frequency:
      name: "AC Frequency"
      unit_of_measurement: "Hz"
    brightness:
      name: "Dimmer Level"
      unit_of_measurement: "%"
select:
  - platform: dimmerlink
    address: 0x50
    dimming_curve:
      name: "Dimming Curve"
      # Opzioni nel menu a tendina di HA: LINEAR, RMS, LOGARITHMIC
binary_sensor:
  - platform: dimmerlink
    address: 0x50
    status:
      name: "Dimmer Online"
button:
  - platform: dimmerlink
    address: 0x50
    reset:
      name: "Dimmer Reset"
    recalibrate:
      name: "Dimmer Recalibrate"


Configurazione estesa — tutte le entità

yaml
# Integrazione DimmerLink completa con diagnostica
sensor:
  - platform: dimmerlink
    address: 0x50
    frequency:
      name: "AC Frequency"
    brightness:
      name: "Dimmer Level"
text_sensor:
  - platform: dimmerlink
    address: 0x50
    firmware_version:
      name: "DimmerLink Firmware"
number:
  - platform: dimmerlink
    address: 0x50
    min_brightness:
      name: "Min Brightness"
      min_value: 0
      max_value: 20
select:
  - platform: dimmerlink
    address: 0x50
    dimming_curve:
      name: "Dimming Curve"
binary_sensor:
  - platform: dimmerlink
    address: 0x50
    status:
      name: "Dimmer OK"
    calibration_mode:
      name: "Calibration Active"
button:
  - platform: dimmerlink
    address: 0x50
    reset:
      name: "Reset"
    recalibrate:
      name: "Recalibrate"


Configurazione multi-dispositivo

Più moduli DimmerLink su un singolo bus I2C (indirizzi diversi):

yaml
light:
  - platform: dimmerlink
    name: "Kitchen"
    address: 0x50
  - platform: dimmerlink
    name: "Bedroom"
    address: 0x51



Integrazione lambda (avanzato)

Per logica personalizzata — ad esempio, impostare la luminosità da un pulsante fisico o dalla lettura di un sensore — usa le funzioni lambda di ESPHome con accesso diretto ai registri I2C.

Docs: rbdimmer.com/docs/dimmerlink-esphome/lambda-integration


Mappa registri I2C DimmerLink (registri principali)

Registro Indirizzo Descrizione
STATUS 0x00 Flag di stato (sola lettura)
DIM0_LEVEL 0x10 Luminosità canale 0, 0–100
DIM0_CURVE 0x11 Curva: 0=LINEAR, 1=RMS, 2=LOG
AC_FREQ 0x20 Frequenza AC misurata (Hz)


Esempio lambda — impostare la luminosità direttamente

yaml
# Uscita template tramite lambda per controllo personalizzato della luminosità
output:
  - platform: template
    id: dimmer_out
    type: float
    write_action:
      - lambda: |-
          uint8_t level = (uint8_t)(state * 100.0f);
          // richiede il blocco i2c: nella configurazione ESPHome
          Wire.beginTransmission(0x50);
          Wire.write(0x10);   // registro DIM0_LEVEL
          Wire.write(level);
          Wire.endTransmission();
light:
  - platform: monochromatic
    output: dimmer_out
    name: "Dimmer (lambda)"


Esempio lambda — pulsante attiva preset

yaml
binary_sensor:
  - platform: gpio
    pin: GPIO0
    name: "Dim Button"
    on_press:
      - lambda: |-
          // Alterna tra 30 % e 80 %
          static bool high = false;
          uint8_t level = high ? 30 : 80;
          high = !high;
          Wire.beginTransmission(0x50);
          Wire.write(0x10);
          Wire.write(level);
          Wire.endTransmission();



Curve di dimmerizzazione

Curva Valore registro ESPHome dimming_curve Ideale per
Lineare 0 LINEAR Riscaldatori, carichi resistivi
RMS 1 RMS Lampade a incandescenza, alogene
Logaritmica 2 LOGARITHMIC Lampadine LED dimmerabili

Le curve RMS e logaritmica compensano la relazione non lineare tra angolo di fase e luminosità percepita.




Problemi comuni

Sintomo Causa Soluzione
Sfarfallio con ESP32 Conflitto ISR/WiFi Usare il metodo DimmerLink
Dimmer offline dopo OTA ISR interrotto durante il flash Usare DimmerLink
Luminosità bloccata a 0 % min_power troppo basso o cablaggio ZC Controllare pin ZC
Entità light assente in HA ESPHome non adottato in HA Ri-adottare il dispositivo
Componente non trovato ref: errato in external_components Usare ref: main



Articoli correlati



Hai ancora domande?

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

Condividi articolo
Accedi per lasciare un commento