Подключение сторонней программы к Link-D

Как получать события и тревоги с пульта в свою систему. Инструкция рассчитана на любого читателя: если вы не программист — начните с первой вкладки, там всё по шагам и без установки чего-либо.

Что это такое и что вам нужно

Link-D — пульт централизованного наблюдения. К нему подключены приборы на объектах: пожарная сигнализация, охрана, датчики. Пульт принимает от них сообщения и показывает диспетчеру.

Эта инструкция — про то, как ваша программа может читать те же данные. Например, чтобы тревоги сами попадали в вашу систему учёта или чтобы объекты отображались на вашей карте.

Что понадобится

ЧтоОткуда взять
Адрес пульта Тот же, по которому вы читаете эту страницу: —. В примерах он подставлен сам.
Ключ доступа
строка вида linkd_xxxx…
Выдаёт обслуживающая организация. Напишите или позвоните: «нужен ключ интеграции». Передадут файлом или письмом на вашу почту.
Устанавливать ничего не нужно. Примеры на следующих вкладках работают прямо в этой странице: вставляете ключ, нажимаете кнопку и видите настоящий ответ пульта.

Что ключ открывает, а что нет

МожноНельзя
ДанныеЧитать объекты, события и тревоги Менять что-либо: закрыть тревогу, поправить карточку, добавить объект
ОбъёмОбъекты того заказчика, которому выдан ключ Объекты других заказчиков — их не видно вообще
ВходОбращаться из программы Войти ключом в кабинет или в пульт — форма его не примет
Ключ — это как пароль. Кто им владеет, тот и читает данные. Не выкладывайте его в переписку и в открытый код. Если ключ попал не в те руки — сообщите обслуживающей организации: его отзовут и выдадут новый.

Куда обращаться

Контакты обслуживающей организации не заполнены в настройках пульта. Спросите их у того, кто выдал вам ключ.

Шаг 1. Проверим, что ключ рабочий

Начните отсюда. Этот запрос ничего не меняет — он спрашивает у пульта: «что за ключ вы мне дали и что он открывает».

1
Вставьте ключ, который вам выдали.

Ключ скрыт намеренно: он равносилен паролю, а эту страницу открывают и при других людях. Нажмите «Показать», если нужно сверить.
Он остаётся только в этой вкладке браузера и пропадёт, когда вы её закроете.

2
Нажмите кнопку.
Ответ появится здесь.

Как понять ответ

{
  "вид": "ключ интеграции",
  "название_ключа": "1С заказчика",
  "доступ": "объекты одного заказчика",
  "права": "только чтение",
  "заказчик": "Иванов И. И."
}
СтрокаЧто означает
название_ключаКак ключ подписан у обслуживающей организации. По нему его найдут в разговоре: «отзовите ключ „1С заказчика“».
доступ«объекты одного заказчика» — видны только его объекты. «все объекты пульта» — видно всё; такой ключ выдают редко и по отдельному решению.
праваВсегда «только чтение». Другого не бывает.
Если пришла ошибка — вкладка «Ошибки»: там разобрана каждая.

Как устроен обмен

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

Прибор на объекте Пульт Link-D принимает и хранит события и тревоги Ваша программа сообщения запрос + ключ ответ: данные Диспетчер работает как обычно

Из чего состоит запрос

Адрес плюс ключ в заголовке. Больше ничего.

GET https://адрес-пульта/объекты
Authorization: Bearer linkd_ваш_ключ

Слово Bearer и пробел перед ключом обязательны — так устроен общепринятый способ передачи ключей, и любая библиотека умеет это сама.

Как часто спрашивать

ЗадачаКак частоПочему так
Тревоги — чтобы реагироватьраз в 10–30 секунд Чаще незачем: диспетчер видит их первым в любом случае
События — для журналараз в 1–5 минутСобытия копятся, деваться им некуда
Объекты — справочникраз в час или при запускеСостав объектов меняется редко
Не спрашивайте чаще раза в секунду. Пульт занят приёмом тревог с приборов — это его главная работа, и она важнее любой интеграции.

Объекты

Список объектов, доступных вашему ключу. С него обычно начинают: из него берут номера для остальных запросов.

Адрес: GET /объекты

Ответ появится здесь.

Что в ответе

[
  {
    "номер": 5,
    "номер_объекта": 1,
    "название": "Стенд",
    "адрес": null,
    "активен": true,
    "количество_приборов": 1,
    "приборов_без_связи": 1
  }
]
ПолеЧто это
номерВнутренний номер объекта в пульте. Именно его подставляют в другие запросы.
номер_объектаНомер по договору — тот, что видит заказчик. Для запросов не годится.
активенfalse — объект отключён, события по нему не идут.
приборов_без_связиСколько приборов молчит прямо сейчас. Не ноль — часть объекта пульт не видит.
Почему тут нет номеров приборов. Пара «порт приёма + номер прибора» наружу не отдаётся никому, даже владельцу объекта: зная её, можно прислать пульту поддельное сообщение от имени этого объекта. Для сопоставления пользуйтесь полем номер.

События

Всё, что приборы прислали на пульт: срабатывания, восстановления, постановки на охрану, тесты связи. События не исчезают и не меняются.

Адрес: GET /события/последние?количество=50

Ответ появится здесь.

Что в ответе

{
  "id": 7045,
  "recv_time": "2026-09-11 09:34:13.688000+00:00",
  "event_code": "110",
  "qualifier": "1",
  "event_name": "Пожар",
  "category": "Пожар",
  "priority": 1,
  "partition": "01",
  "zone": "055",
  "partition_name": "Дымовой",
  "zone_name": null,
  "dup_count": 1,
  "object_id": 5,
  "object_name": "Стенд"
}
ПолеЧто это
idНомер события, растёт. Запомните последний обработанный — и дальше берите только те, у которых id больше.
recv_timeКогда пульт принял событие.
qualifier1 — сработало, 3 — восстановилось. Это важнее, чем кажется: один и тот же event_code означает и тревогу, и её снятие.
category«Пожар», «Тревога», «Неисправность», «Связь», «Постановка», «Служебное». Фильтровать удобнее по ней, чем по коду.
priority1 — самое срочное, 5 — служебное.
partition / zoneРаздел и зона по протоколу, рядом — их названия, если заведены в карточке объекта.
dup_countСколько раз прибор повторил то же сообщение. Больше 1 — повтор, а не новое срабатывание.
Не качайте «всё подряд» каждый раз. Возьмите последние 50, запомните наибольший id и дальше берите только то, что новее. Иначе с ростом журнала программа будет тянуть одно и то же гигабайтами.

Тревоги

Тревога — не событие, а случай, с которым работает диспетчер. Несколько событий об одном и том же собираются в одну тревогу; у неё есть состояние и время закрытия.

Адрес: GET /инциденты/активные

Ответ появится здесь.

Что в ответе

{
  "id": 1216,
  "priority": 1,
  "category": "Пожар",
  "title": "Пожар",
  "status": "open",
  "event_count": 2,
  "opened_at": "2026-09-09 07:27:34.944000+00:00",
  "last_event_at": "2026-09-09 07:27:34.944000+00:00",
  "acknowledged_at": null,
  "restored": false,
  "zone_partition": "01",
  "zone_code": "005",
  "object_id": 5,
  "object_name": "Стенд"
}
ПолеЧто это
statusopen — никто ещё не взял в работу, in_work — диспетчер принял.
acknowledged_atКогда диспетчер принял тревогу. null — ещё не принял.
restoredtrue — прибор прислал восстановление. Тревога при этом может быть ещё открыта: восстановление и закрытие — разные вещи.
event_countСколько событий собралось в эту тревогу.
Закрытых тревог тут нет. Адрес отдаёт только то, что в работе прямо сейчас. Тревога пропала из списка — значит её закрыли.

Ошибки и что делать

КодЧто говорит пультЧто делать
401 «требуется вход» или «ключ интеграции недействителен, отозван или просрочен» Ключ не подставился, испорчен при копировании, отозван или просрочен. Проверьте, что заголовок выглядит как Authorization: Bearer linkd_…, а ключ скопирован целиком, без пробелов и переносов. Если всё верно — запросите новый.
403 «ключ интеграции даёт только чтение» Вы пытаетесь что-то изменить. Ключом это невозможно ни по ошибке, ни намеренно.
403 «этот раздел ключу интеграции недоступен» Адрес не входит в открытое интеграциям. Доступны объекты, события, тревоги и отчёты — все описаны на этих вкладках.
404 «объект не найден» Такого объекта нет или он чужой. Со стороны ключа эти случаи неразличимы намеренно: иначе по номерам можно было бы перебрать чужие объекты.
422 перечисление полей Неверный или пропущенный параметр в адресе. Сверьтесь с примером на вкладке.
500 внутренняя ошибка Это наша сторона. Запишите время и запрос — и сообщите обслуживающей организации.

Пустой ответ — не ошибка

Пришло [] — значит данных нет: ни активных тревог, ни событий за период. Для пожарного пульта это желаемое состояние.

Безопасность

Как хранить ключ

Если ключ утёк или вы в этом не уверены — не гадайте и не ждите начала рабочего дня. Звоните сразу, в любое время суток: сообщите обслуживающей организации. Дежурный примет сообщение и передаст администратору — ключ отзовут и выдадут новый. Отзыв не влияет ни на кабинет заказчика, ни на работу пульта: перестанет работать только эта интеграция.

Что видно с той стороны

У обслуживающей организации записано, когда ключ выдан, кому, как передан и когда им пользовались в последний раз. Ключ, который год лежит без дела, отзовут и спросят, нужен ли он ещё.

Чего ключ не может в принципе

Программисту

Если вы передаёте эту инструкцию разработчику — вот всё то же самое коротко.

ЧтоЗначение
Базовый адрес—
Проверка подлинностизаголовок Authorization: Bearer <ключ>
ФорматJSON, UTF-8
Способытолько GET
Машинное описание/openapi.json

Доступные адреса

АдресЧто отдаёт
/пользовательСведения о самом ключе
/объектыСписок объектов
/объекты/{номер}Карточка объекта: разделы, зоны, планы
/события/последние?количество=NПоследние события
/события/журнал?с=…&по=…События за период
/инциденты/активныеТревоги в работе
/отчёты/сводка?с=…&по=…Сводка по объектам за период

Те же данные доступны латинскими адресами — /objects, /events/recent, /incidents/active и так далее — для систем, которые плохо работают с русскими адресами.

Порядок работы

  1. При запуске — /объекты, сохранить соответствие номеров своим объектам.
  2. Раз в 10–30 секунд — /инциденты/активные, сравнить с прошлым разом: появилось новое — реагировать, пропало — тревогу закрыли.
  3. Раз в минуту — /события/последние, брать только те, у которых id больше последнего обработанного.
  4. Ошибку 401 считать поводом остановиться и позвать человека, а не поводом повторять запрос в цикле.
Часовые пояса. Время приходит со сдвигом относительно Гринвича, например +00:00. Приводите его к своему поясу при выводе, а хранить лучше как есть.