API
Также доступна документация в формате OpenAPI (SwaggerUI): http://ptl-demo.fondev.ru/docs#/ с возможностью тестирования запросов.
Формат обмена API: JSON.
PTL-модуль
PTL-модуль - это пассивное устройство. Он не имеет возможности отправлять данные самостоятельно. За чтение и запись отвечает контроллер.
Каждый PTL-модуль имеет уникальный ID в рамках одного контроллера. ID - это целое число от 1 до 247. ID назначается при установке модулей на штатные места использования. Также PTL-модуль имеет встроенные параметры, которые отвечают за его состояние. Состояние изменяется через HTTP API или нажатием на кнопки модуля.
Взаимодействие через API выглядит упрощенно так:
- Если мы хотим зажечь PTL модуль с числом 100 и синей кнопкой, то мы сначала должны выполнить команду /turn_on.
- Если мы хотим узнать был ли PTL модуль нажат, мы выполняем команду /ptls
Текущий вариант API не подразумевает отправку события о нажатии на модуль на вебхук внешнего ПО или в брокер обмена сообщениями.
Параметры PTL модуля
Текущие параметры, которые поддерживаются API независимо от модели PTL-модуля.
Параметр | Назначение |
---|---|
unit | ID модуля |
number | Число для отображения на основном блоке цифр |
sub | Число для отображения на дополнительном блоке цифр |
state | Состояние модуля |
color | Цвет LED-кнопки |
fun_hold_counter | Счетчик времени зажатия кнопки FUN |
btn_led_pressed | Флаг "была нажата кнопка LED" |
btn_fun_pressed | Флаг "была нажата кнопка FUN" |
btn_arrows_pressed | Флаг "была нажата одна из кнопок "Стрелка" |
Все параметры можно разделить на две группы доступности: чтения/записи и только для чтения.
Чтение/запись
Эти параметры можно изменять через API.
- number
- sub
- color
Только чтение
Эти параметры можно только получить через API.
- unit
- state
- fun_hold_counter
- btn_led_pressed
- btn_fun_pressed
- btn_arrows_pressed
/_ping
Метод: GET
Сервисный метод для интеграции с сервисами мониторинга.
Возвращает код HTTP 200 и текстовое значение pong
. Позволяет определить, что сервис API онлайн.
/config
Метод: GET
Метод возвращает текущую конфигурацию сервиса.
Описание параметров конфигурации и их значений указано в разделе "Конфигурация".
Пример ответа:
{
"demo": true,
"controllers": [
{
"ip": "192.168.0.100",
"port": 502,
"start_id": 1,
"end_id": 30
},
{
"ip": "192.168.0.101",
"port": 502,
"start_id": 1,
"end_id": 30
}
],
"debug": false,
"api_log": "/var/log/fontera/api.log",
"db_path": "/app/ptls.db",
"clean_ptl_on_startup": true
}
/ptls
Метод: POST
API используется для получения текущих состояний PTL модулей.
Все передаваемые параметры (кроме clear_after
) работаю как фильтры, помогая делать выборку конкретных PTL модулей.
Параметры
ip
Обязательный параметр в запросе.
IP-адрес контроллера.
Передается как строка, в формате IPv4.
Пример: 192.168.0.100
clear_after
Опция: очищать данные PTL сразу после получения состояний или нет.
По-умолчанию: false
mode
ВНИМАНИЕ
В версии 2.4 мы будем использовать имя state
вместо mode
.
Состояние PTL модулей. Если указать, то будут возвращены только модули, которые находятся этом состоянии.
Допустимые значения:
Параметр | Пояснение |
---|---|
activated | Активное состояние. Ожидание нажатия PTL. |
deactivated | Деактивированный PTL. Модуль был нажат или |
ptl_ids
Список идентификаторов PTL модулей, которые нужно получить.
Например: [1, 3, 5, 6, 8]
Примеры запросов
Здесь мы запрашиваем все PTL-модули любой роли в активном состоянии, подключенные к контроллеру 192.168.0.100. При этом, сразу после выполнения запроса, данные на PTL-модулях будут очищены. Повторный запрос с данными параметрами вернет пустой список, так как данные PTL-модулей будут пустыми.
{
"ip": "192.168.0.100",
"clear_after": true,
"mode": "Activated"
}
А здесь мы получим все PTL-модули независимо от их состояния и других факторов.
{
"ip": "192.168.0.100"
}
/turn_on
Метод: POST
API активирует один или более PTL-модулей в рамках одного контроллера.
Запрос на включение состоит из двух частей: указания IP-адреса контроллера и списка команд для PTL.
Например, если мы хотим зажечь PTL-модуль #10 на контроллере 192.168.0.100 со значениями 99 0100
и кнопка LED должна быть синего цвета, то мы должны передать следующие параметры:
{
"controller_ip": "192.168.0.100",
"commands": [
{
"unit": 10,
"number": 100,
"sub": 99,
"color": "Blue"
}
]
}
Параметры запроса
Параметр | Пояснение |
---|---|
controller_ip | IP адрес контроллера в формате IPv4 |
commands | Список команд для зажигания PTL модулей |
Параметры команды
Параметр | Пояснение |
---|---|
unit | ID PTL-модуля, целое число от 0 до 247 |
number | Число для основного блока цифр, целое число, длина зависит от модели PTL |
sub | Число для дополнительного блока цифр, целое число, длина зависит от модели PTL |
color | Цвет зажигания LED |
Допустимые параметры цвета LED
- Red
- Green
- Blue
- Yellow
- Pink
- Cyan
- White
Примеры запросов
/turn_off
Метод: POST
Используется для выключения (деактивации) одного или нескольких PTL-модулей в рамках указанного контроллера. PTL-модуль переводится в режим deactivated
. Все параметры PTL-модуля сбрасываются.
/check
Метод: GET
Сервисный метод API для выполнения тестового зажигания всех модулей одного или всех контроллеров, указанных в конфигурации.
Если указан query-параметр ip в формате строки IPv4, то зажигание будет выполнено для указанного контроллера.
Например:
GET http://ptl-demo.fondev.ru/check?ip=192.168.0.100
После выполнения команды, кнопки PTL модулей будут гореть синим цветом с отображать диапазон PTL модулей.
/clear
Метод: GET
Метод очистки всех PTL-модулей одного или всех контроллеров.
Сбрасывает все параметры (кроме unit
) и состояние. После выполнения операции модули будут выключены (как при выполнении /turn_off
), значения number и sub будут пустыми, параметр mode
будет deactivated
.
Например:
GET http://ptl-demo.fondev.ru/clear?ip=192.168.0.100
/press
Метод: POST
Используется для имитации нажатия на LED-кнопку PTL-модуля. Недоступен в режиме продакшна (опция конфигурации приложения demo: false
).
При этом, можно имитировать только изменение значений цифровых блоков без имитации нажатия на LED-кнопку. Таким образом можно разделить изменение цифровых блоков (нажатие на "стрелки") и подтверждение подбора.
Пример запроса:
{
"controller_ip": "string", # IP контроллера
"ptls": [ # Список команд для PTL, которые нужно "нажать"
{
"unit": 0, # ID модуля, который нужно нажать
"number": 0, # Новое значение для number (как будто его изменили)
"sub": 0, # Новое значение для sub (как будто его изменили)
"led_btn_pressed": true # Установить факт нажатия на LED
}
]
}