LS Player 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
Удаляет триггер и все связанные с ним действия.
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