August 14

Диммер 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 по смыслу.
  • AA, BB — 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) или диалог сущности. Элементы:

  • ON/OFF кнопка;
  • слайдер яркости 0–100% (визуально).

Атрибуты и представление:

  • state = on / off;
  • brightness — внутренне 0–255, на UI показан как 0–100%;
  • supported_features, friendly_name, entity_id, last_changed.

Что делает UI при действии:

  • Слайдер → 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 Яркость аварии

  • UI: проценты.
  • Смысл: уровень который диммер установит при аппаратной аварии/защите.

Доп. параметры страницы 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