Ir al contenido

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

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

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




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

Команда Dimmer в Tasmota управляет внутренним ШИМ выходом или реле SWITCH. Она не поддерживает фазовое управление TRIAC, потому что оно требует аппаратного прерывания на каждом переходе через ноль переменного тока (каждые 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,3В), затем отправьте команду SWITCH_I2C на скорости 115200 бод:

text
Последовательность байтов: 02 5B

В любом последовательном терминале (RealTerm, picocom):

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

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

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




Шаг 2 — Подключение


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

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

Подключите подтягивающие резисторы от SDA и SCL к 3,3В. Без них шина 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)

DimmerLink ESP8266 ESP32 Примечания
VCC 3,3В 3,3В
GND GND GND
RX (TX/SDA) GPIO1 TX* GPIO17 TX2 DL RX ← TX МК
TX (RX/SCL) GPIO3 RX* GPIO16 RX2 DL TX → 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 диммера

DimmerLink Модуль диммера
VCC VCC
GND GND
Z-C Z-C
Dim DIM

Модуль диммера подключается к сети переменного тока и нагрузке, как описано в Руководстве по аппаратному подключению.




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

Скрипты Berry доступны только в Tasmota на ESP32. Они дают полный программный контроль над 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
# Привязываем команду Tasmota Dimmer (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 через SerialSend в Tasmota (ESP8266 и ESP32)

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

Формат пакета UART DimmerLink для установки яркости:

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

В консоли Tasmota:

text
# Яркость 50%  (0x32 hex = 50 dec)
SerialSend5 02530032
# Яркость 75%  (0x4B hex = 75 dec)
SerialSend5 0253004B
# Выключить  (0x00 = 0%)
SerialSend5 02530000
# Полная яркость  (0x64 hex = 100 dec)
SerialSend5 02530064

Перевод в hex: Dimmer 50 → 50 dec → 0x32 hex → пакет 02 53 00 32. Используйте любой конвертер или таблицу в документации DimmerLink UART.


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

Для фиксированных уровней на ESP8266 используйте правила Tasmota:

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

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




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

После настройки управления DimmerLink через Tasmota, 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 Диммер"
      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 недоступен ESP8266 Tasmota Используйте 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 скриптами кажется сложным, ESPHome предоставляет нативную интеграцию DimmerLink в 5 строках YAML и автоматически обрабатывает всё взаимодействие по I2C.

См.: ESPHome YAML для AC диммера и DimmerLink




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

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



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



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

    Задайте на forum.rbdimmer.com или откройте GitHub Issue.

    Compartir esta publicación
    Iniciar sesión para dejar un comentario