Подключение iRidium server к IBM Watson IoT
IBM Cloud предоставляет множество различных сервисов. В данном примере нам потребуются только два сервиса, которые позволят сохранять в облаке исторические данные умного дома, построенного на основе ПО iRidium, и потом просматривать архивы в виде трендов, диаграмм и других элементов визуализации, а также возможны другие интересные сопутствующие возможности сервисов.
Первый сервис - Watson IoT - сервис интернета вещей, второй сервис - Cloudant NoSQL - база данных, работающая на основе JSON-запросов. IBM Cloud позволяет без особых сложностей интегрировать два этих сервиса друг с другом.
Описание примера
В рассматриваемом примере iRidium server считывает данные с Modbus-устройств и отсылает их в облако IBM Cloud по протоколу MQTT в формате JSON. Данные сохраняются в облачной базе данных Cloudant в реальном времени. Средствами аналитики Watson IoT можно просматривать и анализировать сохранённые данные через веб-интерфейс облака.

Для тестирования можно использовать бесплатный (Lite) план пользования сервисом Watson IoT , который включает в себя:
- до 500 устройств,
- до 500 связей,
- месячные лимиты
-
- до 200 Мб трафика,
-
- до 200 Мб анализируемых данных
-
- до 200 Мб локально анализируемых данных (Edge).
Бесплатный план Lite пользования сервисом Cloudant :
- не ограничен по времени,
- максимум 256 Мб задействованной памяти в Cloud Foundry,
- 1 инстанс (1 база данных),
- автозасыпание приложения (выключение приложения через 3 дня бездействия разработчика).
Подробнее:
-
Watson IoT (на английском языке)
-
Cloudant (на английском языке)
-
Планы использования Cloudant (на английском языке)
Настройка IBM Watson IoT
Для подключения к платформе IBM Watson IoT нужно получить аккаунт IBM Cloud (IBMid).
Подробнее об управлении аккаунтом IBM Cloud (на англ. языке)
Создание инстанса IBM Watson IoT
- Зайдите в свою учётную запись, перейдите на панель управления (Dashboard). Нажмите на кнопку «Create Resource».

- Выберите категорию Internet of Things и нажмите на Internet of Things Platform .

- В параметрах выберите регион, например, US South (для этого региона доступно больше всего функциональных возможностей).

- Выберите ценовой план (например, Lite) и нажмите на кнопку «Create»:

- На панели приборов в списке отобразится добавленный сервис, перейдите на него, в появившемся окне нажмите на кнопку «Launch».

- В новом окне откроется панель управления IoT Platform.

Добавление устройств
- Перейдите на вкладку Devices на панели управления IoT Platform.

- Добавьте устройство, для этого нажмите на кнопку «Add Device».

- В появившемся окне задайте Device Type и Device ID и нажмите «Next».

- Укажите информацию об устройстве, нажмите «Next».

- Добавьте группу (можно пропустить этот шаг), нажмите «Next».

- В окне Security создайте токен для аутентификации (если оставить поле пустым, то токен сгенерируется сам). Нажмите «Next».

- Просмотрите результат создания устройства и нажмите кнопку «Done».

- В появившемся окне появится сообщение о том, что было зарегистрировано устройство, и будут предоставлены реквизиты для подключения устройства к платформе. Если ранее поле токена было оставлено пустым, то будет предоставлен автоматически сгенерированный токен.

- Токен аутентификации (пароль) передаётся только один раз. Сохраните его.
Настройка iRidium server
Настройка драйвера MQTT
-
Создайте проект сервера.
-
Добавьте драйвер MQTT в проект.
-
При добавлении устройств на платформе Watson IoT предоставляются реквизиты для подключения к MQTT-брокеру. Введите их в настройки драйвера.

- Host - адрес облачного интерфейса IoT, кодируется следующим образом:
.messaging.internetofthings.ibmcloud.com
-
Port - порт
-
- 1883 (незашифрованное соединение; по умолчанию отключен в iRidium server)
-
- 8883 (зашифрованное соединение с использованием TLS и SSL)
-
- 443 (зашифрованное соединение WebSocket; не поддерживается в iRidium server)
-
Login - логин, здесь должно быть задано фиксированное значение use-token-auth
-
Password - созданный или сгенерированный Authentication Token
-
MQTT Version - версия MQTT, должна быть 4
-
Client ID - идентификатор клиента, кодируется следующим образом:
d:::
-
Keep Alive - время удержания соединения в секундах
-
Clean - очистка сессии (удаление всех подписок) при разрыве соединения
-
SSL - метод шифрования связи с облаком
- Добавьте команду в драйвер MQTT. Настройте её следующим образом:
-
Topic - топики сообщений, для брокера IBM Bluemix в отличие от брокера Mosquitto не могут содержать произвольные данные. Они кодируются по определённым правилам:
-
- Формат топика публикации данных (запись):
iot-2/evt/<event_id>/fmt/<format_string>
- Формат топика публикации данных (запись):
-
- Формат топика подписки на данные (чтение):
iot-2/cmd/<command_id>/fmt/<format_string>
- Формат топика подписки на данные (чтение):
-
-
- event_id - идентификатор события. Идентификатор события может быть любой строкой, которая действительна в MQTT.
-
-
-
- command_id - идентификатор команды. Идентификатор команды может быть любой строкой, которая действительна в MQTT.
-
-
-
- format_string - это строка, которая определяет тип содержимого сообщения. В рассматриваемом примере может использоваться только формат json.
-
Пример топика публикации:
iot-2/evt/status/fmt/json
Пример топика подписки:
iot-2/cmd/read/fmt/json
-
Value type - должен быть задан тип String, чтобы успешно передать данные в JSON-формате.
-
QoS и Retain могут быть выбраны произвольно в зависимости от требований задачи.
Настройка драйвера Modbus TCP
-
Добавьте драйвер Modbus TCP.
-
Настройте параметры подключения.
-
Создайте необходимое количество команд и тэгов в драйвере.
-
Настройте каждую команду и тэг в соответствии с задачей.
Шлюз Modbus/MQTT
- Добавьте скрипт в проект:
var driver1 = IR.GetDevice("MQTT"); // Name of MQTT driver
var driver2 = IR.GetDevice("Modbus TCP"); // Name of Modbus driver
var command = "MQTT_Command"; // Name of a command in MQTT driver
var taglist = {
"Door_switch" : 1, // List of Modbus tags to send via MQTT
"Ring_button" : 1,
"Outdoor_temperature" : 1,
"Indoor_temperature" : 1
};
IR.AddListener(IR.EVENT_TAG_CHANGE, driver2, function(name, value) {
if (taglist[name]) {
var json_obj = {};
json_obj[name] = value;
var json_str = JSON.Stringify(json_obj);
driver1.Set(command, json_str);
}
});
- Не забудьте в скрипте задать правильные имена драйверов, между которыми организуется шлюз, а также имя команды в драйвере MQTT и список имён тэгов в сети Modbus, которые вы хотите передавать в облако IBM. Вы можете дополнять список тэгов (переменная taglist).
- Данный скрипт может передавать данные только в одном направлении: из сети Modbus TCP в облако.
Проверка подключения к IBM Watson IoT
-
Запустите проект сервера.
-
На панели управления IBM Watson IoT Platform перейдите во вкладку Device .
-
Выберите ранее настроенное устройство.
-
Затем перейдите в Logs . Если соединение было установлено, то в логах подключений появится сообщение об успешности подключения:

Настройка IBM Cloudant
В целом платфома IBM Watson IoT - самостоятельно работающий сервис, но подключение IBM Cloudant NoSQL DB к платформе IBM Watson IoT расширяет возможности: можно длительно хранить данные от устройств и отображать эти данные в инструментах аналитики IBM Watson IoT.
-
Перейдите в панель управления IBM Cloud. Нажмите «Create resource».
-
Выберите категорию Data & Analytics и нажмите на сервис Cloudant NoSQL DB.

- В открывшемся окне выберите Region , например, US South.

- Выберите ценовой план (например, Lite) и нажмите «Create».

- На панели приборов IBM Cloud, в списке помимо IoT Platform отобразится добавленный сервис Cloudant NoSQL DB. Нажмите на кнопку «Launch».

- В новом окне откроется панель управления базой данных.

- Изначально сервис Cloudant пустой (не содержит баз данных и документов). Необходимые базы данных и документы будут позже созданы автоматически при интеграции сервисов.
- Перейдите в панель управления сервиса IoT Platform. В панели навигации перейдите на вкладку Extensions . В разделе Historical Data Storage нажмите на «Setup».

- В разделе конфигурирования перечисляются все доступные службы Cloudant NoSQL DB. Выберите службу, которую хотите подключить.

- В открывшемся разделе настройте конфигурацию сервера Cloudant NoSQL, нажмите на кнопку «Done».

-
Bucket Interval - временной интервал, в течение которого будет записываться один документ базы данных; вся база данных разбивается на несколько документов.
-
Time Zone - часовой пояс; указывается для корректировки даты и времени.
-
Database Name - имя базы данных; введите произвольное имя для дальнейшей идентификации.
Полное имя базы данных будет иметь вид:
iotp_<Org ID>_<Database Name>_<Current Date>
- Должно появиться всплывающее окно с просьбой разрешить подключение к службе Cloudant. Нажмите "Confirm".
- Если всплывающие окна заблокированы браузером, то всплывающее окно не появится.
- Должно появиться сообщение об успешной авторизации. При успешном завершении настройки базы данных Cloudant NoSQL DB, в поле статус отобразится подключенный сервис.
В сервисе Cloudant будут автоматически созданы базы данных и документы. Теперь данные, которые поступают от iRidium server, сохраняются в базе данных Cloudant NoSQL DB.
Подробнее о подключении Cloudant к IoT Platform
Настройка аналитики в IBM Watson IoT
- В окне навигации платформы IoT выберите Boards и нажмите «Create New Board».

- Заполните информацию о новой доске и нажмите «Next».

- Заполните информацию о участниках и нажмите «Submit».

- Перейдите на созданную доску.

- Нажмите «Add New Card».

- Выберите Card Type из предложенного списка, например, «Line Chart».

- В списке отображаемых устройств выберите нужное и нажмите «Next».

- Нажмите «Connect new data set» и заполните необходимые данные. Нажмите "Next".

- Параметры Event и Property берутся со вкладки Devices > State сервиса IoT Platform.

- Отобразится окно предварительного просмотра карты. Перейдите в настройки, в поле Cloudant instance должен появиться установленный экземпляр базы данных. Измените необходимые настройки и нажмите «Next».

- В окне информации о карте укажите заголовок, выберите цветовую схему и нажмите «Submit».

- Таким образом можно добавить несколько элементов отображения данных (карточек).
Тестирование системы
-
Запустите проект сервера.
-
Подайте питание на Modbus-устройства.
- Вместо реальных устройств можно использовать Modbus-эмулятор, например, бесплатный Modbus PLC Simulator.
- Теперь можно анализировать данные с сервера iRidium: просто перейдите в панель управления Watson Iot и наблюдайте, как данные изменяются в реальном времени.
