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/).
|