Подключение 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 дня бездействия разработчика).
Подробнее:
Настройка IBM Watson IoT
Для подключения к платформе IBM Watson IoT нужно получить аккаунт IBM Cloud (IBMid).
Подробнее об управлении аккаунтом IBM Cloud (на англ. языке)
Создание инстанса IBM Watson IoT
1 Зайдите в свою учётную запись, перейдите на панель управления (Dashboard). Нажмите на кнопку «Create Resource».
2 Выберите категорию Internet of Things и нажмите на Internet of Things Platform.
3 В параметрах выберите регион, например, US South (для этого региона доступно больше всего функциональных возможностей).
4 Выберите ценовой план (например, Lite) и нажмите на кнопку «Create»:
5 На панели приборов в списке отобразится добавленный сервис, перейдите на него, в появившемся окне нажмите на кнопку «Launch».
6 В новом окне откроется панель управления IoT Platform.
Добавление устройств
1 Перейдите на вкладку Devices на панели управления IoT Platform.
2 Добавьте устройство, для этого нажмите на кнопку «Add Device».
3 В появившемся окне задайте Device Type и Device ID и нажмите «Next».
4 Укажите информацию об устройстве, нажмите «Next».
5 Добавьте группу (можно пропустить этот шаг), нажмите «Next».
6 В окне Security создайте токен для аутентификации (если оставить поле пустым, то токен сгенерируется сам). Нажмите «Next».
7 Просмотрите результат создания устройства и нажмите кнопку «Done».
8 В появившемся окне появится сообщение о том, что было зарегистрировано устройство, и будут предоставлены реквизиты для подключения устройства к платформе. Если ранее поле токена было оставлено пустым, то будет предоставлен автоматически сгенерированный токен.
Токен аутентификации (пароль) передаётся только один раз. Сохраните его.
Настройка iRidium server
Настройка драйвера MQTT
1 Создайте проект сервера.
2 Добавьте драйвер MQTT в проект.
3 При добавлении устройств на платформе Watson IoT предоставляются реквизиты для подключения к MQTT-брокеру. Введите их в настройки драйвера.
- Host - адрес облачного интерфейса IoT, кодируется следующим образом:
<your_orgID>.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:<your_orgID>:<your_Type>:<your_Device>
- Keep Alive - время удержания соединения в секундах
- Clean - очистка сессии (удаление всех подписок) при разрыве соединения
- SSL - метод шифрования связи с облаком
4 Добавьте команду в драйвер 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
1 Добавьте драйвер Modbus TCP.
2 Настройте параметры подключения.
3 Создайте необходимое количество команд и тэгов в драйвере.
4 Настройте каждую команду и тэг в соответствии с задачей.
Шлюз Modbus/MQTT
1 Добавьте скрипт в проект:
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);
}
});
2 Не забудьте в скрипте задать правильные имена драйверов, между которыми организуется шлюз, а также имя команды в драйвере MQTT и список имён тэгов в сети Modbus, которые вы хотите передавать в облако IBM. Вы можете дополнять список тэгов (переменная taglist).
Данный скрипт может передавать данные только в одном направлении: из сети Modbus TCP в облако.
Проверка подключения к IBM Watson IoT
1 Запустите проект сервера.
2 На панели управления IBM Watson IoT Platform перейдите во вкладку Device.
3 Выберите ранее настроенное устройство.
4 Затем перейдите в Logs. Если соединение было установлено, то в логах подключений появится сообщение об успешности подключения:
Настройка IBM Cloudant
В целом платфома IBM Watson IoT - самостоятельно работающий сервис, но подключение IBM Cloudant NoSQL DB к платформе IBM Watson IoT расширяет возможности: можно длительно хранить данные от устройств и отображать эти данные в инструментах аналитики IBM Watson IoT.
1 Перейдите в панель управления IBM Cloud. Нажмите «Create resource».
2 Выберите категорию Data & Analytics и нажмите на сервис Cloudant NoSQL DB.
3 В открывшемся окне выберите Region, например, US South.
4 Выберите ценовой план (например, Lite) и нажмите «Create».
5 На панели приборов IBM Cloud, в списке помимо IoT Platform отобразится добавленный сервис Cloudant NoSQL DB. Нажмите на кнопку «Launch».
6 В новом окне откроется панель управления базой данных.
Изначально сервис Cloudant пустой (не содержит баз данных и документов). Необходимые базы данных и документы будут позже созданы автоматически при интеграции сервисов.
7 Перейдите в панель управления сервиса IoT Platform. В панели навигации перейдите на вкладку Extensions.
В разделе Historical Data Storage нажмите на «Setup».
8 В разделе конфигурирования перечисляются все доступные службы Cloudant NoSQL DB. Выберите службу, которую хотите подключить.
9 В открывшемся разделе настройте конфигурацию сервера Cloudant NoSQL, нажмите на кнопку «Done».
- Bucket Interval - временной интервал, в течение которого будет записываться один документ базы данных; вся база данных разбивается на несколько документов.
- Time Zone - часовой пояс; указывается для корректировки даты и времени.
- Database Name - имя базы данных; введите произвольное имя для дальнейшей идентификации.
Полное имя базы данных будет иметь вид:
iotp_<Org ID>_<Database Name>_<Current Date>
10 Должно появиться всплывающее окно с просьбой разрешить подключение к службе Cloudant. Нажмите "Confirm".
Если всплывающие окна заблокированы браузером, то всплывающее окно не появится.
11 Должно появиться сообщение об успешной авторизации.
При успешном завершении настройки базы данных Cloudant NoSQL DB, в поле статус отобразится подключенный сервис.
В сервисе Cloudant будут автоматически созданы базы данных и документы. Теперь данные, которые поступают от iRidium server, сохраняются в базе данных Cloudant NoSQL DB.
Подробнее о подключении Cloudant к IoT Platform
Настройка аналитики в IBM Watson IoT
1 В окне навигации платформы IoT выберите Boards и нажмите «Create New Board».
2 Заполните информацию о новой доске и нажмите «Next».
3 Заполните информацию о участниках и нажмите «Submit».
4 Перейдите на созданную доску.
5 Нажмите «Add New Card».
6 Выберите Card Type из предложенного списка, например, «Line Chart».
7 В списке отображаемых устройств выберите нужное и нажмите «Next».
8 Нажмите «Connect new data set» и заполните необходимые данные. Нажмите "Next".
Параметры Event и Property берутся со вкладки Devices > State сервиса IoT Platform.
9 Отобразится окно предварительного просмотра карты. Перейдите в настройки, в поле Cloudant instance должен появиться установленный экземпляр базы данных. Измените необходимые настройки и нажмите «Next».
10 В окне информации о карте укажите заголовок, выберите цветовую схему и нажмите «Submit».
11 Таким образом можно добавить несколько элементов отображения данных (карточек).
Тестирование системы
1 Запустите проект сервера.
2 Подайте питание на Modbus-устройства.
Вместо реальных устройств можно использовать Modbus-эмулятор, например, бесплатный Modbus PLC Simulator.
3 Теперь можно анализировать данные с сервера iRidium: просто перейдите в панель управления Watson Iot и наблюдайте, как данные изменяются в реальном времени.