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

10 февраля 2019, 10:25

Добрый день.

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


Все новости мира умных домов - t.me/SprutAI_News

Остались вопросы? Мы в Telegram - t.me/soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Алексей Костаков (partizan)
    Алексей Костаков (partizan) 8 месяцев назад

    спасибо за труд! ИМХО надо смотреть в сторону адресных лент/диодов - и цветов больше и динамические эффекты. максимум что стоит делать с обычными диодами - диммирование.

  2. (maikl)
    (maikl) 8 месяцев назад

    Еще можно было бы это сделать с НА который на HASSIO, цены бы ему небыло.

  3. (levran)
    (levran) 6 месяцев назад

    Очень интересно, а можно попросить продолжить с modbus тему с измерителями мощьности?

    Очень хочу измерять потребление и текущую агрузку во всем доме.

    Вроде понятно, что надо измеритель типа такого 

    OR-WE-516) Orno Controller; IP51; RS485 MODBUS RTU

    и конвертер на rs485 (modbus) на WIFI, но что то не находится в инете успешных историй, как все это с НА подружить.

К списку блогов

Скидки для сообщества

Wiren Board

+7 495 150-66-19
Промокод:
SPRUTHUB
Размер скидки:
10%
Не работает на блоки питания, антенны и т.п, не работает на демо-чемодан.

Похожие записи

05 февраля 2019, 00:29
Строю свой первый дом и рассказываю о муках выбора, проводке под умный дом, оборудовании. 05.09.2019 - лето
10 февраля 2019, 10:56
Начало положено...
13 февраля 2019, 22:00
Подключение радио на Xiaomi Gateway к Home Assistant c дальнейшим использованием в автоматизациях
19 апреля 2019, 20:53
Требуется ваше мнение!
06 февраля 2019, 12:02
Автоматизированное открытие/закрытие окна
04 апреля 2019, 12:45
Самое важное из апдейта Home Assistant 0.91-0.91.4 от 03.04.19.
21 марта 2019, 11:59
Самое важное из апдейта Home Assistant 0.9 от 20.03.19.
21 февраля 2019, 21:12
Самое важное из апдейта Home Assistant 0.88 от 20.02.19.
07 февраля 2019, 21:12
Самое важное из апдейта Home Assistant 0.87 от 06.02.19.