Добрый день.
В данной заметке намерен рассказать про опыт подключения rgbw-диммера WB-MRGBW-D от компании Wiren Board к системе домашней автоматизации Home Assistant. В свое время был на выставке и посетил их стенд с оборудованием, после чего и был взят на пробу данный диммер с купоном от Spruta, также было интересно поработать и с Modbus. Планируется сделать дополнительное освещение по периметру комнаты.
Физически к серверу с ОС Ubuntu 18.04.1 LTS, где установлен Home Assistant в докере, был подключен адаптер USB-RS485 китайского производства, от usb адаптера витая пара к диммеру.
1. Подключаем адаптер USB-RS485 к серверу. Сам usb-стик был заказан с известного сайта в поднебесной. Далее нужно проверить, что он распознается системой, смотрим вывод команды lsusb в консоли сервера.
$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 003 Device 003: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
В моем случае определяется адаптер как QinHeng Electronics HL-340 USB-Serial adapter.
2. Настройка параметров Modbus и проброс usb-стика в контейнер.
Согласно документации Home Assistant прописываем основные настройки в файле configuration.yaml для Modbus.

Здесь нужно правильно задать параметр port, чтобы определить на каком порту у нас адаптер, выполним в консоли команду dmesg | grep tty, видим, что подключен к ttyUSB0.
ruslan@homeserver:~$ dmesg | grep tty
Изначально я поспешил и перезапустил Home Assistant и поймал такую ошибку:
[Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
11:08 components/modbus.py (ERROR)
Для исправления нужно "прокинуть" в контейнер наш usb-стик. Также предварительно выполним команду добавления пользователя, под которым запускается контейнер, в группу dialout.
$ sudo usermod -a -G dialout yourname
где yourname - имя пользователя
Проброс usb-стика в контейнер и его запуск.
$ docker run -d --name="hass" --restart on-failure -v /home/ha:/config \
-v /etc/localtime:/etc/localtime:ro --device /dev/ttyUSB0:/dev/ttyUSB0 \
--net=host homeassistant/home-assistant
3. Настройка конфигурационных файлов для диммера WB-MRGBW-D в Home Assistant.
Настройки актуальны для версии Home Assistant 0.86.2. В файле configuration.yaml подключаю папку sensors с будущими сенсорами:
sensor: !include_dir_merge_list sensors
Далее в папке sensor создаем файл modbus.yaml со следующим содержимым (см. ниже)
Карту регистров диммера WB-MRGBW-D можно посмотреть по ссылке( регистры).
Здесь нужно обратить внимание на параметр slave: 20 - адрес устройства (наклеен сбоку на самом диммере).
# Диммер WB-MRGBW-D
- platform: modbus
scan_interval: 30
registers:
- name: dimmer_green # Уровень канала G, логарифмическая кривая
slave: 20
register: 0
register_type: holding
count: 1
data_type: int
- name: dimmer_red # Уровень канала R, логарифмическая кривая
slave: 20
register: 1
register_type: holding
count: 1
data_type: int
- name: dimmer_blue # Уровень канала B, логарифмическая кривая
slave: 20
register: 2
register_type: holding
count: 1
data_type: int
- name: dimmer_white # Уровень канала W, логарифмическая кривая
slave: 20
register: 3
register_type: holding
count: 1
data_type: int
- name: dimmer_key1_status # cостояние кнопки 1 (1 - нажата, 0 - отпущена)
slave: 20
register: 6
register_type: input
count: 1
data_type: int
- name: dimmer_key2_status # cостояние кнопки 2 (1 - нажата, 0 - отпущена)
slave: 20
register: 7
register_type: input
count: 1
data_type: int
- name: dimmer_key3_status # cостояние кнопки 3 (1 - нажата, 0 - отпущена)
slave: 20
register: 8
register_type: input
count: 1
data_type: int
Для удобного управления rgbw-каналами из интерфейса создал 4 слайдера, параметр initial- значение которое можете выбрать любое в диапазоне от 0 до 255. Настройка файла input_number.yaml выглядит следующим образом:
# Инициализация каналов диммера WB-MRGBW-D
dimmer_red:
name: Красный
initial: 150
min: 0
max: 254
step: 1
icon: mdi:alpha-r-box
dimmer_green:
name: Зелёный
initial: 150
min: 0
max: 254
step: 1
icon: mdi:alpha-g-box
dimmer_blue:
name: Голубой
initial: 150
min: 0
max: 254
step: 1
icon: mdi:alpha-b-box
dimmer_white:
name: Белый
initial: 150
min: 0
max: 254
step: 1
icon: mdi:alpha-w-box
Далее создаем файл с автоматизациями для управления цветом modbus_devices.yaml, параметр unit – адрес устройства, address – номер регистра.
# Слайдер для красного канала диммера WB-MRGBW-D
- alias: dimmer red
trigger:
platform: state
entity_id: input_number.dimmer_red
action:
service: modbus.write_register
data:
unit: 20
address: 1
data_template:
value: '{{ states.input_number.dimmer_red.state|int }}'
# Слайдер для зелёного канала диммера WB-MRGBW-D
- alias: dimmer green
trigger:
platform: state
entity_id: input_number.dimmer_green
action:
service: modbus.write_register
data:
unit: 20
address: 0
data_template:
value: '{{ states.input_number.dimmer_green.state|int }}'
# Слайдер для голубого канала диммера WB-MRGBW-D
- alias: dimmer blue
trigger:
platform: state
entity_id: input_number.dimmer_blue
action:
service: modbus.write_register
data:
unit: 20
address: 2
data_template:
value: '{{ states.input_number.dimmer_blue.state|int }}'
# Слайдер для белого канала диммера WB-MRGBW-D
- alias: dimmer red
trigger:
platform: state
entity_id: input_number.dimmer_white
action:
service: modbus.write_register
data:
unit: 20
address: 3
data_template:
value: '{{ states.input_number.dimmer_white.state|int }}'
Еще
сделал 2 скрипта/сцены для полного отключения rgbw-каналов
и включения значения яркости rgbw-кналов по умолчанию на уровне 150, чтобы можно было по одному нажатию включить/выключить. Здесь можно задать количество сцен и значения на ваш выбор. Содержимое файла scripts.yaml:
# Отключение всех каналов диммера WB-MRGBW-D
wb_mrgbw_off:
alias: dimmer wb_mrgbw off
sequence:
- service: modbus.write_register
data:
unit: 20
address: 0
value: 0
- service: modbus.write_register
data:
unit: 20
address: 1
value: 0
- service: modbus.write_register
data:
unit: 20
address: 2
value: 0
- service: modbus.write_register
data:
unit: 20
address: 3
value: 0
# Включение всех каналов диммера WB-MRGBW-D на default значение
wb_mrgbw_default:
alias: dimmer wb_mrgbw default
sequence:
- service: modbus.write_register
data:
unit: 20
address: 0
value: 150
- service: modbus.write_register
data:
unit: 20
address: 1
value: 150
- service: modbus.write_register
data:
unit: 20
address: 2
value: 150
- service: modbus.write_register
data:
unit: 20
address: 3
value: 150
В завершение фрагмент yamlдля вывода в UI-Lovelace, добавляем следующее содержимое в файл ui-lovelace.yaml
title: ModBus
cards:
- type: glance
title: Состояние WB-MRGBW-D
entities:
- entity: sensor.dimmer_red
name: Красный
icon: mdi:alpha-r-box
- entity: sensor.dimmer_green
name: Зеленый
icon: mdi:alpha-g-box
- entity: sensor.dimmer_blue
name: Голубой
icon: mdi:alpha-b-box
- entity: sensor.dimmer_white
name: Белый
icon: mdi:alpha-w-box
- type: glance
title: Статус кнопок WB-MRGBW-D
entities:
- entity: sensor.dimmer_key1_status
name: Кнопка 1
icon: mdi:numeric-1-box-multiple-outline
- entity: sensor.dimmer_key2_status
name: Кнопка 2
icon: mdi:numeric-2-box-multiple-outline
- entity: sensor.dimmer_key3_status
name: Кнопка 3
icon: mdi:numeric-3-box-multiple-outline
- type: glance
title: Сцены WB-MRGBW-D
entities:
- entity: script.wb_mrgbw_off
name: Выкл все
icon: mdi:power
tap_action:
action: call-service
service: script.turn_on
service_data:
entity_id: script.wb_mrgbw_off
- entity: script.wb_mrgbw_default
name: По умолчанию
icon: mdi:power
tap_action:
action: call-service
service: script.turn_on
service_data:
entity_id: script.wb_mrgbw_default
- type: entities
title: RGBW
show_header_toggle: false
entities:
- input_number.dimmer_red
- input_number.dimmer_green
- input_number.dimmer_blue
- input_number.dimmer_white
Благодарю за уделенное внимание. Сейчас диммер подключен к ленте длиной в 1 метр для тестов. Буду признателен за комментарии и ваш опыт, что можно было сделать лучше.
спасибо за труд! ИМХО надо смотреть в сторону адресных лент/диодов - и цветов больше и динамические эффекты. максимум что стоит делать с обычными диодами - диммирование.
Еще можно было бы это сделать с НА который на HASSIO, цены бы ему небыло.
Очень интересно, а можно попросить продолжить с modbus тему с измерителями мощьности?
Очень хочу измерять потребление и текущую агрузку во всем доме.
Вроде понятно, что надо измеритель типа такого
OR-WE-516) Orno Controller; IP51; RS485 MODBUS RTU
и конвертер на rs485 (modbus) на WIFI, но что то не находится в инете успешных историй, как все это с НА подружить.