Реле RS485 modbus: https://alii.pub/6vyzcg?erid=2SDnjeu8agG
Usb to RS485: https://alii.pub/6vyzel?erid=2SDnjcLt9yi
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
В этой статье расскажу как управлять блоком реле Modbus RTU RS485 с Linux и с Home Assitant.
Естественно для работы можно использовать Usb to rs485 свисток. Но я это все дело проверял на уже встроенном rs485 контроллере в JetHub D1+.
Итак, для работы из под линукс нам нужен будет modbus_cli. Это программа работающая на питоне. Для установки ее нужно сделать следующее:
Сначала установить pip.
sudo apt install python3-pip
Далее можно попробовать установить через pip саму программу modbus_cli (но у меня без танцев с бубном не получилось).
Если Вы пытаетесь установить из под учетки root modbus_cli, то надо создать файл с определенным содержимым.
Создаем папку.
mkdir /root/.config/pip
Далее создаем файл pip.conf с содержимым.
nano /root/.config/pip/pip.conf
и вставляем содержимое:
[global]
break-system-packages = true
После этого устанавливаем modbus_cli
sudo pip3 install modbus_cli
Если не получилось, то есть второй вариант установки modbus_cli
Сначала скачиваем modbus_cli с github:
git clone https://github.com/favalex/modbus-cli.git
далее переходим в папке и запускаем файл установки.
cd modbus-cli
python3 setup.py install
Утилиту для работы с modbus мы установили. Теперь можно поиграться с реле.
Со страницы самого блока реле, есть табличка в которой описаны регистры для работы с ним. Для новичка это просто набор каракуль. Но постараюсь немного рассказать. Хотя я сам новичок.
Из этой таблички мы можем подчеркнуть, что по умолчанию реле работают на скорости 9600.
Чтоб управлять реле нужно в 112 регистр отправить 0x0001 для включения одного реле, а 0x0000 выключить.
И тут надо чуть поподробнее. Дело в том, что эти реле включаются и выключаются по последним битам. Грубо говоря 1 это реле включится, а 0 реле выключится.
Следовательно у нас есть числа в 10тичном формате 0,1,2,3. Если эти числа перевести в двоичную систему то получим следующее
00 – это 0 и следовательно все реле выключены
10 – это 1 и включено первое реле, но второе выключено
01 – это 2 и включено второе реле, но первое выключено
11 – это 3 и включены оба реле.
Собственно отправляя в регистр 112 эти числа в десятичном формате, мы будем управлять нагрузкой реле.
Общая команда на включение первого реле будет следующая:
sudo modbus -b 9600 -s 1 -v /dev/ttyUSB1 112=1
где /dev/ttyUSB1 это адрес usb/rs485 переходника.
Ну и следовательно чтоб включить второе реле, но выключить первое отправить нужно цифру 2
sudo modbus -b 9600 -s 1 -v /dev/ttyUSB1 112=2
Включить оба реле:
sudo modbus -b 9600 -s 1 -v /dev/ttyUSB1 112=3
выключить все реле:
sudo modbus -b 9600 -s 1 -v /dev/ttyUSB1 112=4
Так-же это реле может управлять двигателем (да и наверное много еще фишек всяких умеет, на которые у меня не хватило терпения разбираться).
Управление двигателем так-же описано на странице релюшек:
Расшифровав этот 16ричный код получаем команду для запуска двигателя (включение одного реле и выключение другого):
modbus -b 9600 -s 1 -v /dev/ttyUSB0 0=1024
Ну и следовательно в обратную сторону, чтоб выключить первое реле и включить другое реле (вращение двигателя в обратную сторону)
modbus -b 9600 -s 1 -v /dev/ttyUSB0 1=1024
Эти числа взяты из выделенного на картинке квадрата. Первый блок 00 и 01 это следовательно 0 и 1, а числа 0400 – это 1024 в десятичной(если считать из 16тиричной).
Ну и получается мы либо к 0 приравниваем 1024 для движения forward. Либо к 1 приравниваем 1024 для движения в обратную сторону.
Ну а чтоб остановиться к 0 нужно приравнять 2048
modbus -b 9600 -s 1 -v /dev/ttyUSB0 0=2048
Про работу из пол Linux в modbus заканчиваем. Теперь давайте разберемся как этими же реле можно управлять из Home Assitant.
Home Assitant ModBus.
Modbus в Home Assitant реализован только в Configuration.yaml
И вот для того, чтоб управлять двумя релюшками зная регистры которые мы выше рассмотрели. Код будет вышлядеть следующим образом:
#В этом блоке описываем работу самого usb-rs485
modbus:
- name: modbus_hub
type: serial
port: /dev/ttyUSB1
baudrate: 9600
bytesize: 8
method: rtu
parity: N
stopbits: 2
switches:
#Описываем управление первым реле
- name: "Switch1"
scan_interval: 5
slave: 1 # это адрес устройства
address: 112 # это регистр устройства
command_on: 1 # Цифра в 10тичном формате для включения реле
command_off: 0 # Цифра в 10тичном формате для выключения реле(точнее обоих сразу)
#Описываем управление второго реле
- name: "Switch2"
scan_interval: 5
slave: 1 # это адрес устройства
address: 112 # это регистр устройства
command_on: 2 # Цифра в 10тичном формате для включения второго реле
command_off: 0 # Цифра в 10тичном формате для выключения второго реле (точнее обоих сразу)
Ну и следовательно после применения этой конфигурации у Вас появится два реле под названием Switch1 и Switch2 в Home Assitant.