Пульт.Онлайн API

Доступ к API

Пульт.Онлайн предоставляет API для большинства отдельных сервисов, входящих в состав системы.
API предоставляется в формате JSONRPC2.0 по протоколу Websocket. Порт, на котором сервис принимает API-запросы, указан в его настройках в параметре tcp_port. Данный порт должен быть открыт в фаерволе. Необходимо также убедиться что у сервиса включен параметр listen_tcp_port, а параметр allowed_ip позволяет подключаться с IP клиента.



Websocket Client

Для тестовых запросов можно воспользоваться плагином для браузера, например Smart Websocket Client или Advanced Websocket Client. В строке Websocket address необходимо указать URL сервиса, включая хост и порт, например: ws://192.168.0.100:11200/ В данном примере будет выполнено подключение к сервису Core (порт 11200). Запрос выполняется кнопкой Send после подключения к сервису (кнопка Connect).

Интерфейс командной строки (CLI)

Доступ к API любого сервиса может быть выполнен через Интерфейс командной строки (API over CLI): ./cli unix://<unix_socket> @<method> [<param1>=<value1> <paramN>=<valueN>] Где: ./cli - скрипт-обертка к сервису rpcconsole, должен выполняться из директории установки (cd /pult) <unix_socket> - имя unix-сокета целевого сервиса. См. настройки сервиса, параметр unix_socket @<method> - имя api-метода, предваряемое символом @ (строгий режим вывода json) <param1>=<value1> - передача параметра и значения Например: > cd /pult > ./cli unix://core.us @set var=P1_N1_var1 value=12345 {"result":true} >

Список API-функций сервиса

Список доступных API-функций сервиса можно получить, выполнив запрос с методом api без параметров: { "jsonrpc":"2.0", "id":1, "method":"api", } Пример ответа (сервис Core): { "jsonrpc": "2.0", "id": "1", "result": { "request_methods": { "api": [], "exist": [], "list": [], "status": ["vars"], "set": ["var", "value", "payload"], "subscribe": ["event", "id", "options"], "unsubscribe": ["event", "id", "options"] }, "subscription_events": ["update", "upload", "unload"] } } Где: request_methods - объект: -- ключи - доступные методы API-функций сервиса -- значения - массив параметров, принимаемых API-функцией subscription_events - массив имен доступных подписок.

Форматы API

Доступно два формата работы с API:

1) выполнение запросов
2) подписка на события

Все запросы выполняются последовательно и синхронно *. 
Данные приходят в ответе на запрос.

Подписка на события позволяет получать данные асинхронно, без выполнения запросов. 
Данные поступают в JSONRPC-уведомлениях, до прекращения подписки или разрыва соединения.


Выполнение запросов

Список API-функций сервиса, доступных по запросу, можно получить, выполнив запрос api (см. Список API-функций сервиса). Список доступных запросов будет возвращен в секции request_methods. В запросе: Поле method - имя API-функции Поле params - аргументы API-функции В ответе: Поле result - успешный ответ API-функции Поле error - ошибка API-функции Общий формат запроса: { "jsonrpc":"2.0", "id": строка; ID запрооса, "method": строка; имя API-функции "params": опционально, параметры запроса (формат зависит от API-функции) } Общий формат ответа: { "jsonrpc":"2.0", "id": строка; ID запрооса, "result": опционально, возвращаемые данные (формат зависит от API-функции) "error": { опционально, объект; ошибка, см. JSONRPC2.0 "code": число; код ошибки "message": строка; сообщение ошибки "data": опционально, строка; дополнительные сведения по ошибке } } В ответе присутствует либо result, либо error (см. JSONRPC2.0). Пример запроса с параметрами: { "jsonrpc":"2.0", "id":1, "method":"status", "params":{ "vars":["var1","var2","var3"] } } Ответ: { "jsonrpc": "2.0", "id": "1", "result": [ ["var1", 1693912094026, 123], ["var2", 1693912094027, 456], ["var3", 1693912094021, 789] ] } В данном примере вызывается API-функция status сервиса Core, возвращающая статус указанных в параметре vars переменных. В ответ были получены статусы трех переменных, в виде массивов, содержащих [имя_переменной, метку_времени, значение_переменной]

Подписка на события

Подписка на интересующие события выполняется API-функцией subscribe. Отписка от события выполняется API-функцией unsubscribe. Общий формат запроса подписки/отписки: { "jsonrpc":"2.0", "id": строка; ID запрооса, "method": строка; subscribe | unsubscribe, subscribe - подписка, unsubscribe - отписка "params":{ опционально, объект; параметры подписки "event": опционально, строка или массив; имя события или массив имен "id": опционально, строка; id ранее выполненой подписки "options": опционально, формат зависит от подписки; опции подписки } } Общий формат ответных уведомлений: { "jsonrpc": "2.0", "method": "subscription", "params": { объект; параметры уведомления "event": строка; имя события "data": опционально, данные уведомления, формат зависит от подписки "close": опционально, true; прекращение уведомлений по подписке (требуется переподписаться) "error": опционально, объект; причина прекращения подписки, формат аналогичен стандартной ошибке JSONRPC2.0 } } В уведомлении присутствует либо data, либо close и error в случае прекращения подписки. В случае прекращения подписки необходимо выполнить подписку заново, указав все параметры и опции подписки. Пример подписки на изменения статусов переменных: { "jsonrpc":"2.0", "id":1, "method":"subscribe", "params":{ "event":"update", "options":{ "vars":["var1","var2","var3"] } } } Пример ответных уведомлений: { "jsonrpc": "2.0", "method": "subscription", "params": { "event": "update", "data": { "time": 1693926902606, "changes": [ ["var2", 0, 457] ["var3", 15, 791] ["var1", 93, 125] ] } } }



* - синхронные функции не прерывают работу сервисов, сервисы продолжают обслуживать другие запросы, если не занят основной поток