Подключение устройств Modbus TCP к облачным сервисам MQTT
MQTT предоставляет преимущества как телеметрический протокол: он обеспечивает обмен данными между устройствами (клиентами) в условиях ненадёжной или непостоянной связи. Устройства могут отключаться от сети, но при повторном подключении MQTT-брокер гарантированно передаст сообщение.
В последнее время набирают популярность различные облачные сервисы с MQTT-брокерами, например, Центр Интернета вещей Azure от Microsoft или AWS IoT от Amazon.
Вы можете подключить к облачным сервисам MQTT устройства, не поддерживающие MQTT, например, Modbus-устройства, используя для этого iRidium server как шлюз.
Описание примера
iRidium server используется для подключения устройств Modbus TCP к облачному сервису CloudMQTT. Также к сервису подключается панель, для которой разрабатывается отдельный проект с графическим интерфейсом. Таким образом появляется возможность удалённо управлять устройствами в сети Modbus TCP по телеметрическому протоколу MQTT.
-54ec4504077cbaa01a4b6e470151d3de.png)
Настройка CloudMQTT
CloudMQTT предлагает различные планы использования.
Вы можете выбрать бесплатный план Cute Cat, который предоставляет виртуальный сервер (не выделенный), максимум 5 пользователей, 5 правил доступа и 5 соединений, трафик 10 кБит/с. Этот план не рекомендуется для коммерческого использования, но отлично подойдёт для тестирования и домашнего хобби.
-
Зарегистрируйтесь на сайте CloudMQTT и войдите под учётной записью.
-
Нажмите кнопку "Create New Instance".

- Задайте имя инстанса, план использования и географическое расположение сервера (Data Center ). Нажмите кнопку "Create New Instance".

- Кликните на имя созданного инстанса, чтобы перейти к его настройкам.
- На вкладке DETAILS отобразятся все данные, необходимые для подключения к облачному сервису.

Настройка iRidium server
Настройка драйвера MQTT
-
Создайте проект сервера.
-
Добавьте драйвер MQTT в проект.
-3d59d890e11dc987ec9167472d02ffbf.png)
- Настройте драйвер в соответствии со вкладкой DETAILS инстанса сервиса CloudMQTT:
-
Host - адрес инстанса сервиса (Server )
-
Port - порт инстанса:
-
- 13816 (незащищённое соединение),
-
- 23816 (защищённое соединение SSL),
-
- 33816 (защищённое содинение WebSocket; не поддерживается iRidium pro)
-
Login - логин для доступа к инстансу (User )
-
Password - пароль для доступа к инстансу (Password )
-
Client ID - идентификатор MQTT-клиента, уникальное имя для каждого устройства MQTT
-
SSL - метод шифрования:
-
- Disable
-
- TLS 1.2 (рекомендуется)
-
- SSL 2.3
-
- SSL 3.0 (не поддерживается CloudMQTT)
Подробнее: Настройка параметров подключения MQTT.
- Создайте необходимое количество каналов и тэгов. Настройте каждый канал и тэг.

CloudMQTT позволяет задавать параметру Topic произвольную строку. Рекомендуется задавать Topic в стандартной иерархической форме, напоминающей адресную строку файловой системы, например:
/place/device_name/group_name/parameter_name
Подробнее: Настройка параметров каналов и фидбеков MQTT.
Настройка драйвера Modbus TCP
-
Добавьте драйвер Modbus TCP.
-
Настройте параметры подключения.
-
Создайте необходимое количество команд и тэгов в драйвере.
-
Настройте каждую команду и тэг в соответствии с задачей.
Шлюз между драйверами MQTT и Modbus TCP
- Добавьте скрипт в проект:
var driver1 = IR.GetDevice("MQTT"); // name of a driver 1
var driver2 = IR.GetDevice("Modbus TCP"); // name of a driver 2
var gatemap = {
// Tag name Channel name
"Door_switch" : "MQTT_Door_switch",
"Ring_button" : "MQTT_Ring_button",
"Outdoor_temperature" : "MQTT_Outdoor_temperature",
"Indoor_temperature" : "MQTT_Indoor_temperature",
"MQTT_Lock" : "Lock",
"MQTT_Siren" : "Siren",
"MQTT_Dimmer_R" : "Dimmer_R",
"MQTT_Dimmer_G" : "Dimmer_G",
"MQTT_Dimmer_B" : "Dimmer_B",
"MQTT_Dimmer_ON" : "Dimmer_ON"
};
IR.AddListener(IR.EVENT_TAG_CHANGE, driver1, function(name, value) {
if (gatemap[name]) {
driver2.Set(gatemap[name], value);
}
});
IR.AddListener(IR.EVENT_TAG_CHANGE, driver2, function(name, value) {
if (gatemap[name]) {
driver1.Set(gatemap[name], value);
}
});
- Не забудьте в скрипте задать правильные имена драйверов, между которыми организуется шлюз, а также карту шлюза.
Карта шлюза (переменная gatemap) представляет с собой список соответствующих пар имён тэгов и каналов двух разных драйверов. Между парами этих тэгов и каналов и будет происходить обмен данными. Вы можете дополнять этот список.
Неуправляемый шлюз
Выше был приведён метод управляемого шлюза между драйверами, который требовал указания карты шлюза тэгов и каналов. В случае управляемого шлюза вы можете указать, какие данные нужно пересылать с тэга одного драйвера на канал другого драйвера, а какие - нет.
Может быть применён более простой скрипт, в котором не нужно будет задавать карту шлюза. В этом случае шлюз будет называться неуправляемым и все данные будут пересылаться с тэгов на каналы. При этом необходимо, чтобы имена тэги одного драйвера совпадали с именами каналов другого драйвера, и наоборот.
-
Задайте одинаковые имена тэгам драйвера MQTT и каналам драйвера Modbus TCP, и соответственно - тэгам драйвера Modbus TCP и каналам драйвера MQTT.
-
Удалите предыдущий скрипт. Вместо него добавьте скрипт:
// Assign the same names to tags of first driver and to channels of second driver,
// and accordingly - to tags of second drivers and to channels of first driver.
var driver1 = IR.GetDevice("MQTT"); // name of a driver 1
var driver2 = IR.GetDevice("Modbus TCP"); // name of a driver 2
IR.AddListener(IR.EVENT_TAG_CHANGE, driver1, function(name,value) {
driver2.Set(name, value);
});
IR.AddListener(IR.EVENT_TAG_CHANGE, driver2, function(name,value) {
driver1.Set(name, value);
});
- В этом скрипте достаточно лишь указать имена драйверов.
Настройка проекта i3 pro
-
Создайте проект панели.
-
Добавьте драйвер MQTT.
-
Настройте подключение к сервису CloudMQTT аналогично тому, как это было сделано в проекте сервера, а именно: введите те же параметры подключения драйвера MQTT (Host , Port , Login , Password ). Назначьте другой идентификатор клиента (Client ID ), чтобы сервис CloudMQTT мог отличать подключающихся клиентов друг от друга.
-
Создайте необходимое количество команд и тэгов. Те переменные, которые были командами в сервере, в панели должны сопоставлены тэгам, и наоборот, тэги в сервере должны соответствовать командам в панели.
-
У команд и тэгов следует задать параметры Topic и Value Type так же, как у соответствующих каналов сервера.
-
Создайте графический интерфейс. Свяжите графические элементы с командами и тэгами драйвера MQTT по событиям или связями.
-a539c67e3caf7874b2ee62cb60349b4c.png)
Тестирование проектов
-
Запустите проект сервера и проект панели в любом порядке. Вы можете использовать для этого эмулятор i3 pro и iRidium server для Windows.
-
Перейдите на вкладку CONNECTIONS инстанса CloudMQTT. На этой вкладке отображается состояние MQTT-соединений.

- Перейдите на вкладку WEBSOCKET UI, используемую разработчиками для тестирования. Здесь вы можете просматривать все получаемые MQTT-сообщения и отправлять их.

- Вы может использовать любой эмулятор сервера Modbus TCP, например, бесплатный Modbus PLC Simulator для тестирования проекта.
В рассматриваемом примере все издатели и подписчики имеют полные права доступа на MQTT-топики, но Вы можете задать правила и ограничения на вкладке USERS & ACL инстанса CloudMQTT.