Диммер 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