Se rendre au contenu

← - Lambda Reference | Sommaire | Suivant : FAQ & Dépannage →


Intégration ESPHome — Home Assistant, Dépannage, Prochaines étapes

Intégration avec Home Assistant, dépannage et plans de développement.




Sommaire




5.1 Intégration Home Assistant


Découverte automatique

Après le flashage de l'ESP32, l'appareil apparaît automatiquement dans Home Assistant.

Vérification :

  1. Paramètres -> Appareils & Services
  2. Find the "New devices discovered" notification
  3. Ou : ESPHome -> sélectionner l'appareil


Entités dans Home Assistant

Avec l' exemple standard, les entités suivantes sont créées :

Entité Type Description
light.dimmerlink_light Light Variateur principal
sensor.dimmerlink_ac_frequency Sensor Fréquence secteur (50/60 Hz)
sensor.dimmerlink_level Sensor Niveau actuel (%)
select.dimmerlink_curve Select Courbe de variation
binary_sensor.dimmerlink_ready Binary Sensor Statut de disponibilité
button.dimmerlink_restart_esp Button Redémarrage ESP


Cartes Lovelace

Carte simple

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

Carte étendue

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

Carte avec curseur (custom:slider-entity-row)

yaml
type: entities
entities:
  - entity: light.dimmerlink_light
    type: custom:slider-entity-row
    name: Brightness
    toggle: true
Tip
Nécessite l'installation de [slider-entity-row](https://github.com/thomasloven/lovelace-slider-entity-row) via HACS.


Automatisations

Allumage sur détection de mouvement

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

Extinction après 5 minutes

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

Mode nuit (lumière tamisée)

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

Changer la courbe selon le type de charge

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"


Scripts

Allumage progressif du matin

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

Simulation de présence

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 }}"


Scènes

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


Groupes

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


Capteur de puissance par template

Si la puissance de la lampe est connue :

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) }}


Historique et statistiques

Ajouter à configuration.yaml :

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

history:
  include:
    entities:
      - light.dimmerlink_light



5.2 Dépannage


Problèmes I2C

Appareil introuvable (0x50)

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

Vérification :

Vérification Solution
DimmerLink en mode I2C ? Basculer via UART : 02 5B
Alimentation connectée ? VCC -> 3,3V, GND -> GND
Câblage correct ? SDA -> SDA, SCL -> SCL (sans croisement !)
Résistances de tirage ? Ajouter 4,7 kΩ sur SDA et SCL vers 3,3V
Câbles suffisamment courts ? I2C fonctionne jusqu'à 30 cm

Diagnostic :

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

logger:
  level: DEBUG
  logs:
    i2c: DEBUG

Erreurs I2C intermittentes

Symptom: "I2C communication failed" from time to time

Solutions :

  1. Réduire la fréquence :

yaml i2c: frequency: 50kHz # Au lieu de 100kHz

  1. Ajouter des délais :

yaml output: - platform: template write_action: - delay: 1ms # Avant l'écriture - lambda: |- // ... code

  1. Vérifier l'alimentation — une alimentation instable provoque des erreurs I2C


Problèmes WiFi

ESP32 Doesn't Connect to WiFi

Vérification :

  • SSID et mot de passe corrects dans secrets.yaml
  • WiFi on 2.4 GHz (ESP32 doesn't support 5 GHz)
  • Le routeur ne bloque pas les nouveaux appareils

Solution — AP de secours :

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.

Déconnexions fréquentes

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


Problèmes Home Assistant

Device Doesn't Appear in HA

  1. Vérifier que l'add-on ESPHome est en cours d'exécution
  2. Vérifier la clé API dans la configuration
  3. Redémarrer Home Assistant
  4. Ajouter manuellement : Paramètres -> Intégrations -> Ajouter -> ESPHome

"Entity unavailable"

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

Vérification :

bash
ping dimmerlink.local


Problèmes de variation

La lampe scintille

Causes et solutions :

Cause Solution
LED non dimmable Use lamps marked "dimmable"
Charge trop faible Minimum 10–25 W pour un fonctionnement stable
Mauvaise courbe Essayer LOG pour LED
Interférences secteur Ajouter un snubber RC en sortie du variateur

Lamp Doesn't Turn Off Completely

DimmerLink coupe complètement le TRIAC au niveau level=0. Si la lampe brille encore :

  • Problème dans le variateur ou le câblage
  • Certains drivers LED ont un courant de fuite

Plage de luminosité trop étroite

Essayer d'autres courbes :

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


Problèmes ESPHome

Erreur de compilation

« lambda function not allowed »

Vérifier l'indentation dans YAML — lambda doit être correctement indenté :

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 »

S'assurer que id: bus_a est déclaré dans la section i2c:.

OTA ne fonctionne pas

  1. Vérifier que l'ESP32 est sur le même réseau
  2. Utiliser l'IP à la place du nom d'hôte :

bash esphome run dimmerlink.yaml --device 192.168.1.100


Commandes de diagnostic

Vérification I2C depuis ESPHome

Ajouter un bouton de diagnostic :

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 ===");

Journalisation de toutes les opérations

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


Réinitialisation d'usine

ESP32

  1. Effacer la mémoire flash :

bash esptool.py --port COM3 erase_flash

  1. Reflasher le firmware

Envoyer la commande RESET :

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


Tableau des codes d'erreur

Code Nom Cause Solution
0x00 OK
0xF9 ERR_SYNTAX Registre invalide Vérifier l'adresse du registre
0xFC ERR_NOT_READY Non calibré ou erreur FLASH Attendre 2 sec après la mise sous tension
0xFD ERR_INDEX Index de variateur invalide Utiliser 0
0xFE ERR_PARAM Paramètre invalide level <= 100, curve <= 2



5.3 Prochaines étapes


État actuel

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


Plans de développement

Fonctionnalité Statut Description
Protection thermique En développement Surveillance NTC, ventilateur PWM
FADE progressif En développement Fondu matériel par commande
Multi-canal Prévu Jusqu'à 4 canaux par module
Paramètres EEPROM Prévu Sauvegarde du niveau et de la courbe

Intégration ESPHome v2.0

Fonctionnalité Statut Description
Composant natif Disponible External Component
Surveillance de température En développement Capteur de température
Contrôle du ventilateur En développement Gestion du refroidissement
Surveillance de la consommation Prévu Intégration avec ACS712/CT


Composant natif ESPHome

Un composant externe natif ESPHome est désormais disponible. Il offre une configuration YAML propre sans code lambda :

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
Consultez la [documentation du composant externe](https://github.com/robotdyn-dimmer/DimmerLink/tree/main/components) pour la référence de configuration complète.


Projets avancés

Routeur solaire

Utiliser DimmerLink pour router l'énergie solaire excédentaire :

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

Système multi-pièces

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

# 4 dimmers on one ESP32

Réveil intelligent

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


Retours

Vous avez trouvé un bug ou avez une suggestion ?

Vous souhaitez contribuer au développement ?

  • Tester les nouvelles versions
  • Documentation et traductions
  • Exemples d'utilisation


Ressource Lien
Documentation DimmerLink 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



Historique des modifications

Version Date Modifications
1.0 2026-02 Version initiale

← - Lambda Reference | Sommaire | Suivant : FAQ & Dépannage →