Zum Inhalt springen

← - Lambda Reference | Inhaltsverzeichnis | Weiter: FAQ & Fehlerbehebung →


ESPHome Integration — Home Assistant, Fehlerbehebung, Nächste Schritte

Integration mit Home Assistant, Fehlerbehebung und Entwicklungspläne.




Inhaltsverzeichnis




5.1 Home Assistant Integration


Automatische Erkennung

Nach dem Flashen des ESP32 erscheint das Gerät automatisch in Home Assistant.

Überprüfung:

  1. Einstellungen -> Geräte & Dienste
  2. Find the "New devices discovered" notification
  3. Oder: ESPHome -> Gerät auswählen


Entitäten in Home Assistant

Bei Verwendung des Standardbeispielswerden folgende Entitäten erstellt:

Entität Typ Beschreibung
light.dimmerlink_light Light Haupt-Dimmer
sensor.dimmerlink_ac_frequency Sensor Netzfrequenz (50/60 Hz)
sensor.dimmerlink_level Sensor Aktueller Pegel (%)
select.dimmerlink_curve Select Dimmkurve
binary_sensor.dimmerlink_ready Binary Sensor Bereitschaftsstatus
button.dimmerlink_restart_esp Button ESP-Neustart


Lovelace-Karten

Einfache Karte

yaml
type: light
entity: light.dimmerlink_light
name: Living Room

Erweiterte Karte

yaml
type: vertical-stack
cards:
  - type: light
    entity: light.dimmerlink_light
    name: Dimmer

  - type: entities
    entities:
      - entity: select.dimmerlink_curve
        name: Curve
      - entity: sensor.dimmerlink_ac_frequency
        name: Mains Frequency
      - entity: binary_sensor.dimmerlink_ready
        name: Status

Karte mit Schieberegler (custom:slider-entity-row)

yaml
type: entities
entities:
  - entity: light.dimmerlink_light
    type: custom:slider-entity-row
    name: Brightness
    toggle: true
Tip
Erfordert die Installation von [slider-entity-row](https://github.com/thomasloven/lovelace-slider-entity-row) über HACS.


Automatisierungen

Einschalten per Bewegungsmelder

yaml
automation:
  - alias: "Light on Motion"
    trigger:
      - platform: state
        entity_id: binary_sensor.motion_sensor
        to: "on"
    condition:
      - condition: sun
        after: sunset
    action:
      - service: light.turn_on
        target:
          entity_id: light.dimmerlink_light
        data:
          brightness_pct: 70
          transition: 2

Ausschalten nach 5 Minuten

yaml
automation:
  - alias: "Auto Turn Off"
    trigger:
      - platform: state
        entity_id: binary_sensor.motion_sensor
        to: "off"
        for:
          minutes: 5
    action:
      - service: light.turn_off
        target:
          entity_id: light.dimmerlink_light
        data:
          transition: 5

Nachtmodus (gedimmtes Licht)

yaml
automation:
  - alias: "Night Mode"
    trigger:
      - platform: time
        at: "23:00:00"
    condition:
      - condition: state
        entity_id: light.dimmerlink_light
        state: "on"
    action:
      - service: light.turn_on
        target:
          entity_id: light.dimmerlink_light
        data:
          brightness_pct: 20
          transition: 10

Kurve je nach Last-Typ wechseln

yaml
automation:
  - alias: "Curve for LED"
    trigger:
      - platform: state
        entity_id: input_select.lamp_type
        to: "LED"
    action:
      - service: select.select_option
        target:
          entity_id: select.dimmerlink_curve
        data:
          option: "LOG"

  - alias: "Curve for Incandescent"
    trigger:
      - platform: state
        entity_id: input_select.lamp_type
        to: "Incandescent"
    action:
      - service: select.select_option
        target:
          entity_id: select.dimmerlink_curve
        data:
          option: "RMS"


Skripte

Sanftes morgendliches Einschalten

yaml
script:
  morning_light:
    alias: "Morning Light"
    sequence:
      - service: light.turn_on
        target:
          entity_id: light.dimmerlink_light
        data:
          brightness_pct: 10
      - delay:
          seconds: 30
      - service: light.turn_on
        target:
          entity_id: light.dimmerlink_light
        data:
          brightness_pct: 50
          transition: 120  # 2 minutes

Anwesenheitssimulation

yaml
script:
  presence_simulation:
    alias: "Presence Simulation"
    sequence:
      - repeat:
          count: 10
          sequence:
            - service: light.turn_on
              target:
                entity_id: light.dimmerlink_light
              data:
                brightness_pct: "{{ range(30, 80) | random }}"
            - delay:
                minutes: "{{ range(5, 20) | random }}"
            - service: light.turn_off
              target:
                entity_id: light.dimmerlink_light
            - delay:
                minutes: "{{ range(10, 30) | random }}"


Szenen

yaml
scene:
  - name: "Movie"
    entities:
      light.dimmerlink_light:
        state: on
        brightness_pct: 15

  - name: "Reading"
    entities:
      light.dimmerlink_light:
        state: on
        brightness_pct: 80

  - name: "Romantic"
    entities:
      light.dimmerlink_light:
        state: on
        brightness_pct: 30


Gruppen

yaml
light:
  - platform: group
    name: "All Dimmers"
    entities:
      - light.dimmerlink_living_room
      - light.dimmerlink_bedroom
      - light.dimmerlink_kitchen


Template-Sensor für Leistung

Wenn die Lampenleistung bekannt ist:

yaml
sensor:
  - platform: template
    sensors:
      dimmer_power:
        friendly_name: "Dimmer Power"
        unit_of_measurement: "W"
        value_template: >
          {% set brightness = state_attr('light.dimmerlink_light', 'brightness') | default(0) %}
          {% set max_power = 100 %}
          {{ (brightness / 255 * max_power) | round(1) }}


Verlauf und Statistik

Zu configuration.yaml hinzufügen:

yaml
recorder:
  include:
    entities:
      - light.dimmerlink_light
      - sensor.dimmerlink_level
      - sensor.dimmerlink_ac_frequency

history:
  include:
    entities:
      - light.dimmerlink_light



5.2 Fehlerbehebung


I2C-Probleme

Gerät nicht gefunden (0x50)

Symptom: Logs don't show "Found i2c device at address 0x50"

Überprüfung:

Überprüfung Lösung
DimmerLink im I2C-Modus? Über UART umschalten: 02 5B
Stromversorgung angeschlossen? VCC -> 3,3V, GND -> GND
Verdrahtung korrekt? SDA -> SDA, SCL -> SCL (nicht gekreuzt!)
Pull-up-Widerstände? 4,7-kΩ-Widerstände an SDA und SCL zu 3,3V hinzufügen
Leitungen kurz genug? I2C funktioniert bis zu 30 cm

Diagnose:

yaml
# Add to configuration for debugging
i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true  # Enable scanning
  id: bus_a

logger:
  level: DEBUG
  logs:
    i2c: DEBUG

Sporadische I2C-Fehler

Symptom: "I2C communication failed" from time to time

Lösungen:

  1. Frequenz reduzieren:

yaml i2c: frequency: 50kHz # Statt 100kHz

  1. Verzögerungen hinzufügen:

yaml output: - platform: template write_action: - delay: 1ms # Vor dem Schreiben - lambda: |- // ... Code

  1. Stromversorgung prüfen — instabile Spannung verursacht I2C-Fehler


WiFi-Probleme

ESP32 Doesn't Connect to WiFi

Überprüfung:

  • Korrekte SSID und Passwort in secrets.yaml
  • WiFi on 2.4 GHz (ESP32 doesn't support 5 GHz)
  • Router blockiert keine neuen Geräte

Lösung — Fallback-AP:

yaml
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  ap:
    ssid: "dimmerlink-fallback"
    password: "12345678"

captive_portal:

If it doesn't connect to WiFi — it will create an access point for configuration.

Häufige Verbindungsabbrüche

yaml
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  fast_connect: true
  power_save_mode: NONE  # Disable power saving


Home Assistant-Probleme

Device Doesn't Appear in HA

  1. Prüfen, ob das ESPHome-Add-on läuft
  2. API-Schlüssel in der Konfiguration prüfen
  3. Home Assistant neu starten
  4. Manuell hinzufügen: Einstellungen -> Integrationen -> Hinzufügen -> ESPHome

"Entity unavailable"

Causes:
- ESP32 offline
- WiFi issues
- API key mismatch

Überprüfung:

bash
ping dimmerlink.local


Dimmer-Probleme

Lampe flackert

Ursachen und Lösungen:

Ursache Lösung
LED nicht dimmbar Use lamps marked "dimmable"
Zu geringe Last Mindestens 10–25 W für stabilen Betrieb
Falsche Kurve LOG für LED ausprobieren
Netzstörungen RC-Snubber am Dimmer-Ausgang hinzufügen

Lamp Doesn't Turn Off Completely

DimmerLink schaltet den TRIAC bei level=0 vollständig ab. Falls die Lampe trotzdem leuchtet:

  • Problem im Dimmer oder der Verdrahtung
  • Einige LED-Treiber haben Leckströme

Helligkeitsbereich zu eng

Andere Kurven ausprobieren:

yaml
# In Home Assistant Developer Tools
service: select.select_option
target:
  entity_id: select.dimmerlink_curve
data:
  option: "RMS"  # or "LOG"


ESPHome-Probleme

Kompilierungsfehler

„lambda function not allowed"

Einrückung in YAML prüfen — lambda muss korrekt eingerückt sein:

yaml
# Correct
write_action:
  - lambda: |-
      uint8_t data[2] = {0x10, 50};
      id(bus_a).write(0x50, data, 2, true);

# Incorrect (missing "|-")
write_action:
  - lambda:
      uint8_t data[2] = {0x10, 50};

„id not found"

Sicherstellen, dass id: bus_a im Abschnitt i2c: deklariert ist.

OTA funktioniert nicht

  1. Prüfen, ob ESP32 im gleichen Netzwerk ist
  2. IP statt Hostname verwenden:

bash esphome run dimmerlink.yaml --device 192.168.1.100


Diagnose-Befehle

I2C-Prüfung aus ESPHome

Diagnose-Schaltfläche hinzufügen:

yaml
button:
  - platform: template
    name: "I2C Diagnostic"
    on_press:
      - lambda: |-
          ESP_LOGI("diag", "=== I2C Diagnostic ===");

          // Check connection
          uint8_t reg = 0x00;
          uint8_t status = 0;
          auto err = id(bus_a).write(0x50, ®, 1, false);
          ESP_LOGI("diag", "Write result: %d", err);

          err = id(bus_a).read(0x50, &status, 1);
          ESP_LOGI("diag", "Read result: %d, status: 0x%02X", err, status);

          // Read version
          reg = 0x03;
          uint8_t version = 0;
          id(bus_a).write(0x50, ®, 1, false);
          id(bus_a).read(0x50, &version, 1);
          ESP_LOGI("diag", "Firmware: %d", version);

          // Read frequency
          reg = 0x20;
          uint8_t freq = 0;
          id(bus_a).write(0x50, ®, 1, false);
          id(bus_a).read(0x50, &freq, 1);
          ESP_LOGI("diag", "AC Frequency: %d Hz", freq);

          ESP_LOGI("diag", "=== Done ===");

Alle Operationen protokollieren

yaml
logger:
  level: DEBUG
  logs:
    i2c: DEBUG
    api: DEBUG
    sensor: DEBUG


Werksreset

ESP32

  1. Flash löschen:

bash esptool.py --port COM3 erase_flash

  1. Firmware erneut flashen

RESET-Befehl senden:

yaml
button:
  - platform: template
    name: "Factory Reset DimmerLink"
    on_press:
      - lambda: |-
          uint8_t data[2] = {0x01, 0x01};
          id(bus_a).write(0x50, data, 2, true);
      - delay: 3s


Fehlercode-Tabelle

Code Name Ursache Lösung
0x00 OK
0xF9 ERR_SYNTAX Ungültiges Register Registeradresse prüfen
0xFC ERR_NOT_READY Nicht kalibriert oder FLASH-Fehler 2 Sek. nach dem Einschalten warten
0xFD ERR_INDEX Ungültiger Dimmer-Index 0 verwenden
0xFE ERR_PARAM Ungültiger Parameter level <= 100, curve <= 2



5.3 Nächste Schritte


Aktueller Stand

DimmerLink v1.0:
- I2C interface
- UART interface
- Basic dimming (0-100%)
- Three curves (LINEAR, RMS, LOG)
- Auto-detection of mains frequency
- I2C address change

ESPHome Integration v1.0:
- Light entity
- All sensors
- Curve selection
- Diagnostics
- Multi-device


Entwicklungspläne

Funktion Status Beschreibung
Thermoschutz In Entwicklung NTC-Überwachung, PWM-Lüfter
Sanfter FADE In Entwicklung Hardware-Fade per Befehl
Multi-Kanal Geplant Bis zu 4 Kanäle pro Modul
EEPROM-Einstellungen Geplant Pegel und Kurve speichern

ESPHome Integration v2.0

Funktion Status Beschreibung
Native Komponente Verfügbar External Component
Temperaturüberwachung In Entwicklung Temperatursensor
Lüftersteuerung In Entwicklung Kühlungsmanagement
Energieüberwachung Geplant Integration mit ACS712/CT


Native ESPHome-Komponente

Eine native externe ESPHome-Komponente ist verfügbar. Sie ermöglicht eine saubere YAML-Konfiguration ohne Lambda-Code:

yaml
external_components:
  - source: github://robotdyn-dimmer/DimmerLink@main
    components: [dimmerlink]

dimmerlink:
  id: dimmer1
  address: 0x50

light:
  - platform: dimmerlink
    dimmerlink_id: dimmer1
    name: "Light"

sensor:
  - platform: dimmerlink
    dimmerlink_id: dimmer1
    ac_frequency:
      name: "AC Frequency"
Tip
Die vollständige Konfigurationsreferenz finden Sie in der [External Component Documentation](https://github.com/robotdyn-dimmer/DimmerLink/tree/main/components).


Erweiterte Projekte

Solar-Router

DimmerLink zur Weiterleitung überschüssiger Solarenergie verwenden:

text
+---------------+     +---------------+     +---------------+
| Solar Panel   |---->| CT Sensor     |---->|   ESP32       |
+---------------+     +---------------+     |  + ESPHome    |
                                            |               |
+---------------+     +---------------+     |               |
|   Heater      |<----|  DimmerLink   |<----|               |
+---------------+     +---------------+     +---------------+

Mehrraum-System

yaml
# Central controller for the whole house
substitutions:
  # Dimmer addresses
  living_room: "0x50"
  bedroom: "0x51"
  kitchen: "0x52"
  bathroom: "0x53"

# 4 dimmers on one ESP32

Smarter Wecker

yaml
# Gradual light turn on for waking up
automation:
  - alias: "Sunrise Alarm"
    trigger:
      - platform: time
        at: "07:00:00"
    action:
      - service: light.turn_on
        target:
          entity_id: light.bedroom_dimmer
        data:
          brightness_pct: 1
      - repeat:
          count: 30
          sequence:
            - delay: 60
            - service: light.turn_on
              target:
                entity_id: light.bedroom_dimmer
              data:
                brightness_pct: "{{ repeat.index * 3 }}"
                transition: 60


Feedback

Fehler gefunden oder Vorschlag?

Möchten Sie bei der Entwicklung helfen?

  • Neue Versionen testen
  • Dokumentation und Übersetzungen
  • Anwendungsbeispiele


Ressource Link
DimmerLink-Dokumentation rbdimmer.com/docs
ESPHome esphome.io
Home Assistant home-assistant.io
ESPHome I2C esphome.io/components/i2c
ESPHome Light esphome.io/components/light
HACS hacs.xyz



Änderungshistorie

Version Datum Änderungen
1.0 2026-02 Erste Version

← - Lambda Reference | Inhaltsverzeichnis | Weiter: FAQ & Fehlerbehebung →