REST API#

Web-интерфейс платформы REPEAT VISION позволяет взаимодействовать с программами пользователей, которые могут создаваться с применением любых языков программирования, обладающих поддержкой взаимодействия между программами через web посредством подхода REST.

Далее приводится справка по web-интерфейсу REPEAT VISION.

Важно

В справке web-интерфейса REPEAT VISION используется адрес приложения https://app.repeat.vision

Если на предприятии используется дистрибутив REPEAT VISION, то адрес приложения будет таким, какой указан в строке BASE_URL в файле conf.env.

1.  Список проектов#

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

Адрес

https://app.repeat.vision/backend/api/v1/public/project/getAll

1.1.  Запрос#

Метод GET

Заголовок запроса Header

Ключ - тип строка

Значение - тип строка

"Api-Key"

"Api-Key user_token_value"

Значение заголовка user_token_value требуется заменить на уникальный API ключ, который пользователь может получить в разделе API ключи личного кабинета.

1.2.  Ответ#

Тело ответа Body

Ответом запроса является структура JSON следующего вида.

[
   {
      "userId": 1,
      "projectId": 1,
      "createdAt": "DATE",
      "updatedAt": "DATE",
      "projectName": "NAME",
   }
]

Каждая запись {  } содержит информацию об одном проекте в виде пар ключ - значение.

Описание записи для каждого проекта REPEAT VISION приведены в таблице ниже.

Ключ - тип строка

Описание значения

Тип значения

"userId"

Идентификатор пользователя в REPEAT VISION

Целое число

"projectId"

Уникальный идентификатор проекта

Целое число

"createdAt"

Дата создания проекта

Строка

"updatedAt"

Дата последнего обновления проекта

Строка

"projectName"

Имя проекта, присвоенное пользователем

Строка

Пример ответа платформы REPEAT VISION на запрос для случая, когда у пользователя доступен для моделирования и редактирования 1 проект с именем [DEMO] EV.

[
   {
      "userId": 1234,
      "projectId": 456,
      "createdAt": "2024-03-04T10:15:31.546814Z",
      "updatedAt": "2024-03-15T07:53:57.069585Z",
      "projectName": "[DEMO] EV",
   }
]

Пример запроса списка проектов на Python

import requests
from requests.exceptions import HTTPError
from requests.auth import AuthBase

class APIKeyAuth(AuthBase):
  """API-Key авторизация для запросов модулем requests"""
  def __init__(self, token : str):
    self.token = token

  def __call__(self, request):
    request.headers["Api-Key"] = f"Api-Key {self.token}"
    return request

url = "https://app.repeat.vision/backend/api/v1/public/project/getAll"
token = "требуется_заменить_данную_строку_на_API_ключ_из_личного_кабинета"
try:
  response = requests.get(
    url, 
    auth = APIKeyAuth(token)
    )
  response.raise_for_status()
    
except HTTPError as error:
  raise error("Возникла ошибка на этапе запроса списка проектов")
    
else:
  projects = response.json()

print(projects)
# [
#   {
#     "userId": 1234,
#     "projectId": 456,
#     "projectName": "[DEMO] EV",
#     ...

2.  Состояние модели#

Интерфейс возвращает информацию о состоянии процесса расчёта выбранной модели.

Адрес

https://app.repeat.vision/backend/api/v1/public/model/statusModel

2.1.  Запрос#

Метод GET

Заголовок запроса Header

Ключ - тип строка

Значение - тип строка

"Api-Key"

"Api-Key user_token_value"

"ProjectId"

"user_project_id"

Описание формирования значения для ключа Api-Key смотрите в разделе список проектов.

Значение заголовка user_project_id требуется заменить на строковое значение идентификатора проекта REPEAT VISION. Идентификатор необходимого проекта можно получить следующими способами:

Примечание

Подробное описание получения идентификатора проекта из графического интерфейса приложения REPEAT VISION смотрите в нашем уроке.

2.2.  Ответ#

Тело ответа Body

Ответом запроса является структура JSON. В теле ответа содержится запись {  } c ключом типа строка следующего вида.

{
  "statusModel" : "VALUE"
}

Ключ - тип строка

Описание значения

Тип значения

"statusModel"

Состояние процесса расчёта выбранной модели

Строка

"statusModel" может принимать значения в соответствии с таблицей ниже.

Значение statusModel

Описание

«0»

Расчёт успешно завершён по условию (приказ блока STOP и т.д.)

«1»

Расчёт в процессе

«2»

Расчёт остановлен пользователем из графического интерфейса

«3»

Расчёт остановлен по кнопке PAUSE

«20»

Не удалось запустить расчёт. Проект не найден расчётным модулем

«21»

Расчёт успешно завершён по времени моделирования, установленного в проектных настройках

«51»

Расчёт не завершён из-за ограничения оперативной памяти

«52»

Расчёт не завершён из-за ограничений памяти

«100»

Возникла ошибка в процессе расчёта

Пример тела ответа

{
  "statusModel" : "21"
}

Коды ошибок HTTP ответов

Код

Описание

Рекомендации по исправлению

410

Не запущен расчёт модели. Или потеряно соединение с расчётным модулем

Требуется запустить расчёт модели

Пример Python запроса состояния модели

import requests
from requests.exceptions import HTTPError
from requests.auth import AuthBase

class APIKeyAuth(AuthBase):
  """API-Key авторизация для запросов модулем requests"""
  def __init__(self, token : str):
    self.token = token

  def __call__(self, request):
    request.headers["Api-Key"] = f"Api-Key {self.token}"
    return request

url = "https://app.repeat.vision/backend/api/v1/public/model/statusModel"
token = "требуется_заменить_данную_строку_на_API_ключ_из_личного_кабинета"
project = 456 # Требуется заменить данный номер на идентификатор вашего проекта
try:
  response = requests.get(
    url, 
    auth = APIKeyAuth(token),
    headers = {"ProjectId" : str(project)}
    )
  response.raise_for_status()
    
except HTTPError as error:
  raise error("Возникла ошибка на этапе запроса состояния модели")
    
else:
  status = response.json()

print(status)
# {
#   "statusModel": "1"
#  }

3.  Список глобальных переменных модели#

Интерфейс возвращает список глобальных переменных модели, добавленных ранее при создании модели.

Адрес

https://app.repeat.vision/backend/api/v1/public/model/globals

3.1.  Запрос#

Метод GET

Заголовок запроса Header

Ключ - тип строка

Значение - тип строка

"Api-Key"

"Api-Key user_token_value"

"ProjectId"

"user_project_id"

Описание формирования значения для ключа Api-Key смотрите в разделе список проектов.

Описание формирования значения для ключа ProjectId смотрите в разделе состояние модели.

3.2.  Ответ#

Тело ответа Body

Ответом на запрос является структура JSON. В теле ответа содержится запись {  } следующего вида.

{
    "VARIABLE_NAME" : "VALUE"
 }

Описание ключей

Описание значений

Строка имени глобальной переменной модели

Строка значения глобальной переменной на момент создания

Пример ответа платформы REPEAT VISION на запрос списка переменных модели.

{
  "density": "998.21", 
  "pressure": "50000"
  }

Пример Python запроса списка переменных модели

import requests
from requests.exceptions import HTTPError
from requests.auth import AuthBase

class APIKeyAuth(AuthBase):
  """API-Key aвторизация для запросов модулем requests"""
  def __init__(self, token : str):
    self.token = token

  def __call__(self, request):
    request.headers["Api-Key"] = f"Api-Key {self.token}"
    return request

url = "https://app.repeat.vision/backend/api/v1/public/model/globals"
token = "требуется_заменить_данную_строку_на_API_ключ_из_личного_кабинета"
project = 456 # Требуется заменить данный номер на идентификатор вашего проекта
try:
  response = requests.get(
    url, 
    auth = APIKeyAuth(token),
    headers = {"ProjectId" : str(project)}
    )
  response.raise_for_status()
    
except HTTPError as error:
  raise error("Возникла ошибка на этапе запроса списка переменных модели")
    
else:
  variables = response.json()

print(variables)
# {
#   "density": "998.21", 
#   "pressure": "50000"
#  }

4.  Доступность расчётных модулей#

Интерфейс возвращает информацию о наличии доступных расчётных модулей. Данный запрос рекомендуется использовать в следующих случаях:

  • Количество пользователей, которые выполняют запуск моделей на расчёт превышает доступное количество расчётных модулей на платформе REPEAT VISION. В таком случае допускается ожидание свободного расчётного модуля;

  • Выполнение параметрических исследований, решения задач оптимизации или выполнение расчётных циклов в дистрибутиве платформы REPEAT VISION в локальной сети предприятия с ограниченным количеством доступных расчётных модулей. В таком случае необходимо дождаться хотя бы одного доступного расчётного модуля.

Адрес

https://app.repeat.vision/backend/api/v1/public/controllervm/status

4.1.  Запрос#

Метод GET

Заголовок запроса Header

Ключ - тип строка

Значение - тип строка

"Api-Key"

"Api-Key user_token_value"

Описание формирования значения для ключа Api-Key смотрите в разделе список проектов.

4.2.  Ответ#

Тело ответа Body

Ответом на запрос является структура JSON. В теле ответа содержится запись {  } следующего вида.

{
    "isAvailableSolvers" : true
 }

Ключ - тип строка

Описание значения

Тип значения

"isAvailableSolvers"

Наличие доступных расчётных модулей. Если значение false, то все расчётные модули заняты. Если "isAvailableSolvers" : true, то есть доступные расчётные модули

Логическое значение

Пример запроса количества расчётных модулей на Python

import requests
from requests.exceptions import HTTPError
from requests.auth import AuthBase

class APIKeyAuth(AuthBase):
  """API-Key авторизация для запросов модулем requests"""
  def __init__(self, token : str):
    self.token = token

  def __call__(self, request):
    request.headers["Api-Key"] = f"Api-Key {self.token}"
    return request

url = "https://app.repeat.vision/backend/api/v1/public/controllervm/status"
token = "требуется_заменить_данную_строку_на_API_ключ_из_личного_кабинета"
try:
  response = requests.get(
    url, 
    auth = APIKeyAuth(token)
    )
  response.raise_for_status()
    
except HTTPError as error:
  raise error("Возникла ошибка на этапе запроса количества расчётных модулей")
    
else:
  status = response.json()

print(status)

#   {
#     "isAvailableSolvers": True
#    }

5.  Запуск расчёта модели#

Интерфейс позволяет отправить команду на запуск расчёта модели REPEAT VISION с возможностью управления следующими настройками проекта:

  • Значения глобальных переменных модели;

  • Флаг синхронизации с реальным временем;

  • Время моделирования;

  • Шаг интегрирования;

  • Шаг дискретизации.

Адрес

https://app.repeat.vision/backend/api/v1/public/model/run

Важно

При использовании интерфейса запуска расчёта модели REPEAT VISION в циклах работы ваших программ требуется останавливать расчёт на этапе завершения цикла с очисткой результатов расчёта и с завершением работы расчётного модуля. Описание соответствующего запроса приведено в разделе Остановка расчёта с очисткой результатов

5.1.  Запрос#

Метод POST

Заголовок запроса Header

Ключ - тип строка

Значение - тип строка

"Api-Key"

"Api-Key user_token_value"

"ProjectId"

"user_project_id"

Описание формирования значения для ключа Api-Key смотрите в разделе список проектов.

Описание формирования значения для ключа ProjectId смотрите в разделе состояние модели.

Тело запроса Body

Телом запроса является структура JSON следующего вида.

{
  "header" : {
    "globalVariables" : {
      "NAME" : "VALUE"
    },
    "isRealTimeSync" : true,
    "modellingTime" : "100",
    "integrationStep" : "50",
    "discretizationStep" : "50"
  }
}

Изменено в версии 2.6.0: Настройки запуска расчёта модели должны содержаться в записи {  } с ключом "header".

Глобальные переменные модели REPEAT VISION описываются в записи {  } по ключу "globalVariables".

Значением для "globalVariables" также должна быть запись {  } с информацией о всех передаваемых в модель актуальных значениях глобальных переменных в соответствии с описанием в таблице ниже.

Описание ключей

Описание значений

Строка имени существующей глобальной переменной в модели

Строка нового значения глобальной переменной

Все ключи и значения структуры должны быть типа строка.

Изменено в версии 2.6.0: При запуске модели требуется передать значения всех глобальных переменных, присутствующих в проекте. В ином случае платформа REPEAT VISION вернёт ответ с кодом ошибки 400.

Предупреждение

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

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

{
  "header" : {
    "globalVariables": {
    "density": "500.1",
    "pressure": "10000"
    }
  }
}

При этом остальные настройки (флаг синхронизации с реальным временем, время моделирования, шаг интегрирования и дискретизации) платформа REPEAT VISION будет использовать из ранее сохранённого проекта.

Добавлено в версии 2.6.0: Тело запроса запуска модели на расчёт может содержать флаг синхронизации с реальным временем, время моделирования, шаг интегрирования и шаг дискретизации.

Ключ - тип строка

Описание значения

Тип значения

"isRealTimeSync"

Синхронизация с реальным временем. При выключенной синхронизации вычисление будет производиться с максимально возможной скоростью и обычно опережает реальное время. При включенной синхронизации один шаг модельного времени будет ориентировочно соответствовать одному шагу реального времени. При большом объёме вычислений модельное время может отставать от реального

Логический тип

"modellingTime"

Значение времени моделирования (размерность значения - секунды), после которого расчёт будет остановлен

Строка

"integrationStep"

Значение шага интегрирования (размерность значения - миллисекунды) между соседними рассчитываемыми состояниями модели

Строка

"discretizationStep"

Значение шага времени (размерность значения - миллисекунды) между ближайшими занесениями результатов расчёта в базу данных

Строка

Важно

Если необходимо использовать настройки времени моделирования, шага интегрирования или шага времени между ближайшими занесениями результатов расчёта в базу данных, тогда в тело запроса требуется передавать значения трём обязательным ключам: "modellingTime", "integrationStep", "discretizationStep".

В ином случае значения настроек используются из ранее сохранённого проекта REPEAT VISION.

Значения времени моделирования, шага интегрирования и шага дискретизации должны устанавливаться в соответствии с правилами проверки графического приложения REPEAT VISION.

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

{
  "header" : {
    "globalVariables": {
    "density": "500.1",
    "pressure": "10000"
    },
    "isRealTimeSync" : true,
    "modellingTime" : "100",
    "integrationStep" : "50",
    "discretizationStep" : "50"
  }
}

5.2.  Ответ#

При запуске модели на расчёт платформа REPEAT VISION формирует ответ со списком блоков, присутствующих на схеме.

Тело ответа Body

Тело ответа представляет собой структуру JSON следующего вида.

{
    "elements" : {
         "BLOCK_ID_NUMBER_1" : {
            "customName" : "INPUT_USER_NAME_VALUE",
            "params" : [
               {
                   "description" : "Input",
                   "name" : "in_1",
                   "modelName" : "1708415414912_IN_1",
                   "value" : "",
                   "unit" : ""
               }
           ]
         },
         "BLOCK_ID_NUMBER_2" : {
            "params" : [
               {
                   "description" : "Value",
                   "name" : "out_1",
                   "modelName" : "1708415430657_OUT_1",
                   "value" : "",
                   "unit" : ""
               }
           ]
         }
    }
}

Ключ - тип строка

Значение - тип запись

"elements"

Набор блоков модели REPEAT VISION

Описание записи {  } с набором блоков модели REPEAT VISION приведено в таблице ниже.

Ключ - тип строка

Значение - тип запись

Идентификатор блока

Атрибуты блока

Примечание

Описание способа получения идентификатора блока в графическом интерфейсе REPEAT VISION приведено в разделе ниже

Описание атрибутов блока приведено в таблице ниже.

Ключ - тип строка

Значение

Тип значения

"customName"

Пользовательское название, применимо только для блока Выходной порт

строка

"params"

Набор параметров блока

список

Внимание

Если блок не является выходным портом, то в записи {  } ответа не будет ключа "customName"

Описание параметра блока приведено в таблице ниже.

Ключ - тип строка

Значение - тип строка

"description"

Описание параметра. Примеры значений: «Input», «Output», «Mass flow»

"name"

Имя параметра. Имя начинается с приставки in или out, для входного или выходного параметра соответственно. Заканчивается имя числовым значением индекса.

"modelName"

Идентификатор параметра. Значение состоит из приставки в виде идентификатора блока и корня в виде имени параметра

"value"

Значение параметра. Заполняется при завершении шага расчёта. Пустое значение на момент начала расчёта.

"unit"

Единицы измерения значения параметра

Примечание

Описание способа получения идентификатора параметра в графическом интерфейсе REPEAT VISION приведено в разделе ниже

Пример тела ответа

{
    "elements" : {
        "1713869940863": {"index": 0,
                          "params": [{"description": "Mass flow",
                                      "name": "out_1",
                                      "modelName": "1713869940863_OUT_1",
                                      "value": "",
                                      "unit": "kg/s"}]},

        "1713869965162": {"index": 0, "params": []},

        "1714987426651": {"index": 0,
                          "customName": "FlowRate",
                          "params": [{"description": "Input",
                                      "name": "in_1",
                                      "modelName": "1713869940863_OUT_1",
                                      "value": "",
                                      "unit": ""}]}},
}

Коды ошибок HTTP ответов

Код

Описание

Рекомендации по исправлению

400

Модель содержит ошибки в реализации схемы или настроек блоков.

Проверьте вашу модель в приложении REPEAT VISION. Выполните запуск модели на расчёт из графического интерфейса REPEAT VISION, выполните анализ сообщений в журнале приложения

400

В записи по ключу "globalVariables" множество имён переменных не соответствует множеству существующих глобальных переменных модели REPEAT VISION

Проверьте передаваемый набор переменных на соответствие существующему набору глобальных переменных модели

403

Отсутсвуют права на использование модулей платформы REPEAT VISION. В теле ответа перечисляются модули, на которые отсутствует право на использование.

Обратитесь в службу технической поддержки для активации модулей

423

Модель уже в процессе расчёта

Остановите ранее запущенный расчёт и повторите запуск вашей программы

504

Сетевые проблемы при запуске модели на расчёт

Попробуйте перезапустить расчёт

510

Заняты все расчётные модули

Необходимо освободить расчётный модуль для вашей модели

Пример Python запроса на запуск процесса расчёта модели REPEAT VISION

import requests
from requests.exceptions import HTTPError
from requests.auth import AuthBase

class APIKeyAuth(AuthBase):
  """API-Key aвторизация для запросов модулем requests"""
  def __init__(self, token : str):
    self.token = token

  def __call__(self, request):
    request.headers["Api-Key"] = f"Api-Key {self.token}"
    return request

url = "https://app.repeat.vision/backend/api/v1/public/model/run"
token = "требуется_заменить_данную_строку_на_API_ключ_из_личного_кабинета"
project = 456 # Требуется заменить данный номер на идентификатор вашего проекта
# Требуется заменить имена и значения исходных данных на соответствующие значения глобальных переменных вашей модели
input_data = {
  "header" : {
    "globalVariables" : {
      "density": "500.1", 
      "pressure": "10000"
    },
    # 4 следующих параметра допускается исключить из запроса,
    # если настройки времени и шагов нужно использовать из ранее сохранённого проекта
    "isRealTimeSync" : True,
    "modellingTime" : "100",
    "integrationStep" : "50",
    "discretizationStep" : "50"
  }
}
try:
  response = requests.post(
    url, 
    auth = APIKeyAuth(token),
    json = input_data,
    headers = {"ProjectId" : str(project)}
    )
  response.raise_for_status()
    
except HTTPError as error:
  raise error("Возникла ошибка на этапе запуска процесса расчёта")

else:
  return response.json()

6.  Расчётный модуль, выполняющий моделирование#

Интерфейс для получения информации о расчётном модуле, который занят выполнением расчёта модели.

Адрес

https://app.repeat.vision/backend/api/v1/public/controllervm/getUserVM

Важно

Для успешного получения информации о расчётном модуле требуется предварительно запустить расчёт модели REPEAT VISION по одному из следующих вариантов:

  • Из интерфейса приложения REPEAT VISION для расчёта модели кнопкой Запустить моделирование

  • Из web API запросом на запуск модели на расчёт

6.1.  Запрос#

Метод GET

Заголовок запроса Header

Ключ - тип строка

Значение - тип строка

"Api-Key"

"Api-Key user_token_value"

Описание формирования значения для ключа Api-Key смотрите в разделе список проектов.

6.2.  Ответ#

В ответе формируется описание расчётного модуля REPEAT VISION.

Тело ответа Body

Тело ответа представляет собой структуру JSON следующего вида.

{
  "addr" : "10.151.201.142",
  "portSolver" : "8000",
  "solverType" : "mdcore",
  "userId" : 1234,
  "projectId" : 567
}

Описание ключей и значений с информацией о расчётном модуле REPEAT VISION приведено в таблице ниже.

Ключ - тип строка

Значение

Тип значения

"addr"

Адрес расчётного модуля, выполняющего моделирование

Строка

"portSolver"

Порт расчётного модуля

Строка

"solverType"

Тип расчётного модуля

Строка

"userId"

Идентификатор пользователя, который запустил расчёт

Целое число

"projectId"

Идентификатор проекта REPEAT VISION, который рассчитывается модулем

Целое число

Значения ключей "addr" и "portSolver" далее могут использоваться для решения следующих задач:

Коды ошибок HTTP ответов

Код

Описание

Рекомендации по исправлению

400

Не запущен расчёт модели

Требуется запустить расчёт модели

Пример Python запроса для получения информации о расчётном модуле

import requests
from requests.exceptions import HTTPError
from requests.auth import AuthBase

class APIKeyAuth(AuthBase):
  """API-Key aвторизация для запросов модулем requests"""
  def __init__(self, token : str):
    self.token = token

  def __call__(self, request):
    request.headers["Api-Key"] = f"Api-Key {self.token}"
    return request

url = "https://app.repeat.vision/backend/api/v1/public/controllervm/getUserVM"
token = "требуется_заменить_данную_строку_на_API_ключ_из_личного_кабинета"
try:
  response = requests.get(
    url, 
    auth = APIKeyAuth(token)
    )
  response.raise_for_status()
    
except HTTPError as error:
  raise error("Возникла ошибка на этапе запроса информации о расчётном модуле")

else:
  return response.json()

7.  Расчётные значения параметров модели#

Интерфейс возвращает всю доступную информацию о расчётных значениях параметров модели REPEAT VISION

Адрес

https://app.repeat.vision/backend/api/v1/public/model/parameters/getAll

7.1.  Запрос#

Метод GET

Заголовок запроса Header

Ключ - тип строка

Значение - тип строка

"Api-Key"

"Api-Key user_token_value"

"addressVM"

"address:port"

Для ключа "addressVM" необходимо значение с информацией об расчётном модуле, выполняющем моделирование. Значения адреса address и порта port должны быть заранее получены запросом об используемом расчётном модуле. Смотрите таблицу с описанием ответа адреса и порта расчётного модуля выше.

Описание формирования значения для ключа Api-Key смотрите в разделе список проектов.

7.2.  Ответ#

Тело ответа Body

Ответ на запрос содержит информацию о блоках, параметрах и расчётных значениях параметров в следующей структуре JSON

{
  "Model" : {
    "StatusModel": 1, 
    "TimeModel": 300.0
  },
  "Elements" : {
    "1713869811928": {
      "1713869811928_OUT_2": 0.0,
      "1713869811928_IN_1": 0.0,
      "Name": "1713869811928"
      }
  }
}

В корне структуры используются следующие ключи и значения

Ключ - тип строка

Значение - тип запись

"Model"

Краткая информация о состоянии модели

"Elements"

Сводная информация об актуальных значениях параметров модели

Информация о состоянии модели содержит следующие значения

Ключ - тип строка

Значение

Тип значения

"StatusModel"

Состояние процесса расчёта модели

Целое число

"TimeModel"

Время моделирования процесса расчёта в миллисекундах на момент запроса

Вещественное число

Примечание

Подробное описание состояний процесса расчёта модели смотрите в соответствующей таблице

Информация о блоках модели, доступная по ключу "Elements", приведена в таблице ниже

Ключ - тип строка

Значение - тип запись

Идентификатор блока

Параметры блока

Идентификатор блока можно найти в графическом интерфейсе REPEAT VISION. Выбирая необходимый блок, идентификатор будет отображён в настройках блока, как на рисунке ниже.

block_id

При указании идентификатора блока в качестве ключа доступна сводная информация о параметрах блока в соответствии с таблицей ниже

Ключ - тип строка

Значение

Тип значения

Идентификатор параметра

Расчётное значение параметра блока

Вещественное число

"Name"

Значение имени соответствует идентификатору блока, например, "1713869811928"

Строка

"Port"

Расчётное значение параметра для входного или выходного порта

Вещественное число

Идентификатор параметра доступен в приложении REPEAT VISION. Идентификатор параметра будет отображён в настройках выбранного блока после запуска модели на расчёт, как на рисунке ниже.

parameter_id

Пример ответа

{
  "Model" : {
    "StatusModel": 1, 
    "TimeModel": 300.0
  },
  "Elements" : {
    "1714987426651": {
      "1713869940863_OUT_1": -4378.034,
      "Port": -4378.034,
      "Name": "1714987426651"
      },
    "1713869809228": {
      "1713869809228_IN_1": -4378.034,
      "1713869809228_OUT_2": 50000.0,
      "Name": "1713869809228"
      },
    "1713869965162": {
      "Name": "1713869965162"
      }
  }
}

Коды ошибок HTTP ответов

Код

Описание

Рекомендации по исправлению

100 или 101

Остановлен расчёт модели REPEAT VISION

Требуется запустить расчёт модели с применением графического приложения REPEAT VISION для отладки модели

Пример Python запроса расчётных значений параметров

import requests
from requests.exceptions import HTTPError
from requests.auth import AuthBase

class APIKeyAuth(AuthBase):
  """API-Key aвторизация для запросов модулем requests"""
  def __init__(self, token : str):
    self.token = token

  def __call__(self, request):
    request.headers["Api-Key"] = f"Api-Key {self.token}"
    return request

url = "https://app.repeat.vision/backend/api/v1/public/model/parameters/getAll"
token = "требуется_заменить_данную_строку_на_API_ключ_из_личного_кабинета"
# Значение переменных address и port требуется подготовить на основе
# результата запроса о расчётном модуле, выполняющего моделирование 
address = "10.151.201.142"
port = "8000"
try:
  response = requests.get(
    url,
    auth = APIKeyAuth(token),
    headers = {"addressVM" : f"{address}:{port}"}       
    )
  response.raise_for_status()

except HTTPError as error:
  error("Возникла ошибка на этапе запроса расчётных значений параметров")
  
else:
  return response.json()

8.  Результаты расчёта#

Интерфейс возвращает временной ряд результатов расчёта для заданного параметра модели.

Адрес

https://app.repeat.vision/backend/api/v1/public/model/parameters/getRange

8.1.  Запрос#

Метод POST

Заголовок запроса Header

Ключ - тип строка

Значение - тип строка

"Api-Key"

"Api-Key user_token_value"

"addressVM"

"address:port"

Для ключа "addressVM" необходимо значение с информацией о расчётном модуле, выполняющем моделирование. Значения адреса address и порта port должны быть заранее получены запросом об используемом расчётном модуле. Смотрите таблицу с описанием ответа адреса и порта расчётного модуля выше.

Описание формирования значения для ключа Api-Key смотрите в разделе список проектов.

Тело запроса Body

Ключ - тип строка

Значение

Тип значения

"varName"

Идентификатор параметра

Строка

"timeStart"

Начальный момент интервала времени в миллисекундах

Целое число

"timeEnd"

Конечный момент интервала времени в миллисекундах

Целое число

Примечание

Способ получения идентификатора параметра в графическом интерфейсе REPEAT VISION приведён в разделе выше

Пример тела запроса

{
  "varName" : "1713869940863_OUT_1",
  "timeStart" : 0.0,
  "timeEnd" : 1050.0
}

8.2.  Ответ#

Тело ответа Body

Ответ на запрос содержит временной ряд результатов расчёта для заданного параметра модели в следующей структуре JSON

{
  "searchSpan" : {
      "varName" : "1713869940863_OUT_1",
      "timeStart" : 0.0,
      "timeEnd" : 1050.0    
                },  
  "dataValues" : [
      0.0,
      403.68878,
      403.68875,
      403.68875
                ],
  "dataTimes" : [
      0.0,
      50.0,
      100.0,
      1000.0
               ]
  }

В корне структуры используются следующие ключи и значения

Ключ - тип строка

Значение

Тип значения

"searchSpan"

Информация о запрошенном параметре с результатами расчёта

Запись

"dataValues"

Временной ряд значений результатов расчёта параметра

Список

"dataTimes"

Значения времени для соответствующих значений параметра

Список

Ключи и значения записи "searchSpan" соответствуют запросу Body, описание которого приведено в разделе выше.

По ключу "dataValues" в списке [  ] доступны значения (вещественные числа) результатов расчёта параметра для соответствующих им значений времени (вещественные числа) для ключа "dataTimes".

Коды ошибок HTTP ответов

Код

Описание

Рекомендации по исправлению

406

Не выполнен расчёт значений параметра для заданного интервала времени

Требуется повторить запрос позднее. Рекомендуется оценить время ожидания завершения расчёта при отладке модели через графический интерфейс REPEAT VISION

410

Не запущен расчёт модели. Или потеряно соединение с расчётным модулем

Принудительно остановите расчёт и выполните повторный запуск расчёта.

Пример Python запроса результата расчёта параметра

import requests
from requests.exceptions import HTTPError
from requests.auth import AuthBase

class APIKeyAuth(AuthBase):
  """API-Key aвторизация для запросов модулем requests"""
  def __init__(self, token : str):
    self.token = token

  def __call__(self, request):
    request.headers["Api-Key"] = f"Api-Key {self.token}"
    return request

url = "https://app.repeat.vision/backend/api/v1/public/model/parameters/getRange"
token = "требуется_заменить_данную_строку_на_API_ключ_из_личного_кабинета"
# Значение переменных address и port требуется подготовить на основе
# результата запроса о расчётном модуле, выполняющего моделирование 
address = "10.151.201.142"
port = "8000"
# Значения словаря требуется заполнить в соответствии с вашими
# пожеланиями к результату расчёта параметра модели REPEAT VISION
parameter = {
  "varName" : "NESTED_BLOCK_ID_OUT_INDEX",
  "timeStart" : 0.0,
  "timeEnd" : 10_000.0,
}
try:
  response = requests.post(
    url,
    auth = APIKeyAuth(token),
    json = parameter,
    headers = {"addressVM" : f"{address}:{port}"}       
    )
  response.raise_for_status()

except HTTPError as error:
  error("Возникла ошибка на этапе запроса результатов расчёта параметра")
  
else:
  return response.json()

9.  Журнал процесса расчёта#

Интерфейс передаёт текстовое описание процесса расчёта модели.

Адрес

https://app.repeat.vision/backend/api/v1/public/model/status

9.1.  Запрос#

Метод GET

Заголовок запроса Header

Ключ - тип строка

Значение - тип строка

"Api-Key"

"Api-Key user_token_value"

"ProjectId"

"user_project_id"

Описание формирования значения для ключа Api-Key смотрите в разделе список проектов.

Описание формирования значения для ключа ProjectId смотрите в разделе состояние модели.

9.2.  Ответ#

Тело ответа Body

Ответ на запрос содержит описание процесса расчёта и сводную информацию модели в следующей структуре JSON

{
    "stack": "MULTILINE_MESSAGES_OF_SOLVING_PROCESS",
  }

Ключ - тип строка

Значение - тип значения

"stack"

Многострочный текст с описанием процесса расчёта. Описание включает дату, уровни сообщений и суть процесса расчёта модели.

Пример Python запроса журнала процесса расчёта

import requests
from requests.exceptions import HTTPError
from requests.auth import AuthBase

class APIKeyAuth(AuthBase):
  """API-Key aвторизация для запросов модулем requests"""
  def __init__(self, token : str):
    self.token = token

  def __call__(self, request):
    request.headers["Api-Key"] = f"Api-Key {self.token}"
    return request

url = "https://app.repeat.vision/backend/api/v1/public/model/status"
token = "требуется_заменить_данную_строку_на_API_ключ_из_личного_кабинета"
# Значение переменных address и port требуется подготовить на основе
# результата запроса о расчётном модуле, выполняющего моделирование 
address = "10.151.201.142"
port = "8000"
try:
  response = requests.get(
    url,
    auth = APIKeyAuth(token),
    headers = {"addressVM" : f"{address}:{port}"}       
    )
  response.raise_for_status()

except HTTPError as error:
  error("Возникла ошибка на этапе запроса журнала процесса расчёта модели")
  
else:
  return response.json()

10.  Остановка расчёта#

Интерфейс для остановки процесса расчёта модели REPEAT VISION с возможностью выгрузки результатов расчёта.

Адрес

https://app.repeat.vision/backend/api/v1/public/model/softStop

10.1.  Запрос#

Метод POST

Заголовок запроса Header

Ключ - тип строка

Значение - тип строка

"Api-Key"

"Api-Key user_token_value"

"ProjectId"

"user_project_id"

Описание формирования значения для ключа Api-Key смотрите в разделе список проектов.

Описание формирования значения для ключа ProjectId смотрите в разделе состояние модели.

Пример Python запроса на остановку расчёта

import requests
from requests.exceptions import HTTPError
from requests.auth import AuthBase

class APIKeyAuth(AuthBase):
  """API-Key aвторизация для запросов модулем requests"""
  def __init__(self, token : str):
    self.token = token

  def __call__(self, request):
    request.headers["Api-Key"] = f"Api-Key {self.token}"
    return request

url = "https://app.repeat.vision/backend/api/v1/public/model/softStop"
token = "требуется_заменить_данную_строку_на_API_ключ_из_личного_кабинета"
project = 456 # Требуется заменить данный номер на идентификатор вашего проекта
try:
  response = requests.post(
    url, 
    auth = APIKeyAuth(token),
    headers = {"ProjectId" : str(project)}
    )
  response.raise_for_status()
    
except HTTPError as error:
  raise error("Возникла ошибка на этапе остановки расчёта модели")

11.  Остановка расчёта с очисткой результатов#

Интерфейс для остановки процесса расчёта модели REPEAT VISION с очисткой результатов расчёта на стороне расчётного модуля, а также завершением работы самого расчётного модуля.

Адрес

https://app.repeat.vision/backend/api/v1/public/model/stop

11.1.  Запрос#

Метод POST

Заголовок запроса Header

Ключ - тип строка

Значение - тип строка

"Api-Key"

"Api-Key user_token_value"

"ProjectId"

"user_project_id"

Описание формирования значения для ключа Api-Key смотрите в разделе список проектов.

Описание формирования значения для ключа ProjectId смотрите в разделе состояние модели.

Пример на Python смотрите в разделе с описанием запроса остановки расчёта

12.  Публичный Импорт#

 Интерфейс для публичного импорта модели REPEAT VISION.

Адрес

https://app.repeat.vision/backend/api/v1/public/project/import

12.1.  Запрос#

 Метод POST

 Параметр запроса Query - folderId.

 Пример запроса с folderId:

https://app.repeat.vision/backend/api/v1/public/project/import?folderId=efgsdfgsdfg

 Заголовок запроса Header

Ключ - тип строка

Значение - тип строка

"UUID"

"6827d06e-f120-4374-afa6-9b2e6b70ee04"

"Content-Range"

"bytes 0-.../*"

"Content-Type"

"multipart/form-data"

 Content-Range - используется при разбиении большого файла на части. До / указывается диапазон bytes, после / их общее количество в файле.

 Описание формирования значения для ключа Api-Key смотрите в разделе список проектов.

 Поле file (обязательное) - значение binary. Содержимое файла проекта или его части.

 Пример запроса через curl

curl -X 'POST' \
  'https://app.repeat.vision/backend/api/v1/public/project/import' \
  -H 'accept: * / *' \
  -H 'Api-Key: {token}' \
  -H 'Content-Type: multipart/form-data' \
  -F 'file=@project.rpt'

12.2.  Ответ#

 Тело ответа Body

 Ответ на запрос содержит статус, id проекта и его имя в следующей структуре JSON

{
    "status": "completed",
    "projectId": "c6128d47-ffb9-4ff9-bbca-647040ce3cf2",
    "projectName": "BMS"
  }

 Если файл разбит на части (используется Content-Range), то структуры JSON до финальной части файла выглядят так:

{
    "uuid": "6827d06e-f120-4374-afa6-9b2e6b70ee04",
    "status": "uploading"
  }

12.3.  Пример подключения к REPEAT VISION через публичный REST API с помощью Python и пакета requests для импорта проекта#

from pathlib import Path

Внутренний модуль для работы с путями и файлами

import requests
from repeat.repeat_connection import APIKeyAuth

Внешний пакет для REST запросов. Устанавливается вместе с repeat.

Исходные данные

user_api_key = "Paste your key here"

АПИ ключ пользователя

https://app.repeat.vision/id/account/api-keys

project_path = r"./Truboprovod_s_mestnim_soprotivleniem_import_01.rpt"

Путь к проекту REPEAT VISION

Код программы

endpoint = "https://app.repeat.vision/backend/api/v1/public/project/import"

адрес REST API для загрузки проекта

project = Path(project_path).read_bytes()
data = { "file" : 
        (
          "Truboprovod_s_mestnim_soprotivleniem_import_01.rpt",
          project
          )
  }
response = requests.post(
  endpoint,
  auth = APIKeyAuth(user_api_key),
  files = data,
  verify = False,
  )
print(response.text)

Чтение в байтовую структуру файла проекта REPEAT VISION

13.  Публичный Экспорт#

 Интерфейс для публичного экспорта модели REPEAT VISION.

Адрес

https://app.repeat.vision/backend/api/v1/public/project/export

13.1.  Запрос#

 Метод GET

 Заголовок запроса Header

Ключ - тип строка

Значение - тип строка

"ProjectId"

"ID проекта"

 ProjectId - получить его можно, нажав ПКМ по необходимому проекту в списке и выбрав ЛКМ - Скопировать id проекта

 Пример запроса через curl

curl -X GET 'https://app.repeat.vision/backend/api/v1/public/project/export' \
  -H 'ProjectId: a91ea532-619b-4f21-b6dc-d92aa463f126' \
  -H 'Api-Key: {token}' \
  --output project.rpt

13.2.  Ответ#

 Тело ответа Body

Содержимое файла проекта в бинарном виде.

 Заголовок ответа Header

Ключ - тип строка

Значение - тип строка

"content-disposition"

"attachment; filename="PR_1.rpt"

"content-length"

"145738"

"content-type"

"application/vnd.repeat.app"