← - Vue d'ensemble Lambda | Sommaire | Suivant : - Exemples Lambda →
Intégration ESPHome — Entités prêtes à l'emploi
Blocs de code prêts à copier dans votre configuration ESPHome.
Tip
**Comment utiliser :** Copiez les blocs nécessaires dans votre fichier YAML. Toutes les entités sont indépendantes — vous pouvez utiliser n'importe quelle combinaison.
Sommaire
- Configuration de base
- 6.1 Light — Lumière à intensité variable
- 6.2 Output — Sortie pour Light
- 6.3 Sensor — Capteurs
- 6.4 Binary Sensor — Capteurs binaires
- 6.5 Text Sensor — Capteurs texte
- 6.6 Select — Sélection de courbe
- 6.7 Number — Contrôle numérique
- 6.8 Button — Boutons de commande
- 6.9 Globals — Variables globales
- 6.10 Initialisation au démarrage
Configuration de base
Partie requise pour toutes les entités.
Minimale
yaml
i2c:
sda: GPIO21
scl: GPIO22
scan: true
frequency: 100kHz
id: bus_a
Avec substitutions (recommandé)
yaml
substitutions:
device_name: "dimmerlink"
friendly_name: "DimmerLink"
dimmerlink_addr: "0x50"
i2c:
sda: GPIO21
scl: GPIO22
scan: true
frequency: 100kHz
id: bus_a
Tip
Les **substitutions** permettent de modifier facilement les paramètres à un seul endroit. Utilisez `${dimmerlink_addr}` dans les lambda au lieu de `0x50`.
6.1 Light — Lumière à intensité variable
Méthode principale d'intégration avec Home Assistant.
Minimale
yaml
light:
- platform: monochromatic
name: "Dimmer"
output: dimmerlink_output
Standard
yaml
light:
- platform: monochromatic
name: "${friendly_name} Light"
id: dimmer_light
output: dimmerlink_output
default_transition_length: 1s
gamma_correct: 1.0
Étendue
yaml
light:
- platform: monochromatic
name: "${friendly_name} Light"
id: dimmer_light
output: dimmerlink_output
# Transitions
default_transition_length: 1s
# No gamma correction (DimmerLink has its own curves)
gamma_correct: 1.0
# Restore state after reboot
restore_mode: RESTORE_DEFAULT_OFF
# Effects (optional)
effects:
- pulse:
name: "Pulse"
transition_length: 1s
update_interval: 2s
- strobe:
name: "Strobe"
colors:
- state: true
duration: 500ms
- state: false
duration: 500ms
Paramètres :
| Paramètre | Description | Par défaut |
|---|---|---|
output |
ID du composant de sortie | Requis |
default_transition_length |
Durée de transition douce | 1s |
gamma_correct |
Correction gamma | 2.8 (définir à 1.0) |
restore_mode |
Restauration au démarrage | RESTORE_DEFAULT_OFF |
Important
**gamma_correct: 1.0** — important ! DimmerLink possède ses propres courbes de variation. La correction gamma d'ESPHome interférerait.
6.2 Output — Sortie pour Light
Lien entre Light et I2C.
Minimale
yaml
output:
- platform: template
id: dimmerlink_output
type: float
write_action:
- lambda: |-
uint8_t level = (uint8_t)(state * 100.0f);
if (level > 100) level = 100;
uint8_t data[2] = {0x10, level};
id(bus_a).write(0x50, data, 2, true);
Standard (avec journalisation)
yaml
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
uint8_t data[2] = {0x10, level};
auto err = id(bus_a).write(0x50, data, 2, true);
if (err == i2c::ERROR_OK) {
ESP_LOGD("dimmerlink", "Level: %d%%", level);
} else {
ESP_LOGW("dimmerlink", "Write error: %d", err);
}
Avec substitutions
yaml
output:
- platform: template
id: dimmerlink_output
type: float
write_action:
- lambda: |-
uint8_t level = (uint8_t)(state * 100.0f);
if (level > 100) level = 100;
uint8_t data[2] = {0x10, level};
id(bus_a).write(${dimmerlink_addr}, data, 2, true);
ESP_LOGD("dimmerlink", "Level: %d%%", level);
Multi-appareils (plusieurs variateurs)
yaml
substitutions:
dimmer1_addr: "0x50"
dimmer2_addr: "0x51"
output:
- platform: template
id: dimmer1_output
type: float
write_action:
- lambda: |-
uint8_t level = (uint8_t)(state * 100.0f);
if (level > 100) level = 100;
uint8_t data[2] = {0x10, level};
id(bus_a).write(${dimmer1_addr}, data, 2, true);
- platform: template
id: dimmer2_output
type: float
write_action:
- lambda: |-
uint8_t level = (uint8_t)(state * 100.0f);
if (level > 100) level = 100;
uint8_t data[2] = {0x10, level};
id(bus_a).write(${dimmer2_addr}, data, 2, true);
light:
- platform: monochromatic
name: "Dimmer 1"
output: dimmer1_output
- platform: monochromatic
name: "Dimmer 2"
output: dimmer2_output
6.3 Sensor — Capteurs
Valeurs numériques pour la surveillance.
Fréquence AC
yaml
sensor:
- platform: template
name: "${friendly_name} AC Frequency"
id: ac_frequency
icon: "mdi:sine-wave"
unit_of_measurement: "Hz"
accuracy_decimals: 0
device_class: frequency
state_class: measurement
update_interval: 60s
lambda: |-
uint8_t reg = 0x20;
uint8_t freq = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &freq, 1) == i2c::ERROR_OK) {
if (freq == 50 || freq == 60) {
return (float)freq;
}
}
}
return {};
Niveau du variateur — Niveau actuel (relecture)
yaml
sensor:
- platform: template
name: "${friendly_name} Level"
id: dimmer_level
icon: "mdi:brightness-percent"
unit_of_measurement: "%"
accuracy_decimals: 0
state_class: measurement
update_interval: 5s
lambda: |-
uint8_t reg = 0x10;
uint8_t level = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &level, 1) == i2c::ERROR_OK) {
return (float)level;
}
}
return {};
Période AC — Période de demi-onde
yaml
sensor:
- platform: template
name: "${friendly_name} AC Period"
id: ac_period
icon: "mdi:timer-outline"
unit_of_measurement: "μs"
accuracy_decimals: 0
entity_category: diagnostic
update_interval: 60s
lambda: |-
uint8_t reg = 0x21;
uint8_t buffer[2] = {0, 0};
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, buffer, 2) == i2c::ERROR_OK) {
uint16_t period = (buffer[1] << 8) | buffer[0];
return (float)period;
}
}
return {};
Version du firmware
yaml
sensor:
- platform: template
name: "${friendly_name} Firmware"
id: firmware_version
icon: "mdi:chip"
accuracy_decimals: 0
entity_category: diagnostic
update_interval: never
lambda: |-
uint8_t reg = 0x03;
uint8_t version = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &version, 1) == i2c::ERROR_OK) {
return (float)version;
}
}
return {};
Code d'erreur
yaml
sensor:
- platform: template
name: "${friendly_name} Error Code"
id: error_code
icon: "mdi:alert-octagon"
accuracy_decimals: 0
entity_category: diagnostic
update_interval: 10s
lambda: |-
uint8_t reg = 0x02;
uint8_t error = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &error, 1) == i2c::ERROR_OK) {
return (float)error;
}
}
return {};
Valeur de courbe — Courbe actuelle (numérique)
yaml
sensor:
- platform: template
name: "${friendly_name} Curve Value"
id: curve_value
icon: "mdi:chart-bell-curve"
accuracy_decimals: 0
entity_category: diagnostic
update_interval: 60s
lambda: |-
uint8_t reg = 0x11;
uint8_t curve = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &curve, 1) == i2c::ERROR_OK) {
return (float)curve;
}
}
return {};
Tous les capteurs (copier le bloc entier)
yaml
sensor:
# AC frequency
- platform: template
name: "${friendly_name} AC Frequency"
id: ac_frequency
icon: "mdi:sine-wave"
unit_of_measurement: "Hz"
accuracy_decimals: 0
device_class: frequency
state_class: measurement
update_interval: 60s
lambda: |-
uint8_t reg = 0x20;
uint8_t freq = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &freq, 1) == i2c::ERROR_OK) {
if (freq == 50 || freq == 60) return (float)freq;
}
}
return {};
# Current level
- platform: template
name: "${friendly_name} Level"
id: dimmer_level
icon: "mdi:brightness-percent"
unit_of_measurement: "%"
accuracy_decimals: 0
state_class: measurement
update_interval: 5s
lambda: |-
uint8_t reg = 0x10;
uint8_t level = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &level, 1) == i2c::ERROR_OK) {
return (float)level;
}
}
return {};
# Firmware version
- platform: template
name: "${friendly_name} Firmware"
id: firmware_version
icon: "mdi:chip"
accuracy_decimals: 0
entity_category: diagnostic
update_interval: never
lambda: |-
uint8_t reg = 0x03;
uint8_t version = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &version, 1) == i2c::ERROR_OK) {
return (float)version;
}
}
return {};
# WiFi signal (for diagnostics)
- platform: wifi_signal
name: "${friendly_name} WiFi Signal"
update_interval: 60s
6.4 Binary Sensor — Capteurs binaires
États marche/arrêt.
Ready — Appareil prêt
yaml
binary_sensor:
- platform: template
name: "${friendly_name} Ready"
id: dimmerlink_ready
icon: "mdi:check-circle"
device_class: running
entity_category: diagnostic
lambda: |-
uint8_t reg = 0x00;
uint8_t status = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &status, 1) == i2c::ERROR_OK) {
return (status & 0x01) != 0;
}
}
return {};
Indicateur d'erreur
yaml
binary_sensor:
- platform: template
name: "${friendly_name} Error"
id: dimmerlink_error
icon: "mdi:alert-circle"
device_class: problem
entity_category: diagnostic
lambda: |-
uint8_t reg = 0x00;
uint8_t status = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &status, 1) == i2c::ERROR_OK) {
return (status & 0x02) != 0;
}
}
return {};
Calibrated — Calibrage terminé
yaml
binary_sensor:
- platform: template
name: "${friendly_name} Calibrated"
id: dimmerlink_calibrated
icon: "mdi:tune"
entity_category: diagnostic
lambda: |-
uint8_t reg = 0x23;
uint8_t status = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &status, 1) == i2c::ERROR_OK) {
return status == 1;
}
}
return {};
Tous les capteurs binaires
yaml
binary_sensor:
# Device ready
- platform: template
name: "${friendly_name} Ready"
id: dimmerlink_ready
icon: "mdi:check-circle"
device_class: running
entity_category: diagnostic
lambda: |-
uint8_t reg = 0x00;
uint8_t status = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &status, 1) == i2c::ERROR_OK) {
return (status & 0x01) != 0;
}
}
return {};
# Error flag
- platform: template
name: "${friendly_name} Error"
id: dimmerlink_error
icon: "mdi:alert-circle"
device_class: problem
entity_category: diagnostic
lambda: |-
uint8_t reg = 0x00;
uint8_t status = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &status, 1) == i2c::ERROR_OK) {
return (status & 0x02) != 0;
}
}
return {};
# Calibration complete
- platform: template
name: "${friendly_name} Calibrated"
id: dimmerlink_calibrated
icon: "mdi:tune"
entity_category: diagnostic
lambda: |-
uint8_t reg = 0x23;
uint8_t status = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &status, 1) == i2c::ERROR_OK) {
return status == 1;
}
}
return {};
6.5 Text Sensor — Capteurs texte
Valeurs textuelles pour l'affichage.
Last Error — Description de l'erreur
yaml
text_sensor:
- platform: template
name: "${friendly_name} Last Error"
id: last_error_text
icon: "mdi:alert"
entity_category: diagnostic
update_interval: 10s
lambda: |-
uint8_t reg = 0x02;
uint8_t error = 0;
if (id(bus_a).write(0x50, ®, 1, false) != i2c::ERROR_OK) {
return {"I2C Error"};
}
if (id(bus_a).read(0x50, &error, 1) != i2c::ERROR_OK) {
return {"Read Error"};
}
switch (error) {
case 0x00: return {"OK"};
case 0xF9: return {"ERR_SYNTAX"};
case 0xFC: return {"ERR_NOT_READY"};
case 0xFD: return {"ERR_INDEX"};
case 0xFE: return {"ERR_PARAM"};
default: return {"UNKNOWN"};
}
**Codes d'erreur :**
- `0x00` OK — Succès
- `0xF9` ERR_SYNTAX — Adresse de registre invalide
- `0xFC` ERR_NOT_READY — Appareil non prêt (non calibré ou erreur FLASH)
- `0xFD` ERR_INDEX — Index de variateur invalide
- `0xFE` ERR_PARAM — Paramètre invalide (level>100, curve>2)
Courbe actuelle (texte)
yaml
text_sensor:
- platform: template
name: "${friendly_name} Current Curve"
id: current_curve_text
icon: "mdi:chart-bell-curve"
entity_category: diagnostic
update_interval: 60s
lambda: |-
uint8_t reg = 0x11;
uint8_t curve = 0;
if (id(bus_a).write(0x50, ®, 1, false) != i2c::ERROR_OK) {
return {"I2C Error"};
}
if (id(bus_a).read(0x50, &curve, 1) != i2c::ERROR_OK) {
return {"Read Error"};
}
switch (curve) {
case 0: return {"LINEAR"};
case 1: return {"RMS"};
case 2: return {"LOG"};
default: return {"UNKNOWN"};
}
Informations sur l'appareil
yaml
text_sensor:
- platform: template
name: "${friendly_name} Info"
id: device_info
icon: "mdi:information"
entity_category: diagnostic
update_interval: never
lambda: |-
uint8_t reg_ver = 0x03;
uint8_t reg_freq = 0x20;
uint8_t version = 0;
uint8_t freq = 0;
id(bus_a).write(0x50, ®_ver, 1, false);
id(bus_a).read(0x50, &version, 1);
id(bus_a).write(0x50, ®_freq, 1, false);
id(bus_a).read(0x50, &freq, 1);
char buf[32];
snprintf(buf, sizeof(buf), "FW:%d, %dHz", version, freq);
return {buf};
Tous les capteurs texte
yaml
text_sensor:
# Error description
- platform: template
name: "${friendly_name} Last Error"
id: last_error_text
icon: "mdi:alert"
entity_category: diagnostic
update_interval: 10s
lambda: |-
uint8_t reg = 0x02;
uint8_t error = 0;
if (id(bus_a).write(0x50, ®, 1, false) != i2c::ERROR_OK) return {"I2C Error"};
if (id(bus_a).read(0x50, &error, 1) != i2c::ERROR_OK) return {"Read Error"};
switch (error) {
case 0x00: return {"OK"};
case 0xF9: return {"ERR_SYNTAX"};
case 0xFC: return {"ERR_NOT_READY"};
case 0xFD: return {"ERR_INDEX"};
case 0xFE: return {"ERR_PARAM"};
default: return {"UNKNOWN"};
}
# Current curve
- platform: template
name: "${friendly_name} Curve"
id: current_curve_text
icon: "mdi:chart-bell-curve"
entity_category: diagnostic
update_interval: 60s
lambda: |-
uint8_t reg = 0x11;
uint8_t curve = 0;
if (id(bus_a).write(0x50, ®, 1, false) != i2c::ERROR_OK) return {"I2C Error"};
if (id(bus_a).read(0x50, &curve, 1) != i2c::ERROR_OK) return {"Read Error"};
switch (curve) {
case 0: return {"LINEAR"};
case 1: return {"RMS"};
case 2: return {"LOG"};
default: return {"UNKNOWN"};
}
# ESPHome version
- platform: version
name: "${friendly_name} ESPHome Version"
6.6 Select — Sélection de courbe
Liste déroulante pour la sélection de la courbe de variation.
Standard
yaml
select:
- platform: template
name: "${friendly_name} Curve"
id: dimming_curve
icon: "mdi:chart-bell-curve"
options:
- "LINEAR"
- "RMS"
- "LOG"
initial_option: "LINEAR"
optimistic: true
set_action:
- lambda: |-
uint8_t curve = 0;
if (x == "RMS") curve = 1;
else if (x == "LOG") curve = 2;
uint8_t data[2] = {0x11, curve};
id(bus_a).write(0x50, data, 2, true);
ESP_LOGI("dimmerlink", "Curve: %s", x.c_str());
Avec lecture de la valeur actuelle au démarrage
yaml
select:
- platform: template
name: "${friendly_name} Curve"
id: dimming_curve
icon: "mdi:chart-bell-curve"
options:
- "LINEAR"
- "RMS"
- "LOG"
initial_option: "LINEAR"
optimistic: true
restore_value: true
set_action:
- lambda: |-
uint8_t curve = 0;
if (x == "RMS") curve = 1;
else if (x == "LOG") curve = 2;
uint8_t data[2] = {0x11, curve};
id(bus_a).write(0x50, data, 2, true);
ESP_LOGI("dimmerlink", "Curve: %s", x.c_str());
# Sync on boot
esphome:
on_boot:
priority: -100
then:
- delay: 2s
- lambda: |-
uint8_t reg = 0x11;
uint8_t curve = 0;
if (id(bus_a).write(0x50, ®, 1, false) == i2c::ERROR_OK) {
if (id(bus_a).read(0x50, &curve, 1) == i2c::ERROR_OK) {
auto call = id(dimming_curve).make_call();
switch (curve) {
case 0: call.set_option("LINEAR"); break;
case 1: call.set_option("RMS"); break;
case 2: call.set_option("LOG"); break;
}
call.perform();
}
}
6.7 Number — Contrôle numérique
Contrôle direct du niveau sans entité Light.
Level — Niveau de luminosité
yaml
number:
- platform: template
name: "${friendly_name} Level"
id: dimmer_level_number
icon: "mdi:brightness-percent"
unit_of_measurement: "%"
min_value: 0
max_value: 100
step: 1
mode: slider
optimistic: true
set_action:
- lambda: |-
uint8_t level = (uint8_t)x;
uint8_t data[2] = {0x10, level};
id(bus_a).write(0x50, data, 2, true);
ESP_LOGI("dimmerlink", "Level: %d%%", level);
I2C Address — Changement d'adresse
yaml
number:
- platform: template
name: "${friendly_name} I2C Address"
id: i2c_address_number
icon: "mdi:identifier"
entity_category: config
min_value: 8 # 0x08
max_value: 119 # 0x77
step: 1
mode: box
optimistic: true
set_action:
- lambda: |-
uint8_t new_addr = (uint8_t)x;
if (new_addr < 0x08 || new_addr > 0x77) {
ESP_LOGE("dimmerlink", "Invalid address: 0x%02X", new_addr);
return;
}
uint8_t data[2] = {0x30, new_addr};
id(bus_a).write(0x50, data, 2, true);
ESP_LOGW("dimmerlink", "Address changed to 0x%02X!", new_addr);
ESP_LOGW("dimmerlink", "Update config and reboot!");
Warning
**Adresse I2C :** Après avoir modifié l'adresse, vous devez mettre à jour `${dimmerlink_addr}` dans la configuration et reflasher l'ESP32.
6.8 Button — Boutons de commande
Actions lors de l'appui.
Reset — Réinitialisation logicielle
yaml
button:
- platform: template
name: "${friendly_name} Reset"
id: dimmer_reset
icon: "mdi:restart"
entity_category: config
on_press:
- lambda: |-
uint8_t data[2] = {0x01, 0x01};
id(bus_a).write(0x50, data, 2, true);
ESP_LOGW("dimmerlink", "Reset command sent");
- delay: 3s
- logger.log:
level: INFO
format: "DimmerLink should be online"
Recalibrage
yaml
button:
- platform: template
name: "${friendly_name} Recalibrate"
id: dimmer_recalibrate
icon: "mdi:refresh"
entity_category: config
on_press:
- lambda: |-
uint8_t data[2] = {0x01, 0x02};
id(bus_a).write(0x50, data, 2, true);
ESP_LOGI("dimmerlink", "Recalibration started");
- delay: 500ms
- component.update: ac_frequency
Redémarrage ESP32
yaml
button:
- platform: restart
name: "${friendly_name} ESP Restart"
icon: "mdi:restart-alert"
entity_category: config
Identify — Identification (clignotement)
yaml
button:
- platform: template
name: "${friendly_name} Identify"
id: dimmer_identify
icon: "mdi:lightbulb-alert"
on_press:
- repeat:
count: 3
then:
- lambda: |-
uint8_t on[2] = {0x10, 100};
id(bus_a).write(0x50, on, 2, true);
- delay: 300ms
- lambda: |-
uint8_t off[2] = {0x10, 0};
id(bus_a).write(0x50, off, 2, true);
- delay: 300ms
Tous les boutons
yaml
button:
# Reset DimmerLink
- platform: template
name: "${friendly_name} Reset"
id: dimmer_reset
icon: "mdi:restart"
entity_category: config
on_press:
- lambda: |-
uint8_t data[2] = {0x01, 0x01};
id(bus_a).write(0x50, data, 2, true);
- delay: 3s
# Recalibrate
- platform: template
name: "${friendly_name} Recalibrate"
id: dimmer_recalibrate
icon: "mdi:refresh"
entity_category: config
on_press:
- lambda: |-
uint8_t data[2] = {0x01, 0x02};
id(bus_a).write(0x50, data, 2, true);
- delay: 500ms
# ESP32 restart
- platform: restart
name: "${friendly_name} ESP Restart"
entity_category: config
# Identify (blink)
- platform: template
name: "${friendly_name} Identify"
id: dimmer_identify
icon: "mdi:lightbulb-alert"
on_press:
- repeat:
count: 3
then:
- lambda: |-
uint8_t on[2] = {0x10, 100};
id(bus_a).write(0x50, on, 2, true);
- delay: 300ms
- lambda: |-
uint8_t off[2] = {0x10, 0};
id(bus_a).write(0x50, off, 2, true);
- delay: 300ms
6.9 Globals — Variables globales
Pour stocker l'état entre les appels lambda.
yaml
globals:
# Current level (cache)
- id: cached_level
type: uint8_t
initial_value: '0'
restore_value: true
# Current curve
- id: cached_curve
type: uint8_t
initial_value: '0'
restore_value: true
# Initialization flag
- id: initialized
type: bool
initial_value: 'false'
Utilisation :
yaml
output:
- platform: template
id: dimmerlink_output
type: float
write_action:
- lambda: |-
uint8_t level = (uint8_t)(state * 100.0f);
if (level > 100) level = 100;
// Only send if value changed
if (level != id(cached_level)) {
uint8_t data[2] = {0x10, level};
id(bus_a).write(0x50, data, 2, true);
id(cached_level) = level;
}
6.10 Initialisation au démarrage
Lecture de l'état DimmerLink au démarrage de l'ESP32.
Basique
yaml
esphome:
on_boot:
priority: -100
then:
- delay: 2s # Wait for DimmerLink calibration
- lambda: |-
ESP_LOGI("dimmerlink", "Reading initial state...");
// Check ready status
uint8_t reg_status = 0x00;
uint8_t status = 0;
id(bus_a).write(0x50, ®_status, 1, false);
id(bus_a).read(0x50, &status, 1);
if (status & 0x01) {
ESP_LOGI("dimmerlink", "Device ready");
} else {
ESP_LOGW("dimmerlink", "Device not ready!");
}
Complète (avec synchronisation de toutes les entités)
yaml
esphome:
on_boot:
priority: -100
then:
- delay: 2s
- lambda: |-
ESP_LOGI("dimmerlink", "=== Initializing DimmerLink ===");
// 1. Check ready status
uint8_t reg = 0x00;
uint8_t status = 0;
id(bus_a).write(0x50, ®, 1, false);
id(bus_a).read(0x50, &status, 1);
if (!(status & 0x01)) {
ESP_LOGW("dimmerlink", "Device not ready, waiting...");
return;
}
// 2. Read version
reg = 0x03;
uint8_t version = 0;
id(bus_a).write(0x50, ®, 1, false);
id(bus_a).read(0x50, &version, 1);
ESP_LOGI("dimmerlink", "Firmware: %d", version);
// 3. Read frequency
reg = 0x20;
uint8_t freq = 0;
id(bus_a).write(0x50, ®, 1, false);
id(bus_a).read(0x50, &freq, 1);
ESP_LOGI("dimmerlink", "AC Frequency: %d Hz", freq);
// 4. Read current curve and sync Select
reg = 0x11;
uint8_t curve = 0;
id(bus_a).write(0x50, ®, 1, false);
id(bus_a).read(0x50, &curve, 1);
auto call = id(dimming_curve).make_call();
switch (curve) {
case 0: call.set_option("LINEAR"); break;
case 1: call.set_option("RMS"); break;
case 2: call.set_option("LOG"); break;
}
call.perform();
ESP_LOGI("dimmerlink", "Curve: %d", curve);
// 5. Read current level
reg = 0x10;
uint8_t level = 0;
id(bus_a).write(0x50, ®, 1, false);
id(bus_a).read(0x50, &level, 1);
ESP_LOGI("dimmerlink", "Level: %d%%", level);
ESP_LOGI("dimmerlink", "=== Initialization complete ===");
# Update all sensors
- component.update: ac_frequency
- component.update: firmware_version
Tableau entity_category
| Catégorie | Affichage dans HA | Quand utiliser |
|---|---|---|
| (vide) | Interface principale | Light, capteurs principaux |
diagnostic |
Diagnostic | Version, statut, erreurs |
config |
Configuration | Boutons, paramètres |
Démarrage rapide
Configuration minimale fonctionnelle — copiez et ça fonctionne :
yaml
substitutions:
device_name: "dimmerlink"
friendly_name: "DimmerLink"
esphome:
name: ${device_name}
esp32:
board: esp32dev
logger:
api:
ota:
wifi:
ssid: "YOUR_WIFI"
password: "YOUR_PASSWORD"
i2c:
sda: GPIO21
scl: GPIO22
scan: true
id: bus_a
output:
- platform: template
id: dimmerlink_output
type: float
write_action:
- lambda: |-
uint8_t level = (uint8_t)(state * 100.0f);
if (level > 100) level = 100;
uint8_t data[2] = {0x10, level};
id(bus_a).write(0x50, data, 2, true);
light:
- platform: monochromatic
name: "${friendly_name}"
output: dimmerlink_output
default_transition_length: 1s
gamma_correct: 1.0
Historique des versions
| Version | Date | Modifications |
|---|---|---|
| 1.0 | 2026-02 | Version initiale |
← - Vue d'ensemble Lambda | Sommaire | Suivant : - Exemples Lambda →