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

ESPHome YAML для AC TRIAC-диммера: стандартный и DimmerLink

Готовые конфигурации ESPHome YAML для AC TRIAC-диммеров — от минимальной настройки в 10 строк до полной интеграции DimmerLink с датчиками, выбором кривой и функциями lambda.

Коротко: Существует два метода интеграции с ESPHome. Стандартная платформа ac_dimmer работает «из коробки», но имеет конфликты ISR/WiFi на ESP32. Внешний компонент DimmerLink использует аппаратный контроллер для надёжного диммирования без мерцания на любой плате.



Сравнение методов

Возможность Стандартный ac_dimmer Компонент DimmerLink
ESP8266 ✅ Стабильно ✅ Стабильно
ESP32 (двухъядерный) ⚠️ Возможно мерцание ✅ Стабильно
ESP32-S2/C3/H2/C6 ❌ Не поддерживается ✅ Поддерживается
— (без ISR) ❌ Не поддерживается ✅ Поддерживается
Дополнительное оборудование Нет Модуль DimmerLink
Строк YAML (минимум) ~10 ~30
Встроенные датчики Нет Частота, яркость
Выбор кривой диммирования Нет LINEAR / RMS / LOG



Метод 1: Стандартная платформа ESPHome ac_dimmer

Это встроенная платформа ESPHome. Внешние компоненты не нужны.


Минимальная конфигурация (ESP8266)

yaml
esphome:
  name: dimmer-esp8266
  platform: ESP8266
  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          # пин DIM
    zero_cross_pin:
      number: GPIO5          # пин ZC
      mode: INPUT
      inverted: yes
    method: leading_pulse    # по умолчанию для TRIAC
light:
  - platform: monochromatic
    output: dimmer_out
    name: "Dimmer"


Полная конфигурация — с гаммой и минимальной мощностью

yaml
output:
  - platform: ac_dimmer
    id: dimmer_out
    gate_pin: GPIO4
    zero_cross_pin:
      number: GPIO5
      mode: INPUT
      inverted: yes
    method: leading_pulse
    min_power: 0.01          # минимальная скважность (1 %) — убирает мерцание на 0
light:
  - platform: monochromatic
    output: dimmer_out
    name: "Dimmer"
    gamma_correct: 0         # 0 = линейная; 2.8 = кривая восприятия человека
    default_transition_length: 500ms


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

yaml
method: leading_pulse   # Короткий импульс на затвор — стандартный TRIAC (по умолчанию)
method: leading         # Затвор удерживается до ZC — альтернативный TRIAC
method: trailing        # Затвор сбрасывается в конце — только для MOSFET


Предупреждение для ESP32

⚠️ Стандартная платформа ac_dimmer имеет две отдельных проблемы на оборудовании ESP32:

  • ESP32, ESP32-S3 — возможно мерцание; синхронизация ISR нарушается WiFi
  • ESP32-S2, ESP32-C3, ESP32-H2, ESP32-C6 — не поддерживаются вовсе

Решение: Используйте Метод 2 (DimmerLink) для любой конфигурации на базе ESP32.

See: ESP32 + AC Dimmer: IRAM_ATTR Causes and Fix




Метод 2: Внешний компонент DimmerLink

DimmerLink выносит детектирование перехода через ноль и синхронизацию TRIAC на выделенный контроллер Cortex-M0+. ESPHome отправляет яркость по I2C (регистр 0x10). На MCU не запускается ISR.

Docs: rbdimmer.com/docs/dimmerlink-esphome

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


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

text
DimmerLink   →   ESP32 (или любой MCU)
──────────────────────────────────
VCC          →   3.3V
GND          →   GND
SDA          →   GPIO21
SCL          →   GPIO22


Минимальная конфигурация (~30 строк)

yaml
esphome:
  name: dimmerlink
  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


Стандартная конфигурация — с датчиками и выбором кривой

yaml
# (блоки external_components + i2c как выше)
light:
  - platform: dimmerlink
    name: "Dimmer"
    address: 0x50
sensor:
  - platform: dimmerlink
    address: 0x50
    frequency:
      name: "AC Frequency"
      unit_of_measurement: "Hz"
    brightness:
      name: "Dimmer Level"
      unit_of_measurement: "%"
select:
  - platform: dimmerlink
    address: 0x50
    dimming_curve:
      name: "Dimming Curve"
      # Варианты в выпадающем списке HA: LINEAR, RMS, LOGARITHMIC
binary_sensor:
  - platform: dimmerlink
    address: 0x50
    status:
      name: "Dimmer Online"
button:
  - platform: dimmerlink
    address: 0x50
    reset:
      name: "Dimmer Reset"
    recalibrate:
      name: "Dimmer Recalibrate"


Расширенная конфигурация — все сущности

yaml
# Полная интеграция DimmerLink с диагностикой
sensor:
  - platform: dimmerlink
    address: 0x50
    frequency:
      name: "AC Frequency"
    brightness:
      name: "Dimmer Level"
text_sensor:
  - platform: dimmerlink
    address: 0x50
    firmware_version:
      name: "DimmerLink Firmware"
number:
  - platform: dimmerlink
    address: 0x50
    min_brightness:
      name: "Min Brightness"
      min_value: 0
      max_value: 20
select:
  - platform: dimmerlink
    address: 0x50
    dimming_curve:
      name: "Dimming Curve"
binary_sensor:
  - platform: dimmerlink
    address: 0x50
    status:
      name: "Dimmer OK"
    calibration_mode:
      name: "Calibration Active"
button:
  - platform: dimmerlink
    address: 0x50
    reset:
      name: "Reset"
    recalibrate:
      name: "Recalibrate"


Конфигурация нескольких устройств

Несколько модулей DimmerLink на одной шине I2C (разные адреса):

yaml
light:
  - platform: dimmerlink
    name: "Kitchen"
    address: 0x50
  - platform: dimmerlink
    name: "Bedroom"
    address: 0x51



Интеграция через lambda (продвинутый уровень)

Для пользовательской логики — например, установки яркости с физической кнопки или по показаниям датчика — используйте функции lambda ESPHome с прямым доступом к регистрам I2C.

Docs: rbdimmer.com/docs/dimmerlink-esphome/lambda-integration


Карта регистров I2C DimmerLink (ключевые регистры)

Регистр Адрес Описание
STATUS 0x00 Флаги состояния (только чтение)
DIM0_LEVEL 0x10 Яркость канала 0, 0–100
DIM0_CURVE 0x11 Кривая: 0=LINEAR, 1=RMS, 2=LOG
AC_FREQ 0x20 Измеренная частота AC (Гц)


Пример lambda — прямая установка яркости

yaml
# Шаблонный выход через lambda для пользовательского управления яркостью
output:
  - platform: template
    id: dimmer_out
    type: float
    write_action:
      - lambda: |-
          uint8_t level = (uint8_t)(state * 100.0f);
          // требуется блок i2c: в конфигурации ESPHome
          Wire.beginTransmission(0x50);
          Wire.write(0x10);   // регистр DIM0_LEVEL
          Wire.write(level);
          Wire.endTransmission();
light:
  - platform: monochromatic
    output: dimmer_out
    name: "Dimmer (lambda)"


Пример lambda — кнопка переключает предустановки

yaml
binary_sensor:
  - platform: gpio
    pin: GPIO0
    name: "Dim Button"
    on_press:
      - lambda: |-
          // Переключение между 30 % и 80 %
          static bool high = false;
          uint8_t level = high ? 30 : 80;
          high = !high;
          Wire.beginTransmission(0x50);
          Wire.write(0x10);
          Wire.write(level);
          Wire.endTransmission();



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

Кривая Значение регистра ESPHome dimming_curve Лучше для
Линейная 0 LINEAR Нагреватели, резистивные
RMS 1 RMS Лампы накаливания, галогенные
Логарифмическая 2 LOGARITHMIC Диммируемые LED-лампы

Кривые RMS и логарифмическая компенсируют нелинейную зависимость между углом фазы и воспринимаемой яркостью.




Типичные проблемы

Симптом Причина Решение
Мерцание с ESP32 Конфликт ISR/WiFi Используйте метод DimmerLink
Диммер офлайн после OTA ISR прерван во время прошивки Используйте DimmerLink
Яркость застряла на 0 % min_power слишком мало или проблема с ZC Проверьте пин ZC
Сущность light не появляется в HA ESPHome не принят в HA Повторно примите устройство
Компонент не найден Неверный ref: в external_components Используйте ref: main



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

  • Полное руководство по Home Assistanthome-automation/home-assistant-ac-dimmer.md
  • ESP32 WiFi ISR problemIRAM_ATTR Causes and Fix
  • Single-core ESP32ESP32-S2/C3/H2 Doesn't Work
  • Альтернатива MQTThome-automation/mqtt-esp32-ac-dimmer.md



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

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

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