Описание основных модулей программы - Разработка модуля программируемых сценариев взаимодействия устройств в рамках интеграционной платформы интернета вещей

В программе присутствуют следующие основные модули:

    - PlatformManager - DeviceManager - ScenariosManager - ScenarioEngine - ExportManager - ImportManager - LoggingManager - BluemixConnectionManager - AzureIotConnectionManager - Repository - SyncManager - JSONWriter

Repository - инкапсулирует логику хранения и чтения данных с жесткого диска, а также доступ к скаченным с платформ данных об устройствах. Содержит основные методы для получения текущих настроек платформ и настроенных сценариев.

Данные, напрямую относящиеся к модулю программируемых сценариев, записываются и считываются в JSON файл, лежащий на жестком диске на сервере. Записью на жесткий диск занимается модуль JSONWriter, который вызывается модулем Repository.

SyncManager - основной модуль синхронизации данных в платформах и текущим выполнением программы. Для корректной настройки сценариев необходимо знать актуальные устройства, подключенные к платформам. Задача SyncManager загружать в память метаданные о текущих устройствах, событиях и допустимых командах.

SyncManager напрямую с платформами не общается, подключение к конкретным платформам делегируется соответствующими менеджерами подключения. В рамках этой работы были созданы 2 менеджера - BluemixConnectionManager и AzureIotConnectionManager, которые подключаются к IBM Bluemix и Azure IoT Hub соответственно. В BluemixConnectionManager используются библиотеки Ibmiotf и Passport-ibmid-oauth2, а в AzureIotConnectionManager - Azure-cli, Azure-iothub и Azure-iot-device.

PlatformManager отвечает за CRUD (Создание, Чтение, Редактирование, Удаление) операции, связанные с платформами.

DeviceManager отвечает за CRUD операции, управление событиями и командами.

ScenariosManager - отвечает за CRUD операции над сценариев. Сценарий представляет собой JSON объект, состоящий из тех сущностей, что были рассмотрены в предыдущем разделе. При сохранении сценария происходит проверка на корректный порядок узлов (есть хотя бы один входной и узел и все ветки узлов сценария заканчиваются выходными узлами), корректность параметров устройств и платформ: у SyncManager запрашиваются актуальные данные об устройствах и платформах. Если все корректно, сценарий сохраняется. В случае ошибки, возвращается тип ошибки и небольшое сообщение с описанием. Также через этот модуль происходит выставление свойства Scenario Status.

ScenarioEngine - основной модуль программы. При старте приложения или при сохранении сценария в ScenarioManager этот модуль вычитывает все сценарии, находящиеся в статусе активный. Далее смотрит на начальные узлы и события, которые должны стартовать сценарий. Раз в 10 секунд происходит поллинг соответствующих платформ на появление новых событий по заданным типам и устройствам.

В случае, если событие, необходимое для сценария действительно выполнилось, ScenarioEngine стартует соответствующий сценарий, передавая управление стартовому узлу и передавая в него данные, пришедшие вместе с событием.

Далее пытается выполниться функция, находящаяся в поле Func. После выполнения управление передается в NextNode. Если NextNode типа Intermediate алгоритм действий повторяется. Если NextNode типа End, выполняется команда, находящаяся в поле OutcomingAction. После ее завершения выполнение сценария заканчивается.

Основной и единственной функцией LoggingManager является логирование всех операций, происходящих в модуле. Логируются сообщений о старте модуля, вычитывании данных о текущих сценариях с файла, подключении к различным интеграционным платформам, создание и редактирование сценариев, старт выполнения сценария, завершение сценария и отправка команды на устройство. Также логируются все ошибки, происходящие в системе. Такое логгирование необходимо для того, чтобы в случае, если модуль не отработает в каком-то сценарии, можно было понять, что предшествовало данному событию, какую ошибку выдало приложение, чтобы понять как исправить дефект. Возможно, пользователь некорректно настроил сценарий, а также возможно, что где-то в коде присутствует ошибка. Источник проблемы можно исследовать.

ExportManager занимается тем, что выгружает всю доменную модель в один файл. Это необходимо либо для создания резервной копии, из которой в случае потери мастер данных можно будет восстановить работоспособность системы в неизменном виде, либо для клонирования системы на новую машину.

Задача ImportManager считать всю доменную модель из файла, и полностью восстановить состояние системы. Есть много различных методов для разрешения конфликтов, в том числе и методом слияния. Но в рамках упрощений в данной работе было принято решение, что файл, загружаемый через ImportManager является мастер данными, т. е. необходимо удалить всю существующую доменную модель и заменить ее моделью из файла.

Похожие статьи




Описание основных модулей программы - Разработка модуля программируемых сценариев взаимодействия устройств в рамках интеграционной платформы интернета вещей

Предыдущая | Следующая