numass-framework/numass-core/docs/server_commands.md
2017-04-15 22:15:53 +03:00

5.7 KiB
Raw Blame History

Команды сервера 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.