Блог

Подключение диммера WB-MRGBW-D к Home Assistant

Добрый день.

В данной заметке намерен рассказать про опыт подключения 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.

$ 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 - адрес устройства (наклеен сбоку на самом диммере).

" />

Здесь нужно правильно задать параметр 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, но что то не находится в инете успешных историй, как все это с НА подружить.


Вернуться назад
Вернуться назад