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 бод:
Последовательность байтов: 02 5BВ любом последовательном терминале (RealTerm, picocom):
- Откройте порт на 115200, 8N1.
- Отправьте сырые байты:
02 5B. - Ожидайте ответ
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 не будет работать надёжно.
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.
// ESP8266: переназначаем Serial на GPIO15 (TX) / GPIO13 (RX)
Serial.begin(115200);
Serial.swap(); // TX → GPIO15, RX → GPIO13DimmerLink → Модуль AC диммера
| DimmerLink | Модуль диммера |
|---|---|
| VCC | VCC |
| GND | GND |
| Z-C | Z-C |
| Dim | DIM |
Модуль диммера подключается к сети переменного тока и нагрузке, как описано в Руководстве по аппаратному подключению.
Шаг 3A — Скрипт Berry для Tasmota (ESP32, режим I2C)
Скрипты Berry доступны только в Tasmota на ESP32. Они дают полный программный контроль над I2C.
Откройте веб-консоль Tasmota и вставьте:
# Файл: 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
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 для установки яркости:
02 53 00 LEVEL
│ │ │ └── яркость 0–100 (десятичное)
│ │ └────── индекс канала (всегда 00)
│ └────────── команда SET (0x53)
└────────────── стартовый байт (всегда 0x02)В консоли Tasmota:
# Яркость 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:
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:
SetOption19 1 # Включить автообнаружение Home Assistant MQTTHome Assistant автоматически создаёт объект light с управлением
яркостью. Ползунок яркости HA (0–255) отображается в команду
Dimmer Tasmota (0–100), которая запускает правило Berry,
записывающее данные в DimmerLink.
Для ручной настройки HA (если автообнаружение выключено):
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
Краткий чеклист
Связанные статьи
- Альтернатива ESPHome → ESPHome YAML для AC диммера и DimmerLink
- Руководство Home Assistant → AC диммер с Home Assistant и ESPHome
- DimmerLink не обнаруживается на I2C → DimmerLink не обнаруживается: режим I2C vs UART
- Управление через Raspberry Pi → Управление AC диммером через DimmerLink на Raspberry Pi
Остались вопросы?
Задайте на forum.rbdimmer.com или откройте GitHub Issue.