Подниму тему, может, кому пригодится.
Modbus можно использовать на любом Микротике при наличии USB порта, работают практически любые USB/RS485 адаптеры, в том числе самые дешёвые с Алиэкспресс. Ставим пакет IoT и получаем контроллер с богатым функционалом. Адаптеры USB/RS485 можно брать на чипе Prolofic, CH340, FTDI, многие другие могут так же опознаться, на RouterOS x86 будет работать всё, на MIPS только распространённые. При наличии на устройстве свободного RS232 порта, не консольного, должны работать адаптеры RS232/RS485.
После перезагрузки Микротика сбрасывается настройка порта Modbus, в шедулере добавляем скрипт с исполнением на startup:
Код: Выделить всё
/iot modbus set disabled=no hardware-port=имя порта с адаптером
Есть KNOT, отрабатывал на нём следующую схему:
https://forum.mikrotik.com/viewtopic.php?t=203211
Работа с блутуз датчиками в условиях городской квартиры, когда Микротик под сотню устройств вокруг видит, существенно нагружает MIPS платформу, справляется, но KNOT работающий с блутуз датчиками не стоит использовать в качестве сетевого шлюза, исключительно в роли шлюза IoT. Модбас линия на 9600 работает очень шустро, MIPS работающий в роли сетевого шлюза особо не заметит дополнительной нагрузки, если модбас устройств не слишком много и не писать сложную логику в скриптах.
KNOT имеет смысл только для работы с блутуз датчиками, но умеет он их только читать, что не позволяет работать с blt протоколами требующими авторизации и выдающими данные по запросу, данные всегда должны быть в эфире. Зато приём у него уверенный, телефоны и бытовуху с блутузом всех соседей видно. LoRa пока реализована только на уровне шлюза, датчики в скриптах не почитать, не интересно.
Фирменные датчики MikroTik и Teltonika - дорого, но круто, работают без нареканий, экономно расходуют батарею, качество во всём, образцовые изделия. Есть простор для фантазии и реализации собственных устройств, но учитывая открытость протокола и риску подвергнуться фишингу, не стоит рассматривать blt на ответственные роли. Modbus и проще, и надёжнее.
Пример чтения данных датчика температуры и влажности RS485 у которого в регистре 0 хранится значение температуры и в регистре 1 значение влажности - самый распространенный вариант, читаем 2 регистра с адреса 0:
Код: Выделить всё
/iot modbus transceive address=3 function=3 values=0,0,0,2
или
Код: Выделить всё
/iot modbus transceive address=3 function=3 data=00000002
address=адрес датчика в сети модбас
function=3 - read holding registers - функция чтения регистров
values=0,0,0,2 - первые два байта - старший и младший байты адреса регистра с которого начинаем чтение, следующие два - старший и младший байты количества читаемых регистров
data=00000002 - то же самое в шестнадцатеричном виде
REST API
Код: Выделить всё
POST http://router/rest/iot/modbus/transceive
{"address":3,"function":3,"values":"0,0,0,2"}
Ничто не мешает подключить несколько адаптеров USB/RS485 на хаб, перед обращением к модбас устройствам выбирать нужный hardware-port - это может быть полезным, если есть устройства поддерживающие не совместимые режимы скорости или иные отличия в линиях.
REST API
Код: Выделить всё
POST http://router/rest/iot/modbus/set
{"hardware-port":"имя порта с адаптером"}
список портов