Passa al contenuto

Dimmer AC con Home Assistant: guida ESPHome e DimmerLink

Due percorsi per controllare un dimmer AC da Home Assistant: la piattaforma standard ESPHome ac_dimmer (configurazione rapida, ma rischiosa su ESP32+WiFi) e il componente ESPHome DimmerLink (consigliato per l'affidabilità).

In breve: Esistono due percorsi di integrazione. Il Percorso A (piattaforma standard ESPHome ac_dimmer) è semplice ma causa conflitti ISR/WiFi su ESP32 dual-core. Il Percorso B (componente ESPHome DimmerLink) scarica la temporizzazione TRIAC su un controller dedicato — nessun ISR, nessun conflitto, funziona su qualsiasi piattaforma inclusi ESP32-C3, Raspberry Pi e HA OS.



Quale percorso scegliere?

Criterio Percorso A: ESPHome standard Percorso B: DimmerLink
Scheda ESP8266 (sicuro), ESP32 (rischioso) Qualsiasi ESP32, RPi, qualsiasi SBC
Complessità YAML ~10 righe ~30 righe
Stabilità WiFi Possibile sfarfallio con carico WiFi Nessun conflitto (solo I2C)
ESP32 single-core Non supportato Supportato
Hardware aggiuntivo Nessuno Modulo DimmerLink
Qualità dimmerizzazione Buona Eccellente (temporizzazione hardware)

⚠️ Perché ESP32 è rischioso con il Percorso A: la piattaforma standard ac_dimmer usa un ISR software su ESP32. Quando il WiFi o l'API HA sono attivi, la temporizzazione dell'ISR viene disturbata, causando sfarfallio visibile o blocco del dimmer. Usa il Percorso B per eliminare completamente l'ISR.

Scegli il Percorso A se usi ESP8266 e vuoi la configurazione più semplice.

Scegli il Percorso B se usi ESP32 (qualsiasi variante), Raspberry Pi, HA OS su x86, o hai bisogno di dimmerizzazione affidabile con WiFi/MQTT attivo.




Percorso A: Piattaforma standard ESPHome ac_dimmer


Cablaggio (ESP8266 / ESP32)

text
Modulo dimmer   →   ESP8266 (NodeMCU)
──────────────────────────────────────
ZC-OUT          →   D1 (GPIO5)
DIM             →   D2 (GPIO4)
VCC             →   3.3V
GND             →   GND

Per ESP32, qualsiasi GPIO può essere usato per ZC e DIM.


YAML ESPHome

yaml
esphome:
  name: ac-dimmer
  platform: ESP8266      # o ESP32
  board: nodemcuv2       # adattare alla tua scheda
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
    zero_cross_pin:
      number: GPIO5
      mode: INPUT
      inverted: yes
    method: leading_pulse  # predefinito; 'trailing' per MOSFET
    min_power: 0.01
light:
  - platform: monochromatic
    output: dimmer_out
    name: "AC Dimmer"
    gamma_correct: 0       # 0 = lineare, 2.8 = percezione LED


Metodi di dimmerizzazione

Metodo Valore method: Uso con
Leading pulse (predefinito) leading_pulse Moduli TRIAC
Leading (gate mantenuto) leading TRIAC — alternativo
Trailing trailing Solo moduli MOSFET


Problema noto: ESP32 + WiFi

⚠️ La piattaforma standard ac_dimmer usa un ISR software sull'ESP32. Quando il WiFi è attivo (specialmente con l'API HA o OTA), l'ISR può essere ritardato, causando sfarfallio visibile o blocco del dimmer.

This is the same root cause as crashes with the RBDdimmer C++ library. See: ESP32 + AC Dimmer: IRAM_ATTR Causes and Fix

Soluzione: Usa il Percorso B (DimmerLink) per installazioni HA basate su ESP32.




Percorso B: Componente ESPHome DimmerLink

DimmerLink è un controller dedicato con processore Cortex-M0+ che gestisce il rilevamento passaggio per lo zero e la temporizzazione del gate TRIAC internamente. Il tuo ESP32 invia un valore di luminosità (0–100 %) via I2C — nessun ISR viene eseguito sul MCU.


Cablaggio

text
DimmerLink   →   ESP32
─────────────────────────
VCC          →   3.3V
GND          →   GND
SDA          →   GPIO21
SCL          →   GPIO22

DimmerLink → AC load wiring is identical to the standard module. See: Hardware Connection Guide


Installare il componente ESPHome

Aggiungi il componente esterno al tuo YAML:

yaml
external_components:
  - source:
      type: git
      url: https://github.com/robotdyn-dimmer/DimmerLink
      ref: main
    components: [dimmerlink]

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


YAML minimo (~30 righe)

yaml
esphome:
  name: dimmerlink-ha
  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

Programma, aggiungi a HA, fatto.


YAML standard — con sensori e selettore di curva

yaml
# (external_components + i2c come sopra)
light:
  - platform: dimmerlink
    name: "Dimmer"
    address: 0x50
sensor:
  - platform: dimmerlink
    address: 0x50
    frequency:
      name: "AC Frequency"
    brightness:
      name: "Dimmer Brightness"
select:
  - platform: dimmerlink
    address: 0x50
    dimming_curve:
      name: "Dimming Curve"
      # Opzioni: LINEAR, RMS, LOGARITHMIC
binary_sensor:
  - platform: dimmerlink
    address: 0x50
    status:
      name: "Dimmer Status"


Curve di dimmerizzazione

Curva Ideale per
LINEAR Elementi riscaldanti, carichi resistivi
RMS Lampade a incandescenza e alogene
LOGARITHMIC Lampadine LED dimmerabili



Vista dispositivo in Home Assistant

Dopo la programmazione e l'aggiunta del dispositivo ESPHome a HA:

  • Il Percorso A crea un'entità light con slider di luminosità (0–255 mappato su 0–100 %)
  • Il Percorso B crea un'entità light più entità sensore opzionali (frequenza AC, luminosità %, versione firmware) e un selettore di curva di dimmerizzazione — tutto mostrato su un'unica scheda dispositivo HA



Multi-canale con DimmerLink

Ogni modulo DimmerLink gestisce un carico AC a un indirizzo I2C (impostato tramite jumper di indirizzo sulla scheda). Per controllare due carichi, collega due moduli DimmerLink separati sullo stesso bus I2C con indirizzi diversi:

yaml
light:
  - platform: dimmerlink
    name: "Channel 1"
    address: 0x50
  - platform: dimmerlink
    name: "Channel 2"
    address: 0x51



Articoli correlati



Hai ancora domande?

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

Condividi articolo
Accedi per lasciare un commento