← - Lambda-Integration | Inhaltsverzeichnis | Weiter: - Lambda-Entitäten →
ESPHome-Integration — Einführung
Integration von DimmerLink mit Home Assistant über ESPHome.
Inhaltsverzeichnis
Weitere Abschnitte:
- Lambda-Referenz — I2C- und Register-Referenz
- Fertige Entitäten — Codeblöcke zum Kopieren
- Vollständige Beispiele — funktionsfähige Konfigurationen
1. Übersicht
Was ist ESPHome?
ESPHome ist ein System zur Erstellung von ESP8266/ESP32-Firmware mit einfachen YAML-Konfigurationen. ESPHome-Geräte werden automatisch in Home Assistant integriert.
Warum ESPHome + DimmerLink?
┌─────────────────┐ I2C ┌─────────────┐ WiFi ┌─────────────────┐
│ DimmerLink │◄────────────►│ ESP32 │◄────────────►│ Home Assistant │
│ (AC Dimmer) │ │ (ESPHome) │ │ │
└─────────────────┘ └─────────────┘ └─────────────────┘
Vorteile:
| Funktion | Beschreibung |
|---|---|
| HA-Integration | Dimmer erscheint als Light-Entität |
| Automatisierung | Nutzung in Home Assistant-Szenarien |
| OTA-Updates | Drahtlose Firmware-Updates |
| Lokale Steuerung | Funktioniert ohne Internet |
| Geringe Latenz | Direktverbindung, keine Cloud |
Lösungsarchitektur
Home Assistant
│
│ WiFi (Native API)
▼
ESP32 + ESPHome
│
│ I2C (100 kHz)
▼
DimmerLink
│
│ Zero-Cross + Gate
▼
AC Dimmer
│
│ AC 110/220V
▼
Lamp
Integrationsansatz
DimmerLink verfügt über keine fertige Komponente in ESPHome. Wir verwenden Lambda-Funktionen — eingebetteter C++-Code in der YAML-Konfiguration.
Warum Lambda?
- Keine externen Bibliotheken erforderlich
- Volle Kontrolle über die I2C-Kommunikation
- Funktioniert mit jeder ESPHome-Version
- Einfach an neue Register anpassbar
So sieht es aus:
output:
- platform: template
id: dimmerlink_output
type: float
write_action:
- lambda: |-
uint8_t level = (uint8_t)(state * 100.0f);
uint8_t data[2] = {0x10, level};
id(bus_a).write(0x50, data, 2, true);
2. Voraussetzungen
Hardware-Voraussetzungen
| Komponente | Anforderung | Hinweis |
|---|---|---|
| DimmerLink | v1.0+ | Im I2C-Modus |
| ESP32 | Beliebige Variante | ESP32, ESP32-C3, ESP32-S2, ESP32-S3 |
| AC-Dimmer | TRIAC-Modul | Mit Z-C- und DIM-Eingängen |
| Last | Dimmbar | Glühlampen, LED (dimmbar) |
Unterstützte ESP32-Boards
| Board | Standard-I2C | Hinweis |
|---|---|---|
| ESP32 DevKit | GPIO21/GPIO22 | Empfohlen |
| ESP32-C3 | GPIO8/GPIO9 | Kompakt |
| ESP32-S2 | GPIO8/GPIO9 | USB-nativ |
| ESP32-S3 | GPIO8/GPIO9 | Dual-Core |
| ESP32-WROOM | GPIO21/GPIO22 | Klassisch |
| NodeMCU-32S | GPIO21/GPIO22 | Mit USB |
Software-Voraussetzungen
| Komponente | Version | Bezugsquelle |
|---|---|---|
| ESPHome | 2023.1+ | Home Assistant Add-on oder CLI |
| Home Assistant | 2023.1+ | home-assistant.io |
| Python | 3.9+ | Nur für ESPHome CLI |
ESPHome-Version prüfen
In Home Assistant:
Settings → Add-ons → ESPHome → Info
CLI:
esphome version
Bevor Sie beginnen
3. Anschluss
Anschlussdiagramm
┌─────────────┐ ┌─────────────────┐ ┌─────────────┐
│ ESP32 │ │ DimmerLink │ │ AC Dimmer │
│ │ │ │ │ │
│ 3.3V ──────┼────────►│ VCC │ │ │
│ GND ───────┼────────►│ GND VCC ├────────►│ VCC │
│ GPIO21 ────┼────────►│ SDA GND ├────────►│ GND │
│ GPIO22 ────┼────────►│ SCL Z-C ├────────►│ Z-C │
│ │ │ DIM ├────────►│ DIM │
└─────────────┘ └─────────────────┘ └─────────────┘
Anschlusstabelle
| ESP32 | DimmerLink | Funktion |
|---|---|---|
| 3.3V | VCC | Stromversorgung |
| GND | GND | Masse |
| GPIO21 | SDA | I2C Data |
| GPIO22 | SCL | I2C Clock |
| DimmerLink | AC-Dimmer | Funktion |
|---|---|---|
| VCC | VCC | Stromversorgung |
| GND | GND | Masse |
| Z-C | Z-C | Nulldurchgang |
| DIM | DIM | Gate |
Pull-up-Widerstände
ESP32 verfügt über interne Pull-ups, für einen zuverlässigen Betrieb werden jedoch externe Widerstände empfohlen:
| Kabellänge | Widerstände |
|---|---|
| < 10 cm | Kann ohne externe funktionieren |
| 10–30 cm | 4,7 kΩ empfohlen |
| > 30 cm | 2,2–4,7 kΩ erforderlich |
DimmerLink in den I2C-Modus umschalten
DimmerLink wird im UART-Modus ausgeliefert. Für ESPHome ist I2C erforderlich.
Über UART (vor dem Anschluss an ESP32):
import serial
ser = serial.Serial('COM3', 115200)
ser.write(bytes([0x02, 0x5B])) # SWITCH_I2C
# Response: 0x00 = OK
Oder über Terminal (HEX-Modus):
Send: 02 5B
Response: 00
Nach dem Umschalten speichert DimmerLink den Modus im EEPROM.
Verbindung überprüfen
Nach dem Anschluss und Flashen des ESP32 sollte in den Logs Folgendes erscheinen:
[I][i2c.arduino:XX]: Found i2c device at address 0x50
4. Grundkonfiguration
Schritt 1: Projekt erstellen
In Home Assistant (Add-on):
- Settings → Add-ons → ESPHome
- "+ NEW DEVICE"
- Name:
dimmerlink - Board-Typ auswählen: ESP32
CLI:
esphome wizard dimmerlink.yaml
Schritt 2: Grundlegendes YAML
Erstellen Sie die Datei dimmerlink.yaml:
# ============================================================
# DimmerLink + ESPHome — Basic Configuration
# ============================================================
substitutions:
device_name: "dimmerlink"
friendly_name: "DimmerLink"
esphome:
name: ${device_name}
friendly_name: ${friendly_name}
esp32:
board: esp32dev
framework:
type: arduino
# Logging
logger:
level: INFO
# Home Assistant API
api:
encryption:
key: !secret api_key
# OTA updates
ota:
platform: esphome
password: !secret ota_password
# WiFi
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Fallback access point
ap:
ssid: "${device_name}-AP"
password: "12345678"
captive_portal:
# ============================================================
# I2C Bus
# ============================================================
i2c:
sda: GPIO21
scl: GPIO22
scan: true
frequency: 100kHz
id: bus_a
# ============================================================
# Output — Communication with DimmerLink
# ============================================================
output:
- platform: template
id: dimmerlink_output
type: float
write_action:
- lambda: |-
// Convert 0.0-1.0 → 0-100%
uint8_t level = (uint8_t)(state * 100.0f);
if (level > 100) level = 100;
// Write to DIM0_LEVEL register (0x10)
uint8_t data[2] = {0x10, level};
id(bus_a).write(0x50, data, 2, true);
# ============================================================
# Light — What Home Assistant sees
# ============================================================
light:
- platform: monochromatic
name: "Light"
output: dimmerlink_output
default_transition_length: 1s
gamma_correct: 1.0
restore_mode: RESTORE_DEFAULT_OFF
Schritt 3: Datei secrets.yaml
Erstellen Sie secrets.yaml im selben Ordner:
wifi_ssid: "YourNetwork"
wifi_password: "YourPassword"
api_key: "generate_via_esphome"
ota_password: "your_ota_password"
Schritt 4: Kompilieren und Hochladen
In Home Assistant:
- Click "INSTALL" on the device card
- Select "Plug into this computer" (first time via USB)
- Warten Sie, bis der Upload abgeschlossen ist
CLI:
# First upload via USB
esphome run dimmerlink.yaml
# Subsequent updates — over the air
esphome run dimmerlink.yaml --device dimmerlink.local
Schritt 5: Überprüfung
In den ESPHome-Logs:
[I][i2c.arduino:XX]: Found i2c device at address 0x50
[I][app:XX]: ESPHome version 2024.x.x compiled on ...
[I][wifi:XX]: WiFi Connected!
[I][api:XX]: Home Assistant connected!
In Home Assistant:
- Settings → Devices & Services
- Find "ESPHome" → "DimmerLink"
- Eine Light-Entität sollte erscheinen
Schritt 6: Test
In Home Assistant:
- Öffnen Sie die Light-Karte
- Bewegen Sie den Helligkeitsregler
- Die Lampe sollte ihre Helligkeit ändern
Über Developer Tools:
service: light.turn_on
target:
entity_id: light.dimmerlink_light
data:
brightness_pct: 50
What's Next?
Funktionalität erweitern
Nach erfolgreicher Grundkonfiguration können Sie hinzufügen:
| Funktion | Abschnitt |
|---|---|
| Dimmkurve auswählen | Fertige Entitäten → Select |
| AC-Frequenzüberwachung | Fertige Entitäten → Sensor |
| Physischer Taster | Beispiele → Mit Taster |
| Mehrere Dimmer | Beispiele → Multi-Device |
Empfohlene Konfiguration
Für die meisten Benutzer empfehlen wir das Standardbeispiel:
→ 03_examples.md → 7.2 Standard
Enthält:
- Licht mit sanften Übergängen
- Kurvenauswahl (LINEAR / RMS / LOG)
- AC-Frequenz-Sensor
- Bereitschaftsstatus
- Neustart-Taste
Referenzmaterialien
| Dokument | Inhalt |
|---|---|
| Lambda-Referenz | Alle Register, Befehlscodes, Lambda-Beispiele |
| Fertige Entitäten | Codeblöcke zum Kopieren für jeden Entitätstyp |
| Vollständige Beispiele | 6 fertige Konfigurationen |
Schnellstart (TL;DR)
# Minimum for operation — copy and modify WiFi
substitutions:
device_name: "dimmerlink"
esphome:
name: ${device_name}
esp32:
board: esp32dev
logger:
api:
ota:
wifi:
ssid: "YOUR_WIFI"
password: "YOUR_PASSWORD"
i2c:
sda: GPIO21
scl: GPIO22
id: bus_a
output:
- platform: template
id: dimmer_out
type: float
write_action:
- lambda: |-
uint8_t level = (uint8_t)(state * 100.0f);
uint8_t data[2] = {0x10, level};
id(bus_a).write(0x50, data, 2, true);
light:
- platform: monochromatic
name: "Dimmer"
output: dimmer_out
gamma_correct: 1.0
30 Zeilen — und der Dimmer ist in Home Assistant!
Versionshistorie
| Version | Datum | Änderungen |
|---|---|---|
| 1.0 | 2026-02 | Erstveröffentlichung |
← - Lambda-Integration | Inhaltsverzeichnis | Weiter: - Lambda-Entitäten →