Продукты
АКС Комплекс PTL RID Световые маяки
Проекты Документация Сопровождение Связаться
Документация · версия 3.0

Развёртывание и запуск PTL

Пошаговое руководство по установке, настройке и запуску системы управления световыми модулями комплектации.

Требования

Для запуска PTL необходимы:

Если планируется сборка без Docker:

Конфигурация

Настройки задаются через JSON-файл. По умолчанию сервис ищет файл по пути /etc/fontera_ptl/config.json. Путь можно переопределить переменной APP_CONFIG или флагом -config.

Пример файла конфигурации

config.json
{
    "controllers": [
        {
            "ip": "192.168.0.199",
            "port": 502,
            "start_id": 1,
            "end_id": 30
        }
    ],
    "redis_url": "redis://127.0.0.1:6379",
    "demo": false,
    "debug": false,
    "clean_ptl_on_startup": true,
    "poll_interval_ms": 250,
    "reconcile_interval_sec": 5
}

Основные параметры

ПараметрПо умолчаниюОписание
controllers[]Список контроллеров (см. ниже)
redis_urlredis://127.0.0.1:6379Адрес подключения к Redis
demofalseДемо-режим без оборудования
debugfalseРежим отладки
log_levelinfoУровень журнала: debug, info, warn, error
log_fileПуть к файлу журнала
clean_ptl_on_startupfalseСбросить все модули при старте
api_host0.0.0.0Адрес прослушивания
api_port8000Порт прослушивания

Параметры фоновых процессов

ПараметрПо умолчаниюОписание
poll_interval_ms250Интервал опроса оборудования (мс)
poll_only_activetrueОпрашивать только активные модули
reconcile_interval_sec5Интервал синхронизации состояния (сек.)
apply_timeout_sec10Тайм-аут записи на контроллер (сек.)
modbus_timeout_sec2Тайм-аут Modbus-соединения (сек.)
broadcast_delay_ms1000Задержка широковещательных операций (мс)
monitor_interval_sec5Интервал пинга контроллеров (сек.)
task_concurrencyparallelРежим выполнения задач: parallel или exclusive
unit_degrade_threshold5Количество последовательных ошибок до статуса «degraded»
unit_unreachable_threshold30Количество ошибок до статуса «unreachable»
health_scan_interval_sec0Интервал сканирования здоровья всех модулей (0 = отключено)
log_fileПуть к файлу журнала (по умолчанию — stdout)
log_max_size_mb100Максимальный размер файла журнала (МБ)
log_max_files5Количество ротируемых файлов журнала

Настройка контроллеров

Каждый контроллер — это Ethernet-шлюз Modbus, к которому подключены световые модули. В массиве controllers описывается каждый шлюз и диапазон адресов его устройств.

Пример с несколькими контроллерами
{
    "controllers": [
        {
            "ip": "192.168.0.199",
            "port": 502,
            "start_id": 1,
            "end_id": 30,
            "device_type": "2Sub_4Count"
        },
        {
            "ip": "192.168.0.100",
            "port": 502,
            "start_id": 1,
            "end_id": 102,
            "device_type": "0Sub_6Count"
        }
    ]
}
ПолеОписание
ipIP-адрес контроллера
portПорт Modbus (обычно 502)
start_idНачальный адрес модуля
end_idКонечный адрес модуля (макс. 247)
device_typeТип устройства (см. ниже)

Типы устройств

ТипОсновное таблоДополнительное
2Sub_4Count4 разряда2 разряда
0Sub_6Count6 разрядовнет
0Sub_4Count4 разряданет
0Sub_3Count3 разряданет
0Sub_2Count2 разряданет

Запуск через Docker

Docker Compose (с Redis)

docker-compose.yml
services:
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    deploy:
      resources:
        limits:
          memory: 128M

  ptl:
    image: ptl-api:3.0
    ports:
      - "8001:8000"
    environment:
      APP_CONFIG: /etc/fontera_ptl/config.json
      REDIS_URL: redis://redis:6379
    volumes:
      - ./config.json:/etc/fontera_ptl/config.json:ro
    depends_on:
      - redis
    deploy:
      resources:
        limits:
          memory: 256M
    restart: unless-stopped
Запуск
docker compose up -d

Сборка образа

Терминал
# Через Makefile
make docker

# Или вручную
docker build -t ptl-api:3.0 .

Запуск без Docker

Сборка и запуск
# Сборка
make build

# Запуск
./bin/ptl-api -config ./config.json

# С указанием хоста и порта
./bin/ptl-api -config ./config.json -host 0.0.0.0 -port 8000

Флаги командной строки

ФлагПо умолчаниюОписание
-config/etc/fontera_ptl/config.jsonПуть к файлу конфигурации
-host0.0.0.0Адрес прослушивания
-port8000Порт прослушивания

Переменные окружения

ПеременнаяПо умолчаниюОписание
APP_CONFIG/etc/fontera_ptl/config.jsonПуть к файлу конфигурации
REDIS_URLredis://127.0.0.1:6379Адрес подключения к Redis
API_HOST0.0.0.0Адрес прослушивания
API_PORT8000Порт прослушивания
DEBUGfalseРежим отладки (true или 1)
LOG_LEVELinfoУровень журнала

Приоритет применения настроек (от низшего к высшему):

  1. Значения по умолчанию в коде
  2. JSON-файл конфигурации
  3. Переменные окружения
  4. Флаги командной строки

Вебхуки

Система может отправлять HTTP POST-уведомления о событиях на внешние URL. Вебхуки настраиваются глобально и/или для каждого контроллера отдельно.

Поддерживаемые события

СобытиеОписание
buttonОператор нажал кнопку на PTL-модуле
task_confirmedВсе модули задачи подтверждены
task_completedЗадача завершена
task_timeoutЗадача не выполнена в срок
task_cancelledЗадача отменена
controller_onlineКонтроллер стал доступен
controller_offlineКонтроллер перестал отвечать

Тайм-аут запроса — 5 секунд. Отправка выполняется асинхронно и не блокирует основной процесс.

Проверка работоспособности

Терминал
# Быстрая проверка
curl http://localhost:8000/_ping
# Ответ: pong

# Доступность контроллеров
curl http://localhost:8000/alive
# Ответ:
# [
#   {"controller_ip": "192.168.0.199", "controller_port": 502, "reachable": true},
#   {"controller_ip": "192.168.0.100", "controller_port": 502, "reachable": false}
# ]

# Список контроллеров и статус
curl http://localhost:8000/controllers

# Метрики (Prometheus)
curl http://localhost:8000/metrics

Фоновые процессы

PTL запускает несколько фоновых процессов для работы с оборудованием:

Опросчик (Poller)

Периодически считывает состояние модулей с контроллеров. Обнаруживает нажатия кнопок и публикует события.

Синхронизатор (Reconciler)

Сравнивает целевое и фактическое состояние модулей. Если есть расхождение — записывает нужное значение на контроллер.

Планировщик шины (Bus Scheduler)

Управляет очередью Modbus-операций записи для каждого контроллера. Один планировщик на каждый контроллер.

Демо-режим

Для тестирования без оборудования установите "demo": true в конфигурации. В этом режиме:

Для быстрого старта. Включите демо-режим, чтобы протестировать интеграцию с АКС Комплекс до поставки оборудования.

Важные замечания

Redis обязателен. Без Redis сервис не запустится. Redis используется для хранения состояния, подписок на события и потоковой записи истории.