Provision API
Endpoint для получения конфигурации TVIP-приставками.
GET /prov/tvip_provision.xml
Возвращает XML конфигурацию для TVIP-приставки. Этот endpoint вызывается автоматически приставками при загрузке.
URL: /prov/tvip_provision.xml
Метод: GET
Теги: Provision.xml
Headers
Параметр |
Обязательный |
Описание |
|---|---|---|
|
Да |
MAC-адрес устройства в формате |
|
Нет |
Модель TVIP-приставки (например, |
|
Нет |
Реальный IP-адрес клиента (устанавливается nginx) |
Логика работы
Извлекается MAC-адрес из заголовка
Mac-AddressОпределяется IP-адрес клиента (приоритет:
X-Real-IP→request.client.host)Проверяется наличие устройства в базе данных
Устройство не найдено: создаётся новая запись, возвращается дефолтная конфигурация
Устройство существует: обновляются метаданные (IP, модель, время), возвращается кастомная или дефолтная конфигурация
Конфигурация сериализуется в XML и возвращается с
Content-Type: application/xml
Response
Status Code: 200 OK
Content-Type: application/xml
Body: XML конфигурация
Пример ответа:
<?xml version="1.0" encoding="UTF-8"?>
<provision reload="86400">
<operator name="MyOperator"/>
<logo url="http://example.com/logo.png"/>
<time tz="Europe/Moscow" ntp="pool.ntp.org"/>
<features>
<mediaplayer enabled="true"/>
<dvr enabled="false"/>
<cctv enabled="false"/>
<vod enabled="false"/>
</features>
<tv_stream type="multicast"/>
<tv_protocols default="stalker">
<protocol type="stalker" server="http://portal.example.com"/>
</tv_protocols>
<preferences>
<pref_network_config value="DHCP"/>
<pref_tv>
<pref_tv_streamtype visible="false"/>
<pref_tv_udpxyaddress visible="false"/>
<pref_tv_middleware disabled="true"/>
</pref_tv>
</preferences>
</provision>
Примеры использования
cURL запрос (имитация TVIP-приставки):
curl -H "Mac-Address: 00:11:22:33:44:55" \
-H "tvip-model: TVIP S-Box v.605" \
http://localhost:7373/prov/tvip_provision.xml
Запрос через nginx с X-Real-IP:
curl -H "Mac-Address: 00:11:22:33:44:55" \
-H "X-Real-IP: 192.168.1.100" \
http://localhost:7373/prov/tvip_provision.xml
Python пример:
import requests
headers = {
"Mac-Address": "00:11:22:33:44:55",
"tvip-model": "TVIP S-Box v.605"
}
response = requests.get(
"http://localhost:7373/prov/tvip_provision.xml",
headers=headers
)
if response.status_code == 200:
xml_config = response.text
print(xml_config)
Ошибки
400 Bad Request
Отсутствует обязательный заголовок Mac-Address:
{
"detail": [
{
"type": "missing",
"loc": ["header", "Mac-Address"],
"msg": "Field required"
}
]
}
422 Unprocessable Entity
Невалидный формат MAC-адреса:
{
"detail": "Invalid MAC address format"
}
Автоматическая документация
Полная автодокументация endpoint:
- async presentation.api.endpoints.provision.tvip_provision_endpoint(request, mac_address, x_real_ip=None, tvip_model=None, use_case=Depends(get_handle_provision_use_case))[исходный код]
Generate XML configuration for TVIP device.
- Параметры:
mac_address (str) – Device MAC address from request headers.
x_real_ip (str | None) – Real client IP address from nginx proxy.
tvip_model (str | None) – TVIP device model from request headers.
use_case (HandleProvisionRequestUseCase) – Business logic handler (injected automatically).
request (Request) –
- Результат:
Device-specific settings.
- Тип результата:
Response
Настройка TVIP-приставок
Чтобы TVIP-приставки обращались к вашему серверу, необходимо:
Вариант 1: DNS замена
Настроить DNS сервер для перенаправления
tvipupdate.netна IP вашего сервера.Вариант 2: Hosts файл
Если есть доступ к файловой системе приставки, изменить
/etc/hosts:192.168.1.10 tvipupdate.net
Вариант 3: Nginx
Развернуть через nginx прокси
tvipupdate.net.
После настройки приставка будет обращаться на https://tvipupdate.net/prov/tvip_provision.xml, что перенаправится на ваш сервер.
Периодичность обращений
Частота обновления конфигурации определяется параметром reload в XML (в секундах):
<provision reload="86400">
<!-- 86400 секунд = 24 часа -->
</provision>
3600 — каждый час
86400 — раз в сутки
1800 — каждые 30 минут
Приставка автоматически запрашивает конфигурацию с указанной периодичностью.
Мониторинг обращений
Время последнего обращения каждого устройства сохраняется в поле last_activity.
Это позволяет отслеживать активность приставок через API GET /api/devices.