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