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

Управление AC-диммером через DimmerLink в Tasmota

В Tasmota нет встроенного драйвера фазового управления TRIAC. DimmerLink восполняет этот пробел — Tasmota отправляет команды по I2C (Berry на ESP32) или UART (SerialSend на любой плате), а DimmerLink обеспечивает точную синхронизацию TRIAC.

Коротко: Tasmota не может управлять диммером с фазовой отсечкой TRIAC напрямую. Используйте DimmerLink как I2C/UART- ведомое устройство. На ESP32 Tasmota: напишите 5-строчный скрипт Berry, который привязывает любой триггер правила к записи в I2C- регистр по адресу 0x50. На ESP8266: используйте SerialSend5 с бинарным форматом пакетов DimmerLink. Home Assistant обнаруживает устройство автоматически через Tasmota MQTT.




Почему Tasmota не может управлять TRIAC напрямую

Команда Dimmer в Tasmota управляет внутренним PWM-выходом или реле SWITCH. Она не поддерживает фазовое управление TRIAC (фазовую отсечку), так как для этого требуется аппаратное прерывание на каждом переходе через ноль AC (каждые 10 мс при 50 Гц) с точностью зажигания менее миллисекунды.

Tasmota выполняет цикл обработки событий и WiFi-стек на одном ядре. Она не может гарантировать задержку ISR < 1 мс при нагрузке WiFi. Прямое подключение TRIAC-модуля rbdimmer и попытка синхронизировать импульсы зажигания из Tasmota приведёт к мерцанию или полному отсутствию диммирования.

Решение: вынести синхронизацию на DimmerLink. DimmerLink — выделенный контроллер на Cortex-M0+, который самостоятельно выполняет детектирование перехода через ноль и зажигание TRIAC. Tasmota лишь отправляет целевой уровень яркости (0–100) один раз по команде пользователя — никаких требований к синхронизации.




Необходимое оборудование

  • Плата ESP32 или ESP8266 с прошивкой Tasmota
  • Модуль DimmerLink
  • Модуль AC-диммера rbdimmer (любой номинал по току)
  • Резисторы 4,7 кОм × 2 (подтяжка I2C, при использовании режима I2C)



Шаг 1 — Переключение DimmerLink в режим I2C

DimmerLink поставляется в режиме UART по умолчанию. Для подхода с Berry I2C (ESP32) необходимо сначала переключить его в режим I2C.

Подключите DimmerLink к любому USB-UART-адаптеру (TX → RX, RX → TX, GND → GND, VCC → 3.3V), затем отправьте команду SWITCH_I2C на скорости 115200 бод:

text
Byte sequence: 02 5B

В любом терминале (RealTerm, picocom):

  1. Откройте порт на 115200, 8N1.
  2. Отправьте сырые байты: 02 5B.
  3. Ожидайте ответ 00 (ОК). Теперь DimmerLink будет стартовать в режиме I2C после каждого включения питания.

После переключения отсоедините от UART-адаптера и подключите по I2C.

Если вы хотите оставить DimmerLink в режиме UART (проще для ESP8266), пропустите этот шаг и переходите сразу к Шагу 3.




Шаг 2 — Схема подключения


Подключение I2C (ESP32 — рекомендуется)

Любой ESP32 Пин ESP32 Примечания
VCC 3,3 В Совпадает с логическим напряжением MCU
GND GND
SDA (TX/SDA) GPIO21 Добавить подтяжку 4,7 кОм к 3.3V
SCL (RX/SCL) GPIO22 Добавить подтяжку 4,7 кОм к 3.3V

Подключите подтягивающие резисторы от SDA и SCL к 3.3V. Без них шина I2C не будет работать надёжно.

text
3.3V ──┬──────────────┬──
      4.7k           4.7k
       │               │
ESP32 SDA ──── DL SDA  │
ESP32 SCL ──────────── DL SCL
GND ────────────────── DL GND
3.3V ───────────────── DL VCC


Подключение UART (ESP8266 или ESP32)

Любой ESP32 ESP8266 ❌ нет Примечания
VCC 3,3 В 3,3 В
GND GND GND
RX (TX/SDA) GPIO1 TX* GPIO17 TX2 DL RX ← MCU TX
TX (RX/SCL) GPIO3 RX* GPIO16 RX2 DL TX → MCU RX

* GPIO1/3 на ESP8266 разделяются с USB. Используйте Serial.swap() для переназначения на GPIO15/GPIO13, или используйте I2C.

cpp
// ESP8266: переназначить Serial на GPIO15 (TX) / GPIO13 (RX)
Serial.begin(115200);
Serial.swap();  // TX → GPIO15, RX → GPIO13


DimmerLink → Модуль AC-диммера

Любой ESP32 Модуль диммера
VCC VCC
GND GND
Z-C Z-C
Dim DIM

The dimmer module connects to mains AC and the load as described in the Hardware Connection Guide.




Шаг 3A — Скрипт Berry в Tasmota (ESP32, режим I2C)

Скрипты Berry доступны только на ESP32 Tasmota. Они дают полный программный контроль над I2C.

Откройте веб-консоль Tasmota и вставьте:

berry
# Файл: dimmer_i2c.be — управление DimmerLink по I2C
# Регистр 0x10 (DIM0_LEVEL): 0–100 процентов
import wire
wire.begin()  # инициализация шины I2C один раз при загрузке скрипта
def set_dimmer(level)
    var l = int(level)
    if l < 0 then l = 0 end
    if l > 100 then l = 100 end
    wire.beginTransmission(0x50)
    wire.write(0x10)   # регистр DIM0_LEVEL
    wire.write(l)
    wire.endTransmission()
end
# Привязка команды Dimmer в Tasmota (0–100) к DimmerLink
tasmota.add_rule("Dimmer#State",
    def(value) set_dimmer(value) end)
# Привязка команды Power (вкл/выкл) к полной или нулевой яркости
tasmota.add_rule("Power#State",
    def(value)
        if value == 1 then set_dimmer(100)
        else set_dimmer(0) end
    end)

Для автоматической загрузки при старте сохраните как autoexec.be через файловый менеджер Tasmota (Tools → Manage File System).

Как это работает:

  • wire.begin() вызывается один раз при загрузке скрипта для инициализации шины I2C — не при каждой команде.
  • wire.beginTransmission(0x50) обращается к DimmerLink по I2C- адресу по умолчанию.
  • wire.write(0x10) выбирает регистр DIM0_LEVEL.
  • wire.write(l) устанавливает яркость 0–100%.
  • Правило срабатывает всякий раз, когда Tasmota получает команду Dimmer из консоли, по MQTT или от Home Assistant.


Проверка из консоли Tasmota

text
Dimmer 50     → set_dimmer(50) → запись I2C 50 в 0x10
Dimmer 0      → set_dimmer(0)  → лампа выключена
Power 0       → set_dimmer(0)



Шаг 3B — UART в Tasmota через SerialSend (ESP8266 и ESP32)

Если Berry недоступен (ESP8266) или вы предпочитаете не писать скрипты, используйте SerialSend5 для отправки сырых бинарных пакетов в DimmerLink по UART.

Формат UART-пакета DimmerLink для команды SET яркости:

text
02  53  00  LEVEL
│   │   │   └── яркость 0–100 (десятичное)
│   │   └────── индекс канала (всегда 00)
│   └────────── команда SET (0x53)
└────────────── стартовый байт (всегда 0x02)

В консоли Tasmota:

text
# Установить яркость 50%  (0x32 hex = 50 decimal)
SerialSend5 02530032
# Установить яркость 75%  (0x4B hex = 75 decimal)
SerialSend5 0253004B
# Выключить  (0x00 = 0%)
SerialSend5 02530000
# Включить на полную мощность (0x64 hex = 100 decimal)
SerialSend5 02530064

Hex conversion: Dimmer 50 → 50 decimal → 0x32 hex → packet 02 53 00 32. Use any hex calculator or the table in the DimmerLink UART docs.


Автоматизация SerialSend с помощью правил Tasmota

Привяжите внутреннее значение Dimmer в Tasmota к команде SerialSend через переменные Mem и приём с WebCmd — или напишите скрипт Berry для чистого преобразования на ESP32. Для ESP8266 более простой подход — использовать фиксированные уровни через правила Tasmota:

text
Rule1
  ON Dimmer#State<20 DO SerialSend5 02530000 ENDON
  ON Dimmer#State>=20 DO SerialSend5 02530032 ENDON

Для плавного управления произвольным уровнем на ESP8266 рекомендуется подход Berry на ESP32.




Шаг 4 — Интеграция с Home Assistant

После того как Tasmota управляет DimmerLink, Home Assistant видит ESP-устройство как стандартный узел Tasmota через автообнаружение по MQTT.

Включите автообнаружение MQTT в Tasmota:

text
SetOption19 1      # Включить обнаружение Home Assistant по MQTT

Home Assistant автоматически создаёт сущность light с управлением яркостью. Слайдер яркости HA (0–255) преобразуется в команду Dimmer Tasmota (0–100), которая запускает правило Berry для записи в DimmerLink.

Для ручной конфигурации HA (если автообнаружение отключено):

yaml
mqtt:
  light:
    - name: "AC Dimmer"
      command_topic: "cmnd/tasmota_dimmer/Dimmer"
      brightness_command_topic: "cmnd/tasmota_dimmer/Dimmer"
      brightness_scale: 100
      payload_on: "100"
      payload_off: "0"
      state_topic: "stat/tasmota_dimmer/RESULT"
      brightness_state_topic: "stat/tasmota_dimmer/RESULT"
      brightness_value_template: >
        {{ value_json.Dimmer | default(0) }}



Частые ошибки

Проблема Причина Решение
Berry недоступен на устройстве Tasmota на ESP8266 Используйте подход UART + SerialSend5
Команда Dimmer не действует Правило не загружено или опечатка Проверьте синтаксис tasmota.add_rule; перезагрузите Berry
DimmerLink не отвечает по I2C Неверный режим (всё ещё UART) Сначала отправьте 02 5B по UART для переключения
I2C нестабилен при WiFi Отсутствуют подтягивающие резисторы Добавьте 4,7 кОм на SDA и SCL
SerialSend5 отправляет неверный уровень Ошибка hex-преобразования 50% = 0x32, 75% = 0x4B, 100% = 0x64
HA показывает диммер, но уровень игнорируется Несовпадение on_command_type Используйте brightness_scale: 100 в конфигурации MQTT light



Альтернатива — ESPHome вместо Tasmota

Если подход со скриптами Berry в Tasmota кажется сложным, ESPHome предлагает встроенную интеграцию DimmerLink всего в 5 строках YAML и автоматически выполняет всю I2C-коммуникацию.

See: ESPHome YAML for AC Dimmer and DimmerLink




Краткий чек-лист

  • ☐ DimmerLink переключён в режим I2C (если используете Berry) — отправьте `02 5B` по UART
  • ☐ Подтягивающие резисторы установлены на SDA и SCL (4,7 кОм к 3.3V)
  • ☐ Berry autoexec.be сохранён и загружен (присутствует `tasmota.add_rule`)
  • ☐ Консоль Tasmota: `Dimmer 50` запускает set_dimmer(50) в логе Berry
  • ☐ UART: `SerialSend5 02530032` возвращает ответ `00` в мониторе порта
  • ☐ Автообнаружение Tasmota MQTT включено (`SetOption19 1`)
  • ☐ Сущность light в HA появилась и слайдер управляет яркостью



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



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

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

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