Диммер WB-MDM3 + ESPhome
Описание.
Пока тестировал разные подходы в диммировании решил настроить WB диммер на работу с Home Assistant. Сам диммер https://wirenboard.com/ru/product/WB-MDM3/
Подключение напрямую к Home Assistant через USB-RS485 особо не дал результатов, только простые данные и очень простое управление. Чаты говорят, что через интерфейс HA настроить сложную логику невозможно … поэтому и разные автоматизации недоступны на уровне железа. Например, вкл/выкл и яркость идут как разные регистры, а нужно превратить в один light сенсор. Поэтому я решил сделать на ESP32 + TTL RS485, благо в esphome очень много настроек. Да и конфиг файл в самом НА не забивается. В моем случаеоказался под рукой esp32 s3, который избыточно крутой и мощный для простой задачи моста. Можно взять esp32 c3 и будет недорогое счастье.
Чем хорошо использовать esp32+ttl rs485 - это передача сигнала через wifi, можно разместить диммеры где угодно и рядом с исполнителем. Я тоже не очень люблю wi-fi в умном доме, но тут все напрямую без облака - так что все ок. А если помечтать, то нас ждет wi-fi mesh в esp32, а также thread и zigbee в дальнейшем.
Диммер мне давно приглянулся так как были запросы на проводные версии управления, типа независимые от сервера. В принципе, этот диммер так и работает - входы “записываются” в сам диммер. Все настройки также записываются в сам диммер, я просто переложил это на esphome и управление/настройку через Home Assistant.
Конечно лучше брать голову контроллер от Wirenboard и дальше пускать управление через MQTT. А вот если диммеров всего один-два, а остальное например комбайн от кинкони на 32 выкхода с rs485 выходом на борту. Тогда конечно можно подключить через esphome.
Сам диммер огонь - адаптация под разные драйверы и лампы, настройка скорости диммирования, настройка порогов - например при минимальном лампа может погаснуть и через порог можно сделать поярче. Скорость затухания и разгорания - вообще супер, можно на лету менять через значения - например, вечером сделать более плавное, а днем более резкое.
Входы - короткое, двойное, долгое нажатие + комбинация с выбором каналов. То есть, любой вход назначается на любой канал (или на все каналы) и добавляется тип нажатия. На одну кнопку можно сделать короткое нажатие включить и выключить один канал, а долгое нажатие выключает все каналы.
Единственное что мне не понравилось - сам модбас, я не смог нормально без цикличной петли настроить обратный отклик. При нажатии на физическую кнопку статус в Home Assistant не меняется. Это не сильный баг, особенно если используется Алиса или сценарии выключить все - работать будет. НО можно посмотреть код и если если предложение как добавить обратный отклик - буду признателен. И ещё повысить отклик от входов.
Сам код тут https://github.com/smirnowegor/ESP-WB/blob/main/WB-MDM3
Плату берем эту для экономии денег https://aliexpress.ru/item/1005008131844264.html?sku_id=12000043914436271&utm_campaign=181890&utm_content=5946520&utm_medium=cpa&utm_source=aerkol
Если нужно прям как у меня то вот мощная плата https://aliclick.shop/r/c/1t0zd8f0swqljqme?erid=2SDnjdfWFtS и удобный шилд под нее https://aliclick.shop/r/c/1t0zdb6iw8l3tiv1?erid=2SDnjev9ehL
Преобразователь https://aliexpress.ru/item/1005005517750423.html?sku_id=12000033386624262&utm_campaign=181890&utm_content=5683671&utm_medium=cpa&utm_source=aerkol или https://ya.cc/m/6A2Zb8
Мануал как пользоваться кодом. (Версия ESPHome)
Компоненты
ESP32 — контроллер с UART (TX/RX) и 3.3 V/GND.
TTL↔RS-485 модуль с авто-DE/RE (например HW-726) — VCC
, GND
, TXD
(RO), RXD
(DI), A
, B
.
WB-MDM3 — диммер с интерфейсом RS-485 (A/B).
Питание и логика
Тут будет подключение к esp32 S3, для выше предложенной платы пины могут быть другими.
VCC (HW-726)
→ 3.3 V ESP32 (или через преобразователь уровней при 5 V-варианте).GND (HW-726)
→ GND ESP32 (общий минус обязателен).TXD (HW-726)
(выход) → GPIO18 (ESP32 RX).RXD (HW-726)
(вход) ← GPIO17 (ESP32 TX). Формула:TX
одного устройства →RX
другого. На модулях RO/DI соответствуют TX/RX по смыслу.A
↔A
,B
↔B
— RS-485 пара к WB-MDM3 (линейная топология).
Шина RS-485 (элементы)
- Топология: линейная (последовательные узлы A↔A, B↔B).
- Терминация: при длинной линии — 120 Ω между A и B на концах шины.
- Bias: при «плавающем» idle применяют pull-up на A и pull-down на B (обычно ~10 kΩ).
- DE/RE: модуль hw 726 rs485 с auto-DE/RE сам управляет направлением — дополнительных проводов не нужно.
Modbus / UART — параметры, которые видим в прошивке и в HA
UART
- Параметры, использованные в адаптации: 9600, 8N1 (baud 9600, 8 бит данных, нет паритета, 1 стоп-бит).
Modbus
- Устройство адресуется по Modbus-адресу (в адаптации может быть, например, 211). В HA интеграция использует этот адрес для чтения/записи регистров.
Что появляется в Home Assistant
- После подключения и корректной конфигурации в HA появятся сущности типов
light
,number
,sensor
,select
— именно они используются для управления и настройки диммера.
Общая навигация в Home Assistant (где находятся элементы управления)
- Overview (Lovelace) — карточки управления (Light-card с ON/OFF + слайдер).
- Settings → Devices & Services → Devices → [ESP32 / WB-MDM3] — страница устройства с полным списком сущностей (Entities).
- Клик по сущности открывает диалог/страницу с деталями (значение, единицы, дополнительные атрибуты).
- Developer Tools → States — сырой список entity_id и текущих состояний (для сопоставления raw-значений).
Сущности: обзор, интерфейс и поведение.
Light — Канал N Свет
Интерфейс: карточка Light (Lovelace) или диалог сущности. Элементы:
state
=on
/off
;brightness
— внутренне 0–255, на UI показан как 0–100%;supported_features
,friendly_name
,entity_id
,last_changed
.
- Слайдер →
service: light.turn_on
сbrightness_pct
(0–100) → адаптация переводит в Modbus-запись (регистры/секции). - ON/OFF →
light.turn_on
/light.turn_off
→ запись в coils/holding регистры.
Пояснение: UI посылает желаемый уровень; реальная интерпретация (кривая, угол фазирования) выполняется прошивкой/диммером.
Number — числовые параметры (группа и единицы)
Сущности типа number
применяются для разных параметров. Ниже — списки и подробности:
Канал N Яркость
(commanded brightness)
- UI: поле ввода числа (0–100) или стрелки; иногда слайдер.
- Единица: проценты (%).
- Поведение: изменение отправляет запись в регистр, задаёт целевую яркость как явную числовую команду.
КN Порог min (мкс)
/ КN Порог max (мкс)
- UI: numeric input; подпись указывает µs.
- Единица: микросекунды (µs).
- Смысл:
min
= нижняя граница времени проводимости;max
= верхняя граница отсечки. - Запись: ввод → Modbus write в соответствующий holding register.
КN Скорость нарастания (мс)
/ КN Скорость затухания (мс)
- UI: numeric input; подпись — ms.
- Единица: миллисекунды (ms).
- Смысл: длительность transition/fade между уровнями при применении новой яркости.
КN Яркость аварии
Доп. параметры страницы number
: min
, max
, step
— могут быть заданы конфигурацией и ограничивать ввод в UI. После записи поле обычно отражает «configured / commanded» значение.
Select — выборные параметры управления (Input / Power on и т.д.)
InputX Mode
- UI: выпадающий список:
Button
илиLatched switch
. - Смысл:
Button
= кнопка с событиями short/long/double;Latched switch
= тумблер/фиксированное положение.
InputX Short Action
, InputX Long Action
, InputX Double Action
- UI: dropdown с опциями:
Turn ON
,Turn OFF
— простые включение/выключение;Toggle
— переключение состояния;Increase Level
,Decrease Level
— одношаговый инкремент/декремент яркости;Increase/Decrease Level
— режим удержания (при hold меняет яркость вверх/вниз).- Поведение: выбор опции преобразуется в код/индекс и записывается в регистр; дальше диммер применяет логику при соответствующих событиях входа.
Power on action
- Опции:
Off
,Restore previous
,On and set brightness
. - Смысл: определяет поведение канала при подаче питания; для опции
On and set brightness
используется отдельное полеКN Яркость при включении
.
Sensor — readback-сущности (chN_brightness_read
и т.п.)
UI: read-only плашка с текущим значением, единицами и временной меткой последнего обновления.
Атрибуты: raw_register
(номер регистра), quality
, last_update
.
Роль: показывает данные, которые устройство возвращает при опросе (реальный/фактический readback). Через UI изменить нельзя — это отображение состояния, пригодное для логики/мониторинга.
Кнопки и входы — полный блок (вместе с select и number)
Режимы входа (InputX Mode
)
Button
— вход генерирует события: short (короткое), long (длинное), double (двойное). Эти события сопоставляются с выбранными действиями (InputX ... Action
).Latched switch
— вход имеет состояние замкнут/разомкнут (on/off); события удержания не применяются.
Действия на события (InputX Short/Long/Double Action
) — семантика и что делает диммер
Turn ON
/Turn OFF
— установка состояния канала.Toggle
— переключение состояния.Increase Level
/Decrease Level
— одноразовый шаг изменения яркости (величина шага определяется прошивкой/конфигом).Increase/Decrease Level
— режим удержания: при удержании входа диммер запускает непрерывную или ступенчатую регулировку вверх/вниз до отпускания. Реализация (ступенчатая/плавная), скорость и шаг зависят от прошивки и параметровramp
/step
.
Параметры, влияющие на работу входов (атрибуты/связанные поля)
debounce
— фильтр дребезга (ms).long threshold
— время распознавания долгого нажатия (ms).step size
/repeat interval
— внутренние величины шагов/интервала при удержании (может задаваться в прошивке).
Примеры сочетаний
- Short =
Toggle
— один короткий тап переключает свет. - Long =
Increase/Decrease Level
— держим кнопку — яркость изменяется, отпускаем — изменение останавливается. - Short =
Increase Level
(на кнопке Up) — каждое нажатие прибавляет фиксированный процент.
Взаимодействие UI ↔ устройство — что происходит «за кулисами»
Команды из UI
light
(слайдер/ON): формируетlight.turn_on
/turn_off
с параметрами (brightness_pct
) → интеграция переводит в Modbus-запись (holding register / set of writes).number
(изменение): сразу формирует запись значения в соответствующий holding register.select
(выбор): формирует запись кода (индекса/значения) в соответствующий регистр.
Readback и показатели
sensor
публикует значения, прочитанные драйвером (polling). В HA это отображение последних данных с устройства. UI не записывает в sensor, только читает.
Командированный vs фактический уровень
- UI показывает
commanded
(что послано) и далее может отобразитьreadback
(что устройство сообщило). Разница возможна из-за асинхронности запросов/обработки и особенностей аппаратной реакции.
Способ 1 Поддержать автора
Способ 2 https://donate.stream/yoomoney410013774736621
или через криптокошелёк (Только USDT) TCHekdJZFndXpDrHZGuTmqFNcqhWBTTzPr
Связаться со мной. (Консультации, проектирование и обучение)
Новый подход к электрике и дизайну помещений. Некоторые провода уже не нужно тянуть, какие-то решения можно принять после ремонта. Перенести выключатель, запустить кондиционер с телефона - возможно автоматизировать любую рутину.
Мой телеграм канал, там все быстрее обновляется телеграм.
Сайт smart4home.ru и альтернативный Умный дом на любом этапе
Соц сети: RuTube канал Удобный дом / You Tube канал Удобный дом Яндекс Дзен: Удобный дом / InGram
Платформы специалистов: Авито / Профи.ру / Яндекс Услуги https://uslugi.yandex.ru/profile/EgorSmirnov-2294380?from=telek
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158 Реклама. ООО «ЯНДЕКС», ИНН 7736207543