Это прототип асинхронного серверного модуля входящего в состав проекта "Система сопровождения производственных объектов при помощи дополненной реальности".
Данный модуль обеспечивает следующие функции:
- Обеспечивает соединение с клиентами (мобильныйми приложениями и не только) и обмен данными по протоколу TCP/IP;
- Выполняет приём сообщений представленных в формате XML;
- Выполняет распаковку и упаковку XML-контейнеров;
- Выполняет обработку запросов и формирует ответ;
- Осуществляет прогнозирование показателей объекта на основе исторических данных;
- Выполняет аутентификацию/авторизацию пользователей пользователей.
Струкутура сервера имеет следующий вид:
Модуль прогнозирования использует следующие технологии:
- Библиотеку RDFlib для работы с базой знаний и хранения в ней сведений об актуальной нейросетевой модели;
- Библиотеку Keras для работы с нейросетевыми моделями;
- Библиотеку PyMongo для работы с базами данных MongoDB и хранимыми в ней данными об объектах, датчиков, пользователях и данными для построения AR-интерфейса на клиентском приложении.
Изучив документацию к данному API PyMongo было принято решение написать ещё один слой интерфейса, потому что нативный интерфейс предоставляет лишь основные и базовые методы для работы с СУБД и самой базой данных MongoDB, что в контексте данного проекта не очень удобно, итоговый разработанный интерфейс к API PyMongo находится в модуле DBinterface.py
Серверный модуль прогнозирования испольует в качетсве модели нейросетевую двухслойную модель со слоями LSTM, при создании новой нейросетевой модели параметры для конструирования методами Keras подгружаются с базы знаний.
Модуль работы с нейронными сетями выполняет в автоматическом порядке:
- Сканирование базы знаний на поиск актуальной нейросетевой модели*;
- Провека модели на адекватность **;
- Подготовка данных для обученя, переобучения, тестирования модели и генерации прогнозных значений.
- Обучение новой нейросетевой прогностической модели;
- Переобучение новой нейросетевой прогностической модели;
- Генерация предсказаний на основе актуальной нейросетевой прогностической модели;
* актуальная нейросетевая модель - модель, прогнозы которой по велечинам отклоняются не более чем на 5%.
** адекватная модель - модель, прогнозы которой по велечинам отклоняются не более чем на 5%.
Работа прогнозирующего модуля выполняется по следующему алгоритму:
Для обмена данными с сервером клиенту необходимо отвправлять ему запросы, которые помещаются в специальный XML-контейнер.
Вид XML запроса:
<?xml version="1.0" encoding="utf-8"?>
<message>
<method>
methodName
</method>
<parameters>
...
</parameters>
</message>
Вид XML ответа:
<?xml version='1.0' encoding='utf-8'?>
<message>
<method>
response
</method>
<data>
...
</data>
</message>
Обработчик запроса на данны момет обрабатывает следующие методы (methodName):
- getLast - возврат последних значений объекта;
- logIn - аутентификация пользователя;
- getBuildSettings – запрос на настройки для графопостроителя интерфейса AR;
- setBuildSettings – запись настроек для интерфейса AR;
- getPublicKey – запрос на публичный ключ для передачи данных в зашифрованном виде (Шифрование производится алгоритмом RSA-OAEP);
- getPrognose – запрос на прогнозные показания по сопровождаемому в данный момент объекту
- setNewStatus – включение/выключение объекта управления
Добавление обрабатываемых запросов выполняется добавлением соответствующей ветки в обработчике запросов HandleRequest.py
Структура обработчика запросов следующая:
if method == “method_name_1”: блок обработки запроса method_name_1
elif method == “method_name_2”: блок обработки запроса method_name_2
...
Else: сообщение о неправильном выбранном методе запроса