Zum Inhalt springen

← - Lambda-Integration | Inhaltsverzeichnis | Weiter: - Lambda-Entitäten →


ESPHome-Integration — Einführung

Integration von DimmerLink mit Home Assistant über ESPHome.




Inhaltsverzeichnis

Weitere Abschnitte:




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.


text
┌─────────────────┐     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

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

yaml
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
Warning
**ESP8266** wird ebenfalls unterstützt, aber für einen stabilen I2C-Betrieb wird ESP32 empfohlen.


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:

bash
esphome version


Bevor Sie beginnen

  • ☐ DimmerLink in den I2C-Modus umgeschaltet (UART-Befehl: `02 5B`)
  • ☐ ESP32-Board vorhanden
  • ☐ ESPHome installiert
  • ☐ WiFi-Netzwerk verfügbar
  • ☐ Home Assistant läuft (optional)



  • 3. Anschluss


    Anschlussdiagramm

    text
    ┌─────────────┐         ┌─────────────────┐         ┌─────────────┐
    │   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 wird im UART-Modus ausgeliefert. Für ESPHome ist I2C erforderlich.

    Über UART (vor dem Anschluss an ESP32):

    python
    import serial
    ser = serial.Serial('COM3', 115200)
    ser.write(bytes([0x02, 0x5B]))  # SWITCH_I2C
    # Response: 0x00 = OK
    

    Oder über Terminal (HEX-Modus):

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

    text
    [I][i2c.arduino:XX]: Found i2c device at address 0x50
    
    Info
    **Ausführliche Anschlussdokumentation:** [Hardware-Anschluss](https://www.rbdimmer.com/docs/dimmerlink-HardwareConnection)



    4. Grundkonfiguration


    Schritt 1: Projekt erstellen

    In Home Assistant (Add-on):

    1. Settings → Add-ons → ESPHome
    2. "+ NEW DEVICE"
    3. Name: dimmerlink
    4. Board-Typ auswählen: ESP32

    CLI:

    bash
    esphome wizard dimmerlink.yaml
    


    Schritt 2: Grundlegendes YAML

    Erstellen Sie die Datei dimmerlink.yaml:

    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:

    yaml
    wifi_ssid: "YourNetwork"
    wifi_password: "YourPassword"
    api_key: "generate_via_esphome"
    ota_password: "your_ota_password"
    
    Tip
    **api_key generieren:** ESPHome generiert automatisch einen Schlüssel beim Erstellen eines Projekts. Oder verwenden Sie: `esphome wizard`.


    Schritt 4: Kompilieren und Hochladen

    In Home Assistant:

    1. Click "INSTALL" on the device card
    2. Select "Plug into this computer" (first time via USB)
    3. Warten Sie, bis der Upload abgeschlossen ist

    CLI:

    bash
    # 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:

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

    1. Settings → Devices & Services
    2. Find "ESPHome" → "DimmerLink"
    3. Eine Light-Entität sollte erscheinen


    Schritt 6: Test

    In Home Assistant:

    1. Öffnen Sie die Light-Karte
    2. Bewegen Sie den Helligkeitsregler
    3. Die Lampe sollte ihre Helligkeit ändern

    Über Developer Tools:

    yaml
    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


    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)

    yaml
    # 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 →