Skip to content
This repository has been archived by the owner on Oct 16, 2021. It is now read-only.

Feecc - the Robonomics enabled quality assessment system for the Geoscan drone manufacturer

License

Notifications You must be signed in to change notification settings

NETMVAS/feecc-agent-geoscan

 
 

Repository files navigation

Robonomics QA architecture

Субъекты системы

Система представляет собой набор из двух микросервисов (Agent, Backend), разворачиваемых в Docker контейнерах и общающихся друг с другом посредством Rest API.

Агент

Демон, отвечающий за работу со всем оборудованием (камера, RFID-reader) и взаимодействие с IPFS, Pinata, Robonomics. Авторизует работника, формирует паспорта изделий. Имеет Rest API интерфейс, на который присылает запросы бекенд. Отсылает запросы на API интерфейс бекенда.

Frontend

Веб страница, которая отображается на экране у работника. Загружается с бекенда в браузере локально. Позволяет выбирать модель изделия и дополнительные опции. Отображает статус системы. Получает состояние системы с бекенда с помощью long polling и отправляет на него данные с помощью POST запросов.

Backend

Имеет Rest API интерфейс, на который присылает запросы фронтенд, обеспечивает взаимодействие агента и фронтенда. Проксирует запросы от фронтенда на агент. Хранит состояние агента и транслирует его фронтенду, пока агент не пришлет запрос на изменение своего состояния через Rest API.

Состояния систем

Система работает по принципу автомата, который имеет 4 состояния, синхронизированных для всех субъектов.

STATE FRONTEND BACKEND AGENT
STATE 0 На экране заглушка - приложите пропуск к сканеру чтобы начать сборку изделия. Транслирует фронтенду состояние агента, ожидает от него запроса на изменение. Мониторит состояние RFID считывателя, при получении данных валидирует их, меняет свое состояние на 1, сообщает об этом на бекенд.
STATE 1 Открыта страница для ввода параметров изделия. При сабмите формы данные отправляются в json через POST запрос на бекенд, состояние меняется на 2. Ждет запроса от агента об отмене сессии (возвращает state 0 при повторном скане карты) ИЛИ ждет запрос с данными от фронтенда и передает их агенту. В фоне мониторит RFID сканер и, при получении данных, отсылает запрос об изменении состояния на бекенд, встает в STATE 0. Одновременно ждет данных об изделии от бекенда. При получении - встает в STATE 2.
STATE 2 На экране заглушка - идет запись сборки. Для завершения сессии приложить карту. Мониторит состояние бекенда, ждет изменений. Ждет запрос от агента на изменение состояния. При получении - встает в STATE 3, отправляет сигнал на изменение состояния на фронт. Записывает процесс сборки с помощью камеры. В фоне мониторит RFID сканер и, при получении данных, отсылает запрос об изменении состояния на бекенд, встает в STATE 3.
STATE 3 На экране заглушка - идет обработка записей и печать паспорта. Мониторит состояние бекенда, ждет изменений. При получении сигнала встает в STATE 0. Транслирует STATE 3 на фронтенд, ждет запроса на смену состояния от агента. При получении - отправляет сигнал на фронтенд и встает в STATE 0. Получив карту, завершает запись. Отправляет запрос на смену состояния на STATE 3 на бекенд, Запись выкладывается в IPFS, формируется паспорт, хеш паспорта записывается в Робономику, печатается стикер. Отправляет запрос на смену состояния на STATE 0 бекенду и сам в него встаёт. В фоне запись пинится в Pinata.

Схема смены состояний субъектов с течением времени под влиянием событий-тригеров

alt_text

Взаимодействие субъектов системы

Поскольку взаимодействие в системе организовано посредством REST API, бекенд и агент имеют наборы REST API endpoint’ов. Взаимодействие представлено следующей схемой:

alt_text

Запросы

На схеме запросы пронумерованы. Пояснение:

  1. GET - long polling запрос о текущем состоянии от фронтенда на бекенд. В ответ приходит JSON, содержащий одно поле - номер текущего состояния (от 0 до 3);
  2. POST - form submit. Отправляется после заполнения работником формы на фронтенде. Payload - JSON с данными из формы (модель изделия, опции и т.п.);
  3. POST - form submit. Отправляется после получения с фронтенда данных формы. Payload - JSON с данными из формы (модель изделия, опции и т.п.), пересылается агенту без изменений для использования в формировании тех. паспорта изделия;
  4. POST - Запрос о смене состояния. Payload - JSON, содержащий номер нового состояния (от 0 до 3). Работает в оба направления между агентом и бекендом.

REST API endpoints

Приведенным выше запросам соответствуют следующие эндпоинты и содержимое. Нумерация соответствует схеме.

TYPE ENDPOINT JSON PAYLOAD
1 GET /state REQUEST: None RESPONSE: { "state_no": 0 } INFO: state_no: int от 0 до 3 - номер текущего состояния (см. "Состояния систем")
2 POST /form-handler REQUEST: { "session_start_time": "01-01-1970 00:00:00", "product_type": "Perseverance Mars rover", "additional_info": [ "field_1": "Sample text", "field_2": "Sample text", "field_3": "Sample text" ] } RESPONSE: HTTP status code
3 POST /form-handler REQUEST: { "session_start_time": "01-01-1970 00:00:00", "product_type": "Perseverance Mars rover", "additional_info": [ "field_1": "Sample text", "field_2": "Sample text", "field_3": "Sample text" ] } RESPONSE: HTTP status code
4 POST /state-update REQUEST: { "change_state_to": 1, "priority": 1, } RESPONSE: HTTP status code INFO: change_state_to: int от 0 до 3 - номер нового состояния (см. "Состояния систем") priority: int от 1 до 2 - приоритет операции. Таким образом, если бекенд получит сразу 2 запроса о смене состояния, то предпочтение будет отдано команде от агента, т. к. она имеет приоритет 1, а команды фронтенда - 2.

About

Feecc - the Robonomics enabled quality assessment system for the Geoscan drone manufacturer

Resources

License

Stars

Watchers

Forks

Languages

  • Python 100.0%