Kurzfassung: Es gibt zwei ESPHome-Integrationsmethoden. Die Standard-Plattform
ac_dimmerfunktioniert sofort, hat aber ISR/WiFi-Konflikte auf ESP32. Die externe DimmerLink-Komponente verwendet einen Hardware-Controller für zuverlässiges, flimmerfreies Dimmen auf jeder Platine.
Methodenvergleich
| Merkmal | Standard ac_dimmer | DimmerLink-Komponente |
|---|---|---|
| ESP8266 | ✅ Stabil | ✅ Stabil |
| ESP32 (Dual-Core) | ⚠️ Kann flimmern | ✅ Stabil |
| ESP32-S2/C3/H2/C6 | ❌ Nicht unterstützt | ✅ Unterstützt |
| — (kein ISR) | ❌ Nicht unterstützt | ✅ Unterstützt |
| Zusätzliche Hardware | Keine | DimmerLink-Modul |
| YAML-Zeilen (minimal) | ~10 | ~30 |
| Eingebaute Sensoren | Nein | Frequenz, Helligkeit |
| Dimmkurven-Auswahl | Nein | LINEAR / RMS / LOG |
Methode 1: Standard-ESPHome-Plattform ac_dimmer
Dies ist die eingebaute ESPHome-Plattform. Keine externen Komponenten erforderlich.
Minimale Konfiguration (ESP8266)
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 # DIM-Pin
zero_cross_pin:
number: GPIO5 # ZC-Pin
mode: INPUT
inverted: yes
method: leading_pulse # TRIAC-Standard
light:
- platform: monochromatic
output: dimmer_out
name: "Dimmer"Vollständige Konfiguration — mit Gamma und Mindestleistung
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 # minimales Tastverhältnis (1 %) — vermeidet Flimmern bei 0
light:
- platform: monochromatic
output: dimmer_out
name: "Dimmer"
gamma_correct: 0 # 0 = linear; 2.8 = menschliche Wahrnehmungskurve
default_transition_length: 500msDimm-Methoden-Optionen
method: leading_pulse # Kurzer Gate-Impuls — Standard-TRIAC (Standard)
method: leading # Gate wird bis ZC gehalten — alternativer TRIAC
method: trailing # Gate wird am Ende abgeschaltet — nur MOSFETESP32-Warnung
⚠️ Die Standard-Plattform
ac_dimmerhat zwei verschiedene Probleme auf ESP32-Hardware:
- ESP32, ESP32-S3 — kann flimmern; ISR-Timing wird durch WiFi gestört
- ESP32-S2, ESP32-C3, ESP32-H2, ESP32-C6 — überhaupt nicht unterstützt
Lösung: Verwenden Sie Methode 2 (DimmerLink) für jedes ESP32-basierte Setup.
Methode 2: Externe DimmerLink-Komponente
DimmerLink verlagert Nulldurchgangserkennung und TRIAC-Steuerung auf
einen dedizierten Cortex-M0+-Controller. ESPHome sendet die Helligkeit
per I2C (Register 0x10). Auf dem MCU läuft kein ISR.
Docs: rbdimmer.com/docs/dimmerlink-esphome
Component source: github.com/robotdyn-dimmer/DimmerLink/tree/main/components
Verdrahtung
DimmerLink → ESP32 (oder beliebiger MCU)
──────────────────────────────────
VCC → 3.3V
GND → GND
SDA → GPIO21
SCL → GPIO22Minimale Konfiguration (~30 Zeilen)
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: 0x50Standard-Konfiguration — mit Sensoren und Kurvenauswahl
# (Blöcke external_components + i2c wie oben)
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"
# Optionen im HA-Dropdown: 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"Erweiterte Konfiguration — alle Entitäten
# Vollständige DimmerLink-Integration mit Diagnose
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"Multi-Device-Konfiguration
Mehrere DimmerLink-Module auf einem I2C-Bus (verschiedene Adressen):
light:
- platform: dimmerlink
name: "Kitchen"
address: 0x50
- platform: dimmerlink
name: "Bedroom"
address: 0x51Lambda-Integration (Fortgeschritten)
Für benutzerdefinierte Logik — z. B. Helligkeit über eine physische Taste oder einen Sensorwert einstellen — verwenden Sie ESPHome-Lambda- Funktionen mit direktem I2C-Registerzugriff.
Docs: rbdimmer.com/docs/dimmerlink-esphome/lambda-integration
DimmerLink I2C-Registerkarte (wichtige Register)
| Register | Adresse | Beschreibung |
|---|---|---|
| STATUS | 0x00 |
Status-Flags (nur lesen) |
| DIM0_LEVEL | 0x10 |
Helligkeit Kanal 0, 0–100 |
| DIM0_CURVE | 0x11 |
Kurve: 0=LINEAR, 1=RMS, 2=LOG |
| AC_FREQ | 0x20 |
Gemessene AC-Frequenz (Hz) |
Lambda-Beispiel — Helligkeit direkt setzen
# Template-Ausgang mit Lambda für benutzerdefinierte Helligkeitssteuerung
output:
- platform: template
id: dimmer_out
type: float
write_action:
- lambda: |-
uint8_t level = (uint8_t)(state * 100.0f);
// erfordert i2c:-Block in Ihrer ESPHome-Konfiguration
Wire.beginTransmission(0x50);
Wire.write(0x10); // DIM0_LEVEL-Register
Wire.write(level);
Wire.endTransmission();
light:
- platform: monochromatic
output: dimmer_out
name: "Dimmer (lambda)"Lambda-Beispiel — Taste löst Voreinstellung aus
binary_sensor:
- platform: gpio
pin: GPIO0
name: "Dim Button"
on_press:
- lambda: |-
// Umschalten zwischen 30 % und 80 %
static bool high = false;
uint8_t level = high ? 30 : 80;
high = !high;
Wire.beginTransmission(0x50);
Wire.write(0x10);
Wire.write(level);
Wire.endTransmission();Dimmkurven
| Kurve | Registerwert | ESPHome dimming_curve |
Geeignet für |
|---|---|---|---|
| Linear | 0 | LINEAR |
Heizungen, resistive Lasten |
| RMS | 1 | RMS |
Glühlampen, Halogen |
| Logarithmisch | 2 | LOGARITHMIC |
Dimmbare LED-Lampen |
RMS- und logarithmische Kurven kompensieren die nichtlineare Beziehung zwischen Phasenwinkel und wahrgenommener Helligkeit.
Häufige Probleme
| Symptom | Ursache | Lösung |
|---|---|---|
| Flimmern mit ESP32 | ISR/WiFi-Konflikt | DimmerLink-Methode verwenden |
| Dimmer offline nach OTA | ISR während Flash unterbrochen | DimmerLink verwenden |
| Helligkeit bleibt bei 0 % | min_power zu niedrig oder ZC-Verdrahtung |
ZC-Pin prüfen |
| HA-Light-Entität fehlt | ESPHome nicht in HA adoptiert | Gerät erneut adoptieren |
| Komponente nicht gefunden | Falsches ref: in external_components |
ref: main verwenden |
Verwandte Artikel
- Home Assistant Komplettanleitung →
home-automation/home-assistant-ac-dimmer.md - ESP32 WiFi ISR problem → IRAM_ATTR Causes and Fix
- Single-core ESP32 → ESP32-S2/C3/H2 Doesn't Work
- MQTT-Alternative →
home-automation/mqtt-esp32-ac-dimmer.md
Noch Fragen?
Ask on forum.rbdimmer.com or open a GitHub Issue.