LS Player MQTT API

Материал из Light Stream (RU)
Версия от 03:42, 2 июля 2026; LightStream (обсуждение | вклад) (статья про LS Player 1.3.4 MQTT API)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)


Документ описывает MQTT API плеера LS Player v1.3.4. Материал сгруппирован в четыре смысловых блока, чтобы было проще ориентироваться:

  • I. Логика воспроизведения (разделы 1–3) — что и когда играть: плеер, настройки проигрывания, расписание.
  • II. Оборудование и интерфейсы (разделы 4–8) — физические устройства и интерфейсы: ArtNet/RDM, DI/DO, внешние датчики, RS485, светодиоды.
  • III. Триггеры и actions (раздел 9) — автоматизация реакции на внешние события.
  • IV. Система и обслуживание (разделы 10–11) — администрирование устройства: системные настройки, обновление ПО.

Как читать документ. Каждый раздел описывает MQTT-топики сервиса. Префикс в заголовке топика означает направление обмена с точки зрения плеера:

  • PUB — плеер публикует в этот топик данные (состояние, списки, события, ошибки). Чтобы получать их, клиент подписывается на топик. Многие PUB-топики публикуются с флагом retained — последнее значение приходит сразу при подписке.
  • SUB — плеер подписан на этот топик и ждёт в нём команды. Чтобы дать команду, клиент публикует в топик сообщение в формате, указанном в «Payload format» (пример — в «Example»).

Если вы впервые знакомитесь с API — рекомендуется читать по порядку, начиная с блока I. Если ищете конкретный топик — можно сразу перейти к нужному разделу через оглавление.

К статье прилагается демонстрационный flow для Node-RED («MQTT API v1.3.4 - Node-Red demo flow.json»): в нём для каждого раздела собраны готовые примеры запросов (узлы inject) и подписки на ответы (узлы debug), номера блоков во flow совпадают с номерами разделов этой статьи. Самый быстрый способ разобраться в API — импортировать flow, нажимать кнопки inject и смотреть ответы плеера в панели Debug.

I. Логика воспроизведения

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

1. Управление проигрыванием

Описывает MQTT API сервиса проигрывания.

Сервис осуществляет проигрывание анимаций по группам воспроизведения (group_id). Каждая группа независимо проигрывает свой контент (cue, плейлист, статическую заливку или blackout) и имеет собственный текущий приоритет. Список и состав групп определяется конфигурацией фикстур (lm/settings/fixture).

Что изменилось в v1.3.4 по сравнению с v1.2.4: раздел переведён на модель групп воспроизведения. Появился основной топик управления lm/player/commands (apply/apply_each/update_state, действия play/blackout/static_color/stop). Старый топик lm/player сохранён, но помечен как legacy/deprecated. Топики статистики lm/statistic/playing_progress_info и lm/statistic/playing_ent_info удалены и заменены единым снимком lm/player/state. Топик lm/statistic/current_playing_priority заменён на per-group снимок lm/player/current_playing_priority. Инвертирована семантика приоритета: было «чем меньше число, тем выше приоритет» → стало «чем больше число, тем выше приоритет» (0 - минимальный приоритет).

SUB lm/player/commands

Принимает команды управления проигрыванием. Поддерживаются команды apply, apply_each и update_state.

Apply

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

Payload format

{
   "cmd": "apply",
   "priority": Union[int, 'buttons', 'scheduler', 'trigger'],
   "groups": list[str],
   "action": GroupAction,
}

Example

 {
   "cmd": "apply",
   "priority": "buttons",
   "groups": ["roof", "back"],
   "action": {
     "type": "play",
     "entity_type": "cue",
     "entity_id": 42,
     "count": null
   }
 }
  • cmd - Литерал "apply".
  • priority - Приоритет команды. Целое число (0 - минимальный приоритет, чем больше значение - тем выше приоритет) либо именованная маска "buttons" / "scheduler" / "trigger".
  • groups - Список ID групп, к которым применяется действие. Если хотя бы одна из указанных групп не существует - вся команда отклоняется.
  • action - Объект GroupAction, общий для всех групп из groups.

Apply each

Применяет разные действия к разным группам в одном сообщении.

Payload format

{
   "cmd": "apply_each",
   "priority": Union[int, 'buttons', 'scheduler', 'trigger'],
   "actions": {
     str: GroupAction,
     ...
   },
}

Example

 {
   "cmd": "apply_each",
   "priority": "buttons",
   "actions": {
     "roof": {"type": "play", "entity_type": "playlist", "entity_id": 1, "count": null},
     "back": {"type": "blackout"},
     "front": {"type": "stop"}
   }
 }
  • cmd - Литерал "apply_each".
  • priority - Общий приоритет для всех действий в сообщении.
  • actions - Словарь group_id → GroupAction. Неизвестные группы пропускаются, остальные действия из сообщения продолжают обрабатываться.

Update state

Служебная команда запроса актуального playback-state (провоцирует внеочередную публикацию lm/player/state).

Payload format

{
   "cmd": "update_state"
}

GroupAction

Дискриминация выполняется по полю type.

Play - запускает playlist или cue на группе.

{
   "type": "play",
   "entity_type": Union['playlist', 'cue'],
   "entity_id": Union[int, str],
   "count": Optional[int],
}
  • entity_type - Тип сущности: playlist или cue.
  • entity_id - ID сущности.
  • count - Количество повторов. null означает бесконечное проигрывание.

Blackout - включает на группе zero-cue, который держит каналы группы в нуле.

{
   "type": "blackout"
}

Stop - останавливает проигрывание на группе и проверяет, есть ли актуальное событие расписания. Если в runtime ничего не проигрывается на группе, stop игнорируется.

{
   "type": "stop"
}

Static color - включает на группе статическое DMX-состояние. Значения задаются по семантическому типу канала; runtime разворачивает их в реальные DMX-каналы по текущим patch settings.

{
   "type": "static_color",
   "channels": { "<channel_type>": int }
}
  • channels - Объект channel_type → DMX-значение (целые 0-255). Каналы группы, для которых тип не задан, выставляются в 0. Неизвестный или отсутствующий в группе channel_type игнорируется. Пустой channels → все каналы группы 0.

Example

 {
   "cmd": "apply",
   "priority": "buttons",
   "groups": ["front", "back"],
   "action": {
     "type": "static_color",
     "channels": {"red": 255, "green": 128, "blue": 0}
   }
 }

Поведение

  • Для apply наличие хотя бы одной неизвестной группы отклоняет всю команду. Для apply_each неизвестные группы пропускаются.
  • Для play в apply, если сущность не найдена, отклоняется вся команда. Для play в apply_each пропускается только соответствующая группа.
  • Приоритет задаётся на уровне всей команды. Если в runtime уже есть активное проигрывание и текущий приоритет группы выше приоритета команды - действие для этой группы игнорируется.
  • play, blackout и static_color используют текущие настройки перехода из lm/settings/player/effect_between_playing_command и lm/settings/player/duration_effect_between_playing_command.
  • stop вызывает fade-out с текущим значением duration_effect_between_playing_command, затем сбрасывает приоритет группы к минимальному и инициирует перепроверку расписания для этой группы.


SUB lm/player (legacy, deprecated)

Принимает команды play и stop и применяет действие ко всем группам сразу. Поддерживается для совместимости со старыми клиентами; для нового кода используйте lm/player/commands.

Play (legacy)

Payload command format

{
   "cmd": "play",
   "what_playing": Union['playlist', 'cue'],
   "entity": Union[int, str],
   "count": Optional[int],
   "priority": Union[int, 'buttons', 'scheduler', 'trigger'],
}

Example

 {
   "cmd": "play",
   "what_playing": "cue",
   "entity": 5,
   "count": null,
   "priority": "buttons"
 }
  • cmd - Название команды.
  • what_playing - Тип сущности для воспроизведения. Принимает значения "playlist" и "cue".
  • entity - ID или наименование проигрываемой сущности.
  • count - Опциональный параметр. Количество повторений проигрывания. Если не задан или равен null, проигрывание продолжится до получения следующей команды с равным или более высоким приоритетом.
  • priority - Приоритет команды: число или именованная маска buttons / scheduler / trigger.

Stop (legacy)

Payload stop command format

{
   "cmd": "stop",
   "priority": Union[int, 'buttons', 'scheduler', 'trigger'],
}

Example

 {
   "cmd": "stop",
   "priority": "buttons"
 }


PUB lm/player/state

Публикует полный снимок текущего состояния воспроизведения всех групп. Сообщение публикуется с флагом retain=true, поэтому новый подписчик сразу получает последнее актуальное состояние от брокера.

Публикация выполняется: при изменении контента на любой группе; при переходе на другую сцену внутри плейлиста; при появлении или исчезновении затухающих (stale) слоёв; при изменении frame_rate; при остановке сервиса (публикуется пустое состояние).

frame_rate, current_frame, total_frames и timestamp позволяют подписчику самостоятельно посчитать прогресс и оставшееся время воспроизведения.

Payload format

{
   "groups": {
       str: {
           "now": Layer | null,
           "stale": [Layer, ...],
       },
       ...
   },
   "frame_rate": float,
   "timestamp": int,
}

Layer

{
   "group_id": str,
   "playback_id": str,
   "content": Content,
   "is_playing": bool,
   "weight": float,
   "current_frame": int,
   "total_frames": int,
   "playlist_id": Optional[str],
   "playlist_name": Optional[str],
   "scene_index": Optional[int],
   "total_scenes": Optional[int],
   "sequence_repeat": Optional[int],
}

Content - что именно играет на слое, объект с дискриминатором type:

  • Записанный cue: { "type": "recorded", "cue_id": str }
  • Статическая заливка: { "type": "static_color", "channels": dict[str, int] } (0-255)
  • Blackout: { "type": "blackout" } - группа удерживается в нуле, дополнительных полей нет.

Example

{
 "groups": {
   "group_1": {
     "now": {
       "group_id": "group_1",
       "playback_id": "7f3a9c2e-4b1d-4e0a-9c3f-2a1b6d8e0f11",
       "content": {"type": "recorded", "cue_id": "a1b2c3d4"},
       "is_playing": true,
       "weight": 1.0,
       "current_frame": 120,
       "total_frames": 900,
       "playlist_id": "pl_001",
       "playlist_name": "Evening Show",
       "scene_index": 2,
       "total_scenes": 5,
       "sequence_repeat": -1
     },
     "stale": [
       {
         "group_id": "group_1",
         "playback_id": "1d8b4f60-9a72-4c55-8e3b-0f4c7a2d9b30",
         "content": {"type": "recorded", "cue_id": "x9y8z7w6"},
         "is_playing": true,
         "weight": 0.35,
         "current_frame": 899,
         "total_frames": 900,
         "playlist_id": null,
         "playlist_name": null,
         "scene_index": null,
         "total_scenes": null,
         "sequence_repeat": null
       }
     ]
   },
   "group_2": { "now": null, "stale": [] }
 },
 "frame_rate": 30.0,
 "timestamp": 1743422400000
}
  • groups - Словарь всех групп из текущего patch mapping. Группа присутствует в snapshot, даже если на ней ничего не играет.
  • now - Текущее активное воспроизведение на группе. null, если на группе ничего не играет.
  • stale - Список слоёв, которые ещё затухают после переключения. Может быть пустым.
  • playback_id - Стабильный идентификатор экземпляра воспроизведения (uuid). Фиксируется при запуске слоя и не меняется всю его жизнь, переживая переход из now в stale. По нему подписчик коррелирует записи между снапшотами. Новый запуск (включая повтор или луп-рестарт той же сцены) - это новый playback_id.
  • is_playing - Играет ли слой в текущий момент (weight > 0).
  • weight - Текущий вес слоя в диапазоне 0.0-1.0. Используется для визуализации fade-in/fade-out.
  • playlist_id / playlist_name - Заполнены, если cue воспроизводится как часть плейлиста. Иначе null.
  • scene_index / total_scenes - Индекс текущей сцены (0-based) и общее число сцен в плейлисте. Для одиночного cue - null.
  • sequence_repeat - Оставшееся количество повторов последовательности. -1 - бесконечный loop, 0 - последний прогон, N - осталось ещё N повторов. Для одиночного cue - null.
  • frame_rate - Текущий FPS рендера.
  • timestamp - Момент формирования snapshot, unix time в миллисекундах.

Замена статистики v1.2.4: топики lm/statistic/playing_progress_info и lm/statistic/playing_ent_info удалены, их функциональность полностью покрывается данным топиком.


PUB lm/player/current_playing_priority

Публикует полный снимок текущих приоритетов всех групп. Сообщение публикуется с флагом retain=true.

Публикация выполняется: при изменении текущего приоритета любой группы; при изменении состава групп после обновления patch/group mapping; после инициализации сервиса; при изменении настроек сопоставления именованных приоритетов (если в этот момент что-то проигрывается, сервис останавливает текущее проигрывание и сбрасывает приоритеты всех групп к наименьшему значению); при завершении сервиса (публикуется пустой snapshot {}).

В одном сообщении публикуется полное состояние всех групп, а не только изменившейся - каждое новое сообщение должно рассматриваться как полная замена предыдущего snapshot. Снимок отражает логику арбитража команд, а не фактическое состояние рендера.

Payload format

{
   str: Union[int, 'buttons', 'scheduler', 'trigger'],
   ...
}

Example

{
 "all": "scheduler",
 "front": "buttons",
 "back": 75
}
  • key - Идентификатор группы.
  • value - Текущий приоритет группы. 0 означает наименьший приоритет. Именованные значения buttons, scheduler, trigger публикуются как строки.

Замена статистики v1.2.4: топик lm/statistic/current_playing_priority (единое целочисленное значение для всего плеера) удалён, заменён данным per-group снимком.


2. Управление настройками проигрывания и сущностей

PUB lm/settings/location/coordinates

Публикует координаты плеера. Retained. Payload format

{
   "latitude": str,
   "longitude": str,
}

Значения публикуются строками. Example

 {
   "latitude": "56.821019190097616",
   "longitude": "60.59559633825789"
 }


PUB lm/settings/location/address

Публикует адрес устройства. Retained. Payload format

{
 "address": str
}

Example

{
"address": "Yekaterinburg"
}


PUB lm/settings/datetime/timezone

Публикует часовой пояс плеера. Retained. Payload format

{
 "timezone": str
}

Example

{
"timezone": "Asia/Yekaterinburg"
}
  • timezone - Часовой пояс плеера.


PUB lm/settings/player/fps

Публикует настройки fps. Retained. Payload format

{
 "fps": int,
}

Example

{
"fps": 40
}


PUB lm/settings/player/artsync

Публикует статус отправки artsync. Retained. Payload format

{
 "artsync": bool,
}

Example

{"artsync": false}


=== PUB lm/settings/player/locked === (новое в v1.3.4) Публикует статус блокировки отправки ArtDMX плеера. Retained. Payload format

{
 "locked": bool,
}

Example

{"locked": true}


PUB lm/settings/player/effect_between_playing_command

Публикует настройку эффекта между событиями проигрывания. Retained.

Изменение относительно v1.2.4: заменяет топик lm/settings/player/blackout_between_playing_command (bool). Вместо булева флага "включен/выключен blackout" используется перечисление типа эффекта.

Payload format

{
 "effect_between_playing_command": Union['transition', 'blackout', 'fade', 'no_effect'],
}

Example

{"effect_between_playing_command": "blackout"}


=== PUB lm/settings/player/duration_effect_between_playing_command === (новое в v1.3.4) Публикует настройку длительности эффекта между событиями проигрывания. Retained. Payload format

{
 "duration": float,
}

Example

{"duration": 1.0}


=== PUB/SUB lm/settings/player/dimmer_value === (новое в v1.3.4) Публикует значения диммера по группам воспроизведения. Retained. Backend также подписан на этот топик: входящее сообщение задаёт новые значения диммера (набор групп во входящем сообщении должен совпадать с текущим). Payload format

{
 str: float,
}
  • key - Идентификатор группы.
  • value - Значение диммера, 0.0 - 1.0.

Examples

{"all": 0.5}
{"all": 1.0, "stage_left": 0.25, "stage_right": 0.8}
{}


PUB lm/settings/player/playing_priority

Публикует предустановленные приоритеты проигрывания плеера. Retained. Payload format

{
   "buttons": int,
   "triggers": int,
   "scheduler": int,
}

Example

 {
   "buttons": 4,
   "triggers": 5,
   "scheduler": 6
 }

Приоритет представляет из себя целое число от 1 до 100. Чем выше число тем меньше приоритет.


PUB lm/settings/player/universes

Публикует настройки вселенных плеера. Retained. Payload format

[
 {
   "number": int,
   "device": {
     "name": str,
     "description": str,
     "network_mode": str,
     "ip": str,
     "port": int,
   } | None
 }
]

Example

[
 {
   "number": 1,
   "device": {
     "name": "artnet_device_1",
     "description": "Main ArtNet converter",
     "network_mode": "unicast",
     "ip": "192.168.1.100",
     "port": 6454
   }
 },
 {
   "number": 2,
   "device": null
 }
]
  • number - Номер вселенной (0-32768).
  • device - Настройки ArtNet устройства для данной вселенной. Может быть null если устройство не назначено.
    • name - Уникальное имя ArtNet устройства (до 32 символов).
    • description - Описание устройства (до 255 символов, может быть пустым).
    • network_mode - Режим работы сети ("unicast" или "broadcast").
    • ip - IP адрес устройства.
    • port - Порт устройства (по умолчанию 6454, диапазон 1-65534).


=== PUB lm/settings/fixture === (новое в v1.3.4) Публикует конфигурацию фикстур. Retained. Payload format

{
 "backgroundImageBase64": str,
 "mapWidth": float,
 "mapHeight": float,
 "fixtureTypes": [ {...} ],
 "fixtures": [ {...} ],
 "groups": [ { "id": str, ... } ],
}
  • backgroundImageBase64 - Фоновое изображение карты в base64 (может быть пустым).
  • mapWidth / mapHeight - Размеры карты.
  • fixtureTypes - Типы фикстур.
  • fixtures - Фикстуры.
  • groups - Группы воспроизведения - те самые group_id, которые используются в lm/player/commands, lm/player/state и топиках расписания.


PUB lm/cues

Публикует список cue файлов загруженных на плеер. Retained. Payload format

[
 {
   "id": int,
   "filename": str,
   "uni_count": int,
   "universes": [int],
   "frame_count": int,
   "created": str,
 }
]

Example

[
 {
   "id": 47,
   "filename": "00-5.cue",
   "uni_count": 1,
   "universes": [1],
   "frame_count": 220,
   "created": "2024-03-07T08:30:16.926447Z"
 }
]
  • id - Уникальный идентификатор анимации.
  • filename - Имя файла.
  • uni_count - Количество вселенных в файле.
  • universes - Список номеров вселенных в файле. (новое поле в v1.3.4)
  • frame_count - Количество фреймов в файле.
  • created - Время загрузки анимации в ISO формате.


=== PUB lm/cues/deleted === (новое в v1.3.4) Публикует событие об удалении cue. Payload format

{ "cue_id": int }


PUB lm/playlists

Публикует список плейлистов загруженных на плеер. Retained. Payload format

[
 {
   "id": int,
   "name": str,
   "scenes": [
     {
       "id": int,
       "order": int,
       "cue": {
         "id": int,
         "filename": str,
         "uni_count": int,
         "universes": [int],
         "frame_count": int,
         "created": str
       },
       "fade_in": float,
       "fade_out": float,
       "transition_time": float,
       "repeat_value": int,
     }
   ]
 }
]

Example

[
 {
   "id": 19,
   "name": "Test",
   "scenes": [
     {
       "id": 71,
       "order": 0,
       "cue": {
         "id": 51,
         "filename": "5-8.cue",
         "uni_count": 1,
         "universes": [1],
         "frame_count": 220,
         "created": "2024-03-07T08:27:23.567083Z"
       },
       "fade_in": 1.0,
       "fade_out": 0.0,
       "transition_time": 2.0,
       "repeat_value": 3600
     }
   ]
 }
]
  • id - Уникальный идентификатор плейлиста.
  • name - Название плейлиста.
  • scenes - Сцены. В сценах содержится вся информация об эффектах, применённых к cue, и порядковый номер воспроизведения внутри плейлиста.
    • id - Уникальный идентификатор сцены.
    • order - Порядковый номер воспроизведения внутри плейлиста.
    • cue - Параметры анимации, включая новое поле universes. Подробнее
    • fade_in - Время fade_in.
    • fade_out - Время fade_out.
    • transition_time - Время перехода.
    • repeat_value - Количество повторений.


=== PUB lm/playlists/deleted === (новое в v1.3.4) Публикует событие об удалении плейлиста. Payload format

{ "playlist_id": int }


SUB lm/player/commands

См. раздел «1. Управление проигрыванием» - основной топик управления воспроизведением по группам (apply/apply_each/update_state).


=== SUB lm/control/config === (новое в v1.3.4) Команда сервисам перечитать конфигурацию. Payload - строка (не JSON). Payload format

"refresh"                      # перечитать общую конфигурацию
"refresh_universes_settings"   # перечитать настройки вселенных


3. Управление расписанием

PUB lm/scheduler/error

Публикует ошибки. Выставляет заголовок Correlation data если он был установлен в запросе.

Payload format

{
    "status": "error",
    "msg": str,
    "data": Any
}
  • status - всегда "error" для этого топика. (новое поле в v1.3.4)
  • msg - contain error message
  • data - contain related error data

Example (ошибка валидации payload, data содержит список ошибок валидации полей):

{
  "status": "error",
  "msg": "Validation error",
  "data": [
    {
      "type": "missing",
      "loc": ["priority"],
      "msg": "Field required",
      "input": {"title": "holiday", "rrule": {"freq": "DAILY", "interval": 1, "start_date": "2024-01-20", "start_time_type": "time", "start_time": "00:00"}}
    }
  ]
}

Example (внутренняя ошибка обработки, data равен null):

{
  "status": "error",
  "msg": "Internal Error Occurred",
  "data": null
}


PUB lm/scheduler/events

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

Payload format

[
 {
   "id": str,
   "title": str,
   "priority": int,
   "actions": {
     "player": {
       str: {"type": "play", "entity_type": Union['playlist','cue'], "entity_id": int}
            | {"type": "blackout"}
            | {"type": "static_color", "channels": dict[str, int]}
     },
     "do1": Optional[{"state": Literal[0, 1]}],
     "do2": Optional[{"state": Literal[0, 1]}],
     "do3": Optional[{"state": Literal[0, 1]}],
   },
   "rrule": RRule
 }
]

RRule

{
   "freq": Union['YEARLY', 'MONTHLY', 'WEEKLY', 'DAILY', 'HOURLY'],
   "interval": int,
   "start_date": str,
   "start_time_type": Union['sunset', 'sunrise', 'time'],
   "start_time": Optional[str],
   "start_time_offset": Optional[int],
   "until_date": Optional[str],
   "until_time_type": Optional[Union['sunset', 'sunrise', 'time']],
   "until_time": Optional[str],
   "until_time_offset": Optional[int],
   "count": Optional[int],
   "from_time_type": Optional[Union['sunset', 'sunrise', 'time']],
   "from_time": Optional[str],
   "from_time_offset": Optional[int],
   "to_time_type": Optional[Union['sunset', 'sunrise', 'time']],
   "to_time": Optional[str],
   "to_time_offset": Optional[int],
   "bymonth": Optional[list[Union['January', ..., 'December']]],
   "bymonthday": Optional[list[int]],
   "byweekday": Optional[list[Union['MO','TU','WE','TH','FR','SA','SU']]],
   "from_min": Optional[int],
   "to_min": Optional[int],
}

Example

[
 {
   "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
   "title": "holiday",
   "priority": 1,
   "actions": {
     "player": {
       "roof": {"type": "play", "entity_type": "playlist", "entity_id": 19},
       "ungrouped": {"type": "blackout"}
     },
     "do1": {"state": 1},
     "do2": null,
     "do3": null
   },
   "rrule": {
     "freq": "DAILY", "interval": 1, "start_date": "2024-01-20",
     "start_time_type": "time", "start_time": "00:00", "start_time_offset": null,
     "count": 1, "until_date": null, "until_time_type": null, "until_time": null, "until_time_offset": null,
     "from_time_type": "sunset", "from_time": null, "from_time_offset": 0,
     "to_time_type": "sunset", "to_time": null, "to_time_offset": 0,
     "bymonth": null, "bymonthday": null, "byweekday": null, "from_min": null, "to_min": null
   }
 }
]
  • id - Уникальный идентификатор события (UUID).
  • title - Название события.
  • priority - Приоритет события. Чем выше значение тем выше приоритет.
  • actions - Действия, которые должны быть выполнены при наступлении события.
  • player - (изменено в v1.3.4) Действия для групп плееров. Ключ словаря - название группы (было единственное действие на весь плеер, стало по одному действию на группу).
    • type - Тип действия для группы плеера: 'play', 'blackout' или 'static_color'. (blackout и static_color - новые в v1.3.4)
    • entity_type / entity_id - заполнены при type='play'.
    • channels - словарь канал → 0-255, заполнен при type='static_color'.
  • do1 / do2 / do3 - Действие для соответствующего цифрового выхода. state: 0 (выключен) или 1 (включен).
  • rrule - Правила повторения события (recurrence rule):
    • freq - Частота повторений: YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY.
    • interval - Периодичность повторения события.
    • start_date - Дата старта события, формат YYYY-mm-dd.
    • start_time_type / start_time / start_time_offset - Тип, время (%H:%M, если start_time_type='time') и сдвиг (если start_time_type='sunset'/'sunrise') времени старта.
    • count / until_date - Количество повторений либо дата завершения; не могут быть заполнены одновременно; если оба пустые - событие никогда не завершается.
    • until_time_type / until_time / until_time_offset - аналогично start_*, но для завершения (заполнены, если задан until_date).
    • from_time_type / from_time / from_time_offset и to_time_type / to_time / to_time_offset - Время начала/окончания события в течение дня; заполнены, если freq ≠ HOURLY.
    • bymonth - Месяцы активности события; заполнено при freq=YEARLY.
    • bymonthday - Дни месяца; заполнено при freq=MONTHLY.
    • byweekday - Дни недели; заполнено при freq=WEEKLY.
    • from_min / to_min - Минута начала/окончания события; заполнены при freq=HOURLY.


SUB lm/scheduler/events/add

Добавляет новое событие без действий. Действия для созданного события задаются отдельным запросом в топик lm/scheduler/events/actions/update.

Изменение относительно v1.2.4: payload с полем actions отклоняется с ошибкой валидации - раньше событие и его действия создавались одним запросом.

Payload format

{
   "title": str,
   "priority": int,
   "rrule": RRule
}

(формат RRule - см. lm/scheduler/events выше)

Example

{
 "title": "holiday",
 "priority": 1,
 "rrule": {
   "freq": "DAILY", "interval": 1, "start_date": "2024-01-20",
   "start_time_type": "time", "start_time": "00:00", "start_time_offset": null,
   "count": 1, "until_date": null, "until_time_type": null, "until_time": null, "until_time_offset": null,
   "from_time_type": "sunset", "from_time": null, "from_time_offset": 0,
   "to_time_type": "sunset", "to_time": null, "to_time_offset": 0,
   "bymonth": null, "bymonthday": null, "byweekday": null, "from_min": null, "to_min": null
 }
}

Response (новое в v1.3.4) - ответ публикуется в топик lm/scheduler/events/add/response (или в Response Topic из запроса), конверт {status, msg, data}; Correlation Data копируется в ответ.

  • При успехе: status = 'success', msg = "Request was accepted", data - созданное событие (id, title, priority, rrule и actions с пустыми player/do).
  • При ошибке: status = 'error', data - детали ошибки; ответ также публикуется в lm/scheduler/error.


SUB lm/scheduler/events/delete

Удаляет событие. Payload format

{ "id": str }

Example

{ "id": "abe4c633-8e3f-4938-94e2-efd135d993fc" }
  • id - Уникальный идентификатор события.

Response (новое в v1.3.4) - ответ публикуется в топик lm/scheduler/events/delete/response (или в Response Topic), конверт {status, msg, data}.

  • При успехе: status = 'success', msg = "Deleted", data = null.
  • При ошибке: status = 'error', data - детали ошибки; ответ также публикуется в lm/scheduler/error.


SUB lm/scheduler/events/update

Обновляет свойства события: title, priority, rrule. Существующие действия события не меняются.

Изменение относительно v1.2.4: payload с полем actions отклоняется с ошибкой валидации. Для изменения действий используйте топик lm/scheduler/events/actions/update.

Payload format

{
   "id": str,
   "title": str,
   "priority": int,
   "rrule": RRule
}

Example

{
 "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
 "title": "holiday",
 "priority": 1,
 "rrule": {
   "freq": "DAILY", "interval": 1, "start_date": "2024-01-20",
   "start_time_type": "time", "start_time": "00:00", "start_time_offset": null,
   "count": 1, "until_date": null, "until_time_type": null, "until_time": null, "until_time_offset": null,
   "from_time_type": "sunset", "from_time": null, "from_time_offset": 0,
   "to_time_type": "sunset", "to_time": null, "to_time_offset": 0,
   "bymonth": null, "bymonthday": null, "byweekday": null, "from_min": null, "to_min": null
 }
}

Response (новое в v1.3.4) - топик lm/scheduler/events/update/response, конверт {status, msg, data} - аналогично events/add/response, data - обновлённое событие.


=== SUB lm/scheduler/events/actions/update === (новое в v1.3.4) Полностью заменяет блок действий события. Семантика обновления - полная замена, не merge. Все действия, отсутствующие в новом actions, удаляются из события. Чтобы очистить действия события, отправьте пустые словари player и do.

Payload format

{
   "id": str,
   "actions": {
     "player": {
       str: {"type": "play", "entity_type": Union['playlist','cue'], "entity_id": int, "count": None}
            | {"type": "blackout"}
            | {"type": "static_color", "channels": dict[str, int]}
     },
     "do": {
       Literal['1','2','3']: {"port": Literal[1,2,3], "state": Literal[0,1]}
     },
   },
}

Example

{
 "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
 "actions": {
   "player": {
     "roof": {"type": "play", "entity_type": "playlist", "entity_id": 19, "count": null},
     "ungrouped": {"type": "blackout"},
     "stage": {"type": "static_color", "channels": {"red": 128, "green": 0, "blue": 0}}
   },
   "do": {"1": {"port": 1, "state": 1}}
 }
}

Clear actions example

{
 "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
 "actions": {"player": {}, "do": {}}
}
  • id - Уникальный идентификатор события (UUID).
  • actions.player - Действия для групп плееров, ключ словаря - название группы. type: play/blackout/static_color; entity_type/entity_id заполнены при play; count - зарезервировано, для play должно быть null; channels заполнено при static_color.
  • actions.do - Действия для цифровых выходов, ключ словаря - номер порта строкой ('1','2','3'); port должен совпадать с ключом; state - 0 или 1.

Response - топик lm/scheduler/events/actions/update/response, конверт {status, msg, data} - аналогично events/add/response, data - обновлённое событие.


PUB lm/scheduler/events/changes

Публикует вновь созданные/изменённые/удалённые события. Payload format

{
   "status": Literal['created', 'updated', 'deleted'],
   "event": Event   # формат события - см. lm/scheduler/events выше
}

Example

{
 "status": "created",
 "event": {
   "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
   "title": "holiday",
   "priority": 1,
   "actions": {
     "player": {"roof": {"type": "play", "entity_type": "playlist", "entity_id": 19}, "ungrouped": {"type": "blackout"}},
     "do1": {"state": 1}, "do2": null, "do3": null
   },
   "rrule": { "...": "..." }
 }
}
  • status - Тип изменения: 'created', 'updated', 'deleted'.
  • event - Событие со всеми параметрами (формат как в lm/scheduler/events).


SUB lm/scheduler/events/periods

Принимает запрос на публикацию всех одиночных событий за указанный период. Запрос должен содержать Correlation Data для последующей идентификации ответа. Запрос может содержать Response Topic; в противном случае ответ публикуется в топик lm/scheduler/events/periods/response.

Payload format

{
   "from_datetime": str,
   "to_datetime": str,
   "filters": Optional[{"player": bool, "do1": bool, "do2": bool, "do3": bool}]
}

Example

{
 "from_datetime": "2024-02-25T05:00:00",
 "to_datetime": "2024-04-08T05:00:00",
 "filters": {"player": true, "do1": false, "do2": false, "do3": false}
}
  • from_datetime / to_datetime - Начало/окончание диапазона в ISO формате.
  • filters - Опциональные фильтры типов действий; если не указаны, возвращаются события со всеми типами действий.

Response - ответ публикуется в топик lm/scheduler/events/periods/response (или в Response Topic), конверт {status, msg, data} - data содержит список одиночных событий за период; Correlation Data копируется в ответ; при ошибке ответ также публикуется в lm/scheduler/error.


PUB lm/scheduler/events/periods/response

Публикует список одиночных событий календаря за указанный период (период задаётся в запросе lm/scheduler/events/periods).

Изменение относительно v1.2.4: payload теперь объект-конверт {status, msg, data}, где список событий находится в поле data. Раньше payload был самим JSON-массивом событий.

Payload format

{
   "status": Literal['success'],
   "msg": str,
   "data": [
     { "id": str, "title": str, "start": str, "end": str, "priority": int, "duration": float }
   ]
}

Example

{
 "status": "success",
 "msg": "Request was accepted",
 "data": [
   {
     "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
     "title": "holiday",
     "priority": 1,
     "start": "2024-02-29T12:00:00+03:00",
     "end": "2024-03-02T12:00:00+03:00",
     "duration": 259200.0
   }
 ]
}
  • status / msg - Статус и сообщение ответа.
  • data - Массив одиночных событий за период: id, title, priority, start/end (ISO), duration (сек).


PUB lm/scheduler/player/status/{group}

Публикует текущее активное событие плеера для конкретной группы воспроизведения. На каждую группу - отдельный топик, где {group} - идентификатор группы (например lm/scheduler/player/status/__all__). Сообщения retained.

Изменение относительно v1.2.4: раньше был единый топик lm/scheduler/player/status на весь плеер; теперь статус публикуется отдельным топиком на каждую группу воспроизведения.

Payload format (событие есть)

{
 "status": "running",
 "event": {
   "id": str,
   "title": str,
   "action": {"type": "play", "entity_type": Union['playlist','cue'], "entity_id": int}
            | {"type": "blackout"}
            | {"type": "static_color", "channels": dict[str, int]}
 }
}

Example

{
 "status": "running",
 "event": {
   "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
   "title": "holiday",
   "action": {"type": "play", "entity_type": "playlist", "entity_id": 19}
 }
}

Payload format (события нет)

{ "status": "no_event" }
  • status - 'running' или 'no_event'.
  • event - Активное событие; присутствует только когда status='running'.
  • action.type - 'play', 'blackout' или 'static_color'. entity_type/entity_id заполнены при play; channels - при static_color.


PUB lm/scheduler/do/1/status

PUB lm/scheduler/do/2/status

PUB lm/scheduler/do/3/status

Публикует текущее активное событие управления соответствующим цифровым выходом, если оно есть. (Не изменилось в v1.3.4.)

Payload format (событие есть)

{ "status": "running", "event": {"id": str, "title": str, "action": {"state": Literal[0,1]}} }

Example

{ "status": "running", "event": {"id": "abe4c633-8e3f-4938-94e2-efd135d993fc", "title": "holiday", "action": {"state": 1}} }

Payload format (события нет)

{ "status": "no_event" }


SUB lm/settings/datetime/timezone

Получает текущую таймзону (используется сервисом расписания для расчёта солнечного времени). Payload format

{ "timezone": str }

Example

{ "timezone": "Europe/Moscow" }


SUB lm/settings/location/coordinates

Получает координаты устройства для расчёта солнечного времени. Payload format

{ "latitude": float, "longitude": float }

Example

{ "latitude": 56.821019190097616, "longitude": 60.59559633825789 }


II. Оборудование и интерфейсы

Физические устройства и интерфейсы, которыми управляет и которые опрашивает плеер: ArtNet/RDM-устройства, DI/DO, внешние датчики, RS485, светодиоды. Эти разделы можно использовать как справочник по конкретному интерфейсу, не читая по порядку.

4. Управление устройствами Art-Net

Сервис осуществляет мониторинг и управление ArtNet и RDM устройствами.

PUB lm/artnet_devices_management_service/error

Публикует ошибки. Выставляет заголовок Correlation data если он был установлен в запросе.

Payload format

{
    msg: str
    data: Any
}
  • msg - contain error message
  • data - contain related error data


PUB lm/artnet_devices_management_service/artnet/devices/changes

Публикует вновь созданные/изменённые/удалённые ArtNet устройства.

Payload format

{
   "status": Literal['created', 'updated', 'deleted'],
   "device": {
       "mac_address": str,
       "ip_address": str,
       "subnet_mask": str,
       "default_gateway": str,
       "dhcp_status": bool,
       "name": str,
       "esta_man_code": int,
       "oem_code": int,
       "style": str,
       "firmware_version": str,
       "ports": dict[int, {
           "bind_index": int,
           "port_index": int,
           "is_input": bool,
           "is_output": bool,
           "port_type": Literal['DALI','ArtNet','ADB','Colortran_CMX','Avab','MIDI','DMX512'],
           "name": str,
           "universe": int,
           "is_rdm_on": bool,
           "physical_port": Optional[int],
           "mode": Optional[Literal['DMX IN', 'DMX OUT', 'SPI']],
           "is_data_transmitting": bool,
           "tod_uids": list[str],
           "lost": bool,
       }],
       "status": str,
       "dev_mode": Optional[str],
       "spi_settings": Optional[{
           "chip": str, "mode": str, "period": int, "time_high_0": int,
           "time_high_1": int, "time_reset": int, "gamma": int, "bit_mode": str,
       }],
       "dmx_settings": Optional[{
           "break_time": int, "mab_time": int, "chan_time": int, "pause_time": int, "chan_num": int,
       }],
   }
}

Изменения относительно v1.2.4:

  • Добавлены поля esta_man_code и oem_code на устройстве.
  • В элементах ports добавлены port_index, tod_uids (список UID подключённых RDM-устройств) и lost (признак потери порта).
  • Поле out_signal (Optional[Literal['DMX','SPI']]) переименовано и расширено в mode (Optional[Literal['DMX IN', 'DMX OUT', 'SPI']]).
  • Поле rdm_devices_count на устройстве убрано (количество RDM-устройств теперь можно получить через tod_uids на портах либо из списка RDM-устройств).

Example

{
   "status": "updated",
   "device": {
       "mac_address": "aa:bb:cc:dd:ee:ff",
       "ip_address": "192.168.1.10",
       "subnet_mask": "255.255.255.0",
       "default_gateway": "192.168.1.1",
       "dhcp_status": false,
       "name": "LS-Converter",
       "esta_man_code": 6155,
       "oem_code": 2,
       "style": "StNode",
       "firmware_version": "1.2.3",
       "ports": {
           "10": {
               "bind_index": 1, "port_index": 0, "is_input": false, "is_output": true,
               "port_type": "DMX512", "name": "p1", "universe": 10, "is_rdm_on": true,
               "physical_port": 1, "mode": "DMX OUT", "is_data_transmitting": false,
               "tod_uids": ["0001:00000001"], "lost": false
           }
       },
       "status": "RcPowerOk",
       "dev_mode": null,
       "spi_settings": null,
       "dmx_settings": {"break_time": 90, "mab_time": 8, "chan_time": 50, "pause_time": 40, "chan_num": 512}
   }
}


PUB lm/artnet_devices_management_service/rdm/devices/changes

Публикует вновь созданные/изменённые/удалённые RDM устройства.

Изменения относительно v1.2.4: структура устройства пересмотрена - добавлено поле status (online/offline); поле art_net_device_ip переименовано в ip; поле port переименовано в physical_port; поле art_net_device_mac убрано.

Payload format

{
   "status": Literal['created', 'updated', 'deleted'],
   "device": {
       "uid": str,
       "status": Literal['online', 'offline'],
       "supported_params": dict[str, Any],
       "ip": str,
       "physical_port": int,
   }
}
  • uid - Уникальный идентификатор устройства.
  • status - Состояние устройства: online или offline. (новое поле в v1.3.4)
  • supported_params - Словарь параметров и их значений.
  • ip - IP адрес конвертера, к которому подключено данное RDM устройство.
  • physical_port - Физический порт конвертера, к которому подключено данное RDM устройство.

Example

{
   "status": "updated",
   "device": {
       "uid": "0001:00000001",
       "status": "online",
       "supported_params": {
           "DEVICE_INFO": {
               "rdm_protocol_major_version": 1, "rdm_protocol_minor_version": 0,
               "device_model_id": 256, "product_category": "PRODUCT_CATEGORY_FIXTURE",
               "software_version_id": "1.0", "DMX512_footprint": 3,
               "DMX512_personality_cur": 1, "DMX512_personality_total": 2,
               "DMX512_start_address": 1, "sub_device_count": 0, "sensor_count": 0
           },
           "SOFTWARE_VERSION_LABEL": "v1.0.3",
           "IDENTIFY_DEVICE": false,
           "SUPPORTED_PARAMETERS": ["DEVICE_LABEL", "DMX_PERSONALITY"],
           "DEVICE_LABEL": "front-stage"
       },
       "ip": "10.0.0.1",
       "physical_port": 1
   }
}


PUB lm/artnet_devices_management_service/cmd_response

Публикует результаты выполнения асинхронных REST команд. Используется для уведомления о завершении длительных операций, выполняемых в фоновом режиме. Клиент получает transaction_uid при инициации команды и может отслеживать её статус через данный топик.

Payload format

{
   "transaction_uid": "string",
   "status": "string"
}
  • transaction_uid - Уникальный идентификатор транзакции, возвращаемый при инициации асинхронной команды.
  • status - Статус выполнения команды. В текущей реализации публикуется только "done" (в v1.2.4 также предполагалось значение "error").

Example

{
   "transaction_uid": "550e8400-e29b-41d4-a716-446655440000",
   "status": "done"
}


5. Управление Di Do интерфейсами плеера

PUB lm/di/port/*

PUB lm/di/port/0 (player V1 only)PUB lm/di/port/1PUB lm/di/port/2 (player V2 only)PUB lm/di/port/3 (player V2 only)

Публикует состояние di порта

  • di_port_number - Номер di порта.


Payload format

int

Example

1
  • int - Статус Di порта. 1 - активен, 0 - неактивен.

PUB lm/do/port/*

PUB lm/do/port/0 (player V1 only)

PUB lm/do/port/1PUB lm/do/port/2 (player V2 only)PUB lm/do/port/3 (player V2 only)

Публикует состояние do порта

  • do_port_number - Номер do порта.


Payload format

int

Example

1
  • int - Статус DO порта. 1 - активен, 0 - неактивен.

SUB lm/do/change_state

Принимает команды для изменения состояния DO порта.


Payload command format

{
   "port": int,
   "state": int,
}

Example

 {
   "port": 1,
   "state": 1,
 }
  • port - Номер do порта.
  • state - Статус порта. 1 - активен, 0 - неактивен.



6. Управление внешними датчиками

Описывает MQTT API сервиса управления внешними датчиками.

PUB lm/sensors/{sensor_id}/data

Публикует данные датчика.

Payload format

{  
    str
}
  • str - данные датчика

Example

{  
    "34"
}

7. Управление RS485 интерфейсами плеера

PUB lm/serialport_controller/error

Публикует ошибки.

Выставляет заголовок Correlation data если он был установлен в запросе.


Payload format

{  
    msg: str
    data: Any  
}
  • msg - contain error message
  • data - contain related error data


PUB lm/serialport_controller/ports

Публикует список rs485 портов.


Payload format

[
   {
       name: str
       mode: Literal['rs485', 'dmxOut']
   }
]
  • name - Имя порта.
  • mode - Предназначение порта.


Example

[
   {
       "name": "port1",
       "mode": "rs485",
   },
   {
       "name": "port2",
       "mode": "rs485",
   },
   {
       "name": "port3",
       "mode": "dmxOut",
   },
   {
       "name": "port4",
       "mode": "dmxOut",
   }
]


SUB lm/serialport_controller/ports/change_mode

Меняет предназначение порта.


Payload format

{
   name: str
   mode: Literal['rs485', 'dmxOut']
}
  • name - Имя порта.
  • mode - Предназначение порта.


Example

{
   "name": "port1",
   "mode": "rs485",
}



8. Управление светодиодами плеера

PUB 'lm/leds/state'

Публикует состояние диодов rs485 портов


Payload format

{
   Port1: {
     green: bool,
     red: bool,
   },
   Port2: {
     green: bool,
     red: bool,
   },
   Port3: {
     green: bool,
     red: bool,
   },
   Port4: {
     green: bool,
     red: bool,
   },
}


Example

{
   "Port1": {
     "green": true,
     "red": true,
   },
   "Port2": {
     "green": true,
     "red": true,
   },
   "Port3": {
     "green": true,
     "red": true,
   },
   "Port4": {
     "green": true,
     "red": true,
   },
}
  • green - Статус зеленого светодиода.
  • red - Статус красного светодиода.

SUB lm/leds/change_state

Принимает команды для изменения состояния диодов у rs485 порта.


Payload command format

{
   pub port: Literal['Port1', 'Port2', 'Port3', 'Port4'],
   green: bool,
   red: bool,
}


Example

 {
   "port": "Port1",
   "green": true,
   "red": false,
 }
  • port - Имя rs485 порта.
  • green - Статус зеленого светодиода.
  • red - Статус красного светодиода.

SUB lm/leds/blink

Принимает команды для мигания всех светодиодов на всех rs485 портах.


Payload format

{
   times: int,
   interval: int,
}

Example

{
   "times": 5,
   "interval": 1000
}
  • times - Количество миганий (от 1 до 255).
  • interval - Интервал между миганиями в миллисекундах.


III. Триггеры и actions

Автоматизация: как настроить реакцию плеера на внешние события (сигналы RawUDP/ArtNet/Mqtt, показания DI/DO и внешних датчиков из раздела II) и что при этом публикуется в MQTT. Раздел имеет смысл читать после разделов I и II — action'ы триггеров ссылаются на то, что там описано.

9. Управление триггерами

PUB 'lm/trigger_service/trigger/trigger_list'

Публикует список всех триггеров. Топик всегда содержит актуальный список.


Payload format

[
   {
       name: str
       tr_type: str
       params: dict[str, Any]
   }
]
  • name - Имя триггера.
  • tr_type - Тип триггера.
  • params - Словарь с параметрами триггера.


Example

[
   {
       "name": "TriggerFromMqtt",
       "tr_type": "RawUDP",
       "params": {
           "network_type": "udp",
           "listen_ip": "0.0.0.0",
           "listen_port": "5555",
           "data": "any"
       }
   }
]


PUB lm/trigger_service/action/action_list

Публикует список всех action.
Топик всегда содержит актуальный список.


Payload format

[
   {
       name: str
       action_type: str
       params: dict[str, Any]
   }
]
  • name - Имя action.
  • action_type - Тип action.
  • params - Словарь с параметрами action.


Example

[
   {
       "name": "default",
       "action_type": "send_trigger_to_mqtt",
       "params": {
           "topic": "lm/trigger_service/trigger/",
           "payload": "",
           "retain": false
       }
   }
]


PUB lm/trigger_service/relation_list

Публикует список всех связей между триггером и action.


Payload format

[
   {
       trigger: {
           name: str
           tr_type: str
           params: dict[str, Any]
       }
       action: {
           name: str
           action_type: str
           params: dict[str, Any]
       }
   }
]
  • trigger - Словарь с триггером.
  • action - Словарь с action.


Example

[
   {
       "trigger": {
           "name": "TriggerFromMqtt",
           "tr_type": "RawUDP",
           "params": {
               "network_type": "udp",
               "listen_ip": "0.0.0.0",
               "listen_port": "5555",
               "data": "any"
           }
       },
       "action": {
           "name": "default",
           "action_type": "send_trigger_to_mqtt",
           "params": {
               "topic": "lm/trigger_service/trigger/",
               "payload": "",
               "retain": false
           }
       }
   }
]


SUB lm/trigger_service/trigger/add

Добавляет новый триггер.

На данный момент доступны три типа триггера: RawUDP и ArtNet и Mqtt.

  • RawUDP - Срабатывает при получении UDP пакета удовлетворяющего заданным параметрам.
  • ArtNet - Срабатывает при получении ArtNet пакета удовлетворяющего заданным параметрам.
  • Mqtt - Срабатывает при получении Mqtt сообщения удовлетворяющего заданным параметрам.


Payload format

{
   name: str
   tr_type: str
   params: dict[str, Any]
}
  • name - Имя триггера.
  • tr_type - Тип триггера.
  • params - Словарь с параметрами триггера. Параметры отличаются в зависимости от типа триггера.


Example

{
   "name": "TriggerFromMqtt",
   "tr_type": "RawUDP",
   "params": {
       "network_type": "udp",
       "listen_ip": "0.0.0.0",
       "listen_port": "5555",
       "data": "any"
   }
}


Ожидаемые Параметры

Параметры для триггера с типом RawUDP

   {
       network_type: Literal['udp']
       listen_ip: str
       listen_port: int
       data: str
   }
  • network_type - Тип сети. Должен быть ‘udp’.
  • listen_ip - Прослушиваемый ip.
  • listen_port - Прослушиваемый порт.
  • data - Полезная нагрузка. Принимает строку полностью отражающую полезную нагрузку UDP пакета.

Example RawUDP params

{
   "network_type": "udp",
   "listen_ip": "0.0.0.0",
   "listen_port": "5555",
   "data": "any"
}


Параметры для триггера с типом ArtNet

   {
       network_type: Literal['tcp', 'udp']
       listen_ip: str
       listen_port: int
       universe: int
       channel: int
       min_level: int
       max_level: int
   }
  • network_type - Тип сети. Принимает значения ‘tcp’ или ‘udp’.
  • listen_ip - Прослушиваемый ip.
  • listen_port - Прослушиваемый порт.
  • universe - Отражает значение параметра subuni из ArtNet пакета.
  • channel - Номер канала в ArtNet пакете.
  • min_level - Минимальное значение в канале для срабатывания триггера.
  • max_level - Максимальное значение в канале для срабатывания триггера.Example ArtNet params
{
   "network_type": "udp",
   "listen_ip": "0.0.0.0",
   "listen_port": "6454",
   "universe": 3,
   "channel": 5,
   "min_level": 1,
   "max_level": 124
}


Параметры для триггера с типом Mqtt

   {
       topic: str
       payload: str
   }
  • topic - Mqtt топик для отслеживания.
  • payload - Полезная нагрузка mqtt сообщения в виде байт. Должна точно совпадать.Example Mqtt params
{
   "topic": "lm/di/port/1",
   "payload": "\x01"
}


SUB lm/trigger_service/trigger/delete

Удаляет триггер.

Payload format

{
   name: str
}
  • name - Имя триггера.Example
{
   "name": "TriggerFromMqtt",
}


SUB lm/trigger_service/action/add

Добавляет новый action.

На данный момент доступны два типа action: send_mqtt_msg_raw и send_trigger_to_mqtt.

  • send_mqtt_msg_raw - Отправляет по mqtt сообщение записанное в параметрах не внося в него никаких изменений.
  • send_trigger_to_mqtt - Отправляет по mqtt сообщение в теле которого находится сработавший триггер.


Payload format

{
   name: str
   action_type: str
   params: dict[str, Any]
}
  • name - Имя action.
  • action_type - Тип action.
  • params - Словарь с параметрами action. Различается в зависимости от типа action.Example
{
   "name": "default",
   "action_type": "send_trigger_to_mqtt",
   "params": {
       "topic": "lm/trigger_service/trigger/",
       "payload": "",
       "retain": false
   }
}


Ожидаемые Параметры

Параметры для actions с типом send_trigger_to_mqtt и send_trigger_to_mqtt совпадают.

{
   topic: str
   payload: str
   retain: bool
}
  • topic - Mqtt topic в который будет отправлено сообщение.
  • payload - Mqtt payload. Полезная нагрузка сообщения.
  • retain - Mqtt retain param.

Типа send_trigger_to_mqtt игнорирует поля payload и retain но в сообщении они должны присутствовать.


Example params

{
       "topic": "lm/trigger_service/trigger/",
       "payload": "",
       "retain": false
}


SUB lm/trigger_service/action/delete

Удаляет action.


Payload format

{
   name: str
}
  • name - Имя action.


Example

{
   "name": "default",
}


SUB lm/trigger_service/set_trigger_to_action_relation

Создает связь между триггером и action.


Payload format

   trigger: {
       name: str
       tr_type: str
       params: dict[str, Any]
   }
   action: {
       name: str
       action_type: str
       params: dict[str, Any]
   }
  • trigger - Словарь с триггером.
  • action - Словарь с action.


Example

{
   "trigger": {
       "name": "TriggerFromMqtt",
       "tr_type": "RawUDP",
       "params": {
           "network_type": "udp",
           "listen_ip": "0.0.0.0",
           "listen_port": "5555",
           "data": "any"
       }
   },
   "action": {
       "name": "default",
       "action_type": "send_trigger_to_mqtt",
       "params": {
           "topic": "lm/trigger_service/trigger/",
           "payload": "",
           "retain": false
       }
   }
}


SUB lm/trigger_service/delete_trigger_to_action_relation

Удаляет связь между триггером и action.


Payload format

   trigger: {
       name: str
       tr_type: str
       params: dict[str, Any]
   }
   action: {
       name: str
       action_type: str
       params: dict[str, Any]
   }
  • trigger - Словарь с триггером.
  • action - Словарь с action.


Example

{
   "trigger": {
       "name": "TriggerFromMqtt",
       "tr_type": "RawUDP",
       "params": {
           "network_type": "udp",
           "listen_ip": "0.0.0.0",
           "listen_port": "5555",
           "data": "any"
       }
   },
   "action": {
       "name": "default",
       "action_type": "send_trigger_to_mqtt",
       "params": {
           "topic": "lm/trigger_service/trigger/",
           "payload": "",
           "retain": false
       }
   }
}


PUB lm/trigger_service/error

Публикует ошибки.

Выставляет заголовок Correlation data если он был установлен в запросе.


Payload format

{  
    msg: str
    data: Any  
}
  • msg - contain error message
  • data - contain related error data


SUB lm/trigger_service/delete_trigger_with_related_actions

Удаляет триггер и все связанные с ним действия.


Payload format

{
   name: str
}
  • name - Имя триггера.Example
{
   "name": "TriggerFromMqtt",
}



Новое в v1.3.4: добавлен топик публикации факта срабатывания триггера (ранее в него ничего не публиковалось). Остальной функционал раздела (создание/удаление триггеров и action, связи триггер↔action, списки) не изменился.

=== PUB lm/trigger_service/trigger/ === (новое в v1.3.4) Публикует сработавший триггер. retain = false. Публикация выполняется с qos=2.

Payload format

{
   "id": int,
   "name": str
}
  • id - Стабильный идентификатор триггера.
  • name - Имя триггера.

Example

{
   "id": 1,
   "name": "Artnet"
}


IV. Система и обслуживание

Администрирование самого устройства: сетевые и системные настройки, обновление программного обеспечения. Не связано напрямую с воспроизведением контента.

10. Настройки системы

Сервис осуществляет конфигурирование системных настроек ОС.


PUB lm/system_configurator/error

Публикует ошибки.

Выставляет заголовок Correlation data если он был установлен в запросе.


Payload format

{  
    msg: str
    data: Any  
}
  • msg - contain error message
  • data - contain related error data


PUB lm/system_settings/external_access/certificates

Публикует список всех x509 сертификатов.
Топик всегда содержит актуальный список.


Payload format

[
   {
       name: str
       cert_type: str
       public_bytes: str
       params: dict[str, Any]
   }
]
  • name - Имя сертификата.
  • cert_type - Тип сертификата. Может принимать значения ‘csr’ или ‘certificate’
  • params - Словарь с параметрами сертификата. Набор параметров отличается в зависимости от типа сертификата.


Example

[
   {
       "cert_type": "certificate",
       "name": "cert_name",
       "params": {
           "issuer": "OU=test ou,CN=domain.com,O=test o,L=123,ST=st,C=UA",
           "san": "IP=192.168.0.3",
           "subject": "OU=test ou,CN=domain.com,O=test o,L=123,ST=st,C=UA",
           "valid_from": "1664440221.0",
           "valid_to": "1759048221.0"
       },
       "public_bytes": "-----BEGIN CERTIFICATE-----\n"
                       "-----END CERTIFICATE-----\n"}]
   }
]


PUB lm/system_settings/external_access/web_access_settings

Публикует список настроек web доступа.
Топик всегда содержит актуальный список.


Payload format

{
   http_port: int
   https_port: int
   is_https_enabled: bool
   is_http_redirected: bool
   cert_name: str
}
  • http_port - Http порт. По умолчанию 80.
  • https_port - Https порт. По умолчанию 443.
  • is_https_enabled - Индикатор включен ли https.
  • is_http_redirected - Индикатор включена ли переадресация http to https.
  • cert_name - Имя сертификата сервера.


Example

{
   "http_port": 80,
   "https_port": 443,
   "is_https_enabled": false,
   "is_http_redirected": true,
   "cert_name": ""
}


SUB lm/system_settings/external_access/change_web_access_settings

Меняет настройки web доступа.


Payload format

{
   http_port: int
   https_port: int
   is_https_enabled: bool
   is_http_redirected: bool
   cert_name: str
}
  • http_port - Http порт. По умолчанию 80.
  • https_port - Https порт. По умолчанию 443.
  • is_https_enabled - Индикатор включен ли https.
  • is_http_redirected - Индикатор включена ли переадресация http to https.
  • cert_name - Имя сертификата сервера.


Example

{
   "http_port": 80,
   "https_port": 443,
   "is_https_enabled": false,
   "is_http_redirected": true,
   "cert_name": ""
}


SUB lm/system_settings/certificates/upload_certificate

Загружает сертификат и его ключ для дальнейшего использования в настройках доступа.


Payload format

{
   cert_name: str
   certificate: bytes
   key: bytes
   intermediate: bytes
}
  • cert_name - Читаемое имя сертификата.
  • certificate - x.509 сертификат в pem формате.
  • key - Приватный ключ в pem формате.
  • intermediate - (Опционально) промежуточный сертификат.

SUB lm/system_settings/certificates/upload_certificate_corresponding_csr

Загружает сертификат относящийся к сформированному ранее csr.


Payload format

{
   cert_name: str
   certificate: bytes
}
  • cert_name - Имя csr сертификата.
  • certificate - x.509 сертификат в pem формате.


SUB lm/system_settings/certificates/delete_certificate

Удаляет сертификат и все связанные с ним файлы.


Payload format

{
   id: int
   name: str
   cert_type: str
   public_bytes: str
   params: dict[str, Any]
}
  • id - (Опционально) Идентификатор сертификата.
  • name - Имя сертификата.
  • cert_type - Тип сертификата. Может принимать значения ‘csr’ или ‘certificate’
  • public_bytes - Открытый ключ сертификата.
  • params - Словарь с параметрами сертификата. Набор параметров отличается в зависимости от типа сертификата.


Example

{
   "cert_type": "certificate",
   "name": "cert_name",
   "params": {
       "issuer": "OU=test ou,CN=domain.com,O=test o,L=123,ST=st,C=UA",
       "san": "IP=192.168.0.3",
       "subject": "OU=test ou,CN=domain.com,O=test o,L=123,ST=st,C=UA",
       "valid_from": "1664440221.0",
       "valid_to": "1759048221.0"
   },
   "public_bytes": "-----BEGIN CERTIFICATE-----\n"
                   "-----END CERTIFICATE-----\n"}]


SUB lm/system_settings/certificates/generate_csr

Генерирует Certificate Signing Request.


Payload format

{
   cert_name: str
   cert_type: str
   key_size: int
   subject: str
   san: str
}
  • cert_name - Имя сертификата.
  • cert_type - Тип сертификата. Может принимать значения ‘csr’ или ‘certificate’
  • key_size - Размер ключа в байтах. Принимает значения 2048 иои 4096.
  • subject - Строка в формате rfc4514.
  • san - Стока представляющее расширение SubjectAltName. Принимаются только ip адреса или dns имена идущие подряд через запятую без пробелов с префиксами IP= или DNS=.


Example

{
   "cert_name": "ss_cert23",
   "cert_type": "certificate",
   "key_size": 2048,
   "subject": "OU=test ou,CN=domain.com,O=test o,L=123,ST=st,C=UA",
   "san": "IP=192.168.0.3,DNS=domain.com"
}


SUB lm/system_settings/certificates/generate_self_sign_certificate

Генерирует самоподписанный сертификат.


Payload format

{
   cert_name: str
   cert_type: str
   key_size: int
   subject: str
   san: str
}
  • cert_name - Имя сертификата.
  • cert_type - Тип сертификата. Может принимать значения ‘csr’ или ‘certificate’.
  • key_size - Размер ключа в байтах. Принимает значения 2048 иои 2096.
  • subject - Строка в формате rfc4514.
  • san - Стока представляющее расширение SubjectAltName. Принимаются только ip адреса или dns имена идущие подряд через запятую без пробелов с префиксами IP= или DNS=.


Example

{
   "cert_name": "ss_cert23",
   "cert_type": "certificate",
   "key_size": 2048,
   "subject": "OU=test ou,CN=domain.com,O=test o,L=123,ST=st,C=UA",
   "san": "IP=192.168.0.3,DNS=domain.com"
}


PUB lm/system_settings/network/interfaces/wired/eth*/statistics

PUB lm/system_settings/network/interfaces/wired/eth0/statistics

PUB lm/system_settings/network/interfaces/wired/eth1/statistics

Публикует информацию о проводном интерфейсе ethernet каждые 10 секунд.


Payload format

{
   status: str
   ip_assign_method: Literal['manual', 'dhcp']
   ip: str
   netmask: str
   gateway: str
   dns_assign_method: Literal['manual', 'dhcp']
   dns_servers: list[str]
   mac_address: str
}
  • status - Статус интерфейса. Может быть up или down.
  • ip_assign_method - Способ назначения ip адреса. Может быть manual или dhcp.
  • ip - IP адрес интерфейса.
  • netmask - Маска интерфейса.
  • gateway - Шлюз по умолчанию.
  • dns_assign_method - Способ назначения dns серверов. Может быть manual или dhcp.
  • dns_servers - Список dns серверов.
  • mac_address - MAC адрес интерфейса.


Example

{
   "status": "up",
   "ip_assign_method": "manual",
   "ip": "192.168.0.205",
   "netmask": "255.255.255.0",
   "gateway": "192.168.0.1",
   "dns_assign_method": "manual",
   "dns_servers": ["8.8.8.8", "8.8.4.4"],
   "mac_address": "e4:5f:01:a8:e0:6c"
}

SUB lm/system_settings/network/interfaces/wired/eth*/set_ip_credential

SUB lm/system_settings/network/interfaces/wired/eth0/set_ip_credentialSUB lm/system_settings/network/interfaces/wired/eth1/set_ip_credential

Устанавливает ip адресацию и шлюз на интерфейс.

Поддерживает статическое назначение ip и назначение через dhcp.

Payload format

Статическая адресация:

{
   ip_assign_method: Literal['manual']
   static_ip: str
   static_netmask: str
   static_gateway: str
}
  • ip_assign_method - Способ назначения ip адреса. Должно быть manual.
  • static_ip - IPv4 адрес интерфейса
  • static_netmask - Сетевая маска интерфейса.
  • static_gateway - Шлюз по умолчанию.


Example

{
   "ip_assign_method": "manual",
   "static_ip": "192.168.0.205",
   "static_netmask": "255.255.255.0",
   "static_gateway": "192.168.0.1"
}


Динамическая адресация

{
   ip_assign_method: Literal['dhcp']
}
  • ip_assign_method - Способ назначения ip адреса. Должно быть dhcp.

Example

{
   "ip_assign_method": "dhcp"
}


SUB lm/system_settings/network/interfaces/wired/eth*/set_dns_credential

SUB lm/system_settings/network/interfaces/wired/eth0/set_dns_credential

SUB lm/system_settings/network/interfaces/wired/eth1/set_dns_credential

Назначение dns серверов на интерфейс.

Поддерживает статическое и динамическое (dhcp) назначение dns серверов.


Payload format

Статическое назначение:

{
   dns_assign_method: Literal['manual']
   static_dns_servers: list[str]
}
  • dns_assign_method - Способ назначения dns серверов. Должно быть manual.
  • static_dns_servers - Список DNS серверов.Example
{
   "dns_assign_method": "manual",
   "static_dns_servers": ["8.8.8.8", "8.8.4.4"]
}

Динамическое назначение:

{
   dns_assign_method: Literal['dhcp']
}
  • dns_assign_method - Способ назначения dns серверов. Должно быть dhcp.


Example

{
   "dns_assign_method": "dhcp"
}


PUB lm/system_settings/network/interfaces/modem/statistics

Публикует информацию о модемном интерфейсе каждые 10 секунд.


Payload format

{
   ip_assign_method: Literal['manual', 'dhcp']
   ip: str
   netmask: str
   gateway: str
   dns_assign_method: Literal['manual', 'dhcp']
   dns_servers: list[str]
   apn: {
       apn: str,
       username: str,
       password: str,
   }
   modem_status: {
       state: str,
       state_failed_reason: str,
       power_state: str,
       signal_quality: int,
       access_technologies: list[str]
   }
}
  • status - Статус интерфейса. Может быть up или down.
  • ip_assign_method - Способ назначения ip адреса. Может быть manual или dhcp.
  • netmask - IP адрес интерфейса.
  • gateway - Шлюз по умолчанию.
  • dns_assign_method - Способ назначения dns серверов. Может быть manual или dhcp.
  • dns_servers - Список dns серверов.
  • apn:
    • apn: APN сервер.
    • username: Имя пользователя для apn сервера.
    • password: Пароль для apn сервера.
  • modem_status:
    • state: Состояние подключения.
    • state_failed_reason: Причина ошибки если таковая есть.
    • power_state: Состояние питания модема.
    • signal_quality: Качество сигнала в процентах.
    • access_technologies: Список текущих режимов (LTE, UMTS и т.д.).


Example

{
   "status": "up",
   "ip_assign_method": "manual",
   "ip": "192.168.0.205",
   "netmask": "255.255.255.0",
   "gateway": "192.168.0.1",
   "dns_assign_method": "manual",
   "dns_servers": ["8.8.8.8", "8.8.4.4"],
   "apn": {
       "apn": "internet.mts.ru",
       "username": "mts",
       "password": "mts"
   },
   "modem_status": {
       "state": "connected",
       "state_failed_reason": "--",
       "power_state": "on",
       "signal_quality": 81,
       "access_technologies": ["LTE"]
   }
}


SUB lm/system_settings/network/interfaces/modem/set_ip_credential

Устанавливает ip адресацию и шлюз на интерфейс.

Поддерживает статическое назначение ip и назначение через dhcp.


Payload format

Статическая адресация

{
   ip_assign_method: Literal['manual']
   static_ip: str
   static_netmask: str
   static_gateway: str
}
  • ip_assign_method - Способ назначения ip адреса. Должно быть manual.
  • static_ip - IPv4 адрес интерфейса
  • static_netmask - Сетевая маска интерфейса.
  • static_gateway - Шлюз по умолчанию.Example
{
   "ip_assign_method": "manual",
   "static_ip": "192.168.0.205",
   "static_netmask": "255.255.255.0",
   "static_gateway": "192.168.0.1"
}


Динамическая адресация

{
   ip_assign_method: Literal['dhcp']
}
  • ip_assign_method - Способ назначения ip адреса. Должно быть dhcp.

Example

{
   "ip_assign_method": "dhcp"
}


SUB lm/system_settings/network/interfaces/modem/set_dns_credential

Назначение dns серверов на интерфейс.

Поддерживает статическое и динамическое (dhcp) назначение dns серверов.


Payload format

Статическое назначение:

{
   dns_assign_method: Literal['manual']
   static_dns_servers: list[str]
}
  • dns_assign_method - Способ назначения dns серверов. Должно быть manual.
  • static_dns_servers - Список DNS серверов.


Example

{
   "dns_assign_method": "manual",
   "static_dns_servers": ["8.8.8.8", "8.8.4.4"]
}


Динамическое назначение

{
   dns_assign_method: Literal['dhcp']
}
  • dns_assign_method - Способ назначения dns серверов. Должно быть dhcp.


Example

{
   "dns_assign_method": "dhcp"
}


SUB lm/system_settings/network/interfaces/modem/set_apn_credential

Назначение настроек apn на интерфейс.

Поддерживается только статическое назначение.


Payload format

Статическое назначение:

{
   apn: str
   username: str
   password: str
}
  • apn - APN сервер.
  • username - Имя пользователя если есть либо пустая строка.
  • password - Пароль если есть либо пустая строка.


Example

{
   "apn": "internet.mts.ru",
   "username": "mts",
   "password": "mts"
}


PUB lm/system_settings/datetime/rtc_status

Публикует статус rtc модуля


Payload format

   {
       is_active: bool
   }
  • is_active - Активен ли rtc модуль.


Example

{
   "is_active": true,
}


SUB lm/system_settings/datetime

Принимает команды на изменение даты и времени конфигурации системы.


Список принимаемых команд


Set Date

Description: > Set system date.

Values:

command: str > set_date

data: dict > date: str - date in format ‘Y:M:D’

Example:
{'command': 'set_date', 'data': {'date': '1970:01:01'}}


Set Time

Description: > Set system time.

Values:

command: str > set_time

data: dict > time: str - time in format ‘HH:mm:ss’

Example:
{'command': 'set_time', 'data': {'time': '13:00:00'}}


Set Datetime

Description: > Set system date and time.

Values:

command: str > set_datetime

data: dict > datetime: str - time in format ‘Y:M:D HH:mm:ss’

Example:
{'command': 'set_datetime', 'data': {'datetime': '1970:01:01 13:00:00'}}


Change Ntp Status

Description: > Enable or disable ntp synchronization.

Values:

command: str > change_ntp_status

data: dict > ntp: bool - is ntp sync enable

Example:
{'command': 'change_ntp_status', 'data': {'ntp': True}}


Set Ntp Servers

Description: > Set ntp servers. > Generate ntp config, replace it then restart systemd-timesyncd.service > Accepts list of ip addresses or domain names

Values:

command: str > set_ntp_servers

data: dict > ntp_servers: list[str] - list of servers ip addresses or dns names

Example:
{'command': 'set_ntp_servers', 'data': {'ntp_servers': ['192.168.0.2', 'ntp1.stratum2.com']}}


Set timezone

Description: > Set system timezone.

Values:

command: str > set_timezone

data: dict > timezone: str - timezone name

Example:
{'command': 'set_timezone', 'data': {'timezone': 'Europe/London'}}


Base format for command payload

{
   'command': str 
   'data': dict[str, Any]
}
  • command - command name
  • data - any data for command

Example:

{'command': 'set_ip', 'data': {'ifname': 'eth0', 'ip': '192.168.0.1'}}

SUB lm/system_settings/power_control

Управляет питанием устройства


Payload format

{
   command: str
   delay: int
}
  • command - Команда управления питанием. Может принимать значения “reboot” и “shutdown”.
  • delay - Задержка срабатывания команды в минутах.


Example

{
   "command": "reboot",
   "delay": "0",
}


Certificate params format

Парамеры сертификата отличаются в зависимости от его типа. В данный момент поддерживается два типа сертификата x509: certificate и csr.


x509 certificate params format

{
   subject: str
   san: str
   issuer: str
   valid_from: float
   valid_to: float
}
  • subject - Строка в формате rfc4514.
  • san - Стока представляющее расширение SubjectAltName. Принимаются только ip адреса или dns имена идущие подряд через запятую без пробелов с префиксами IP= или DNS=.
  • issuer - Строка в формате rfc4514.
  • valid_from - Дата с которой сертификат действителен. Формат Posix timestamp.
  • valid_to - Дата по которую сертификат действителен. Формат Posix timestamp.


Example

{
   "issuer": "OU=test ou,CN=domain.com,O=test o,L=123,ST=st,C=UA",
   "san": "IP=192.168.0.3",
   "subject": "OU=test ou,CN=domain.com,O=test o,L=123,ST=st,C=UA",
   "valid_from": "1664440221.0",
   "valid_to": "1759048221.0"
}


x509 csr params format

{
   subject: str
   san: str
}
  • subject - Строка в формате rfc4514.
  • san - Стока представляющее расширение SubjectAltName. Принимаются только ip адреса или dns имена идущие подряд через запятую без пробелов с префиксами IP= или DNS=.


Example

{ “subject”: “OU=test ou,CN=domain.com,O=test o,L=123,ST=st,C=UA”, “san”: “IP=192.168.0.3”, }


11. Обновление программного обеспечения плеера

PUB lm/update_service/version/version_list

Публикует список версий всех модулей. Топик всегда содержит актуальный список.


Payload format

[
    {
        id: int
        version: str
        subversion: Optional[str]
        module: str
        description: Optional[str]
    }
]
  • id - version id
  • version - version number
  • subversion - (Optional) subversion.
  • module - module name
  • description - (Optional) description


Example

[
   {
       "id": 1,
       "version": "20",
       "subversion": null,
       "module": "frontend",
       "description": null
   }
]


PUB lm/update_service/update/update_list'

Публикует список обновлений. Топик всегда содержит актуальный список.


Payload format

[
    {
        id: int
        version: str
        status: str
        filename: Optional[str]
        update_path: str
        extracted_path: Optional[str]
        backup_path: Optional[str]
        description: Optional[str]
    }
]
  • id - update id.
  • version - update version.
  • status - update status.
  • filename - (Optional) update filename.
  • update_path - path to update file.
  • extracted_path - path to extracted files.
  • backup_path - (Optional) update version.
  • description - (Optional) description.


Example

[
   {
       "id": 1,
       "version": "2022",
       "status": "installed",
       "filename": "lmp_2022.update",
       "update_path": "/home/lightmaster/lightmaster/updater/lmp_2022.update",
       "extracted_path": "/home/lightmaster/lightmaster/updates_store/lmp_2022",
       "backup_path": "/home/lightmaster/lightmaster/backups_store/20220519181452_lmp_v0_full_backup",
       "description": "A error occurred during installation update. Installation filed. None"
   }
]


SUB lm/update_service/update/add_update

Добавляет обновление в базу.


Payload format

{
    file: str
}
  • file: str - путь до файла обновления

Example

{"file": "/home/lightmaster/projects/wess-group/lightmaster/updater/lmp_2022.update"}

SUB lm/update_service/update/check_update

Проверяет совместимость обновления.


Payload format

{
    id: int
}
  • id - id обновления


Example

{'id': 5}

SUB lm/update_service/update/initial_update

Совмещает добавление обновления в базу и его проверку.


Payload format

{
    file: str
}
  • file: str - путь до файла обновления


Example

{"file": "/home/lightmaster/projects/wess-group/lightmaster/updater/lmp_2022.update"}


SUB lm/update_service/update/install_update

Устанавливает обновление


Payload format

{
    id: int
}
  • id - id обновления


Example

{'id': 5}


SUB lm/update_service/update/restore_update

Откатывает обновление на предыдущую версию.


Payload format

{
    id: int
}
  • id - id обновления


Example

{'id': 5}


SUB lm/update_service/update/delete_update

Удаляет обновление и все связанные с ним файлы.


Payload format

{
    id: int
}
  • id - id обновления


Example

{'id': 5}


SUB lm/update_service/version/get_versions_list

Запрос на публикацию списка версий всех модулей.

Публикация происходит в топик lm/update_service/version/get_versions_list/response

В заголовок запроса могут быть включены необязательные поля:

  • Correlation data
  • Response topic

Corelation data любой уникальный идентификатор запроса. Зеркально устанавливается в публикуемый ответ и служит для идентификации ответа со стороны клиента.

Response topic если установлен то ответ публикуется в указанный топик вместо стандартного.


PUB lm/update_service/version/get_versions_list/response

Публикует ответ на запрос из топика lm/update_service/version/get_versions_list.

Выставляет заголовок Correlation data если он был установлен в запросе.


Payload format

[
    {
        id: int
        version: str
        subversion: Optional[str]
        module: str
        description: Optional[str]
    }
]
  • id - version id
  • version - version number
  • subversion - (Optional) subversion.
  • module - module name
  • description - (Optional) description


Example

[
   {
       "id": 1,
       "version": "20",
       "subversion": null,
       "module": "frontend",
       "description": null
   }
]


SUB lm/update_service/version/get_module_version

Публикует версию конкретного модуля.

Публикация происходит в топик lm/update_service/version/get_module_version/response

В заголовок запроса могут быть включены необязательные поля:

  • Correlation data
  • Response topic

Corelation data любой уникальный идентификатор запроса. Зеркально устанавливается в публикуемый ответ и служит для идентификации ответа со стороны клиента.

Response topic если установлен то ответ публикуется в указанный топик вместо стандартного.


Payload format

{
    module: str
}
  • module - название модуля


Example

{'module': 'update_service'}


PUB lm/update_service/version/get_module_version/response

Публикует ответ на запрос из топика lm/update_service/version/get_module_version.

Выставляет заголовок Correlation data если он был установлен в запросе.


Payload format

{
    id: int
    version: str
    subversion: Optional[str]
    module: str
    description: Optional[str]
}
  • id - version id
  • version - version number
  • subversion - (Optional) subversion.
  • module - module name
  • description - (Optional) description


Example

{
   "id": 1,
   "version": "20",
   "subversion": null,
   "module": "frontend",
   "description": null
}


SUB lm/update_service/update/get_updates_list

Запрос на публикацию списка всех обновлений добавленных в базу.

Публикация происходит в ветку lm/update_service/update/get_updates_list/response

В заголовок запроса могут быть включены необязательные поля:

  • Correlation data
  • Response topic

Corelation data любой уникальный идентификатор запроса. Зеркально устанавливается в публикуемый ответ и служит для идентификации ответа со стороны клиента.

Response topic если установлен то ответ публикуется в указанный топик вместо стандартного.


PUB lm/update_service/update/get_updates_list/response

Публикует ответ на запрос из топика lm/update_service/update/get_updates_list.

Выставляет заголовок Correlation data если он был установлен в запросе.


Payload format

[
    {
        id: int
        version: str
        status: str
        filename: Optional[str]
        update_path: str
        extracted_path: Optional[str]
        backup_path: Optional[str]
        description: Optional[str]
    }
]
  • id - update id.
  • version - update version.
  • status - update status.
  • filename - (Optional) update filename.
  • update_path - path to update file.
  • extracted_path - path to extracted files.
  • backup_path - (Optional) update version.
  • description - (Optional) description.


Example

[
   {
       "id": 1,
       "version": "2022",
       "status": "installed",
       "filename": "lmp_2022.update",
       "update_path": "/home/lightmaster/lightmaster/updater/lmp_2022.update",
       "extracted_path": "/home/lightmaster/lightmaster/updates_store/lmp_2022",
       "backup_path": "/home/lightmaster/lightmaster/backups_store/20220519181452_lmp_v0_full_backup",
       "description": "A error occurred during installation update. Installation filed. None"
   }
]


PUB lm/update_service/error

Публикует ошибки.

Выставляет заголовок Correlation data если он был установлен в запросе.


Payload format

{  
    msg: str
    data: Any  
}
  • msg - contain error message
  • data - contain related error data