189 lines
5.7 KiB
Markdown
189 lines
5.7 KiB
Markdown
|
||
# Команды сервера Numass #
|
||
|
||
### Адрес сервера ###
|
||
|
||
Адрес сервера в локальной сети по-умолчанию `192.168.111.1`, адрес сервера в сети института `172.20.75.178`
|
||
|
||
### Хранение данных ###
|
||
|
||
Хранение данных осуществляется в файловом репозитории `/home/trdat/numass-repo`. Считается, что все фалы репозитория с названиями, начинающимися с `@` являются системными.
|
||
|
||
### Формат сообщения ###
|
||
|
||
Сообщение содержит иерархически организованный текст в формате JSON (meta), а также может опционально содержать данные в бинарном формате (data).
|
||
|
||
## Команды ##
|
||
|
||
Сообщение содержит два поля, определяющих его содержание: поле типа сообщения `type` и поле типа действия `action`.
|
||
Поддерживаются следующие типы команд:
|
||
|
||
- `numass.storage` - Загрузка и получение данных из репозитория
|
||
- `numass.state` - Получение или изменение состояния текущего сеанса (напряжение, токи, и т. д.)
|
||
- `numass.event` - Отправка сообщения по текущему сеансу
|
||
- `numass.control` - Отправка управляющей команды для оборудования
|
||
- `numass.run` - получение или изменение параметров текущего сеанса
|
||
|
||
#### numass.storage ####
|
||
Обращение к репозиторию текущего сеанса.
|
||
|
||
#### numass.state ####
|
||
Считывание или изменение состояния для текущего сеанса. Доступны следующие действия:
|
||
|
||
- `get` - считать состояние (или состояния) - *Not tested*
|
||
*Запрос:*
|
||
```
|
||
{
|
||
"type": "numass.state",
|
||
"action": "get",
|
||
"name": [
|
||
"<state 1 name>",
|
||
"<state 2 name>",
|
||
...
|
||
]
|
||
}
|
||
```
|
||
|
||
*Ответ*:
|
||
```
|
||
{
|
||
"type": "numass.state.get.response",
|
||
"state": [
|
||
{
|
||
"name": "<state 2 name>",
|
||
"value": <state 1 value>
|
||
},
|
||
{
|
||
"name": "<state 2 name>",
|
||
"value": <state 2 value>
|
||
},
|
||
...
|
||
]
|
||
}
|
||
```
|
||
В запросе вместо массива может стоять простая строка `state: "<>"`. В этом случае в ответе вместо массива будет один JSON объект.
|
||
|
||
- `set` - установить состояние (или состояния) - *Not tested*
|
||
*Запрос:*
|
||
```
|
||
{
|
||
"type": "numass.state",
|
||
"action": "set",
|
||
"state": [
|
||
{
|
||
"name": "<state 2 name>",
|
||
"value": <state 1 value>
|
||
},
|
||
{
|
||
"name": "<state 2 name>",
|
||
"value": <state 2 value>
|
||
},
|
||
...
|
||
]
|
||
}
|
||
```
|
||
|
||
или
|
||
|
||
```
|
||
{
|
||
"type": "numass.state",
|
||
"action": "set",
|
||
"name": "<state name>",
|
||
"value": <state value>
|
||
}
|
||
```
|
||
|
||
|
||
*Ответ*:
|
||
```
|
||
{
|
||
type: "numass.state.get.response",
|
||
state: [
|
||
{
|
||
"name": "<state 2 name>",
|
||
"value": <state 1 value>
|
||
},
|
||
{
|
||
"name": "<state 2 name>",
|
||
"value": <state 2 value>
|
||
},
|
||
...
|
||
]
|
||
}
|
||
```
|
||
Если запрашивалось изменение единичного состояния, то возвращается единичный JSON объект.
|
||
|
||
#### numass.event ####
|
||
*Not implemented*
|
||
#### numass.control ####
|
||
*Not implemented*
|
||
#### numass.run ####
|
||
Считываие или изменение текущего сеанса. Доступны следующие действия:
|
||
|
||
- `get` - Считать конфигурацию текущего сеанса
|
||
*Запрос:*
|
||
|
||
```
|
||
{
|
||
"type": "numass.run",
|
||
"action": "get",
|
||
}
|
||
```
|
||
|
||
*Ответ:*
|
||
|
||
```
|
||
{
|
||
"type": "numass.run.response",
|
||
"run": {
|
||
"path": "<path to run repo>",
|
||
"meta": {
|
||
<run metadata>
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
|
||
- `start` - Начать новый сеанс и обозначить его как текущий
|
||
|
||
*Запрос:*
|
||
|
||
```
|
||
{
|
||
"type": "numass.run",
|
||
"action": "start",
|
||
"path: "<path to run repo>",
|
||
"meta": {
|
||
<run metadata, optional>
|
||
}
|
||
}
|
||
```
|
||
|
||
*Ответ:*
|
||
То же, что и в `get`.
|
||
|
||
- `reset` - Сбросить настройки текущего сеанса
|
||
Эквивалентно `get` с пустым путем или `default` в качестве пути. Дополнительных аргументов нет
|
||
|
||
## Протокол dataforge-envelope ##
|
||
|
||
Для обмена сообщениями может использоваться протокол dataforge-envelope (типа message). В этой вариации протокола запрещено автоматическое определение длинны метаданных и данных, в качестве метаданных используется JSON в кодировке UTF-8.
|
||
|
||
Используются следующие атрибуты конверта:
|
||
|
||
version = 1;
|
||
type = 33;
|
||
metaType = 1;
|
||
metaEncoding = 0;
|
||
|
||
Пакет с `dataType = 0xffffffff` считается терминирующим пакетом, закрывающим соединение.
|
||
|
||
Порт сервера для работы по этому протоколу по умолчанию `8335`.
|
||
|
||
## Протокол Http ##
|
||
|
||
Пока не реализован.
|
||
|
||
> Written with [StackEdit](https://stackedit.io/). |