Пакеты данных в Websockets API

Получение пакетов

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

Для получения пакетов, необходимо выполнить следующие шаги:

  1. Получить access_token с помощью API авторизации,
  2. Отправить команду start в Websockets API, указав в ней полученный access_token,
  3. Отправить команду subscribe, указав нужные типы индикаторов.

Отправка пакетов

Отправка пакетов данных через Websockets API используется в основном при взаимодействии между сервером Платформы, который вычисляет индикаторы, и программой-агентом, которая принимает сырой сигнал с нейроинтерфейса.

Пакеты данных отправляются в формате JSON. Пример валидного пакета данных:

Пакет содержит следующие поля:

{
  "Data": {
    "TenantId": 0,
    "UserId": 12,
    "Group": "bio",
    "Class": "eeg",
    "Kind": "AF7",
    "GlobalEvent": true,
    "Source": "Biofeedback-Trainer",
    "Device": "MuseBle",
    "DeviceInfo": "",
    "Data": "{\"t\":\"2023-03-23T08:01:48.962449Z\",\"s\":[{\"t\":0.0,\"v\":0.0},{\"t\":0.004,\"v\":0.0},{\"t\":0.008,\"v\":0.0}]}"
  }
}

Описание полей, используемых в пакете данных:

ПолеТип данныхОписание
Data (корневой)Корневой элемент JSON пакета
TenantIdintegerИдентификатор приложения или внешнего каталога пользователей. Используется в том случае, если у стороннего разработчика собственные идентификаторы пользователей. По умолчанию, используются пользователи Платформы, зарегистрированные на Паспорте, в этом случае TenantId = 0. Для создания нового каталога пользователей, обратитесь в техническую поддержку Платформы.
UserIdintegerИдентификатор пользователя в данном каталоге (Tenant). По умолчанию (если TenantId = 0), идентификатор пользователя в Паспорте Платформы.
GroupstringГруппа показателей, первая составляющая часть типа данных (например, «bio»)
ClassstringКласс показателя, вторая составляющая часть типа данных (например, «eeg»)
KindstringВид показателя, третья составляющая часть типа данных (например, «AF7»)
GlobalEventbooleanОпределяет, нужно ли сохранять событие в базу данных, чтобы оно было доступно для последующей выгрузки и анализа. Обычно на рабочем окружении сырые данные не нужны, и GlobalEvent ставится в false, чтобы не засорять базу. Но для отладки используется true, чтобы можно было отследить корректность отправки данных
SourcestringИсточник данных, обычно соответствует конкретному приложению. Например, значение «Biofeedback-Trainer» соответствует тренажеру состояний на основе БОС (биологической обратной связи).
Укажите здесь название своего приложения (латиницей без пробелов)
DevicestringУказывается тип устройства, с которого отправляются данные. В настоящий момент поле не влияет на обработку данных, оно может быть полезно для поиска нужного пакета при отладке или для быстрого поиска по базе данных
DeviceInfostringОписание устройства, можно оставить пустым
Data (дочерний)stringОтправляемые данные в заданном формате, структура которого приведена ниже

Рассмотрим структуру пакета данных из поля Data в приведенном выше примере:

{
	"t":"2023-03-23T08:01:48.962449Z",
	"s":[{
		"t":0.0,
		"v":0.0},
	{
		"t":0.004,
		"v":0.0
	},
	{
		"t":0.008,
		"v":0.0
	}]
}

В этом пакете содержится три точки данных, которые отстоят друг от друга на 4 миллисекунды и имеют нулевые значения.

Корневое поле «t» содержит абсолютную временную метку пакета в часовом поясе клиентского приложения.

Далее следует составное поле «s» (от слова «sample»), которое содержит сэмпл с несколькими точками данных.

Каждая точка состоит из времени «t» и привязанного к нему значения «v».

В дочернем поле «t» значение времени проставляется в миллисекундах от абсолютного времени, указанного в корневом поле «t», в формате float (число с плавающей запятой).

Поле «v» содержит значение отправляемого индикатора, тоже в формате float.

Правила именования типов данных

В качестве типов данных для сырого сигнала с отведения нейроинтерфейсов используется тип данных вида bio:eeg:{название отведения}, где название отведения указывается в соответствии со стандартной схемой отведений «10-20%». Название отведения следует указывать в соответствии со справочником электродных отведений.

Если вам необходимо отправить данные по нескольким индикаторам (например, по четырём разным отведениям), то для каждого индикатора нужно сформировать свой пакет данных, указав соответствующие Group, Class и Kind.

Проверка пакетов

На Платформе имеется средство отладки, которое позволяет посмотреть список запущенных моделей с указанием пользователя.

Оно доступно по адресу:

https://cdb.neurop.org/npe/index.html

Найдя модель по идентификатору «RunId» (он приходит в ответе на команду start), по названию модели или по UserId, вы можете нажать на кнопку Metrics и посмотреть количество пакетов, которые пришли в каждый модуль запущенной модели.

Отправьте пакет данных и обновите страницу с помощью кнопки Update. Если счетчики пакетов обновились, значит, ваш пакет дошел успешно.