Типы
Модель
Функции и принципы построения моделей описаны в разделе документации:
import type { Base, ModelNode } from "@rightech/api";
export interface Model extends Base {
base: string; // идентификатор базовой модели: mqtt, lorawan, http ...
data: ModelNode; // содержимое модели в виде древовидной структуры
}
Узлы модели
Все узлы модели, имеют следущий минимальный набор полей:
export type BaseNode = {
type: string;
id: string;
name: string;
description?: string;
active: boolean; // видимость узла, может быть скрыт
children?: ModelNode[]; // дочерние узлы
};
Поле type
определяет тип узла:
export type ModelNode =
| BaseNode
| SystemNode
| EventNode
| ArgumentNode
| ActionNode;
Подсистема
export type SystemNode = BaseNode & {
type: "subsystem";
};
Аргумент
export type ArgumentDataType =
| "number"
| "boolean"
| "string"
| "object"
| string;
export type ArgumentNode = BaseNode & {
type: "argument";
dataType: ArgumentDataType;
unit?: string; // еденица измерения
};
Список доступных для использования едениц измерения можно получить через GET /api/v1/locale
в поле units
Действие
export type ActionNode = BaseNode & {
type: "action";
service: string;
command?: string;
params?: Record<string, string>;
};
Чаще всего используется для описания команд к устройству в терминах базового протокола.
Например команда PUBLISH протокола MQTT будет иметь следующий вид:
{
"id": "led-on",
"name": "Turn-on LED",
"active": true,
"type": "action",
"command": "publish",
"params": {
"topic": "base/relay/led1",
"payload": "1"
}
}
Событие
export type EventNode = BaseNode & {
type: "event";
};
Методы
Базовые
Получить список моделей
По умолчанию список моделей отдаётся без их содержимого.
Для включения дочерних узлов модели в ответ необходимо использовать query-параметр
?with=data
[
{
"_id": "60d5db392b370f0011cb2987",
"name": "model 1",
"base": "mqtt"
},
{
"_id": "6163dda4099a810011957be8",
"name": "model 2",
"base": "lorawan"
}
]
Получить информацию об одной модели
По умолчанию модель отдаётся вместе с полем data
.
[
{
"_id": "60d5db392b370f0011cb2987",
"name": "model 1",
"base": "mqtt",
"data": {
"id": "root",
"name": "[mqtt] model",
"active": true,
"type": "subsystem",
"children": [...]
}
}
]
Создать новую модель
Обязательные поля:
- base - идентификатор базовой модели;
- name - имя новой модели.
{
"base": "mqtt",
"name": "test-model-01",
"description": "Model of microcontroller"
}
В ответе будет передана созданная модель, в формате аналогичном запросу одной модели
Изменить модель
{
"name": "test-model-02",
"description": "Model of sensor"
}
Для изменения отдельных узлов внутри модели необходимо использовать API узлов модели
Удалить модель
В случае, если существуют объекты использующие эту модель, ответ будет содержать ошибку:
{
"success": false,
"message": "Unprocessable Entity",
"tags": ["error_has_objects"]
}
Узлы моделей
В запросах: - :id
- идентификатор модели; - :node
- идентификатор узла
модели.
Создать новый узел
Для того чтобы добавить новый узел в опреденное место модели нужно использовать query-параметр ?attachTo=:node
с указанием идентификатора родительского узла, например ?attachTo=params
или ?attachTo=cmds
, иначе узел будет добавлен в корень.
Добавление нового узла происходит в конец списка дочерних элементов.
Для добавления узла в определённую позицию списка нужно использовать query-параметр ?atIndex=0
с указанием индекса нового элемента.
{
"id": "floorTemperature",
"type": "argument",
"name": "Floor Temperature",
"unit": "temperature-celsius",
"dataType": "number"
}
Изменить узел
В теле запроса на изменение существующего узла укажите укажите поля, которые нужно обновить.
{
"name": "Floor Temperature (in Fahrenheits)",
"unit": "temperature-fahrenheit"
}
Удалить узел
Удаление узла модели происходит безвозвратно