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

AC-диммер с Home Assistant: руководство по ESPHome и DimmerLink

Два способа управления AC-диммером из Home Assistant: стандартная платформа ESPHome ac_dimmer (быстрая настройка, но рискованно на ESP32+WiFi) и компонент DimmerLink ESPHome (рекомендуется для надёжности).

Коротко: Существует два пути интеграции. Путь A (стандартная платформа ESPHome ac_dimmer) прост, но вызывает конфликты ISR/WiFi на двухъядерном ESP32. Путь B (компонент DimmerLink ESPHome) выносит синхронизацию TRIAC на выделенный контроллер — без ISR, без конфликтов, работает на любой платформе, включая ESP32-C3, Raspberry Pi и HA OS.



Какой путь выбрать?

Критерий Путь A: стандартный ESPHome Путь B: DimmerLink
Плата ESP8266 (безопасно), ESP32 (рискованно) Любой ESP32, RPi, любой SBC
Сложность YAML ~10 строк ~30 строк
Стабильность WiFi Возможно мерцание при нагрузке WiFi Нет конфликта (только I2C)
Одноядерный ESP32 Не поддерживается Поддерживается
Дополнительное оборудование Нет Модуль DimmerLink
Качество диммирования Хорошее Отличное (аппаратная синхронизация)

⚠️ Почему ESP32 рискован с путём A: стандартная платформа ac_dimmer использует программный ISR на ESP32. При активном WiFi или HA API синхронизация ISR нарушается, что приводит к видимому мерцанию или зависанию диммера. Используйте Путь B, чтобы полностью исключить ISR.

Выбирайте Путь A, если используете ESP8266 и хотите максимально простую настройку.

Выбирайте Путь B, если используете ESP32 (любой вариант), Raspberry Pi, HA OS на x86 или нужно надёжное диммирование при активном WiFi/MQTT.




Путь A: Стандартная платформа ESPHome ac_dimmer


Схема подключения (ESP8266 / ESP32)

text
Модуль диммера   →   ESP8266 (NodeMCU)
──────────────────────────────────────
ZC-OUT           →   D1 (GPIO5)
DIM              →   D2 (GPIO4)
VCC              →   3.3V
GND              →   GND

Для ESP32 подойдёт любой GPIO для ZC и DIM.


YAML для ESPHome

yaml
esphome:
  name: ac-dimmer
  platform: ESP8266      # или ESP32
  board: nodemcuv2       # укажите вашу плату
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
api:
  encryption:
    key: !secret api_key
ota:
  password: !secret ota_password
output:
  - platform: ac_dimmer
    id: dimmer_out
    gate_pin: GPIO4
    zero_cross_pin:
      number: GPIO5
      mode: INPUT
      inverted: yes
    method: leading_pulse  # по умолчанию; 'trailing' для MOSFET
    min_power: 0.01
light:
  - platform: monochromatic
    output: dimmer_out
    name: "AC Dimmer"
    gamma_correct: 0       # 0 = линейная, 2.8 = воспринимаемая для LED


Методы диммирования

Метод Значение method: Применение
Передний импульс (по умолчанию) leading_pulse Модули TRIAC
Передний (удержание затвора) leading TRIAC — альтернативный
Задний trailing Только модули MOSFET


Известная проблема: ESP32 + WiFi

⚠️ Стандартная платформа ac_dimmer использует программный ISR на ESP32. При активном WiFi (особенно с HA API или OTA) ISR может задерживаться, вызывая видимое мерцание или зависание диммера.

This is the same root cause as crashes with the RBDdimmer C++ library. See: ESP32 + AC Dimmer: IRAM_ATTR Causes and Fix

Решение: Используйте Путь B (DimmerLink) для установок HA на базе ESP32.




Путь B: Компонент DimmerLink ESPHome

DimmerLink — выделенный контроллер с процессором Cortex-M0+, который выполняет детектирование перехода через ноль и управление затвором TRIAC внутри себя. ESP32 отправляет значение яркости (0–100 %) по I2C — ISR на MCU не запускается.


Схема подключения

text
DimmerLink   →   ESP32
─────────────────────────
VCC          →   3.3V
GND          →   GND
SDA          →   GPIO21
SCL          →   GPIO22

DimmerLink → AC load wiring is identical to the standard module. See: Hardware Connection Guide


Установка компонента ESPHome

Добавьте внешний компонент в YAML:

yaml
external_components:
  - source:
      type: git
      url: https://github.com/robotdyn-dimmer/DimmerLink
      ref: main
    components: [dimmerlink]

Component source and docs: github.com/robotdyn-dimmer/DimmerLink/tree/main/components


Минимальный YAML (~30 строк)

yaml
esphome:
  name: dimmerlink-ha
  platform: ESP32
  board: esp32dev
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
api:
  encryption:
    key: !secret api_key
ota:
  password: !secret ota_password
external_components:
  - source:
      type: git
      url: https://github.com/robotdyn-dimmer/DimmerLink
      ref: main
    components: [dimmerlink]
i2c:
  sda: GPIO21
  scl: GPIO22
  frequency: 100kHz
light:
  - platform: dimmerlink
    name: "Dimmer"
    address: 0x50

Прошейте, добавьте в HA — готово.


Стандартный YAML — с датчиками и выбором кривой

yaml
# (external_components + i2c как выше)
light:
  - platform: dimmerlink
    name: "Dimmer"
    address: 0x50
sensor:
  - platform: dimmerlink
    address: 0x50
    frequency:
      name: "AC Frequency"
    brightness:
      name: "Dimmer Brightness"
select:
  - platform: dimmerlink
    address: 0x50
    dimming_curve:
      name: "Dimming Curve"
      # Варианты: LINEAR, RMS, LOGARITHMIC
binary_sensor:
  - platform: dimmerlink
    address: 0x50
    status:
      name: "Dimmer Status"


Кривые диммирования

Кривая Лучше для
LINEAR Нагревательные элементы, резистивные нагрузки
RMS Лампы накаливания и галогенные
LOGARITHMIC Диммируемые LED-лампы



Вид устройства в Home Assistant

После прошивки и добавления ESPHome-устройства в HA:

  • Путь A создаёт одну сущность light с ползунком яркости (0–255 с маппингом на 0–100 %)
  • Путь B создаёт сущность light плюс опциональные сущности датчиков (частота AC, яркость %, версия прошивки) и селектор кривой диммирования — всё отображается на одной карточке устройства HA



Многоканальное управление с DimmerLink

Каждый модуль DimmerLink управляет одной AC-нагрузкой по одному I2C-адресу (задаётся джамперами на плате). Для управления двумя нагрузками подключите два отдельных модуля DimmerLink на одну шину I2C с разными адресами:

yaml
light:
  - platform: dimmerlink
    name: "Channel 1"
    address: 0x50
  - platform: dimmerlink
    name: "Channel 2"
    address: 0x51



Связанные статьи



Остались вопросы?

Ask on forum.rbdimmer.com or open a GitHub Issue.

Поделиться этой записью
Войти оставить комментарий