Перейти к содержимому

← - Lambda Reference | Содержание | Далее: FAQ и устранение неполадок →


Интеграция ESPHome — Home Assistant, устранение неполадок, дальнейшие шаги

Интеграция с Home Assistant, устранение неполадок и планы развития.




Содержание




5.1 Интеграция с Home Assistant


Автоматическое обнаружение

После прошивки ESP32 устройство автоматически появляется в Home Assistant.

Проверка:

  1. Настройки -> Устройства и службы
  2. Find the "New devices discovered" notification
  3. Или: ESPHome -> выберите устройство


Сущности в Home Assistant

При использовании стандартного примерасоздаются следующие сущности:

Сущность Тип Описание
light.dimmerlink_light Light Основной диммер
sensor.dimmerlink_ac_frequency Sensor Частота сети (50/60 Гц)
sensor.dimmerlink_level Sensor Текущий уровень (%)
select.dimmerlink_curve Select Кривая диммирования
binary_sensor.dimmerlink_ready Binary Sensor Статус готовности
button.dimmerlink_restart_esp Button Перезапуск ESP


Карточки Lovelace

Простая карточка

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

Расширенная карточка

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

Карточка с ползунком (custom:slider-entity-row)

yaml
type: entities
entities:
  - entity: light.dimmerlink_light
    type: custom:slider-entity-row
    name: Brightness
    toggle: true
Tip
Требуется установка [slider-entity-row](https://github.com/thomasloven/lovelace-slider-entity-row) через HACS.


Автоматизации

Включение по датчику движения

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

Отключение через 5 минут

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

Ночной режим (приглушённый свет)

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

Смена кривой в зависимости от типа нагрузки

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"


Скрипты

Плавное утреннее включение

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

Имитация присутствия

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


Сцены

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


Группы

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


Датчик мощности на основе шаблона

Если известна мощность лампы:

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


История и статистика

Добавьте в configuration.yaml:

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

history:
  include:
    entities:
      - light.dimmerlink_light



5.2 Устранение неполадок


Проблемы с I2C

Устройство не найдено (0x50)

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

Проверка:

Проверка Решение
DimmerLink в режиме I2C? Переключить через UART: 02 5B
Питание подключено? VCC -> 3.3V, GND -> GND
Провода подключены верно? SDA -> SDA, SCL -> SCL (без перекрещивания!)
Подтягивающие резисторы? Добавьте резисторы 4.7 кОм на SDA и SCL к 3.3V
Провода достаточно короткие? I2C работает на расстоянии до 30 см

Диагностика:

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

logger:
  level: DEBUG
  logs:
    i2c: DEBUG

Периодические ошибки I2C

Symptom: "I2C communication failed" from time to time

Решения:

  1. Снизьте частоту:

yaml i2c: frequency: 50kHz # Вместо 100kHz

  1. Добавьте задержки:

yaml output: - platform: template write_action: - delay: 1ms # Перед записью - lambda: |- // ... код

  1. Проверьте блок питания — нестабильное питание вызывает ошибки I2C


Проблемы с WiFi

ESP32 Doesn't Connect to WiFi

Проверка:

  • Правильные SSID и пароль в secrets.yaml
  • WiFi on 2.4 GHz (ESP32 doesn't support 5 GHz)
  • Роутер не блокирует новые устройства

Решение — резервная точка доступа:

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.

Частые отключения

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


Проблемы с Home Assistant

Device Doesn't Appear in HA

  1. Убедитесь, что дополнение ESPHome запущено
  2. Проверьте api key в конфигурации
  3. Перезапустите Home Assistant
  4. Добавьте вручную: Настройки -> Интеграции -> Добавить -> ESPHome

"Entity unavailable"

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

Проверка:

bash
ping dimmerlink.local


Проблемы с диммированием

Лампа мерцает

Причины и решения:

Причина Решение
Лампа не диммируемая Use lamps marked "dimmable"
Малая нагрузка Минимум 10–25 Вт для стабильной работы
Неверная кривая Попробуйте LOG для LED
Помехи в сети Добавьте RC-снаббер на выход диммера

Lamp Doesn't Turn Off Completely

DimmerLink полностью отключает TRIAC при уровне level=0. Если лампа всё равно светится:

  • Проблема в диммере или схеме подключения
  • Некоторые драйверы LED имеют ток утечки

Слишком узкий диапазон яркости

Попробуйте другие кривые:

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


Проблемы с ESPHome

Ошибка компиляции

«lambda function not allowed»

Проверьте отступы в YAML — lambda должна иметь правильный отступ:

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»

Убедитесь, что id: bus_a объявлен в секции i2c:.

OTA не работает

  1. Убедитесь, что ESP32 находится в той же сети
  2. Используйте IP вместо имени хоста:

bash esphome run dimmerlink.yaml --device 192.168.1.100


Диагностические команды

Проверка I2C из ESPHome

Добавьте диагностическую кнопку:

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

Логирование всех операций

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


Сброс к заводским настройкам

ESP32

  1. Очистить флеш-память:

bash esptool.py --port COM3 erase_flash

  1. Прошить заново

Отправьте команду 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


Таблица кодов ошибок

Код Название Причина Решение
0x00 OK
0xF9 ERR_SYNTAX Недопустимый регистр Проверьте адрес регистра
0xFC ERR_NOT_READY Не откалиброван или ошибка FLASH Подождите 2 сек после включения
0xFD ERR_INDEX Недопустимый индекс диммера Используйте 0
0xFE ERR_PARAM Недопустимый параметр level <= 100, curve <= 2



5.3 Дальнейшие шаги


Текущее состояние

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


Планы развития

Функция Статус Описание
Тепловая защита В разработке Мониторинг NTC, PWM-вентилятор
Плавный FADE В разработке Аппаратное затухание по команде
Многоканальный Запланировано До 4 каналов на одном модуле
Настройки EEPROM Запланировано Сохранение уровня и кривой

Интеграция ESPHome v2.0

Функция Статус Описание
Нативный компонент Доступно External Component
Мониторинг температуры В разработке Датчик температуры
Управление вентилятором В разработке Управление охлаждением
Мониторинг потребления энергии Запланировано Интеграция с ACS712/CT


Нативный компонент ESPHome

Доступен нативный внешний компонент ESPHome. Он обеспечивает чистую конфигурацию YAML без кода 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
Полная документация по конфигурации доступна в разделе [External Component Documentation](https://github.com/robotdyn-dimmer/DimmerLink/tree/main/components).


Расширенные проекты

Солнечный роутер

Использование DimmerLink для перенаправления избыточной солнечной энергии:

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

Многокомнатная система

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

# 4 dimmers on one ESP32

Умный будильник

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


Обратная связь

Нашли ошибку или есть предложение?

Хотите помочь с разработкой?

  • Тестирование новых версий
  • Документация и переводы
  • Примеры использования


Ресурс Ссылка
Документация 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



История изменений

Версия Дата Изменения
1.0 2026-02 Первый выпуск

← - Lambda Reference | Содержание | Далее: FAQ и устранение неполадок →