Se rendre au contenu

← - Intégration Lambda | Sommaire | Suivant : - Entités Lambda →


Intégration ESPHome — Introduction

Intégration de DimmerLink avec Home Assistant via ESPHome.




Sommaire

Sections complémentaires :




1. Vue d'ensemble


Qu'est-ce que ESPHome ?

ESPHome est un système de création de firmware ESP8266/ESP32 à l'aide de configurations YAML simples. Les appareils ESPHome s'intègrent automatiquement avec Home Assistant.


text
┌─────────────────┐     I2C      ┌─────────────┐     WiFi     ┌─────────────────┐
│   DimmerLink    │◄────────────►│    ESP32    │◄────────────►│  Home Assistant │
│  (AC Dimmer)    │              │  (ESPHome)  │              │                 │
└─────────────────┘              └─────────────┘              └─────────────────┘

Avantages :

Fonctionnalité Description
Intégration HA Le variateur apparaît comme une entité Light
Automatisation Utilisation dans les scénarios Home Assistant
Mises à jour OTA Mises à jour firmware sans fil
Contrôle local Fonctionne sans Internet
Faible latence Connexion directe, sans cloud


Architecture de la solution

text
Home Assistant
      │
      │ WiFi (Native API)
      ▼
   ESP32 + ESPHome
      │
      │ I2C (100 kHz)
      ▼
  DimmerLink
      │
      │ Zero-Cross + Gate
      ▼
   AC Dimmer
      │
      │ AC 110/220V
      ▼
    Lamp


Approche d'intégration

DimmerLink ne dispose pas de composant prêt à l'emploi dans ESPHome. Nous utilisons des fonctions lambda — du code C++ intégré dans la configuration YAML.

Pourquoi lambda ?

  • Aucune bibliothèque externe requise
  • Contrôle total de la communication I2C
  • Compatible avec toute version d'ESPHome
  • Facile à adapter pour de nouveaux registres

Aperçu :

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. Prérequis


Prérequis matériels

Composant Exigence Remarque
DimmerLink v1.0+ En mode I2C
ESP32 Toute variante ESP32, ESP32-C3, ESP32-S2, ESP32-S3
Variateur AC Module TRIAC Avec entrées Z-C et DIM
Charge Dimmable Ampoules à incandescence, LED (dimmables)


Cartes ESP32 compatibles

Carte I2C par défaut Remarque
ESP32 DevKit GPIO21/GPIO22 Recommandé
ESP32-C3 GPIO8/GPIO9 Compact
ESP32-S2 GPIO8/GPIO9 USB natif
ESP32-S3 GPIO8/GPIO9 Double cœur
ESP32-WROOM GPIO21/GPIO22 Classique
NodeMCU-32S GPIO21/GPIO22 Avec USB
Warning
**ESP8266** est également supporté, mais ESP32 est recommandé pour un fonctionnement I2C stable.


Prérequis logiciels

Composant Version Où l'obtenir
ESPHome 2023.1+ Add-on Home Assistant ou CLI
Home Assistant 2023.1+ home-assistant.io
Python 3.9+ Uniquement pour ESPHome CLI


Vérifier la version d'ESPHome

In Home Assistant:
Settings → Add-ons → ESPHome → Info

CLI :

bash
esphome version


Avant de commencer

  • ☐ DimmerLink basculé en mode I2C (commande UART : `02 5B`)
  • ☐ Carte ESP32 disponible
  • ☐ ESPHome installé
  • ☐ Réseau WiFi disponible
  • ☐ Home Assistant en fonctionnement (optionnel)



  • 3. Connexion


    Schéma de câblage

    text
    ┌─────────────┐         ┌─────────────────┐         ┌─────────────┐
    │   ESP32     │         │   DimmerLink    │         │  AC Dimmer  │
    │             │         │                 │         │             │
    │  3.3V ──────┼────────►│ VCC             │         │             │
    │  GND ───────┼────────►│ GND         VCC ├────────►│ VCC         │
    │  GPIO21 ────┼────────►│ SDA         GND ├────────►│ GND         │
    │  GPIO22 ────┼────────►│ SCL         Z-C ├────────►│ Z-C         │
    │             │         │             DIM ├────────►│ DIM         │
    └─────────────┘         └─────────────────┘         └─────────────┘
    


    Tableau de connexion

    ESP32 DimmerLink Fonction
    3.3V VCC Alimentation
    GND GND Masse
    GPIO21 SDA I2C Data
    GPIO22 SCL I2C Clock
    DimmerLink Variateur AC Fonction
    VCC VCC Alimentation
    GND GND Masse
    Z-C Z-C Passage par zéro
    DIM DIM Gate


    Résistances de tirage (pull-up)

    ESP32 dispose de pull-ups internes, mais des résistances externes sont recommandées pour un fonctionnement fiable :

    Longueur de câble Résistances
    < 10 cm Peut fonctionner sans externes
    10–30 cm 4,7 kΩ recommandé
    > 30 cm 2,2–4,7 kΩ requis


    DimmerLink est livré en mode UART. Le mode I2C est requis pour ESPHome.

    Via UART (avant la connexion à ESP32) :

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

    Ou via terminal (mode HEX) :

    text
    Send: 02 5B
    Response: 00
    

    Après le basculement, DimmerLink enregistre le mode dans l'EEPROM.


    Vérification de la connexion

    Après la connexion et le flashage de l'ESP32, les logs doivent afficher :

    text
    [I][i2c.arduino:XX]: Found i2c device at address 0x50
    
    Info
    **Documentation détaillée de connexion :** [Connexion matérielle](https://www.rbdimmer.com/docs/dimmerlink-HardwareConnection)



    4. Configuration de base


    Étape 1 : Créer le projet

    Dans Home Assistant (Add-on) :

    1. Settings → Add-ons → ESPHome
    2. "+ NEW DEVICE"
    3. Nom : dimmerlink
    4. Sélectionner le type de carte : ESP32

    CLI :

    bash
    esphome wizard dimmerlink.yaml
    


    Étape 2 : YAML de base

    Créez le fichier 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
    


    Étape 3 : Fichier secrets.yaml

    Créez secrets.yaml dans le même dossier :

    yaml
    wifi_ssid: "YourNetwork"
    wifi_password: "YourPassword"
    api_key: "generate_via_esphome"
    ota_password: "your_ota_password"
    
    Tip
    **Génération de l'api_key :** ESPHome génère automatiquement une clé lors de la création d'un projet. Ou utilisez : `esphome wizard`.


    Étape 4 : Compiler et téléverser

    Dans Home Assistant :

    1. Click "INSTALL" on the device card
    2. Select "Plug into this computer" (first time via USB)
    3. Attendez la fin du téléversement

    CLI :

    bash
    # First upload via USB
    esphome run dimmerlink.yaml
    
    # Subsequent updates — over the air
    esphome run dimmerlink.yaml --device dimmerlink.local
    


    Étape 5 : Vérification

    Dans les logs ESPHome :

    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!
    

    Dans Home Assistant :

    1. Settings → Devices & Services
    2. Find "ESPHome" → "DimmerLink"
    3. Une entité Light doit apparaître


    Étape 6 : Test

    Dans Home Assistant :

    1. Ouvrez la carte Light
    2. Déplacez le curseur de luminosité
    3. La lampe doit changer de luminosité

    Via Developer Tools :

    yaml
    service: light.turn_on
    target:
      entity_id: light.dimmerlink_light
    data:
      brightness_pct: 50
    



    What's Next?


    Étendre les fonctionnalités

    Après une configuration de base réussie, ajoutez :

    Fonctionnalité Section
    Sélection de la courbe de variation Entités prêtes → Select
    Surveillance de la fréquence AC Entités prêtes → Sensor
    Bouton physique Exemples → Avec bouton
    Plusieurs variateurs Exemples → Multi-device


    Pour la plupart des utilisateurs, nous recommandons l'exemple standard :

    03_examples.md → 7.2 Standard

    Comprend :

    • Éclairage avec transitions douces
    • Sélection de courbe (LINEAR / RMS / LOG)
    • Capteur de fréquence AC
    • Statut de disponibilité
    • Bouton de redémarrage


    Documents de référence

    Document Contenu
    Référence Lambda Tous les registres, codes de commande, exemples lambda
    Entités prêtes à l'emploi Blocs de code à copier pour chaque type d'entité
    Exemples complets 6 configurations prêtes à l'emploi



    Démarrage rapide (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 lignes — et le variateur est dans Home Assistant !




    Historique des versions

    Version Date Modifications
    1.0 2026-02 Version initiale

    ← - Intégration Lambda | Sommaire | Suivant : - Entités Lambda →