Настройка wb-led с помощью USB адаптера и bash скрипта

это сборник команд которые могут пригодиться

в примере адрес устройства 60, USB_to_485 подключен к порту /dev/ttyACM0, чаще всего так и будет если он у вас один

# тут можно скачать установочный пакет с утилитой
wget https://github.com/contactless/modbus-utils/releases/download/1.2/modbus-utils_1.2_amd64.deb
#читаем адрес устройства для проверки коннекта. Читаем регистр с адресом 128, командой 03
modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a 60 -t 0x03 -r 128
#ответ будет в шестнадцатиричном (hex) формате. Найдите перекодировщик для удобства работы
#меняем адрес устройства с 60 на 61. Пишем регистр с адресом 128, командой 06
modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a 60 -t 0x06 -r 128 61

читаем название устройства

echo -e $(modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a 60 -t 0x03 -r 200 -c 20 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')

читаем версию прошивки

echo -e $(modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a 60 -t 0x03 -r 250 -c 16 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')

читаем сигнатуру устройства

echo -e $(modbus_client -m rtu -p none -s 2 -b9600 /dev/ttyRS485-1 -a 60 -t3 -r 290 -c 12 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')

#читаем текущий режим работы
modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a 60 -t 0x03 -r 4000
SUCCESS: read 1 of elements:
Data: 0x0011

если перевести из hex to dec, будет 17, смотри таблицу ниже

W + W + W + W 0 W1 W2 W3 W4
2W + W + W 1 W1 + W2 (parallel) W3 W4
CCT + W + W 2 CCT1 Warm White
(Тёплый) CCT1 Cool White
(Холодный) W3 W4
W + W + 2
W 16 W1 W2 W3 + W4 (parallel)
2W + 2W 17 W1 + W2 (parallel) W3 + W4 (parallel)
CCT + 2W 18 CCT1 Warm White
(Тёплый) CCT1 Cool White
(Холодный) W3 + W4 (parallel)
W + W + CCT 32 W1 W2 CCT2 Warm White
(Тёплый) CCT2 Cool White
(Холодный)
2
W + CCT 33 W1 + W2 (parallel) CCT2 Warm White
(Тёплый) CCT2 Cool White
(Холодный)
CCT + CCT 34 CCT1 Warm White
(Тёплый) CCT1 Cool White
(Холодный) CCT2 Warm White
(Тёплый) CCT2 Cool White
(Холодный)
RGB + W 256 B R G W4
4*W 512 W1 + W2 + W3 + W4 (parallel)


Тут черновик скрипта с описанием, ниже есть чистовик

addr=60

#echo скрипт устанавливает инструмент wb-utils и с его помощью производит настройку wb-led
#echo создаем папку
#mkdir -p /temp/wb-utils
#echo скачиваем инструменты
#wget -P /temp/wb-utils/ https://github.com/wirenboard/modbus-utils/releases/download/v1.2.10/modbus-utils_1.2.10_amd64.deb 
#echo установка инструмента
#/usr/bin/apt install -y /temp/wb-utils/modbus-utils_1.2.10_amd64.deb
# аналогично усанавливаем заранее скачанный инструмент для прошивки
#/usr/bin/apt install -y /temp/wb-utils/wb-mcu-fw-flasher_1.3.2_amd64.deb
#sleep 5
#echo Сигнатура прошивки устройства
#echo -e $(modbus_client -m rtu -p none -s 2 -b9$addr0 /dev/ttyACM0 -a $addr -t3 -r 290 -c 12 | grep Data | sed -e 's/.*Data://' #-e 's/ 0x00/\\x/g')
# заливаем новую прошивку в диммер wb-led. Внимание, сигнатура должна совпадать с выводом команды для проверки сигнитуры выше
#/usr/bin/wb-mcu-fw-flasher -j -d /dev/ttyACM0 -a $addr -f ./ledG.wbfw
#sleep 5
#echo Перезагрузка устройства без сохранения состояния: пишем в адрес 120 holding 0*06 значение 1
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 120 1

echo Режим работы 0, то есть все 4 выходных канала работают независимо w*w*w*w, регистры 0-3 каналы 1-4
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 4000 0
echo Устанавливаем частоту ШИМ: пишем в адрес 9 holding 0*06 значение 2 24кГц/2=12кГц
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 9 2

# используем команду записи множества COIL регистров одной командой, ниже указаны отдельные команды для записи по очереди в каждый канал выхода
echo Выключаем все выходы
modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x0f -r 0 -c 4  0 0 0 0
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x05 -r 0 0
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x05 -r 1 0
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x05 -r 2 0
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x05 -r 3 0

# используем команду записи множества HOLDING регистров одной командой, ниже указаны отдельные команды для записи по очереди в каждый канал выхода
echo Выставляем все каналы на яркость 20%
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 2000 -c 4  20 20 20 20
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 2000 20
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 2001 20
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 2002 20
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 2003 20

#Инвертирование (3000) выхода 1 (адрес 0) по короткому нажатию на входе 1 (1000) соответствует 3000 + 0 = 3000 (в hex) => записываем в адрес 1000 Value = 12288 (это hex переведённый в dec)
#Инвертирование (3000) выхода 2 (адрес 1) по короткому нажатию на входе 2 (1001) соответствует 3000 + 1 = 3001 (в hex) => записываем в адрес 1001 Value = 12289 (это hex переведённый в dec)
#Инвертирование (3000) выхода 3 (адрес 2) по короткому нажатию на входе 3 (1002) соответствует 3000 + 2 = 3002 (в hex) => записываем в адрес 1002 Value = 12290 (это hex переведённый в dec)
#Инвертирование (3000) выхода 4 (адрес 3) по короткому нажатию на входе 4 (1003) соответствует 3000 + 3 = 3003 (в hex) => записываем в адрес 1003 Value = 12291 (это hex переведённый в dec)

echo Действие при коротком нажатии на входе n инвертировать выход n
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 1000 -c 4  12288 12289 12290 12291
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 1000 12288
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 1001 12289
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 1002 12290
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 1003 12291

#Инкремент яркости (9000) выхода 1 (адрес 0) по длинному нажатию на входе 1 (1020) соответствует 9000 + 0 = 9000 (в hex) => записываем в адрес 1020 Value = 36864 (это hex переведённый в dec)
#Инкремент яркости (9000) выхода 2 (адрес 1) по длинному нажатию на входе 2 (1021) соответствует 9000 + 1 = 9001 (в hex) => записываем в адрес 1021 Value = 36865 (это hex переведённый в dec)
#Инкремент яркости (9000) выхода 3 (адрес 2) по длинному нажатию на входе 3 (1022) соответствует 9000 + 2 = 9002 (в hex) => записываем в адрес 1022 Value = 36866 (это hex переведённый в dec)
#Инкремент яркости (9000) выхода 4 (адрес 3) по длинному нажатию на входе 4 (1023) соответствует 9000 + 3 = 9003 (в hex) => записываем в адрес 1023 Value = 36867 (это hex переведённый в dec)

echo Действие при длинном нажатии на входе n - инкремент яркости на выходе n
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 1020 -c 4 36864 36865 36866 36867
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 1020 36864
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 1021 36865
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 1022 36866
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 1023 36867

#Декремент яркости (a000) выхода 1 (адрес 0) по короткому, а затем длинному нажатию на входе 1 (1060) соответствует a000 + 0 = a000 (в hex) => записываем в адрес 1060 Value = 40960 (это hex переведённый в dec)
#Декремент яркости (a000) выхода 2 (адрес 1) по короткому, а затем длинному нажатию на входе 2 (1061) соответствует a000 + 1 = a001 (в hex) => записываем в адрес 1061 Value = 40961 (это hex переведённый в dec)
#Декремент яркости (a000) выхода 3 (адрес 2) по короткому, а затем длинному нажатию на входе 3 (1062) соответствует a000 + 2 = a002 (в hex) => записываем в адрес 1062 Value = 40962 (это hex переведённый в dec)
#Декремент яркости (a000) выхода 4 (адрес 3) по короткому, а затем длинному нажатию на входе 4 (1063) соответствует a000 + 3 = a003 (в hex) => записываем в адрес 1063 Value = 40963 (это hex переведённый в dec)

echo Действие при коротком, а затем долгом нажатии на входе n - декремент яркости на выходе n
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 1060 -c 4 40960 40961 40962 40963
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 1060 40960
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 1061 40961
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 1062 40962
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 1063 40963

echo минимальная яркость 0-2048 выставляется в 50
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 70 -c 4 50 50 50 50
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 70 50
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 71 50
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 72 50
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 73 50

echo максимальная яркость 0-2048 выставляется на 2048
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 80 -c 4 2048 2048 2048 2048
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 80 2048
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 81 2048
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 82 2048
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 83 2048

echo Включаем все выходы 
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x0f -r 0 -c 4 1 1 1 1
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x05 -r 0 1
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x05 -r 1 1
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x05 -r 2 1
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x05 -r 3 1
sleep 2

echo ручное управление на средний уровень 0-2048
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 90 -c 4 1024 1024 1024 1024
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 90 1024
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 91 1024
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 92 1024
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 93 1024
sleep 2

echo ручное управление на максимум 0-2048
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 90 -c 4 2048 2048 2048 2048
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 90 2048
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 91 2048
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 92 2048
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 93 2048
sleep 2

echo Выключаем все выходы
modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x0f -r0 -c 4  0 0 0 0
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x05 -r 0 0
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x05 -r 1 0
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x05 -r 2 0
#/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x05 -r 3 0

Тут чистовик скрипта, скопировать в файл setup-wb-led.sh:

# пишем номер устройства, стоит на корпусе

addr=60

echo Режим работы 0 все 4 выходных канала работают независимо w*w*w*w, регистры 0-3 каналы 1-4
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 1 -a $addr -t 0x06 -r 4000 0

echo Устанавливаем частоту ШИМ: пишем в адрес 9 holding 0*06 значение 2 24000/2=12000
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 1 -a $addr -t 0x06 -r 9 2

echo Выключаем все выходы 
modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -b9600 -d8 -a $addr -t 0x0f -r 0 -c 4  0 0 0 0

echo Выставляем все каналы на яркость 20%
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -b9600 -d8 -a $addr -t 0x10 -r 2000 -c 4  20 20 20 20

echo Действие при коротком нажатии на входе n инвертировать выход n
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -b9600 -d8 -a $addr -t 0x10 -r 1000 -c 4  12288 12289 12290 12291

echo Действие при длинном нажатии на входе n инкремент яркости на выходе n
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -b9600 -d8 -a $addr -t 0x10 -r 1020 -c 4 36864 36865 36866 36867

echo Действие при коротком, а затем долгом нажатии на входе n декремент яркости на выходе n
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -b9600 -d8 -a $addr -t 0x10 -r 1060 -c 4 40960 40961 40962 40963

echo минимальный ШИМ 0-2048
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -b9600 -d8 -a $addr -t 0x10 -r 70 -c 4 50 50 50 50

echo максимальный ШИМ 0-2048
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -b9600 -d8 -a $addr -t 0x10 -r 80 -c 4 2048 2048 2048 2048

echo Включаем все выходы 
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -b9600 -d8 -a $addr -t 0x0f -r 0 -c 4 1 1 1 1
sleep 2

echo ручное управление на средний 0-2048
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -b9600 -d8 -a $addr -t 0x10 -r 90 -c 4 1024 1024 1024 1024
sleep 2

echo ручное управление на максимум 0-2048
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -b9600 -d8 -a $addr -t 0x10 -r 90 -c 4 2048 2048 2048 2048
sleep 2

echo Выключаем все выходы
modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -b9600 -d8 -a $addr -t 0x0f -r0 -c 4  0 0 0 0

Подключаем оборудование,
запитываем выходы от внешнего источника!!!
для проверки работоспособности подкидываем кусок ленты на любой из выходов.

использование требует права администратора:

schwab@schwab-PC:~/Документы/modbus_client/wb-led$ sudo bash setup-wb-led.sh
[sudo] пароль для schwab:
Режим работы 0 все 4 выходных канала работают независимо wwww, регистры 0-3 каналы 1-4
SUCCESS: written 1 elements!
Устанавливаем частоту ШИМ: пишем в адрес 9 holding 0
06 значение 2 24000/2=12000
SUCCESS: written 1 elements!
Выключаем все выходы
SUCCESS: written 4 elements!
Выставляем все каналы на яркость 20%
SUCCESS: written 4 elements!
Действие при коротком нажатии на входе n инвертировать выход n
SUCCESS: written 4 elements!
Действие при длинном нажатии на входе n инкремент яркости на выходе n
SUCCESS: written 4 elements!
Действие при коротком, а затем долгом нажатии на входе n декремент яркости на выходе n
SUCCESS: written 4 elements!
минимальный ШИМ 0-2048
SUCCESS: written 4 elements!
максимальный ШИМ 0-2048
SUCCESS: written 4 elements!
Включаем все выходы
SUCCESS: written 4 elements!
ручное управление на средний 0-2048
SUCCESS: written 4 elements!
ручное управление на максимум 0-2048
SUCCESS: written 4 elements!
Выключаем все выходы
SUCCESS: written 4 elements!

тут переработанный скрипт, без лишнего вывода в терминале:

#!/bin/bash

# Номер устройства, стоит на корпусе
addr=60

# Режим работы 0: все 4 выходных канала работают независимо w*w*w*w, регистры 0-3 каналы 1-4
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 4000 0

# Устанавливаем частоту ШИМ: пишем в адрес 9 holding 0*06 значение 2 (24кГц/2=12кГц)
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x06 -r 9 2

# Выключаем все выходы 
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x0f -r 0 -c 4 0 0 0 0

# Выставляем все каналы на яркость 20%
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 2000 -c 4 20 20 20 20

# Действие при коротком нажатии на входе n инвертировать выход n
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 1000 -c 4 12288 12289 12290 12291

# Действие при длинном нажатии на входе n инкремент яркости на выходе n
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 1020 -c 4 36864 36865 36866 36867

# Действие при коротком, а затем долгом нажатии на входе n декремент яркости на выходе n
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 1060 -c 4 40960 40961 40962 40963

# Минимальный ШИМ 0-2048
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 70 -c 4 50 50 50 50

# Максимальный ШИМ 0-2048
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 80 -c 4 2048 2048 2048 2048

# Включаем все выходы 
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x0f -r 0 -c 4 1 1 1 1
sleep 2

# Ручное управление на средний 0-2048
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 90 -c 4 1024 1024 1024 1024
sleep 2

# Ручное управление на максимум 0-2048
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x10 -r 90 -c 4 2048 2048 2048 2048
sleep 2

# Выключаем все выходы
/usr/bin/modbus_client /dev/ttyACM0 -m rtu -p none -s 2 -a $addr -t 0x0f -r0 -c 4 0 0 0 0

На этом всё. Предлагаю закидывать в эту тему все ваши наработки по работе с USB_to_485. Ссылка на эту тему в соответствующих разделах документации облегчит поиск информации новым пользователям.

2 лайка