LS Player MQTT API: различия между версиями

Материал из Light Stream (RU)
м (Оформляю)
м (Отступы)
 
(не показано 25 промежуточных версий этого же участника)
Строка 1: Строка 1:
 
== 1. Управление проигрыванием и получение статистики ==
== Управление проигрыванием и получение статистики ==
Описывает MQTT API сервиса.
Описывает MQTT API сервиса.


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


=== Topics ===
<span id="sub-lmplayer"></span>


==== SUB <code>lm/player</code> ====
=== SUB <code>lm/player</code> ===
Принимает команды управления проигрыванием.
Принимает команды управления проигрыванием.


<span id="payload-play-command-format"></span>
==== Play ====
 
Payload command format
===== Payload play command format: =====
  {
  {
     "cmd": 'play',
     "cmd": 'play',
Строка 21: Строка 17:
     "priority": int,
     "priority": int,
  }
  }
<span id="example"></span>Example:
Example
   {
   {
     "cmd": "play",
     "cmd": "play",
Строка 33: Строка 29:
* '''entity''' - ID или наименование проигрываемой сущности.
* '''entity''' - ID или наименование проигрываемой сущности.
* '''count''' - Опциональный параметр. Количество повторений проигрывания. Если не задан или значение равно Null то проигрывание продолжится до получения следующей команды с равным или боле высоким приоритетом.
* '''count''' - Опциональный параметр. Количество повторений проигрывания. Если не задан или значение равно Null то проигрывание продолжится до получения следующей команды с равным или боле высоким приоритетом.
* '''priority''' - Приоритет команды. Чем меньше тем приоритетней. Команда с более низким приоритетом не может отменять команду с более высоким приоритетом. Текущие сопоставления приоритетов: Расписание - 6, Триггер - 5, Ручной запуск - 4.
* '''priority''' - Приоритет команды. Значение от 1 до 100. Чем больше значение - тем выше приоритет. Команда с более низким приоритетом не может отменять команду с более высоким приоритетом. Текущие сопоставления приоритетов: Расписание - 60, Триггер - 50, Ручной запуск - 40.


===== Payload stop command format =====
==== Stop ====
Payload stop command format
  {
  {
     "cmd": 'stop',
     "cmd": 'stop',
Строка 46: Строка 43:
   }
   }
* '''cmd''' - Название команды.
* '''cmd''' - Название команды.
* '''priority''' - Приоритет команды. Чем меньше тем приоритетней. Команда с более низким приоритетом не может отменять команду с более высоким приоритетом. Текущие сопоставления приоритетов: Расписание - 6, Триггер - 5, Ручной запуск - 4.
* '''priority''' - Приоритет команды. Значение от 1 до 100. Чем больше значение - тем выше приоритет. Команда с более низким приоритетом не может отменять команду с более высоким приоритетом. Текущие сопоставления приоритетов: Расписание - 60, Триггер - 50, Ручной запуск - 40.


-----


=== PUB <code>lm/statistic/playing_progress_info</code> ===
=== PUB <code>lm/statistic/playing_progress_info</code> ===
Строка 56: Строка 51:
Зная текущее значение fps можно перевести значения во время.
Зная текущее значение fps можно перевести значения во время.


Например при fps равном 40 frame_count равном 1000 и frame_number равном 120 мы получим:<br />
Например при fps равном 40 frame_count равном 1000 и frame_number равном 120 мы получим:<br />1 / 40 * 1000 = 25 - Общая продолжительность анимации в секундах. 1 / 40 * 120 = 3 - На текущий момент анимация проиграла 3 секунды.
1 / 40 * 1000 = 25 - Общая продолжительность анимации в секундах. 1 / 40 * 120 = 3 - На текущий момент анимация проиграла 3 секунды.


==== Payload format ====
 
Представляет из себя строку в формате <code>&quot;{frame_count}, {frame_number}&quot;</code><span id="example-2"></span>Example
Payload format
Представляет из себя строку в формате <code>&quot;{frame_count}, {frame_number}&quot;</code>
Example
  “1000, 35”
  “1000, 35”
* '''frame_count''' - Общее количество фреймов.
* '''frame_count''' - Общее количество фреймов.
Строка 66: Строка 62:




-----
=== PUB <code>lm/statistic/playing_ent_info</code> ===
Публикует Наименования того, что сейчас проигрывается.


=== PUB <code>lm/statistic/playing_ent_info</code> ===
Публикует Наименования того что сейчас проигрывается.


==== Payload format ====
Payload format
  {
  {
     "playlist": Optional[str],
     "playlist": Optional[str],
Строка 87: Строка 82:
* '''cue''' - Наименование проигрываемой анимации. Может быть None.
* '''cue''' - Наименование проигрываемой анимации. Может быть None.


-----


=== PUB <code>lm/statistic/current_playing_priority</code> ===
=== PUB <code>lm/statistic/current_playing_priority</code> ===
Публикует текущий приоритет проигрывания.
Публикует текущий приоритет проигрывания.


<span id="payload-format-2"></span>


==== Payload format ====
Payload format
  int
  int
Example
Example
Строка 102: Строка 95:




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


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


 
=== PUB <code>lm/settings/location/coordinates</code> ===
<span id="mqtt-api"></span>
= Mqtt API =
 
Описывает MQTT API сервиса.
 
<span id="topics"></span>
= Topics =
 
<span id="pub-lmsettingslocationcoordinates"></span>
== PUB <code>lm/settings/location/coordinates</code> ==
 
Публикует координаты плеера.
Публикует координаты плеера.


<span id="payload-play-command-format"></span>
Payload command format
=== Payload play command format ===
{
 
{
     "latitude": float,
     "latitude": float,
     "longitude": float,
     "longitude": float,
}
}
<span id="example"></span>
Example
=== Example ===
 
   {
   {
     "latitude": "56.821019190097616",
     "latitude": "56.821019190097616",
Строка 134: Строка 112:
   }
   }


-----
<span id="pub-lmsettingslocationaddress"></span>
== PUB <code>lm/settings/location/address</code> ==


=== PUB <code>lm/settings/location/address</code> ===
Публикует адрес устройства.
Публикует адрес устройства.


<span id="payload-format"></span>
=== Payload format ===


{
Payload format
{
   "address": str
   "address": str
}
}
<span id="example-1"></span>
Example
=== Example ===
{
"address": "Yekaterinburg"
}




{"address": "Yekaterinburg"}
=== PUB <code>lm/settings/datetime/timezone</code> ===
 
 
-----
 
<span id="pub-lmsettingsdatetimetimezone"></span>
== PUB <code>lm/settings/datetime/timezone</code> ==
 
Публикует часовой пояс плеера.
Публикует часовой пояс плеера.


<span id="payload-format-1"></span>
=== Payload format ===


{
Payload format
{
   "timezone": str
   "timezone": str
}
}
<span id="example-2"></span>
Example
=== Example ===
{
 
"timezone": "Asia/Yekaterinburg"
 
}
{"timezone": "Asia/Yekaterinburg"}
 
* '''timezone''' - Часовой пояс плеера.
* '''timezone''' - Часовой пояс плеера.




-----
=== PUB <code>lm/settings/player/fps</code> ===
 
<span id="pub-lmsettingsplayerfps"></span>
== PUB <code>lm/settings/player/fps</code> ==
 
Публикует настройки fps.
Публикует настройки fps.


<span id="payload-format-2"></span>
=== Payload format ===


{
Payload format
{
   "fps": int,
   "fps": int,
}
}
<span id="example-3"></span>
Example
=== Example ===
{
 
"fps": 40
 
}
{"fps": 40}
 
 
-----


<span id="pub-lmsettingsplayerartsync"></span>
== PUB <code>lm/settings/player/artsync</code> ==


=== PUB <code>lm/settings/player/artsync</code> ===
Публикует статус отправки artsync.
Публикует статус отправки artsync.


<span id="payload-format-3"></span>
=== Payload format ===


{
Payload format
{
   "artsync": bool,
   "artsync": bool,
}
}
<span id="example-4"></span>
Example
=== Example ===
{"artsync": false}




{"artsync": false}
=== PUB <code>lm/settings/player/blackout_between_playing_command</code> ===
 
 
-----
 
<span id="pub-lmsettingsplayerblackout_between_playing_command"></span>
== PUB <code>lm/settings/player/blackout_between_playing_command</code> ==
 
Публикует настройку необходимости blackout между событиями проигрывания.
Публикует настройку необходимости blackout между событиями проигрывания.


<span id="payload-format-4"></span>
=== Payload format ===


{
Payload format
{
   "blackout_between_playing_command": bool,
   "blackout_between_playing_command": bool,
}
}
<span id="example-5"></span>
Example
=== Example ===
{
"blackout_between_playing_command": false
}




{"blackout_between_playing_command": false}
=== PUB <code>lm/settings/player/playing_priority</code> ===
Публикует приоритеты проигрывания плеера.




-----
Payload command format
 
{
<span id="pub-lmsettingsplayerplaying_priority"></span>
== PUB <code>lm/settings/player/playing_priority</code> ==
 
Публикует приоритеты проигрывания плеера.
 
<span id="payload-play-command-format-1"></span>
=== Payload play command format ===
 
{
     "buttons": int,
     "buttons": int,
     "triggers": int,
     "triggers": int,
     "scheduler": int,
     "scheduler": int,
}
}
<span id="example-6"></span>
Example
=== Example ===
 
   {
   {
     "buttons": 4,
     "buttons": 4,
Строка 262: Строка 201:




-----
=== PUB <code>lm/settings/player/universes</code> ===
 
<span id="pub-lmsettingsplayeruniverses"></span>
== PUB <code>lm/settings/player/universes</code> ==
 
Публикует настройки вселенных плеера.
Публикует настройки вселенных плеера.


<span id="payload-format-5"></span>
=== Payload format ===


[
Payload format
[
   {
   {
     "number": int,
     "number": int,
Строка 283: Строка 217:
     } | None
     } | None
   }
   }
]
]
<span id="example-7"></span>
Example
=== Example ===
[
 
[
   {
   {
     "number": 1,
     "number": 1,
Строка 302: Строка 234:
     "device": null
     "device": null
   }
   }
]
]
* '''number''' - Номер вселенной (0-32768).
* '''number''' - Номер вселенной (0-32768).
* '''device''' - Настройки ArtNet устройства для данной вселенной. Может быть null если устройство не назначено.
* '''device''' - Настройки ArtNet устройства для данной вселенной. Может быть null если устройство не назначено.
Строка 312: Строка 244:




-----
=== PUB <code>lm/cues</code> ===
 
<span id="pub-lmcues"></span>
== PUB <code>lm/cues</code> ==
 
Публикует список cue файлов загруженных на плеер
Публикует список cue файлов загруженных на плеер


<span id="payload-format-6"></span>
=== Payload format ===


[
Payload format
[
   {
   {
     "id": int,
     "id": int,
Строка 330: Строка 257:
     "created": str,
     "created": str,
   }
   }
]
]
<span id="example-8"></span>
Example
=== Example ===
[
 
[
   {
   {
     "id": 47,
     "id": 47,
Строка 342: Строка 267:
     "created": "2024-03-07T08:30:16.926447Z"
     "created": "2024-03-07T08:30:16.926447Z"
   }
   }
]
]
* '''id''' - Уникальный идентификатор анимации.
* '''id''' - Уникальный идентификатор анимации.
* '''filename''' - Имя файла.
* '''filename''' - Имя файла.
Строка 350: Строка 275:




-----
=== PUB <code>lm/playlists</code> ===
 
<span id="pub-lmplaylists"></span>
== PUB <code>lm/playlists</code> ==
 
Публикует список cue файлов загруженных на плеер
Публикует список cue файлов загруженных на плеер


<span id="payload-format-7"></span>
=== Payload format ===


[
Payload format
[
   {
   {
     "id": int,
     "id": int,
Строка 382: Строка 302:
     ]
     ]
   }
   }
]
]
<span id="example-9"></span>
Example
=== Example ===
[
 
[
   {
   {
     "id": 19,
     "id": 19,
Строка 408: Строка 326:
     ]
     ]
   }
   }
]
]
* '''id''' - Уникальный идентификатор плейлиста.
* '''id''' - Уникальный идентификатор плейлиста.
* '''name''' - Название плейлиста.
* '''name''' - Название плейлиста.
Строка 422: Строка 340:




 
== 3. Управление расписанием ==
 
= 3 =
 
 
 
<span id="mqtt-api-для-сервиса-управления-календарными-событиями."></span>
= Mqtt API для сервиса управления календарными событиями. =
 
Описывает MQTT API сервиса.
 
Сервис осуществляет управление событиями календаря.
 
<span id="topics"></span>
= Topics =
 
<span id="pub-lmschedulererror"></span>
<span id="pub-lmschedulererror"></span>
== PUB <code>lm/scheduler/error</code> ==


=== PUB <code>lm/scheduler/error</code> ===
Публикует ошибки.
Публикует ошибки.


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


<span id="payload-format"></span>
=== Payload format ===


<pre>{   
Payload format<pre>{   
     msg: str
     msg: str
     data: Any   
     data: Any   
Строка 455: Строка 356:
* '''data''' - contain related error data
* '''data''' - contain related error data


<span id="example"></span>
=== Example ===


<!-- TODO:  Добавить пример. -->
<span id="pub-lmschedulerevents"></span>
 
-----


<span id="pub-lmschedulerevents"></span>
<span id="pub-lmschedulerevents"></span>
== PUB <code>lm/scheduler/events</code> ==


=== PUB <code>lm/scheduler/events</code> ===
Публикует список всех событий календаря.
Публикует список всех событий календаря.


<span id="payload-format-1"></span>
=== Payload format ===


[
Payload format
[
   {
   {
     "id": str,
     "id": str,
Строка 503: Строка 399:
       "until_time": Optional[str],
       "until_time": Optional[str],
       "until_time_offset": Optional[int],
       "until_time_offset": Optional[int],
       "count": Optional[int],
       "count": Optional[int],
       "from_time_type": Optional[Union['sunset', 'sunrise', 'time']],
       "from_time_type": Optional[Union['sunset', 'sunrise', 'time']],
       "from_time": Optional[str],
       "from_time": Optional[str],
Строка 512: Строка 406:
       "to_time": Optional[str],
       "to_time": Optional[str],
       "to_time_offset": Optional[int],
       "to_time_offset": Optional[int],
       "bymonth": Optional[
       "bymonth": Optional[
           list[
           list[
Строка 528: Строка 421:
     }
     }
   }
   }
]
]
 
<span id="example-1"></span>Example
<span id="example-1"></span>
[
=== Example ===
 
[
   {
   {
     "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
     "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
Строка 575: Строка 465:
     }
     }
   }
   }
]
]
* '''id''' - Уникальный идентификатор события (UUID).
* '''id''' - Уникальный идентификатор события (UUID).
* '''title''' - Название события.
* '''title''' - Название события.
Строка 610: Строка 500:
* '''byweekday''' - Дни недели в которые событие активно. Заполнено если поле freq равно ‘WEEKLY’.
* '''byweekday''' - Дни недели в которые событие активно. Заполнено если поле freq равно ‘WEEKLY’.
* '''from_min''' - Минута с которой начинается событие. Заполнено если поле freq равно ‘HOURLY’.
* '''from_min''' - Минута с которой начинается событие. Заполнено если поле freq равно ‘HOURLY’.
* '''to_min''' - Минута окончания события. Заполнено если поле freq равно ‘HOURLY’.
* '''to_min''' - Минута окончания события. Заполнено если поле freq равно ‘HOURLY’.<span id="sub-lmschedulereventsadd"></span>




-----
=== SUB <code>lm/scheduler/events/add</code> ===
 
<span id="sub-lmschedulereventsadd"></span>
== SUB <code>lm/scheduler/events/add</code> ==
 
Добавляет новое событие.
Добавляет новое событие.


<span id="payload-format-2"></span>
Payload format
=== Payload format ===
{
 
{
     "title": str,
     "title": str,
     "priority": int,
     "priority": int,
Строка 654: Строка 538:
       "until_time": Optional[str],
       "until_time": Optional[str],
       "until_time_offset": Optional[int],
       "until_time_offset": Optional[int],
       "count": Optional[int],
       "count": Optional[int],
       "from_time_type": Optional[Union['sunset', 'sunrise', 'time']],
       "from_time_type": Optional[Union['sunset', 'sunrise', 'time']],
       "from_time": Optional[str],
       "from_time": Optional[str],
Строка 663: Строка 545:
       "to_time": Optional[str],
       "to_time": Optional[str],
       "to_time_offset": Optional[int],
       "to_time_offset": Optional[int],
       "bymonth": Optional[
       "bymonth": Optional[
           list[
           list[
Строка 678: Строка 559:
       "to_min": Optional[int],
       "to_min": Optional[int],
     }
     }
}
}
<span id="example-2"></span>
Example
=== Example ===
{
 
{
   "title": "holiday",
   "title": "holiday",
   "priority": 1,
   "priority": 1,
Строка 721: Строка 600:
     "to_min": null
     "to_min": null
   }
   }
}
}
* '''title''' - Название события.
* '''title''' - Название события.
* '''priority''' - Приоритет события. Чем выше значение тем выше приоритет.
* '''priority''' - Приоритет события. Чем выше значение тем выше приоритет.
Строка 758: Строка 637:




-----
=== SUB <code>lm/scheduler/events/delete</code> ===
 
<span id="sub-lmschedulereventsdelete"></span>
== SUB <code>lm/scheduler/events/delete</code> ==
 
Удаляет событие.
Удаляет событие.


<span id="payload-format-3"></span>
Payload format
=== Payload format ===
{
 
{
     id: str
     id: str
}
}
<span id="example-3"></span>
Example
=== Example ===
 
   {
   {
     "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
     "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
Строка 779: Строка 650:
* '''id''' - Уникальный идентификатор события. ___
* '''id''' - Уникальный идентификатор события. ___


<span id="sub-lmschedulereventsupdate"></span>
== SUB <code>lm/scheduler/events/update</code> ==


=== SUB <code>lm/scheduler/events/update</code> ===
Обновляет параметры события.
Обновляет параметры события.


<span id="payload-format-4"></span>
Payload format
=== Payload format ===
{
 
  "id": str,
{
     "title": str,
    "id": str,
     "priority": int,
     "title": str,
     "priority": int,
     "actions": {
     "actions": {
       "player": Optional[{
       "player": Optional[{
Строка 819: Строка 688:
       "until_time": Optional[str],
       "until_time": Optional[str],
       "until_time_offset": Optional[int],
       "until_time_offset": Optional[int],
       "count": Optional[int],
       "count": Optional[int],
       "from_time_type": Optional[Union['sunset', 'sunrise', 'time']],
       "from_time_type": Optional[Union['sunset', 'sunrise', 'time']],
       "from_time": Optional[str],
       "from_time": Optional[str],
Строка 828: Строка 695:
       "to_time": Optional[str],
       "to_time": Optional[str],
       "to_time_offset": Optional[int],
       "to_time_offset": Optional[int],
       "bymonth": Optional[
       "bymonth": Optional[
           list[
           list[
Строка 843: Строка 709:
       "to_min": Optional[int],
       "to_min": Optional[int],
     }
     }
}
}
<span id="example-4"></span>
Example
=== Example ===
{
 
{
   "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
   "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
   "title": "holiday",
   "title": "holiday",
Строка 887: Строка 751:
     "to_min": null
     "to_min": null
   }
   }
}
}
* '''id''' - Уникальный идентификатор события (UUID).
* '''id''' - Уникальный идентификатор события (UUID).
* '''title''' - Название события.
* '''title''' - Название события.
Строка 922: Строка 786:
* '''byweekday''' - Дни недели в которые событие активно. Заполнено если поле freq равно ‘WEEKLY’.
* '''byweekday''' - Дни недели в которые событие активно. Заполнено если поле freq равно ‘WEEKLY’.
* '''from_min''' - Минута с которой начинается событие. Заполнено если поле freq равно ‘HOURLY’.
* '''from_min''' - Минута с которой начинается событие. Заполнено если поле freq равно ‘HOURLY’.
* '''to_min''' - Минута окончания события. Заполнено если поле freq равно ‘HOURLY’.
* '''to_min''' - Минута окончания события. Заполнено если поле freq равно ‘HOURLY’.<span id="pub-lmschedulereventschanges"></span>




-----
=== PUB <code>lm/scheduler/events/changes</code> ===
Публикует вновь созданные/измененные/удаленные события.<span id="payload-format-5"></span>


<span id="pub-lmschedulereventschanges"></span>
== PUB <code>lm/scheduler/events/changes</code> ==


Публикует вновь созданные/измененные/удаленные события.
Payload format
 
{
<span id="payload-format-5"></span>
=== Payload format ===
 
{
     status: Literal['created', 'updated', 'deleted'],
     status: Literal['created', 'updated', 'deleted'],
     event: {
     event: {
Строка 969: Строка 828:
           "until_time": Optional[str],
           "until_time": Optional[str],
           "until_time_offset": Optional[int],
           "until_time_offset": Optional[int],
           "count": Optional[int],
           "count": Optional[int],
           "from_time_type": Optional[Union['sunset', 'sunrise', 'time']],
           "from_time_type": Optional[Union['sunset', 'sunrise', 'time']],
           "from_time": Optional[str],
           "from_time": Optional[str],
Строка 978: Строка 835:
           "to_time": Optional[str],
           "to_time": Optional[str],
           "to_time_offset": Optional[int],
           "to_time_offset": Optional[int],
           "bymonth": Optional[
           "bymonth": Optional[
               list[
               list[
Строка 994: Строка 850:
         }
         }
     }
     }
}
}
<span id="example-5"></span>
Example
=== Example ===
{
 
{
   "status": "created",
   "status": "created",
   "event": {
   "event": {
Строка 1041: Строка 895:
     }
     }
   }
   }
}
}
* '''status''' - Тип изменения. Может принимать значения ‘created’, ‘updated’, ‘deleted’.
* '''status''' - Тип изменения. Может принимать значения ‘created’, ‘updated’, ‘deleted’.
* '''event''' - Событие со всеми параметрами в формате SchedulerEvent. ___
* '''event''' - Событие со всеми параметрами в формате SchedulerEvent. ___


<span id="sub-lmschedulereventsperiods"></span>
== SUB <code>lm/scheduler/events/periods</code> ==


=== SUB <code>lm/scheduler/events/periods</code> ===
Принимает запрос на публикацию всех одиночных событий за указанный период.
Принимает запрос на публикацию всех одиночных событий за указанный период.


Запрос должен содержать cor data для последующей идентификации ответа. Запрос может содержать resp_topic. В противном случае ответ будет опубликован в топик <code>lm/scheduler/events/periods/response</code>.
Запрос должен содержать cor data для последующей идентификации ответа. Запрос может содержать resp_topic. В противном случае ответ будет опубликован в топик <code>lm/scheduler/events/periods/response</code>.


<span id="payload-format-6"></span>
=== Payload format ===


{
Payload format
{
     from_datetime: str,
     from_datetime: str,
     to_datetime: str,
     to_datetime: str,
Строка 1064: Строка 916:
         do3: bool,
         do3: bool,
     }]
     }]
}
}
<span id="example-6"></span>
Example
=== Example ===
{
 
{
   "from_datetime": "2024-02-25T05:00:00",
   "from_datetime": "2024-02-25T05:00:00",
   "to_datetime": "2024-04-08T05:00:00",
   "to_datetime": "2024-04-08T05:00:00",
Строка 1077: Строка 927:
     "do3": false
     "do3": false
   }
   }
}
}
* '''from_datetime''' - Дата и время начала диапазона в iso формате.
* '''from_datetime''' - Дата и время начала диапазона в iso формате.
* '''to_datetime''' - Дата и время окончания диапазона в iso формате.
* '''to_datetime''' - Дата и время окончания диапазона в iso формате.
Строка 1086: Строка 936:
* '''do3''' - Включать события с действиями для цифрового выхода DO3.
* '''do3''' - Включать события с действиями для цифрового выхода DO3.


<span id="pub-lmschedulereventsperiodsresponse"></span>
== PUB <code>lm/scheduler/events/periods/response</code> ==


=== PUB <code>lm/scheduler/events/periods/response</code> ===
Публикует список одиночных событий календаря за указанный период. Период задается в запросе. Запрос принимается на топик <code>lm/scheduler/events/periods</code>
Публикует список одиночных событий календаря за указанный период. Период задается в запросе. Запрос принимается на топик <code>lm/scheduler/events/periods</code>


<span id="payload-format-7"></span>
=== Payload format ===


[
Payload format
[
   {
   {
     id: str
     id: str
Строка 1103: Строка 951:
     duration: float
     duration: float
   }
   }
]
]
 
Example
<span id="example-7"></span>
[
=== Example ===
 
[
   {
   {
     "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
     "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
Строка 1117: Строка 962:
     "duration": 259200.0
     "duration": 259200.0
   }
   }
]
]
* '''id''' - Уникальный идентификатор события.
* '''id''' - Уникальный идентификатор события.
* '''title''' - Название события.
* '''title''' - Название события.
Строка 1126: Строка 971:




-----
=== PUB <code>lm/scheduler/player/status</code> ===
 
<span id="pub-lmschedulerplayerstatus"></span>
== PUB <code>lm/scheduler/player/status</code> ==
 
Публикует текущее активное событие плеера если оно есть.
Публикует текущее активное событие плеера если оно есть.


<span id="payload-format-8"></span>
=== Payload format ===


<span id="событие-есть"></span>
Payload format<span id="событие-есть"></span>Событие есть:
==== Событие есть: ====
{
 
{
   status: Literal['running'],
   status: Literal['running'],
   event: {
   event: {
Строка 1150: Строка 987:
     }
     }
   }
   }
}
}
<span id="example-8"></span>
Example
===== Example =====
{
 
{
   "status": "running",
   "status": "running",
   "event": {
   "event": {
Строка 1165: Строка 1000:
     }
     }
   }
   }
}
}
<span id="события-нет"></span>
 
==== События нет: ====
 


{
События нет:
{
   status: Literal['no_event'],
   status: Literal['no_event'],
}
}
<span id="example-9"></span>
Example
===== Example =====
{
 
{
   "status": "no_event"
   "status": "no_event"
}
}
* '''status''' - Текущий статус расписания. Может принимать значения ‘running’, ‘no_event’.
* '''status''' - Текущий статус расписания. Может принимать значения ‘running’, ‘no_event’.
* '''event''' - Активное событие со всеми параметрами. Присутствует только когда status равен ‘running’.
* '''event''' - Активное событие со всеми параметрами. Присутствует только когда status равен ‘running’.
Строка 1188: Строка 1022:




-----


<span id="pub-lmschedulerdo1status"></span>
=== PUB <code>lm/scheduler/do/*/status</code> ===
== PUB <code>lm/scheduler/do/1/status</code> ==
Публикует текущее активное событие управления цифровым выходом DO1 если оно есть.


<span id="pub-lmschedulerdo2status"></span>
== PUB <code>lm/scheduler/do/2/status</code> ==


<span id="pub-lmschedulerdo3status"></span>
PUB <code>lm/scheduler/do/1/status</code><span id="pub-lmschedulerdo2status"></span>PUB <code>lm/scheduler/do/2/status</code><span id="pub-lmschedulerdo3status"></span>PUB <code>lm/scheduler/do/3/status</code>
== PUB <code>lm/scheduler/do/3/status</code> ==


Публикует текущее активное событие управления цифровым выходом DO1 если оно есть.


<span id="payload-format-9"></span>
Payload format<span id="событие-есть-1"></span>Событие есть:
=== Payload format ===
{
 
<span id="событие-есть-1"></span>
==== Событие есть: ====
 
{
   status: Literal['running'],
   status: Literal['running'],
   event: {
   event: {
Строка 1216: Строка 1040:
     }
     }
   }
   }
}
}
<span id="example-10"></span>
Example
===== Example =====
{
 
{
   "status": "running",
   "status": "running",
   "event": {
   "event": {
Строка 1229: Строка 1051:
     }
     }
   }
   }
}
}
<span id="события-нет-1"></span>
 
==== События нет: ====


{
  status: Literal['no_event'],
}
<span id="example-11"></span>
===== Example =====


{
События нет:
{
  status: Literal['no_event'],
}
Example
{
   "status": "no_event"
   "status": "no_event"
}
}
* '''status''' - Текущий статус расписания для DO1. Может принимать значения ‘running’, ‘no_event’.
* '''status''' - Текущий статус расписания для DO1. Может принимать значения ‘running’, ‘no_event’.
* '''event''' - Активное событие со всеми параметрами. Присутствует только когда status равен ‘running’.
* '''event''' - Активное событие со всеми параметрами. Присутствует только когда status равен ‘running’.
Строка 1250: Строка 1071:




-----
=== SUB <code>lm/settings/datetime/timezone</code> ===
 
<span id="sub-lmsettingsdatetimetimezone"></span>
== SUB <code>lm/settings/datetime/timezone</code> ==
 
Получает текущую таймзону.
Получает текущую таймзону.


<span id="payload-format-10"></span>
Payload format
=== Payload format ===
{
 
{
     timezone: str
     timezone: str
}
}
<span id="example-12"></span>
Example
=== Example ===
 
   {
   {
     "timezone": "Europe/Moscow",
     "timezone": "Europe/Moscow",
   }
   }
<span id="sub-lmsettingslocationcoordinates"></span>
== SUB <code>lm/settings/location/coordinates</code> ==


=== SUB <code>lm/settings/location/coordinates</code> ===
Получает координаты устройства для расчета солнечного времени.
Получает координаты устройства для расчета солнечного времени.


<span id="payload-format-11"></span>
=== Payload format ===


{
Payload format
{
   latitude: float
   latitude: float
   longitude: float
   longitude: float
}
}
<span id="example-13"></span>
Example
=== Example ===
 
   {
   {
     latitude: 56.821019190097616
     latitude: 56.821019190097616
Строка 1291: Строка 1101:




= 4 =
== 4 Управление устройствами Art-Net ==
 
 
 
<span id="mqtt-api-для-сервиса-управления-artnet-и-rdm-устройствами."></span>
= Mqtt API для сервиса управления ArtNet и Rdm устройствами. =
 
Описывает MQTT API сервиса.
 
Сервис осуществляет мониторинг и управления ArtNet и RDM устройствами.
Сервис осуществляет мониторинг и управления ArtNet и RDM устройствами.


<span id="topics"></span>
= Topics =


<span id="pub-lmartnet_devices_management_serviceerror"></span>
<span id="pub-lmartnet_devices_management_serviceerror"></span>
== PUB <code>lm/artnet_devices_management_service/error</code> ==


=== PUB <code>lm/artnet_devices_management_service/error</code> ===
Публикует ошибки.
Публикует ошибки.


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


<span id="payload-format"></span>
=== Payload format ===


<pre>{   
Payload format<pre>{   
     msg: str
     msg: str
     data: Any   
     data: Any   
Строка 1322: Строка 1120:
* '''data''' - contain related error data
* '''data''' - contain related error data


<span id="example"></span>
=== Example ===
<!-- TODO:  Добавить пример. -->
-----
<span id="pub-lmartnet_devices_management_serviceartnetdeviceschanges"></span>
== PUB <code>lm/artnet_devices_management_service/artnet/devices/changes</code> ==


=== PUB <code>lm/artnet_devices_management_service/artnet/devices/changes</code> ===
Публикует вновь созданные/измененные/удаленные ArtNet устройства.
Публикует вновь созданные/измененные/удаленные ArtNet устройства.


<span id="payload-format-1"></span>
=== Payload format ===


{
Payload format
{
     status: Literal['created', 'updated', 'deleted']
     status: Literal['created', 'updated', 'deleted']
     device: {
     device: {
Строка 1396: Строка 1185:
         rdm_devices_count: int
         rdm_devices_count: int
     }
     }
}
}
<span id="example-1"></span>
=== Example ===


<!-- TODO:  Добавить пример. -->


-----
<span id="pub-lmartnet_devices_management_servicerdmdeviceschanges"></span>
== PUB <code>lm/artnet_devices_management_service/rdm/devices/changes</code> ==


=== PUB <code>lm/artnet_devices_management_service/rdm/devices/changes</code> ===
Публикует вновь созданные/измененные/удаленные RDM устройства.
Публикует вновь созданные/измененные/удаленные RDM устройства.


<span id="payload-format-2"></span>
=== Payload format ===


{
Payload format
{
     status: Literal['created', 'updated', 'deleted']
     status: Literal['created', 'updated', 'deleted']
     device: {
     device: {
Строка 1421: Строка 1203:
         supported_params: dict[str, Any]
         supported_params: dict[str, Any]
     }
     }
}
}
* '''uid''' - Уникальный идентификатор устройства.
* '''uid''' - Уникальный идентификатор устройства.
* '''art_net_device_mac''' - Mac адрес ArtNet устройства к которому подключено данное rdm устройство.
* '''art_net_device_mac''' - Mac адрес ArtNet устройства к которому подключено данное rdm устройство.
Строка 1428: Строка 1210:
* '''supported_params''' - Словарь параметров и их значений.
* '''supported_params''' - Словарь параметров и их значений.


<span id="example-2"></span>
=== Example ===
<!-- TODO:  Добавить пример. -->
-----
<span id="pub-lmartnet_devices_management_servicecmd_response"></span>
== PUB <code>lm/artnet_devices_management_service/cmd_response</code> ==


=== PUB <code>lm/artnet_devices_management_service/cmd_response</code> ===
Публикует результаты выполнения асинхронных команд.
Публикует результаты выполнения асинхронных команд.


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


<span id="payload-format-3"></span>
=== Payload format ===


{
Payload format
{
     "transaction_uid": "string",
     "transaction_uid": "string",
     "status": "string"
     "status": "string"
}
}
* '''transaction_uid''' - Уникальный идентификатор транзакции, возвращаемый при инициации асинхронной команды
* '''transaction_uid''' - Уникальный идентификатор транзакции, возвращаемый при инициации асинхронной команды
* '''status''' - Статус выполнения команды. Возможные значения: “done”, “error”
* '''status''' - Статус выполнения команды. Возможные значения: “done”, “error”


<span id="example-3"></span>
=== Example ===


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






<span id="mqtt-api-for-lm_trigger_service."></span>
= Mqtt API for lm_trigger_service. =


Описывает MQTT API для сервиса lm_trigger_service.
* ☐ Добавить описание ошибок.
<span id="topics"></span>
= Topics =


== 5 Управление триггерами ==
<span id="pub-lmtrigger_servicetriggertrigger_list"></span>
<span id="pub-lmtrigger_servicetriggertrigger_list"></span>
== PUB <code>'lm/trigger_service/trigger/trigger_list'</code> ==


Публикует список всех триггеров.<br />
=== PUB <code>'lm/trigger_service/trigger/trigger_list'</code> ===
Топик всегда содержит актуальный список.
Публикует список всех триггеров. Топик всегда содержит актуальный список.


<span id="payload-format"></span>
=== Payload format ===


[
Payload format
[
     {
     {
         name: str
         name: str
Строка 1494: Строка 1250:
         params: dict[str, Any]
         params: dict[str, Any]
     }
     }
]
]
* '''name''' - Имя триггера.
* '''name''' - Имя триггера.
* '''tr_type''' - Тип триггера.
* '''tr_type''' - Тип триггера.
* '''params''' - Словарь с параметрами триггера.
* '''params''' - Словарь с параметрами триггера.


<span id="example"></span>
=== Example ===


[
Example
[
     {
     {
         "name": "TriggerFromMqtt",
         "name": "TriggerFromMqtt",
Строка 1513: Строка 1268:
         }
         }
     }
     }
]
]


-----


<span id="pub-lmtrigger_serviceactionaction_list"></span>
=== PUB <code>lm/trigger_service/action/action_list</code> ===
== PUB <code>lm/trigger_service/action/action_list</code> ==
Публикует список всех action. <br />Топик всегда содержит актуальный список.


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


<span id="payload-format-1"></span>
Payload format
=== Payload format ===
[
 
[
     {
     {
         name: str
         name: str
Строка 1532: Строка 1282:
         params: dict[str, Any]
         params: dict[str, Any]
     }
     }
]
]
* '''name''' - Имя action.
* '''name''' - Имя action.
* '''action_type''' - Тип action.
* '''action_type''' - Тип action.
* '''params''' - Словарь с параметрами action.
* '''params''' - Словарь с параметрами action.


<span id="example-1"></span>
=== Example ===


[
Example
[
     {
     {
         "name": "default",
         "name": "default",
Строка 1550: Строка 1299:
         }
         }
     }
     }
]
]


-----
<span id="pub-lmtrigger_servicerelation_list"></span>
== PUB <code>lm/trigger_service/relation_list</code> ==


=== PUB <code>lm/trigger_service/relation_list</code> ===
Публикует список всех связей между триггером и action.
Публикует список всех связей между триггером и action.


<span id="payload-format-2"></span>
=== Payload format ===


[
Payload format
[
     {
     {
         trigger: {
         trigger: {
Строка 1575: Строка 1320:
         }
         }
     }
     }
]
]
* '''trigger''' - Словарь с триггером.
* '''trigger''' - Словарь с триггером.
* '''action''' - Словарь с action.
* '''action''' - Словарь с action.


<span id="example-2"></span>
=== Example ===


[
Example
[
     {
     {
         "trigger": {
         "trigger": {
Строка 1604: Строка 1348:
         }
         }
     }
     }
]
]
 
-----


<span id="sub-lmtrigger_servicetriggeradd"></span>
== SUB <code>lm/trigger_service/trigger/add</code> ==


=== SUB <code>lm/trigger_service/trigger/add</code> ===
Добавляет новый триггер.
Добавляет новый триггер.


Строка 1619: Строка 1360:
* Mqtt - Срабатывает при получении Mqtt сообщения удовлетворяющего заданным параметрам.
* Mqtt - Срабатывает при получении Mqtt сообщения удовлетворяющего заданным параметрам.


<span id="payload-format-3"></span>
=== Payload format ===


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


<span id="example-3"></span>
=== Example ===


{
Example
{
     "name": "TriggerFromMqtt",
     "name": "TriggerFromMqtt",
     "tr_type": "RawUDP",
     "tr_type": "RawUDP",
Строка 1643: Строка 1382:
         "data": "any"
         "data": "any"
     }
     }
}
}
<span id="ожидаемые-параметры"></span>
=== Ожидаемые Параметры ===


<span id="параметры-для-триггера-с-типом-rawudp"></span>
==== Параметры для триггера с типом RawUDP ====


'''Ожидаемые Параметры'''
Параметры для <u>триггера с типом RawUDP</u>
     {
     {
         network_type: Literal['udp']
         network_type: Literal['udp']
Строка 1660: Строка 1399:
* '''listen_port''' - Прослушиваемый порт.
* '''listen_port''' - Прослушиваемый порт.
* '''data''' - Полезная нагрузка. Принимает строку полностью отражающую полезную нагрузку UDP пакета.
* '''data''' - Полезная нагрузка. Принимает строку полностью отражающую полезную нагрузку UDP пакета.
 
Example RawUDP params
<span id="example-rawudp-params"></span>
{
==== Example RawUDP params ====
 
{
     "network_type": "udp",
     "network_type": "udp",
     "listen_ip": "0.0.0.0",
     "listen_ip": "0.0.0.0",
     "listen_port": "5555",
     "listen_port": "5555",
     "data": "any"
     "data": "any"
}
}
<span id="параметры-для-триггера-с-типом-artnet"></span>
 
==== Параметры для триггера с типом ArtNet ====


Параметры для <u>триггера с типом ArtNet</u>
     {
     {
         network_type: Literal['tcp', 'udp']
         network_type: Literal['tcp', 'udp']
Строка 1688: Строка 1425:
* '''channel''' - Номер канала в ArtNet пакете.
* '''channel''' - Номер канала в ArtNet пакете.
* '''min_level''' - Минимальное значение в канале для срабатывания триггера.
* '''min_level''' - Минимальное значение в канале для срабатывания триггера.
* '''max_level''' - Максимальное значение в канале для срабатывания триггера.
* '''max_level''' - Максимальное значение в канале для срабатывания триггера.<span id="example-artnet-params"></span>Example ArtNet params
 
{
<span id="example-artnet-params"></span>
==== Example ArtNet params ====
 
{
     "network_type": "udp",
     "network_type": "udp",
     "listen_ip": "0.0.0.0",
     "listen_ip": "0.0.0.0",
Строка 1701: Строка 1434:
     "min_level": 1,
     "min_level": 1,
     "max_level": 124
     "max_level": 124
}
}
<span id="параметры-для-триггера-с-типом-mqtt"></span>
 
==== Параметры для триггера с типом Mqtt ====
 


Параметры для <u>триггера с типом Mqtt</u>
     {
     {
         topic: str
         topic: str
Строка 1710: Строка 1444:
     }
     }
* '''topic''' - Mqtt топик для отслеживания.
* '''topic''' - Mqtt топик для отслеживания.
* '''payload''' - Полезная нагрузка mqtt сообщения в виде байт. Должна точно совпадать.
* '''payload''' - Полезная нагрузка mqtt сообщения в виде байт. Должна точно совпадать.<span id="example-mqtt-params"></span>Example Mqtt params
 
{
<span id="example-mqtt-params"></span>
==== Example Mqtt params ====
 
{
     "topic": "lm/di/port/1",
     "topic": "lm/di/port/1",
     "payload": "\x01"
     "payload": "\x01"
}
}


-----
<span id="sub-lmtrigger_servicetriggerdelete"></span>
== SUB <code>lm/trigger_service/trigger/delete</code> ==


=== SUB <code>lm/trigger_service/trigger/delete</code> ===
Удаляет триггер.
Удаляет триггер.


<span id="payload-format-4"></span>
<span id="payload-format-4"></span>
=== Payload format ===
=== Payload format ===
 
{
{
     name: str
     name: str
}
}
* '''name''' - Имя триггера.
* '''name''' - Имя триггера.<span id="example-4"></span>Example
 
{
<span id="example-4"></span>
=== Example ===
 
{
     "name": "TriggerFromMqtt",
     "name": "TriggerFromMqtt",
}
}
 
-----


<span id="sub-lmtrigger_serviceactionadd"></span>
== SUB <code>lm/trigger_service/action/add</code> ==


=== SUB <code>lm/trigger_service/action/add</code> ===
Добавляет новый action.
Добавляет новый action.


Строка 1754: Строка 1473:
* '''send_trigger_to_mqtt''' - Отправляет по mqtt сообщение в теле которого находится сработавший триггер.
* '''send_trigger_to_mqtt''' - Отправляет по mqtt сообщение в теле которого находится сработавший триггер.


<span id="payload-format-5"></span>
=== Payload format ===


{
Payload format
{
     name: str
     name: str
     action_type: str
     action_type: str
     params: dict[str, Any]
     params: dict[str, Any]
}
}
* '''name''' - Имя action.
* '''name''' - Имя action.
* '''action_type''' - Тип action.
* '''action_type''' - Тип action.
* '''params''' - Словарь с параметрами action. Различается в зависимости от типа action.
* '''params''' - Словарь с параметрами action. Различается в зависимости от типа action.<span id="example-5"></span>Example
 
{
<span id="example-5"></span>
=== Example ===
 
{
     "name": "default",
     "name": "default",
     "action_type": "send_trigger_to_mqtt",
     "action_type": "send_trigger_to_mqtt",
Строка 1777: Строка 1491:
         "retain": false
         "retain": false
     }
     }
}
}
<span id="ожидаемые-параметры-1"></span>
 
=== Ожидаемые Параметры ===
 
 
'''Ожидаемые Параметры'''


Параметры для actions с типом <code>send_trigger_to_mqtt</code> и <code>send_trigger_to_mqtt</code> совпадают.
Параметры для actions с типом <code>send_trigger_to_mqtt</code> и <code>send_trigger_to_mqtt</code> совпадают.
 
{
{
     topic: str
     topic: str
     payload: str
     payload: str
     retain: bool
     retain: bool
}
}
* '''topic''' - Mqtt topic в который будет отправлено сообщение.
* '''topic''' - Mqtt topic в который будет отправлено сообщение.
* '''payload''' - Mqtt payload. Полезная нагрузка сообщения.
* '''payload''' - Mqtt payload. Полезная нагрузка сообщения.
Строка 1794: Строка 1509:
Типа <code>send_trigger_to_mqtt</code> игнорирует поля '''payload''' и '''retain''' но в сообщении они должны присутствовать.
Типа <code>send_trigger_to_mqtt</code> игнорирует поля '''payload''' и '''retain''' но в сообщении они должны присутствовать.


<span id="example-params"></span>
==== Example params ====


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


<span id="sub-lmtrigger_serviceactiondelete"></span>
== SUB <code>lm/trigger_service/action/delete</code> ==


=== SUB <code>lm/trigger_service/action/delete</code> ===
Удаляет action.
Удаляет action.


<span id="payload-format-6"></span>
=== Payload format ===


{
Payload format
{
     name: str
     name: str
}
}
* '''name''' - Имя action.
* '''name''' - Имя action.


<span id="example-6"></span>
=== Example ===


{
Example
{
     "name": "default",
     "name": "default",
}
}
 
-----


<span id="sub-lmtrigger_serviceset_trigger_to_action_relation"></span>
== SUB <code>lm/trigger_service/set_trigger_to_action_relation</code> ==


=== SUB <code>lm/trigger_service/set_trigger_to_action_relation</code> ===
Создает связь между триггером и action.
Создает связь между триггером и action.


<span id="payload-format-7"></span>
=== Payload format ===


Payload format
     trigger: {
     trigger: {
         name: str
         name: str
Строка 1848: Строка 1553:
* '''action''' - Словарь с action.
* '''action''' - Словарь с action.


<span id="example-7"></span>
=== Example ===


{
Example
{
     "trigger": {
     "trigger": {
         "name": "TriggerFromMqtt",
         "name": "TriggerFromMqtt",
Строка 1871: Строка 1575:
         }
         }
     }
     }
}
}


-----
<span id="sub-lmtrigger_servicedelete_trigger_to_action_relation"></span>
== SUB <code>lm/trigger_service/delete_trigger_to_action_relation</code> ==


=== SUB <code>lm/trigger_service/delete_trigger_to_action_relation</code> ===
Удаляет связь между триггером и action.
Удаляет связь между триггером и action.


<span id="payload-format-8"></span>
=== Payload format ===


Payload format
     trigger: {
     trigger: {
         name: str
         name: str
Строка 1896: Строка 1596:
* '''action''' - Словарь с action.
* '''action''' - Словарь с action.


<span id="example-8"></span>
=== Example ===


{
Example
{
     "trigger": {
     "trigger": {
         "name": "TriggerFromMqtt",
         "name": "TriggerFromMqtt",
Строка 1919: Строка 1618:
         }
         }
     }
     }
}
}
 
-----


<span id="pub-lmtrigger_serviceerror"></span>
== PUB <code>lm/trigger_service/error</code> ==


=== PUB <code>lm/trigger_service/error</code> ===
Публикует ошибки.
Публикует ошибки.


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


<span id="payload-format-9"></span>
=== Payload format ===


<pre>{   
Payload format<pre>{   
     msg: str
     msg: str
     data: Any   
     data: Any   
Строка 1940: Строка 1634:
* '''data''' - contain related error data
* '''data''' - contain related error data


<span id="example-9"></span>
=== Example ===
<!-- TODO:  Добавить пример. -->
-----
<span id="sub-lmtrigger_servicedelete_trigger_with_related_actions"></span>
== SUB <code>lm/trigger_service/delete_trigger_with_related_actions</code> ==


=== SUB <code>lm/trigger_service/delete_trigger_with_related_actions</code> ===
Удаляет триггер и все связанные с ним действия.
Удаляет триггер и все связанные с ним действия.


<span id="payload-format-10"></span>
=== Payload format ===


{
Payload format
{
     name: str
     name: str
}
}
* '''name''' - Имя триггера.
* '''name''' - Имя триггера.<span id="example-10"></span>Example
 
{
<span id="example-10"></span>
=== Example ===
 
{
     "name": "TriggerFromMqtt",
     "name": "TriggerFromMqtt",
}
}
 
-----






= 6 =
== 6. Настройки системы ==
 
 
 
 
<span id="mqtt-api-for-lm_system_settings."></span>
= Mqtt API for lm_system_settings. =
 
Описывает MQTT API для сервиса lm_system_settings.
 
Сервис осуществляет конфигурирование системных настроек ОС.
Сервис осуществляет конфигурирование системных настроек ОС.


<span id="topics"></span>
= Topics =
<span id="pub-lmsystem_configuratorerror"></span>
== PUB <code>lm/system_configurator/error</code> ==


=== PUB <code>lm/system_configurator/error</code> ===
Публикует ошибки.
Публикует ошибки.


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


<span id="payload-format"></span>
=== Payload format ===


<pre>{   
Payload format<pre>{   
     msg: str
     msg: str
     data: Any   
     data: Any   
Строка 2003: Строка 1667:
* '''data''' - contain related error data
* '''data''' - contain related error data


<span id="example"></span>
=== Example ===
<!-- TODO:  Добавить пример. -->
-----


<span id="pub-lmsystem_settingsexternal_accesscertificates"></span>
=== PUB <code>lm/system_settings/external_access/certificates</code> ===
== PUB <code>lm/system_settings/external_access/certificates</code> ==
Публикует список всех x509 сертификатов.<br />Топик всегда содержит актуальный список.


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


<span id="payload-format-1"></span>
Payload format
=== Payload format ===
[
 
[
     {
     {
         name: str
         name: str
Строка 2026: Строка 1680:
         params: dict[str, Any]
         params: dict[str, Any]
     }
     }
]
]
* '''name''' - Имя сертификата.
* '''name''' - Имя сертификата.
* '''cert_type''' - Тип сертификата. Может принимать значения ‘csr’ или ‘certificate’
* '''cert_type''' - Тип сертификата. Может принимать значения ‘csr’ или ‘certificate’
* '''params''' - Словарь с параметрами сертификата. Набор параметров отличается в зависимости от [[#certificate-params-format|типа]] сертификата.
* '''params''' - Словарь с параметрами сертификата. Набор параметров отличается в зависимости от [[#certificate-params-format|типа]] сертификата.


<span id="example-1"></span>
=== Example ===


[
Example
[
     {
     {
         "cert_type": "certificate",
         "cert_type": "certificate",
Строка 2048: Строка 1701:
                         "-----END CERTIFICATE-----\n"}]
                         "-----END CERTIFICATE-----\n"}]
     }
     }
]
]


-----


<span id="pub-lmsystem_settingsexternal_accessweb_access_settings"></span>
=== PUB <code>lm/system_settings/external_access/web_access_settings</code> ===
== PUB <code>lm/system_settings/external_access/web_access_settings</code> ==
Публикует список настроек web доступа.<br />Топик всегда содержит актуальный список.


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


<span id="payload-format-2"></span>
Payload format
=== Payload format ===
{
 
{
     http_port: int
     http_port: int
     https_port: int
     https_port: int
Строка 2067: Строка 1715:
     is_http_redirected: bool
     is_http_redirected: bool
     cert_name: str
     cert_name: str
}
}
* '''http_port''' - Http порт. По умолчанию 80.
* '''http_port''' - Http порт. По умолчанию 80.
* '''https_port''' - Https порт. По умолчанию 443.
* '''https_port''' - Https порт. По умолчанию 443.
Строка 2074: Строка 1722:
* '''cert_name''' - Имя сертификата сервера.
* '''cert_name''' - Имя сертификата сервера.


<span id="example-2"></span>
=== Example ===


{
Example
{
     "http_port": 80,
     "http_port": 80,
     "https_port": 443,
     "https_port": 443,
Строка 2083: Строка 1730:
     "is_http_redirected": true,
     "is_http_redirected": true,
     "cert_name": ""
     "cert_name": ""
}
}
 
-----


<span id="sub-lmsystem_settingsexternal_accesschange_web_access_settings"></span>
== SUB <code>lm/system_settings/external_access/change_web_access_settings</code> ==


=== SUB <code>lm/system_settings/external_access/change_web_access_settings</code> ===
Меняет настройки web доступа.
Меняет настройки web доступа.


<span id="payload-format-3"></span>
=== Payload format ===


{
Payload format
{
     http_port: int
     http_port: int
     https_port: int
     https_port: int
Строка 2101: Строка 1744:
     is_http_redirected: bool
     is_http_redirected: bool
     cert_name: str
     cert_name: str
}
}
* '''http_port''' - Http порт. По умолчанию 80.
* '''http_port''' - Http порт. По умолчанию 80.
* '''https_port''' - Https порт. По умолчанию 443.
* '''https_port''' - Https порт. По умолчанию 443.
Строка 2108: Строка 1751:
* '''cert_name''' - Имя сертификата сервера.
* '''cert_name''' - Имя сертификата сервера.


<span id="example-3"></span>
=== Example ===


{
Example
{
     "http_port": 80,
     "http_port": 80,
     "https_port": 443,
     "https_port": 443,
Строка 2117: Строка 1759:
     "is_http_redirected": true,
     "is_http_redirected": true,
     "cert_name": ""
     "cert_name": ""
}
}


-----
<span id="sub-lmsystem_settingscertificatesupload_certificate"></span>
== SUB <code>lm/system_settings/certificates/upload_certificate</code> ==


=== SUB <code>lm/system_settings/certificates/upload_certificate</code> ===
Загружает сертификат и его ключ для дальнейшего использования в настройках доступа.
Загружает сертификат и его ключ для дальнейшего использования в настройках доступа.


<span id="payload-format-4"></span>
=== Payload format ===


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


 
=== SUB <code>lm/system_settings/certificates/upload_certificate_corresponding_csr</code> ===
-----
 
<span id="sub-lmsystem_settingscertificatesupload_certificate_corresponding_csr"></span>
== SUB <code>lm/system_settings/certificates/upload_certificate_corresponding_csr</code> ==
 
Загружает сертификат относящийся к сформированному ранее csr.
Загружает сертификат относящийся к сформированному ранее csr.


<span id="payload-format-5"></span>
=== Payload format ===


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




-----
<span id="sub-lmsystem_settingscertificatesdelete_certificate"></span>
== SUB <code>lm/system_settings/certificates/delete_certificate</code> ==


=== SUB <code>lm/system_settings/certificates/delete_certificate</code> ===
Удаляет сертификат и все связанные с ним файлы.
Удаляет сертификат и все связанные с ним файлы.


<span id="payload-format-6"></span>
=== Payload format ===


{
Payload format
{
     id: int
     id: int
     name: str
     name: str
Строка 2175: Строка 1803:
     public_bytes: str
     public_bytes: str
     params: dict[str, Any]
     params: dict[str, Any]
}
}
* '''id''' - (Опционально) Идентификатор сертификата.
* '''id''' - (Опционально) Идентификатор сертификата.
* '''name''' - Имя сертификата.
* '''name''' - Имя сертификата.
* '''cert_type''' - Тип сертификата. Может принимать значения ‘csr’ или ‘certificate’
* '''cert_type''' - Тип сертификата. Может принимать значения ‘csr’ или ‘certificate’
* '''public_bytes''' - Открытый ключ сертификата.
* '''public_bytes''' - Открытый ключ сертификата.
* '''params''' - Словарь с параметрами сертификата. Набор параметров отличается в зависимости от [[#certificate-params-format|типа]] сертификата.
* '''params''' - Словарь с параметрами сертификата. Набор параметров отличается в зависимости от [[#certificate-params-format|типа]] сертификата.<span id="example-4"></span>


<span id="example-4"></span>
=== Example ===


{
Example
{
     "cert_type": "certificate",
     "cert_type": "certificate",
     "name": "cert_name",
     "name": "cert_name",
Строка 2197: Строка 1824:
     "public_bytes": "-----BEGIN CERTIFICATE-----\n"
     "public_bytes": "-----BEGIN CERTIFICATE-----\n"
                     "-----END CERTIFICATE-----\n"}]
                     "-----END CERTIFICATE-----\n"}]
}


-----
<span id="sub-lmsystem_settingscertificatesgenerate_csr"></span>
== SUB <code>lm/system_settings/certificates/generate_csr</code> ==


=== SUB <code>lm/system_settings/certificates/generate_csr</code> ===
Генерирует Certificate Signing Request.
Генерирует Certificate Signing Request.


<span id="payload-format-7"></span>
=== Payload format ===


{
Payload format
{
     cert_name: str
     cert_name: str
     cert_type: str
     cert_type: str
Строка 2215: Строка 1837:
     subject: str
     subject: str
     san: str
     san: str
}
}
* '''cert_name''' - Имя сертификата.
* '''cert_name''' - Имя сертификата.
* '''cert_type''' - Тип сертификата. Может принимать значения ‘csr’ или ‘certificate’
* '''cert_type''' - Тип сертификата. Может принимать значения ‘csr’ или ‘certificate’
* '''key_size''' - Размер ключа в байтах. Принимает значения 2048 иои 4096.
* '''key_size''' - Размер ключа в байтах. Принимает значения 2048 иои 4096.
* '''subject''' - Строка в формате rfc4514.
* '''subject''' - Строка в формате rfc4514.
* '''san''' - Стока представляющее расширение SubjectAltName. Принимаются только ip адреса или dns имена идущие подряд через запятую без пробелов с префиксами <code>IP=</code> или <code>DNS=</code>.
* '''san''' - Стока представляющее расширение SubjectAltName. Принимаются только ip адреса или dns имена идущие подряд через запятую без пробелов с префиксами <code>IP=</code> или <code>DNS=</code>.<span id="example-5"></span>


<span id="example-5"></span>
=== Example ===


{
Example
{
     "cert_name": "ss_cert23",
     "cert_name": "ss_cert23",
     "cert_type": "certificate",
     "cert_type": "certificate",
Строка 2231: Строка 1852:
     "subject": "OU=test ou,CN=domain.com,O=test o,L=123,ST=st,C=UA",
     "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"
     "san": "IP=192.168.0.3,DNS=domain.com"
}
}
 
-----


<span id="sub-lmsystem_settingscertificatesgenerate_self_sign_certificate"></span>
== SUB <code>lm/system_settings/certificates/generate_self_sign_certificate</code> ==


=== SUB <code>lm/system_settings/certificates/generate_self_sign_certificate</code> ===
Генерирует самоподписанный сертификат.
Генерирует самоподписанный сертификат.


<span id="payload-format-8"></span>
=== Payload format ===


{
Payload format
{
     cert_name: str
     cert_name: str
     cert_type: str
     cert_type: str
Строка 2249: Строка 1866:
     subject: str
     subject: str
     san: str
     san: str
}
}
* '''cert_name''' - Имя сертификата.
* '''cert_name''' - Имя сертификата.
* '''cert_type''' - Тип сертификата. Может принимать значения ‘csr’ или ‘certificate’.
* '''cert_type''' - Тип сертификата. Может принимать значения ‘csr’ или ‘certificate’.
Строка 2256: Строка 1873:
* '''san''' - Стока представляющее расширение SubjectAltName. Принимаются только ip адреса или dns имена идущие подряд через запятую без пробелов с префиксами <code>IP=</code> или <code>DNS=</code>.
* '''san''' - Стока представляющее расширение SubjectAltName. Принимаются только ip адреса или dns имена идущие подряд через запятую без пробелов с префиксами <code>IP=</code> или <code>DNS=</code>.


<span id="example-6"></span>
=== Example ===


{
Example
{
     "cert_name": "ss_cert23",
     "cert_name": "ss_cert23",
     "cert_type": "certificate",
     "cert_type": "certificate",
Строка 2265: Строка 1881:
     "subject": "OU=test ou,CN=domain.com,O=test o,L=123,ST=st,C=UA",
     "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"
     "san": "IP=192.168.0.3,DNS=domain.com"
}
}


-----


<span id="pub-lmsystem_settingsnetworkinterfaceswiredeth0statistics-publmsystem_settingsnetworkinterfaceswiredeth1statistics"></span>
=== PUB <code>lm/system_settings/network/interfaces/wired/eth*/statistics</code> ===
== PUB <code>lm/system_settings/network/interfaces/wired/eth0/statistics`` ## PUB</code>lm/system_settings/network/interfaces/wired/eth1/statistics`` ==
<code>PUB lm/system_settings/network/interfaces/wired/eth0/statistics</code>
 
<code>PUB lm/system_settings/network/interfaces/wired/eth1/statistics</code>


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


<span id="payload-format-9"></span>
=== Payload format ===


{
Payload format
{
     status: str
     status: str
     ip_assign_method: Literal['manual', 'dhcp']
     ip_assign_method: Literal['manual', 'dhcp']
Строка 2286: Строка 1902:
     dns_servers: list[str]
     dns_servers: list[str]
     mac_address: str
     mac_address: str
}
}
* '''status''' - Статус интерфейса. Может быть <code>up</code> или <code>down</code>.
* '''status''' - Статус интерфейса. Может быть <code>up</code> или <code>down</code>.
* '''ip_assign_method''' - Способ назначения ip адреса. Может быть <code>manual</code> или <code>dhcp</code>.
* '''ip_assign_method''' - Способ назначения ip адреса. Может быть <code>manual</code> или <code>dhcp</code>.
Строка 2296: Строка 1912:
* '''mac_address''' - MAC адрес интерфейса.
* '''mac_address''' - MAC адрес интерфейса.


<span id="example-7"></span>
=== Example ===


{
Example
{
     "status": "up",
     "status": "up",
     "ip_assign_method": "manual",
     "ip_assign_method": "manual",
Строка 2308: Строка 1923:
     "dns_servers": ["8.8.8.8", "8.8.4.4"],
     "dns_servers": ["8.8.8.8", "8.8.4.4"],
     "mac_address": "e4:5f:01:a8:e0:6c"
     "mac_address": "e4:5f:01:a8:e0:6c"
}


-----
=== SUB <code>lm/system_settings/network/interfaces/wired/eth*/set_ip_credential</code> ===
 
SUB <code>lm/system_settings/network/interfaces/wired/eth0/set_ip_credential</code><span id="sub-lmsystem_settingsnetworkinterfaceswiredeth1set_ip_credential"></span>SUB <code>lm/system_settings/network/interfaces/wired/eth1/set_ip_credential</code>
<span id="sub-lmsystem_settingsnetworkinterfaceswiredeth0set_ip_credential"></span>
== SUB <code>lm/system_settings/network/interfaces/wired/eth0/set_ip_credential</code> ==
 
<span id="sub-lmsystem_settingsnetworkinterfaceswiredeth1set_ip_credential"></span>
== SUB <code>lm/system_settings/network/interfaces/wired/eth1/set_ip_credential</code> ==


Устанавливает ip адресацию и шлюз на интерфейс.
Устанавливает ip адресацию и шлюз на интерфейс.
Строка 2325: Строка 1936:


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


<span id="example-8"></span>
=== Example ===


{
Example
{
     "ip_assign_method": "manual",
     "ip_assign_method": "manual",
     "static_ip": "192.168.0.205",
     "static_ip": "192.168.0.205",
     "static_netmask": "255.255.255.0",
     "static_netmask": "255.255.255.0",
     "static_gateway": "192.168.0.1"
     "static_gateway": "192.168.0.1"
}
}
Динамическая адресация:
 


{
Динамическая адресация
{
     ip_assign_method: Literal['dhcp']
     ip_assign_method: Literal['dhcp']
}
}
* '''ip_assign_method''' - Способ назначения ip адреса. Должно быть <code>dhcp</code>.
* '''ip_assign_method''' - Способ назначения ip адреса. Должно быть <code>dhcp</code>.
 
<span id="example-9"></span>Example
<span id="example-9"></span>
{
=== Example ===
 
{
     "ip_assign_method": "dhcp"
     "ip_assign_method": "dhcp"
}
}


-----


<span id="sub-lmsystem_settingsnetworkinterfaceswiredeth0set_dns_credential"></span>
=== SUB <code>lm/system_settings/network/interfaces/wired/eth*/set_dns_credential</code> ===
== SUB <code>lm/system_settings/network/interfaces/wired/eth0/set_dns_credential</code> ==
SUB <code>lm/system_settings/network/interfaces/wired/eth0/set_dns_credential</code>


<span id="sub-lmsystem_settingsnetworkinterfaceswiredeth1set_dns_credential"></span>
SUB <code>lm/system_settings/network/interfaces/wired/eth1/set_dns_credential</code>
== SUB <code>lm/system_settings/network/interfaces/wired/eth1/set_dns_credential</code> ==


Назначение dns серверов на интерфейс.
Назначение dns серверов на интерфейс.
Строка 2372: Строка 1977:
Поддерживает статическое и динамическое (dhcp) назначение dns серверов.
Поддерживает статическое и динамическое (dhcp) назначение dns серверов.


<span id="payload-format-11"></span>
 
=== Payload format ===
Payload format


Статическое назначение:
Статическое назначение:
 
{
{
     dns_assign_method: Literal['manual']
     dns_assign_method: Literal['manual']
     static_dns_servers: list[str]
     static_dns_servers: list[str]
}
}
* '''dns_assign_method''' - Способ назначения dns серверов. Должно быть <code>manual</code>.
* '''dns_assign_method''' - Способ назначения dns серверов. Должно быть <code>manual</code>.
* '''static_dns_servers''' - Список DNS серверов.
* '''static_dns_servers''' - Список DNS серверов.<span id="example-10"></span>Example
 
{
<span id="example-10"></span>
=== Example ===
 
{
     "dns_assign_method": "manual",
     "dns_assign_method": "manual",
     "static_dns_servers": ["8.8.8.8", "8.8.4.4"]
     "static_dns_servers": ["8.8.8.8", "8.8.4.4"]
}
}
Динамическое назначение:
Динамическое назначение:
 
{
{
     dns_assign_method: Literal['dhcp']
     dns_assign_method: Literal['dhcp']
}
}
* '''dns_assign_method''' - Способ назначения dns серверов. Должно быть <code>dhcp</code>.
* '''dns_assign_method''' - Способ назначения dns серверов. Должно быть <code>dhcp</code>.


<span id="example-11"></span>
=== Example ===


{
Example
{
     "dns_assign_method": "dhcp"
     "dns_assign_method": "dhcp"
}
}


-----
<span id="pub-lmsystem_settingsnetworkinterfacesmodemstatistics"></span>
== PUB <code>lm/system_settings/network/interfaces/modem/statistics</code> ==


=== PUB <code>lm/system_settings/network/interfaces/modem/statistics</code> ===
Публикует информацию о модемном интерфейсе каждые 10 секунд.
Публикует информацию о модемном интерфейсе каждые 10 секунд.


<span id="payload-format-12"></span>
=== Payload format ===


{
Payload format
{
     ip_assign_method: Literal['manual', 'dhcp']
     ip_assign_method: Literal['manual', 'dhcp']
     ip: str
     ip: str
Строка 2434: Строка 2028:
         access_technologies: list[str]
         access_technologies: list[str]
     }
     }
}
}
* '''status''' - Статус интерфейса. Может быть <code>up</code> или <code>down</code>.
* '''status''' - Статус интерфейса. Может быть <code>up</code> или <code>down</code>.
* '''ip_assign_method''' - Способ назначения ip адреса. Может быть <code>manual</code> или <code>dhcp</code>.
* '''ip_assign_method''' - Способ назначения ip адреса. Может быть <code>manual</code> или <code>dhcp</code>.
Строка 2452: Строка 2046:
** '''access_technologies''': Список текущих режимов (LTE, UMTS и т.д.).
** '''access_technologies''': Список текущих режимов (LTE, UMTS и т.д.).


<span id="example-12"></span>
=== Example ===


{
Example
{
     "status": "up",
     "status": "up",
     "ip_assign_method": "manual",
     "ip_assign_method": "manual",
Строка 2475: Строка 2068:
         "access_technologies": ["LTE"]
         "access_technologies": ["LTE"]
     }
     }
}
}


-----


<span id="sub-lmsystem_settingsnetworkinterfacesmodemset_ip_credential"></span>
== SUB <code>lm/system_settings/network/interfaces/modem/set_ip_credential</code> ==


=== SUB <code>lm/system_settings/network/interfaces/modem/set_ip_credential</code> ===
Устанавливает ip адресацию и шлюз на интерфейс.
Устанавливает ip адресацию и шлюз на интерфейс.


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


<span id="payload-format-13"></span>
=== Payload format ===


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


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


{
 
Динамическая адресация
{
     ip_assign_method: Literal['dhcp']
     ip_assign_method: Literal['dhcp']
}
}
* '''ip_assign_method''' - Способ назначения ip адреса. Должно быть <code>dhcp</code>.
* '''ip_assign_method''' - Способ назначения ip адреса. Должно быть <code>dhcp</code>.
 
<span id="example-14"></span>Example
<span id="example-14"></span>
{
=== Example ===
 
{
     "ip_assign_method": "dhcp"
     "ip_assign_method": "dhcp"
}
}
 
-----


<span id="sub-lmsystem_settingsnetworkinterfacesmodemset_dns_credential"></span>
== SUB <code>lm/system_settings/network/interfaces/modem/set_dns_credential</code> ==


=== SUB <code>lm/system_settings/network/interfaces/modem/set_dns_credential</code> ===
Назначение dns серверов на интерфейс.
Назначение dns серверов на интерфейс.


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


<span id="payload-format-14"></span>
 
=== Payload format ===
Payload format


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


<span id="example-15"></span>
=== Example ===


{
Example
{
     "dns_assign_method": "manual",
     "dns_assign_method": "manual",
     "static_dns_servers": ["8.8.8.8", "8.8.4.4"]
     "static_dns_servers": ["8.8.8.8", "8.8.4.4"]
}
}
Динамическое назначение:
 


{
Динамическое назначение
{
     dns_assign_method: Literal['dhcp']
     dns_assign_method: Literal['dhcp']
}
}
* '''dns_assign_method''' - Способ назначения dns серверов. Должно быть <code>dhcp</code>.
* '''dns_assign_method''' - Способ назначения dns серверов. Должно быть <code>dhcp</code>.<span id="example-16"></span>


<span id="example-16"></span>
=== Example ===


{
Example
{
     "dns_assign_method": "dhcp"
     "dns_assign_method": "dhcp"
}
}
 
-----


<span id="sub-lmsystem_settingsnetworkinterfacesmodemset_apn_credential"></span>
== SUB <code>lm/system_settings/network/interfaces/modem/set_apn_credential</code> ==


=== SUB <code>lm/system_settings/network/interfaces/modem/set_apn_credential</code> ===
Назначение настроек apn на интерфейс.
Назначение настроек apn на интерфейс.


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


<span id="payload-format-15"></span>
 
=== Payload format ===
Payload format


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


<span id="example-17"></span>
=== Example ===


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


-----
<span id="pub-lmsystem_settingsdatetimertc_status"></span>
== PUB <code>lm/system_settings/datetime/rtc_status</code> ==


=== PUB <code>lm/system_settings/datetime/rtc_status</code> ===
Публикует статус rtc модуля
Публикует статус rtc модуля


<span id="payload-format-16"></span>
=== Payload format ===


Payload format
     {
     {
         is_active: bool
         is_active: bool
Строка 2614: Строка 2184:
* '''is_active''' - Активен ли rtc модуль.
* '''is_active''' - Активен ли rtc модуль.


<span id="example-18"></span>
=== Example ===


{
Example
{
     "is_active": true,
     "is_active": true,
}
}
 
-----


<span id="sub-lmsystem_settingsdatetime"></span>
== SUB <code>lm/system_settings/datetime</code> ==


=== SUB <code>lm/system_settings/datetime</code> ===
Принимает [[#base-format-for-command-payload|команды]] на изменение даты и времени конфигурации системы.
Принимает [[#base-format-for-command-payload|команды]] на изменение даты и времени конфигурации системы.


<span id="список-принимаемых-команд"></span>
== Список принимаемых команд ==


<span id="set-date"></span>
Список принимаемых команд
=== '''Set Date''' ===




-----
'''Set Date'''


Description: &gt; Set system date.
Description: &gt; Set system date.
Строка 2645: Строка 2208:
data: dict &gt; date: str - date in format ‘Y:M:D’
data: dict &gt; date: str - date in format ‘Y:M:D’


Example:<br />
Example:<br /><code>{'command': 'set_date', 'data': {'date': '1970:01:01'}}</code>
<code>{'command': 'set_date', 'data': {'date': '1970:01:01'}}</code>


<span id="set-time"></span>
=== '''Set Time''' ===


 
'''Set Time'''
-----


Description: &gt; Set system time.
Description: &gt; Set system time.
Строка 2662: Строка 2221:
data: dict &gt; time: str - time in format ‘HH:mm:ss’
data: dict &gt; time: str - time in format ‘HH:mm:ss’


Example:<br />
Example:<br /><code>{'command': 'set_time', 'data': {'time': '13:00:00'}}</code>
<code>{'command': 'set_time', 'data': {'time': '13:00:00'}}</code>


<span id="set-datetime"></span>
=== '''Set Datetime''' ===


 
'''Set Datetime'''
-----


Description: &gt; Set system date and time.
Description: &gt; Set system date and time.
Строка 2679: Строка 2234:
data: dict &gt; datetime: str - time in format ‘Y:M:D HH:mm:ss’
data: dict &gt; datetime: str - time in format ‘Y:M:D HH:mm:ss’


Example:<br />
Example:<br /><code>{'command': 'set_datetime', 'data': {'datetime': '1970:01:01 13:00:00'}}</code>
<code>{'command': 'set_datetime', 'data': {'datetime': '1970:01:01 13:00:00'}}</code>
 
<span id="change-ntp-status"></span>
=== '''Change Ntp Status''' ===




-----
'''Change Ntp Status'''


Description: &gt; Enable or disable ntp synchronization.
Description: &gt; Enable or disable ntp synchronization.
Строка 2696: Строка 2247:
data: dict &gt; ntp: bool - is ntp sync enable
data: dict &gt; ntp: bool - is ntp sync enable


Example:<br />
Example:<br /><code>{'command': 'change_ntp_status', 'data': {'ntp': True}}</code>
<code>{'command': 'change_ntp_status', 'data': {'ntp': True}}</code>
 
<span id="set-ntp-servers"></span>
=== '''Set Ntp Servers''' ===




-----
'''Set Ntp Servers'''


Description: &gt; Set ntp servers. &gt; Generate ntp config, replace it then restart systemd-timesyncd.service &gt; Accepts list of ip addresses or domain names
Description: &gt; Set ntp servers. &gt; Generate ntp config, replace it then restart systemd-timesyncd.service &gt; Accepts list of ip addresses or domain names
Строка 2713: Строка 2260:
data: dict &gt; ntp_servers: list[str] - list of servers ip addresses or dns names
data: dict &gt; ntp_servers: list[str] - list of servers ip addresses or dns names


Example:<br />
Example:<br /><code>{'command': 'set_ntp_servers', 'data': {'ntp_servers': ['192.168.0.2', 'ntp1.stratum2.com']}}</code>
<code>{'command': 'set_ntp_servers', 'data': {'ntp_servers': ['192.168.0.2', 'ntp1.stratum2.com']}}</code>
 
=== '''set_timezone''' ===




-----
'''Set timezone'''


Description: &gt; Set system timezone.
Description: &gt; Set system timezone.
Строка 2729: Строка 2273:
data: dict &gt; timezone: str - timezone name
data: dict &gt; timezone: str - timezone name


Example:<br />
Example:<br /><code>{'command': 'set_timezone', 'data': {'timezone': 'Europe/London'}}</code>
<code>{'command': 'set_timezone', 'data': {'timezone': 'Europe/London'}}</code>


<span id="base-format-for-command-payload"></span>
== Base format for command payload ==


{
Base format for command payload
{
     'command': str  
     'command': str  
     'data': dict[str, Any]
     'data': dict[str, Any]
}
}
* '''command''' - command name<br />
* '''command''' - command name


* '''data''' - any data for command
* '''data''' - any data for command
Строка 2747: Строка 2289:
<code>{'command': 'set_ip', 'data': {'ifname': 'eth0', 'ip': '192.168.0.1'}}</code>
<code>{'command': 'set_ip', 'data': {'ifname': 'eth0', 'ip': '192.168.0.1'}}</code>


=== SUB <code>lm/system_settings/power_control</code> ===
Управляет питанием устройства


-----


<span id="sub-lmsystem_settingspower_control"></span>
Payload format
== SUB <code>lm/system_settings/power_control</code> ==
{
 
Управляет питанием устройства
 
<span id="payload-format-17"></span>
=== Payload format ===
 
{
     command: str
     command: str
     delay: int
     delay: int
}
}
* '''command''' - Команда управления питанием. Может принимать значения “reboot” и “shutdown”.
* '''command''' - Команда управления питанием. Может принимать значения “reboot” и “shutdown”.
* '''delay''' - Задержка срабатывания команды в минутах.
* '''delay''' - Задержка срабатывания команды в минутах.


<span id="example-19"></span>
=== Example ===


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


-----


<span id="certificate-params-format"></span>
'''Certificate params format'''
== Certificate params format ==


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


<span id="x509-certificate-params-format"></span>
=== x509 certificate params format ===


{
x509 certificate params format
{
     subject: str
     subject: str
     san: str
     san: str
Строка 2789: Строка 2321:
     valid_from: float
     valid_from: float
     valid_to: float
     valid_to: float
}
}
 
* '''subject''' - Строка в формате rfc4514.
* '''subject''' - Строка в формате rfc4514.
* '''san''' - Стока представляющее расширение SubjectAltName. Принимаются только ip адреса или dns имена идущие подряд через запятую без пробелов с префиксами <code>IP=</code> или <code>DNS=</code>.
* '''san''' - Стока представляющее расширение SubjectAltName. Принимаются только ip адреса или dns имена идущие подряд через запятую без пробелов с префиксами <code>IP=</code> или <code>DNS=</code>.
Строка 2797: Строка 2328:
* '''valid_to''' - Дата по которую сертификат действителен. Формат Posix timestamp.
* '''valid_to''' - Дата по которую сертификат действителен. Формат Posix timestamp.


<span id="example-20"></span>
=== Example ===


{
Example
{
     "issuer": "OU=test ou,CN=domain.com,O=test o,L=123,ST=st,C=UA",
     "issuer": "OU=test ou,CN=domain.com,O=test o,L=123,ST=st,C=UA",
     "san": "IP=192.168.0.3",
     "san": "IP=192.168.0.3",
Строка 2806: Строка 2336:
     "valid_from": "1664440221.0",
     "valid_from": "1664440221.0",
     "valid_to": "1759048221.0"
     "valid_to": "1759048221.0"
}
}
<span id="x509-csr-params-format"></span>
 
=== x509 csr params format ===


{
'''x509 csr params format'''
{
     subject: str
     subject: str
     san: str
     san: str
}
}
 
* '''subject''' - Строка в формате rfc4514.
* '''subject''' - Строка в формате rfc4514.
* '''san''' - Стока представляющее расширение SubjectAltName. Принимаются только ip адреса или dns имена идущие подряд через запятую без пробелов с префиксами <code>IP=</code> или <code>DNS=</code>.
* '''san''' - Стока представляющее расширение SubjectAltName. Принимаются только ip адреса или dns имена идущие подряд через запятую без пробелов с префиксами <code>IP=</code> или <code>DNS=</code>.


<span id="example-21"></span>
=== Example ===


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




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


= 7 =
=== PUB <code>lm/di/port/*</code> ===
<span id="pub-lmdiport0-player-v1-only"></span>PUB <code>lm/di/port/0</code> (player V1 only)<span id="pub-lmdiport1"></span>PUB <code>lm/di/port/1</code><span id="pub-lmdiport2-player-v2-only"></span>PUB <code>lm/di/port/2</code> (player V2 only)<span id="pub-lmdiport3-player-v2-only"></span>PUB <code>lm/di/port/3</code> (player V2 only)


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


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




<span id="mqtt-api"></span>
Payload format
= Mqtt API =
int
Example
1
* '''int''' - Статус Di порта. 1 - активен, 0 - неактивен.


Описывает MQTT API сервиса.
<span id="pub-lmdoport0-player-v1-only"></span>


<span id="topics"></span>
=== PUB <code>lm/do/port/*</code> ===
= Topics =
PUB <code>lm/do/port/0</code> (player V1 only)


<span id="pub-lmdiport0-player-v1-only"></span>
PUB <code>lm/do/port/1</code><span id="pub-lmdoport2-player-v2-only"></span>PUB <code>lm/do/port/2</code> (player V2 only)<span id="pub-lmdoport3-player-v2-only"></span>PUB <code>lm/do/port/3</code> (player V2 only)
== PUB <code>lm/di/port/0</code> (player V1 only) ==


<span id="pub-lmdiport1"></span>
Публикует состояние do порта
== PUB <code>lm/di/port/1</code> ==


<span id="pub-lmdiport2-player-v2-only"></span>
* '''do_port_number''' - Номер do порта.
== PUB <code>lm/di/port/2</code> (player V2 only) ==


<span id="pub-lmdiport3-player-v2-only"></span>
== PUB <code>lm/di/port/3</code> (player V2 only) ==


Публикует состояние di порта
Payload format
int
Example
1
* '''int''' - Статус DO порта. 1 - активен, 0 - неактивен.


* '''di_port_number''' - Номер di порта.
=== SUB <code>lm/do/change_state</code> ===
Принимает команды для изменения состояния DO порта.


<span id="payload-format"></span>
=== Payload format ===


int
Payload command format
<span id="example"></span>
{
=== Example ===
 
1
* '''int''' - Статус Di порта. 1 - активен, 0 - неактивен.
 
 
-----
 
<span id="pub-lmdoport0-player-v1-only"></span>
== PUB <code>lm/do/port/0</code> (player V1 only) ==
 
<span id="pub-lmdoport1"></span>
== PUB <code>lm/do/port/1</code> ==
 
<span id="pub-lmdoport2-player-v2-only"></span>
== PUB <code>lm/do/port/2</code> (player V2 only) ==
 
<span id="pub-lmdoport3-player-v2-only"></span>
== PUB <code>lm/do/port/3</code> (player V2 only) ==
 
Публикует состояние do порта
 
* '''do_port_number''' - Номер do порта.
 
<span id="payload-format-1"></span>
=== Payload format ===
 
int
<span id="example-1"></span>
=== Example ===
 
1
* '''int''' - Статус DO порта. 1 - активен, 0 - неактивен.
 
 
-----
 
<span id="sub-lmdochange_state"></span>
== SUB <code>lm/do/change_state</code> ==
 
Принимает команды для изменения состояния DO порта.
 
<span id="payload-play-command-format"></span>
=== Payload play command format ===
 
{
     "port": int,
     "port": int,
     "state": int,
     "state": int,
}
}
<span id="example-2"></span>
Example
=== Example ===
 
   {
   {
     "port": 1,
     "port": 1,
Строка 2921: Строка 2407:




= 8 =


== 8. Управление RS485 интерфейсами плеера ==
<span id="pub-lmserialport_controllererror"></span>


=== PUB <code>lm/serialport_controller/error</code> ===
Публикует ошибки.


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


<span id="mqtt-api-для-сервиса-управления-внутренними-artnettodmx-конвертерами."></span>
= Mqtt API для сервиса управления внутренними ArtnetToDmx конвертерами. =


Описывает MQTT API сервиса.
Payload format<pre>{   
 
Сервис осуществляет управление внутренними ArtnetToDmx конвертерами.
 
<span id="topics"></span>
= Topics =
 
<span id="pub-lmserialport_controllererror"></span>
== PUB <code>lm/serialport_controller/error</code> ==
 
Публикует ошибки.
 
Выставляет заголовок '''Correlation data''' если он был установлен в запросе.
 
<span id="payload-format"></span>
=== Payload format ===
 
<pre>{   
     msg: str
     msg: str
     data: Any   
     data: Any   
Строка 2953: Строка 2424:
* '''data''' - contain related error data
* '''data''' - contain related error data


<span id="example"></span>
=== Example ===
<!-- TODO:  Добавить пример. -->
-----
<span id="pub-lmserialport_controllerports"></span>
== PUB <code>lm/serialport_controller/ports</code> ==


Публикует список rs485 портов.<br />
=== PUB <code>lm/serialport_controller/ports</code> ===
.
Публикует список rs485 портов.


<span id="payload-format-1"></span>
=== Payload format ===


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


<span id="example-1"></span>
=== Example ===


[
Example
[
     {
     {
         "name": "port1",
         "name": "port1",
Строка 2998: Строка 2458:
         "mode": "dmxOut",
         "mode": "dmxOut",
     }
     }
]
]
 
-----


<span id="sub-lmserialport_controllerportschange_mode"></span>
== SUB <code>lm/serialport_controller/ports/change_mode</code> ==


=== SUB <code>lm/serialport_controller/ports/change_mode</code> ===
Меняет предназначение порта.
Меняет предназначение порта.


<span id="payload-format-2"></span>
=== Payload format ===


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


<span id="example-2"></span>
=== Example ===


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






= 9 =




 
== 9. Управление светодиодами плеера ==
 
<span id="mqtt-api"></span>
= Mqtt API =
 
Описывает MQTT API сервиса.
 
<span id="topics"></span>
= Topics =
 
<span id="pub-lmledsstate"></span>
<span id="pub-lmledsstate"></span>
== PUB <code>'lm/leds/state'</code> ==


=== PUB <code>'lm/leds/state'</code> ===
Публикует состояние диодов rs485 портов
Публикует состояние диодов rs485 портов


<span id="payload-format"></span>
=== Payload format ===


{
Payload format
{
     Port1: {
     Port1: {
       green: bool,
       green: bool,
Строка 3066: Строка 2509:
       red: bool,
       red: bool,
     },
     },
}
}
<span id="example"></span>
=== Example ===


{
 
Example
{
     "Port1": {
     "Port1": {
       "green": true,
       "green": true,
Строка 3087: Строка 2530:
       "red": true,
       "red": true,
     },
     },
}
}
* '''green''' - Статус зеленого светодиода.
* '''green''' - Статус зеленого светодиода.
* '''red''' - Статус красного светодиода.
* '''red''' - Статус красного светодиода.


 
=== SUB <code>lm/leds/change_state</code> ===
-----
 
<span id="sub-lmledschange_state"></span>
== SUB <code>lm/leds/change_state</code> ==
 
Принимает команды для изменения состояния диодов у rs485 порта.
Принимает команды для изменения состояния диодов у rs485 порта.


<span id="payload-play-command-format"></span>
=== Payload play command format ===


{
Payload command format
{
     pub port: Literal['Port1', 'Port2', 'Port3', 'Port4'],
     pub port: Literal['Port1', 'Port2', 'Port3', 'Port4'],
     green: bool,
     green: bool,
     red: bool,
     red: bool,
}
}
<span id="example-1"></span>
=== Example ===


Example
   {
   {
     "port": "Port1",
     "port": "Port1",
Строка 3119: Строка 2556:
* '''red''' - Статус красного светодиода.
* '''red''' - Статус красного светодиода.


 
=== SUB <code>lm/leds/blink</code> ===
-----
 
<span id="sub-lmledsblink"></span>
== SUB <code>lm/leds/blink</code> ==
 
Принимает команды для мигания всех светодиодов на всех rs485 портах.
Принимает команды для мигания всех светодиодов на всех rs485 портах.


<span id="payload-format-1"></span>
=== Payload format ===


{
Payload format
{
     times: int,
     times: int,
     interval: int,
     interval: int,
}
}
<span id="example-2"></span>
Example
=== Example ===
{
 
{
     "times": 5,
     "times": 5,
     "interval": 1000
     "interval": 1000
}
}
* '''times''' - Количество миганий (от 1 до 255).
* '''times''' - Количество миганий (от 1 до 255).
* '''interval''' - Интервал между миганиями в миллисекундах.
* '''interval''' - Интервал между миганиями в миллисекундах.




 
== 10. Обновление программного обеспечения плеера ==
 
= 10 =
 
 
 
<span id="mqtt-api-for-system-settings-module"></span>
= Mqtt API for system settings module =
 
Описывает MQTT API для сервиса update.
 
* ☐ Добавить описание ошибок.
 
<span id="topics"></span>
= Topics =
 
<span id="pub-lmupdate_serviceversionversion_list"></span>
<span id="pub-lmupdate_serviceversionversion_list"></span>
== PUB <code>lm/update_service/version/version_list</code> ==


=== PUB <code>lm/update_service/version/version_list</code> ===
Публикует список версий всех модулей. Топик всегда содержит актуальный список.
Публикует список версий всех модулей. Топик всегда содержит актуальный список.


<span id="payload-format"></span>
=== Payload format ===


<pre>[
Payload format<pre>[
     {
     {
         id: int
         id: int
Строка 3184: Строка 2596:
* '''description''' - (Optional) description
* '''description''' - (Optional) description


<span id="example"></span>
=== Example ===


[
Example
[
     {
     {
         "id": 1,
         "id": 1,
Строка 3195: Строка 2606:
         "description": null
         "description": null
     }
     }
]
]
 
-----


<span id="pub-lmupdate_serviceupdateupdate_list"></span>
== PUB <code>lm/update_service/update/update_list'</code> ==


=== PUB <code>lm/update_service/update/update_list'</code> ===
Публикует список обновлений. Топик всегда содержит актуальный список.
Публикует список обновлений. Топик всегда содержит актуальный список.


<span id="payload-format-1"></span>
=== Payload format ===


<pre>[
Payload format<pre>[
     {
     {
         id: int
         id: int
Строка 3228: Строка 2634:
* '''description''' - (Optional) description.
* '''description''' - (Optional) description.


<span id="example-1"></span>
=== Example ===


[
Example
[
     {
     {
         "id": 1,
         "id": 1,
Строка 3242: Строка 2647:
         "description": "A error occurred during installation update. Installation filed. None"
         "description": "A error occurred during installation update. Installation filed. None"
     }
     }
]
]


-----
<span id="sub-lmupdate_serviceupdateadd_update"></span>
== SUB <code>lm/update_service/update/add_update</code> ==


=== SUB <code>lm/update_service/update/add_update</code> ===
Добавляет обновление в базу.
Добавляет обновление в базу.


<span id="payload-format-2"></span>
=== Payload format ===


<pre>{
Payload format<pre>{
     file: str
     file: str
}</pre>
}</pre>
* '''file: str''' - путь до файла обновления
* '''file: str''' - путь до файла обновления
<span id="example-2"></span>Example
{&quot;file&quot;: &quot;/home/lightmaster/projects/wess-group/lightmaster/updater/lmp_2022.update&quot;}


<span id="example-2"></span>
=== SUB <code>lm/update_service/update/check_update</code> ===
=== Example ===
 
<blockquote><code>{&quot;file&quot;: &quot;/home/lightmaster/projects/wess-group/lightmaster/updater/lmp_2022.update&quot;}</code>
</blockquote>
 
-----
 
<span id="sub-lmupdate_serviceupdatecheck_update"></span>
== SUB <code>lm/update_service/update/check_update</code> ==
 
Проверяет совместимость обновления.
Проверяет совместимость обновления.


<span id="payload-format-3"></span>
=== Payload format ===


<pre>{
Payload format<pre>{
     id: int
     id: int
}</pre>
}</pre>
* '''id''' - id обновления
* '''id''' - id обновления


<span id="example-3"></span>
=== Example ===
<blockquote><code>{'id': 5}</code>
</blockquote>
-----


Example
{'id': 5}
<span id="sub-lmupdate_serviceupdateinitial_update"></span>
<span id="sub-lmupdate_serviceupdateinitial_update"></span>
== SUB <code>lm/update_service/update/initial_update</code> ==


=== SUB <code>lm/update_service/update/initial_update</code> ===
Совмещает добавление обновления в базу и его проверку.
Совмещает добавление обновления в базу и его проверку.


<span id="payload-format-4"></span>
=== Payload format ===


<pre>{
Payload format<pre>{
     file: str
     file: str
}</pre>
}</pre>
* '''file: str''' - путь до файла обновления
* '''file: str''' - путь до файла обновления


<span id="example-4"></span>
=== Example ===


<blockquote><code>{&quot;file&quot;: &quot;/home/lightmaster/projects/wess-group/lightmaster/updater/lmp_2022.update&quot;}</code>
Example
</blockquote>
{&quot;file&quot;: &quot;/home/lightmaster/projects/wess-group/lightmaster/updater/lmp_2022.update&quot;}
 
-----


<span id="sub-lmupdate_serviceupdateinstall_update"></span>
== SUB <code>lm/update_service/update/install_update</code> ==


=== SUB <code>lm/update_service/update/install_update</code> ===
Устанавливает обновление
Устанавливает обновление


<span id="payload-format-5"></span>
=== Payload format ===


<pre>{
Payload format<pre>{
     id: int
     id: int
}</pre>
}</pre>
* '''id''' - id обновления
* '''id''' - id обновления


<span id="example-5"></span>
=== Example ===


<blockquote><code>{'id': 5}</code>
Example
</blockquote>
{'id': 5}
 
-----


<span id="sub-lmupdate_serviceupdaterestore_update"></span>
== SUB <code>lm/update_service/update/restore_update</code> ==


=== SUB <code>lm/update_service/update/restore_update</code> ===
Откатывает обновление на предыдущую версию.
Откатывает обновление на предыдущую версию.


<span id="payload-format-6"></span>
=== Payload format ===


<pre>{
Payload format<pre>{
     id: int
     id: int
}</pre>
}</pre>
* '''id''' - id обновления
* '''id''' - id обновления


<span id="example-6"></span>
=== Example ===


<blockquote><code>{'id': 5}</code>
Example
</blockquote>
{'id': 5}


-----
<span id="sub-lmupdate_serviceupdatedelete_update"></span>
== SUB <code>lm/update_service/update/delete_update</code> ==


=== SUB <code>lm/update_service/update/delete_update</code> ===
Удаляет обновление и все связанные с ним файлы.
Удаляет обновление и все связанные с ним файлы.


<span id="payload-format-7"></span>
=== Payload format ===


<pre>{
Payload format<pre>{
     id: int
     id: int
}</pre>
}</pre>
* '''id''' - id обновления
* '''id''' - id обновления


<span id="example-7"></span>
=== Example ===


<blockquote><code>{'id': 5}</code>
Example
</blockquote>
{'id': 5}


-----


<span id="sub-lmupdate_serviceversionget_versions_list"></span>
=== SUB <code>lm/update_service/version/get_versions_list</code> ===
== SUB <code>lm/update_service/version/get_versions_list</code> ==
Запрос на публикацию списка версий всех модулей.<br />


Запрос на публикацию списка версий всех модулей.<br />
Публикация происходит в топик <code>lm/update_service/version/get_versions_list/response</code>
Публикация происходит в топик <code>lm/update_service/version/get_versions_list/response</code>


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


<span id="payload-format-8"></span>
=== Payload format ===
'''None'''
-----
<span id="pub-lmupdate_serviceversionget_versions_listresponse"></span>
== PUB <code>lm/update_service/version/get_versions_list/response</code> ==


=== PUB <code>lm/update_service/version/get_versions_list/response</code> ===
Публикует ответ на запрос из топика <code>lm/update_service/version/get_versions_list</code>.
Публикует ответ на запрос из топика <code>lm/update_service/version/get_versions_list</code>.


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


<span id="payload-format-9"></span>
=== Payload format ===


<pre>[
Payload format<pre>[
     {
     {
         id: int
         id: int
Строка 3420: Строка 2767:
* '''description''' - (Optional) description
* '''description''' - (Optional) description


<span id="example-8"></span>
=== Example ===


[
Example
[
     {
     {
         "id": 1,
         "id": 1,
Строка 3431: Строка 2777:
         "description": null
         "description": null
     }
     }
]
]
 
-----


<span id="sub-lmupdate_serviceversionget_module_version"></span>
== SUB <code>lm/update_service/version/get_module_version</code> ==


=== SUB <code>lm/update_service/version/get_module_version</code> ===
Публикует версию конкретного модуля.
Публикует версию конкретного модуля.


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


<span id="payload-format-10"></span>
=== Payload format ===


<pre>{
Payload format<pre>{
     module: str
     module: str
}</pre>
}</pre>
* '''module''' - название модуля
* '''module''' - название модуля


<span id="example-9"></span>
=== Example ===


<blockquote><code>{'module': 'update_service'}</code>
Example
</blockquote>
{'module': 'update_service'}


-----
<span id="pub-lmupdate_serviceversionget_module_versionresponse"></span>
== PUB <code>lm/update_service/version/get_module_version/response</code> ==


=== PUB <code>lm/update_service/version/get_module_version/response</code> ===
Публикует ответ на запрос из топика <code>lm/update_service/version/get_module_version</code>.
Публикует ответ на запрос из топика <code>lm/update_service/version/get_module_version</code>.


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


<span id="payload-format-11"></span>
=== Payload format ===


<pre>{
Payload format<pre>{
     id: int
     id: int
     version: str
     version: str
Строка 3490: Строка 2824:
* '''description''' - (Optional) description
* '''description''' - (Optional) description


<span id="example-10"></span>
=== Example ===


{
Example
{
     "id": 1,
     "id": 1,
     "version": "20",
     "version": "20",
Строка 3499: Строка 2832:
     "module": "frontend",
     "module": "frontend",
     "description": null
     "description": null
}
}
 
-----


<span id="sub-lmupdate_serviceupdateget_updates_list"></span>
== SUB <code>lm/update_service/update/get_updates_list</code> ==


=== SUB <code>lm/update_service/update/get_updates_list</code> ===
Запрос на публикацию списка всех обновлений добавленных в базу.
Запрос на публикацию списка всех обновлений добавленных в базу.


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


<span id="payload-format-12"></span>
=== Payload format ===


'''None'''
=== PUB <code>lm/update_service/update/get_updates_list/response</code> ===
Публикует ответ на запрос из топика <code>lm/update_service/update/get_updates_list</code>.
 
Выставляет заголовок '''Correlation data''' если он был установлен в запросе.
 
 
Payload format<pre>[
    {
        id: int
        version: str
        status: str
        filename: Optional[str]
        update_path: str
        extracted_path: Optional[str]
        backup_path: Optional[str]
        description: Optional[str]
    }
]</pre>
* '''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
 
[
<span id="pub-lmupdate_serviceupdateget_updates_listresponse"></span>
== PUB <code>lm/update_service/update/get_updates_list/response</code> ==
 
Публикует ответ на запрос из топика <code>lm/update_service/update/get_updates_list</code>.
 
Выставляет заголовок '''Correlation data''' если он был установлен в запросе.
 
<span id="payload-format-13"></span>
=== Payload format ===
 
<pre>[
    {
        id: int
        version: str
        status: str
        filename: Optional[str]
        update_path: str
        extracted_path: Optional[str]
        backup_path: Optional[str]
        description: Optional[str]
    }
]</pre>
* '''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.
 
<span id="example-11"></span>
=== Example ===
 
[
     {
     {
         "id": 1,
         "id": 1,
Строка 3572: Строка 2890:
         "description": "A error occurred during installation update. Installation filed. None"
         "description": "A error occurred during installation update. Installation filed. None"
     }
     }
]
]
 
-----


<span id="pub-lmupdate_serviceerror"></span>
== PUB <code>lm/update_service/error</code> ==


=== PUB <code>lm/update_service/error</code> ===
Публикует ошибки.
Публикует ошибки.


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


<span id="payload-format-14"></span>
=== Payload format ===


<pre>{   
Payload format<pre>{   
     msg: str
     msg: str
     data: Any   
     data: Any   
Строка 3592: Строка 2905:
* '''msg''' - contain error message
* '''msg''' - contain error message
* '''data''' - contain related error data
* '''data''' - contain related error data
<span id="example-12"></span>
=== Example ===
-----

Текущая версия от 04:08, 9 июня 2025

1. Управление проигрыванием и получение статистики

Описывает MQTT API сервиса.

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


SUB lm/player

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

Play

Payload command format

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

Example

 {
   "cmd": "play",
   "what_playing": "playlist",
   "entity": 19,
   "count": Null,
   "priority": 4,
 }
  • cmd - Название команды.
  • what_playing - Тип сущности для воспроизведения. Принимает два значения “playlist” и “cue”.
  • entity - ID или наименование проигрываемой сущности.
  • count - Опциональный параметр. Количество повторений проигрывания. Если не задан или значение равно Null то проигрывание продолжится до получения следующей команды с равным или боле высоким приоритетом.
  • priority - Приоритет команды. Значение от 1 до 100. Чем больше значение - тем выше приоритет. Команда с более низким приоритетом не может отменять команду с более высоким приоритетом. Текущие сопоставления приоритетов: Расписание - 60, Триггер - 50, Ручной запуск - 40.

Stop

Payload stop command format

{
   "cmd": 'stop',
   "priority": int,
}

Example

 {
   "cmd": "stop",
   "priority": 4,
 }
  • cmd - Название команды.
  • priority - Приоритет команды. Значение от 1 до 100. Чем больше значение - тем выше приоритет. Команда с более низким приоритетом не может отменять команду с более высоким приоритетом. Текущие сопоставления приоритетов: Расписание - 60, Триггер - 50, Ручной запуск - 40.


PUB lm/statistic/playing_progress_info

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

Зная текущее значение fps можно перевести значения во время.

Например при fps равном 40 frame_count равном 1000 и frame_number равном 120 мы получим:
1 / 40 * 1000 = 25 - Общая продолжительность анимации в секундах. 1 / 40 * 120 = 3 - На текущий момент анимация проиграла 3 секунды.


Payload format

Представляет из себя строку в формате "{frame_count}, {frame_number}"

Example

“1000, 35”
  • frame_count - Общее количество фреймов.
  • frame_number - Сколько фреймов проиграно на текущий момент.


PUB lm/statistic/playing_ent_info

Публикует Наименования того, что сейчас проигрывается.


Payload format

{
   "playlist": Optional[str],
   'scene': Optional[int],
   'cue': Optional[str],
}

Example

{
   "playlist": "NewYearPlaylist",
   "scene": 1,
   "cue": "BLUE.cue",
}
  • playlist - Наименование проигрываемого плейлиста. Может быть None.
  • scene - Порядковый номер в плейлисте. Может быть None.
  • cue - Наименование проигрываемой анимации. Может быть None.


PUB lm/statistic/current_playing_priority

Публикует текущий приоритет проигрывания.


Payload format

int

Example

60



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

PUB lm/settings/location/coordinates

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

Payload command format

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

Example

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


PUB lm/settings/location/address

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


Payload format

{
 "address": str
}

Example

{
"address": "Yekaterinburg"
}


PUB lm/settings/datetime/timezone

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


Payload format

{
 "timezone": str
}

Example

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


PUB lm/settings/player/fps

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


Payload format

{
 "fps": int,
}

Example

{
"fps": 40
}


PUB lm/settings/player/artsync

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


Payload format

{
 "artsync": bool,
}

Example

{"artsync": false}


PUB lm/settings/player/blackout_between_playing_command

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


Payload format

{
 "blackout_between_playing_command": bool,
}

Example

{
"blackout_between_playing_command": false
}


PUB lm/settings/player/playing_priority

Публикует приоритеты проигрывания плеера.


Payload command format

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

Example

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

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


PUB lm/settings/player/universes

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


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/cues

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


Payload format

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

Example

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


PUB lm/playlists

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


Payload format

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

Example

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


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

PUB lm/scheduler/error

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

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


Payload format

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


PUB lm/scheduler/events

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


Payload format

[
 {
   "id": str,
   "title": str,
   "priority": int,
   "actions": {
     "player": Optional[{
       "cmd": Literal['play'],
       "entity_type": Union['playlist', 'cue'],
       "entity_id": int,
     }],
     "do1": Optional[{
       "state": Literal[0, 1],
     }],
     "do2": Optional[{
       "state": Literal[0, 1],
     }],
     "do3": Optional[{
       "state": Literal[0, 1],
     }],
   },
   "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', 'February', 'March', 'April', 'May', 'June', 'July',
                 'August', 'September', 'October', 'November', '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": {
       "cmd": "play",
       "entity_type": "playlist",
       "entity_id": 19
     },
     "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 - Действие для плеера. Содержит команду воспроизведения.
  • cmd - Команда для плеера. Всегда равна ‘play’.
  • entity_type - Тип сущности для воспроизведения. Может принимать значения ‘playlist’, ‘cue’.
  • entity_id - Уникальный идентификатор сущности для воспроизведения.
  • do1 - Действие для цифрового выхода DO1.
  • do2 - Действие для цифрового выхода DO2.
  • do3 - Действие для цифрового выхода DO3.
  • state - Состояние цифрового выхода. Может принимать значения 0 (выключен) или 1 (включен).
  • rrule - Правила повторения события (recurrence rule).
  • freq - Частота повторений события. Может принимать значения: ‘YEARLY’, ‘MONTHLY’, ‘WEEKLY’, ‘DAILY’, ‘HOURLY’.
  • interval - Периодичность повторения события.
  • start_date - Дата старта события. Формат YYYY-mm-dd.
  • start_time_type - Тип времени старта события. Может принимать значения: ‘sunset’, ‘sunrise’, ‘time’.
  • start_time - Время старта события. Формат: %H:%M. Заполнено если start_time_type равен ‘time’.
  • start_time_offset - Сдвиг времени старта события. Может принимать отрицательные значения. Заполнено если start_time_type равен ‘sunset’ или ‘sunrise’.
  • count - Количество повторений события. Не может быть заполнен одновременно с полем until_date. Если оба поля не заполнены то событие не никогда не завершается.
  • until_date - Дата завершения события. Формат YYYY-mm-dd. Не может быть заполнен одновременно с полем count. Если оба поля не заполнены то событие не никогда не завершается.
  • until_time_type - Тип времени завершения события. Может принимать значения: ‘sunset’, ‘sunrise’, ‘time’. Заполнено если заполнено поле until_date.
  • until_time - Время завершения события. Формат: %H:%M. Заполнено если заполнено поле until_date и until_time_type равен ‘time’.
  • until_time_offset - Сдвиг времени завершения события. Заполнено если заполнено поле until_date и until_time_type равен ‘sunset’ или ‘sunrise’.
  • from_time_type - Тип времени начала события. Может принимать значения: ‘sunset’, ‘sunrise’, ‘time’. Заполнено если поле freq не равно ‘HOURLY’.
  • from_time - Время начала события. Формат: %H:%M. Заполнено если поле freq не равно ‘HOURLY’ и from_time_type равен ‘time’.
  • from_time_offset - Сдвиг времени начала события. Может принимать отрицательные значения. Заполнено если поле freq не равно ‘HOURLY’ и from_time_type равен ‘sunset’ или ‘sunrise’.
  • to_time_type - Тип времени окончания события. Может принимать значения: ‘sunset’, ‘sunrise’, ‘time’. Заполнено если поле freq не равно ‘HOURLY’.
  • to_time - Время окончания события. Формат: %H:%M. Заполнено если заполнено поле freq не равно ‘HOURLY’ и to_time_type равен ‘time’.
  • to_time_offset - Сдвиг времени завершения события. Заполнено если заполнено поле freq не равно ‘HOURLY’ и to_time_type равен ‘sunset’ или ‘sunrise’.
  • bymonth - Месяцы в которые событие активно. Заполнено если поле freq равно ‘YEARLY’.
  • bymonthday - Дни месяца в которые событие активно. Заполнено если поле freq равно ‘MONTHLY’.
  • byweekday - Дни недели в которые событие активно. Заполнено если поле freq равно ‘WEEKLY’.
  • from_min - Минута с которой начинается событие. Заполнено если поле freq равно ‘HOURLY’.
  • to_min - Минута окончания события. Заполнено если поле freq равно ‘HOURLY’.


SUB lm/scheduler/events/add

Добавляет новое событие.

Payload format

{
   "title": str,
   "priority": int,
   "actions": {
     "player": Optional[{
       "cmd": Literal['play'],
       "entity_type": Union['playlist', 'cue'],
       "entity_id": int,
     }],
     "do1": Optional[{
       "state": Literal[0, 1],
     }],
     "do2": Optional[{
       "state": Literal[0, 1],
     }],
     "do3": Optional[{
       "state": Literal[0, 1],
     }],
   },
   "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', 'February', 'March', 'April', 'May', 'June', 'July',
                 'August', 'September', 'October', 'November', '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

{
 "title": "holiday",
 "priority": 1,
 "actions": {
   "player": {
     "cmd": "play",
     "entity_type": "playlist",
     "entity_id": 19
   },
   "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
 }
}
  • title - Название события.
  • priority - Приоритет события. Чем выше значение тем выше приоритет.
  • actions - Действия которые должны быть выполнены при наступлении события.
  • player - Действие для плеера. Содержит команду воспроизведения.
  • cmd - Команда для плеера. Всегда равна ‘play’.
  • entity_type - Тип сущности для воспроизведения. Может принимать значения ‘playlist’, ‘cue’.
  • entity_id - Уникальный идентификатор сущности для воспроизведения.
  • do1 - Действие для цифрового выхода DO1.
  • do2 - Действие для цифрового выхода DO2.
  • do3 - Действие для цифрового выхода DO3.
  • state - Состояние цифрового выхода. Может принимать значения 0 (выключен) или 1 (включен).
  • rrule - Правила повторения события (recurrence rule).
  • freq - Частота повторений события. Может принимать значения: ‘YEARLY’, ‘MONTHLY’, ‘WEEKLY’, ‘DAILY’, ‘HOURLY’.
  • interval - Периодичность повторения события.
  • start_date - Дата старта события. Формат YYYY-mm-dd.
  • start_time_type - Тип времени старта события. Может принимать значения: ‘sunset’, ‘sunrise’, ‘time’.
  • start_time - Время старта события. Формат: %H:%M. Заполнено если start_time_type равен ‘time’.
  • start_time_offset - Сдвиг времени старта события. Может принимать отрицательные значения. Заполнено если start_time_type равен ‘sunset’ или ‘sunrise’.
  • count - Количество повторений события. Не может быть заполнен одновременно с полем until_date. Если оба поля не заполнены то событие не никогда не завершается.
  • until_date - Дата завершения события. Формат YYYY-mm-dd. Не может быть заполнен одновременно с полем count. Если оба поля не заполнены то событие не никогда не завершается.
  • until_time_type - Тип времени завершения события. Может принимать значения: ‘sunset’, ‘sunrise’, ‘time’. Заполнено если заполнено поле until_date.
  • until_time - Время завершения события. Формат: %H:%M. Заполнено если заполнено поле until_date и until_time_type равен ‘time’.
  • until_time_offset - Сдвиг времени завершения события. Заполнено если заполнено поле until_date и until_time_type равен ‘sunset’ или ‘sunrise’.
  • from_time_type - Тип времени начала события. Может принимать значения: ‘sunset’, ‘sunrise’, ‘time’. Заполнено если поле freq не равно ‘HOURLY’.
  • from_time - Время начала события. Формат: %H:%M. Заполнено если поле freq не равно ‘HOURLY’ и from_time_type равен ‘time’.
  • from_time_offset - Сдвиг времени начала события. Может принимать отрицательные значения. Заполнено если поле freq не равно ‘HOURLY’ и from_time_type равен ‘sunset’ или ‘sunrise’.
  • to_time_type - Тип времени окончания события. Может принимать значения: ‘sunset’, ‘sunrise’, ‘time’. Заполнено если поле freq не равно ‘HOURLY’.
  • to_time - Время окончания события. Формат: %H:%M. Заполнено если заполнено поле freq не равно ‘HOURLY’ и to_time_type равен ‘time’.
  • to_time_offset - Сдвиг времени завершения события. Заполнено если заполнено поле freq не равно ‘HOURLY’ и to_time_type равен ‘sunset’ или ‘sunrise’.
  • bymonth - Месяцы в которые событие активно. Заполнено если поле freq равно ‘YEARLY’.
  • bymonthday - Дни месяца в которые событие активно. Заполнено если поле freq равно ‘MONTHLY’.
  • byweekday - Дни недели в которые событие активно. Заполнено если поле freq равно ‘WEEKLY’.
  • from_min - Минута с которой начинается событие. Заполнено если поле freq равно ‘HOURLY’.
  • to_min - Минута окончания события. Заполнено если поле freq равно ‘HOURLY’.


SUB lm/scheduler/events/delete

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

Payload format

{
   id: str
}

Example

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


SUB lm/scheduler/events/update

Обновляет параметры события.

Payload format

{  
 "id": str,
   "title": str,
   "priority": int,
   "actions": {
     "player": Optional[{
       "cmd": Literal['play'],
       "entity_type": Union['playlist', 'cue'],
       "entity_id": int,
     }],
     "do1": Optional[{
       "state": Literal[0, 1],
     }],
     "do2": Optional[{
       "state": Literal[0, 1],
     }],
     "do3": Optional[{
       "state": Literal[0, 1],
     }],
   },
   "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', 'February', 'March', 'April', 'May', 'June', 'July',
                 'August', 'September', 'October', 'November', '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": {
     "cmd": "play",
     "entity_type": "playlist",
     "entity_id": 19
   },
   "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 - Действие для плеера. Содержит команду воспроизведения.
  • cmd - Команда для плеера. Всегда равна ‘play’.
  • entity_type - Тип сущности для воспроизведения. Может принимать значения ‘playlist’, ‘cue’.
  • entity_id - Уникальный идентификатор сущности для воспроизведения.
  • do1 - Действие для цифрового выхода DO1.
  • do2 - Действие для цифрового выхода DO2.
  • do3 - Действие для цифрового выхода DO3.
  • state - Состояние цифрового выхода. Может принимать значения 0 (выключен) или 1 (включен).
  • rrule - Правила повторения события (recurrence rule).
  • freq - Частота повторений события. Может принимать значения: ‘YEARLY’, ‘MONTHLY’, ‘WEEKLY’, ‘DAILY’, ‘HOURLY’.
  • interval - Периодичность повторения события.
  • start_date - Дата старта события. Формат YYYY-mm-dd.
  • start_time_type - Тип времени старта события. Может принимать значения: ‘sunset’, ‘sunrise’, ‘time’.
  • start_time - Время старта события. Формат: %H:%M. Заполнено если start_time_type равен ‘time’.
  • start_time_offset - Сдвиг времени старта события. Может принимать отрицательные значения. Заполнено если start_time_type равен ‘sunset’ или ‘sunrise’.
  • count - Количество повторений события. Не может быть заполнен одновременно с полем until_date. Если оба поля не заполнены то событие не никогда не завершается.
  • until_date - Дата завершения события. Формат YYYY-mm-dd. Не может быть заполнен одновременно с полем count. Если оба поля не заполнены то событие не никогда не завершается.
  • until_time_type - Тип времени завершения события. Может принимать значения: ‘sunset’, ‘sunrise’, ‘time’. Заполнено если заполнено поле until_date.
  • until_time - Время завершения события. Формат: %H:%M. Заполнено если заполнено поле until_date и until_time_type равен ‘time’.
  • until_time_offset - Сдвиг времени завершения события. Заполнено если заполнено поле until_date и until_time_type равен ‘sunset’ или ‘sunrise’.
  • from_time_type - Тип времени начала события. Может принимать значения: ‘sunset’, ‘sunrise’, ‘time’. Заполнено если поле freq не равно ‘HOURLY’.
  • from_time - Время начала события. Формат: %H:%M. Заполнено если поле freq не равно ‘HOURLY’ и from_time_type равен ‘time’.
  • from_time_offset - Сдвиг времени начала события. Может принимать отрицательные значения. Заполнено если поле freq не равно ‘HOURLY’ и from_time_type равен ‘sunset’ или ‘sunrise’.
  • to_time_type - Тип времени окончания события. Может принимать значения: ‘sunset’, ‘sunrise’, ‘time’. Заполнено если поле freq не равно ‘HOURLY’.
  • to_time - Время окончания события. Формат: %H:%M. Заполнено если заполнено поле freq не равно ‘HOURLY’ и to_time_type равен ‘time’.
  • to_time_offset - Сдвиг времени завершения события. Заполнено если заполнено поле freq не равно ‘HOURLY’ и to_time_type равен ‘sunset’ или ‘sunrise’.
  • bymonth - Месяцы в которые событие активно. Заполнено если поле freq равно ‘YEARLY’.
  • bymonthday - Дни месяца в которые событие активно. Заполнено если поле freq равно ‘MONTHLY’.
  • byweekday - Дни недели в которые событие активно. Заполнено если поле freq равно ‘WEEKLY’.
  • from_min - Минута с которой начинается событие. Заполнено если поле freq равно ‘HOURLY’.
  • to_min - Минута окончания события. Заполнено если поле freq равно ‘HOURLY’.


PUB lm/scheduler/events/changes

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


Payload format

{
   status: Literal['created', 'updated', 'deleted'],
   event: {
       "id": str,
       "title": str,
       "priority": int,
       "actions": {
         "player": Optional[{
           "cmd": Literal['play'],
           "entity_type": Union['playlist', 'cue'],
           "entity_id": int,
         }],
         "do1": Optional[{
           "state": Literal[0, 1],
         }],
         "do2": Optional[{
           "state": Literal[0, 1],
         }],
         "do3": Optional[{
           "state": Literal[0, 1],
         }],
       },
       "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', 'February', 'March', 'April', 'May', 'June', 'July',
                     'August', 'September', 'October', 'November', '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

{
 "status": "created",
 "event": {
   "id": "abe4c633-8e3f-4938-94e2-efd135d993fc",
   "title": "holiday",
   "priority": 1,
   "actions": {
     "player": {
       "cmd": "play",
       "entity_type": "playlist",
       "entity_id": 19
     },
     "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
   }
 }
}
  • status - Тип изменения. Может принимать значения ‘created’, ‘updated’, ‘deleted’.
  • event - Событие со всеми параметрами в формате SchedulerEvent. ___


SUB lm/scheduler/events/periods

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

Запрос должен содержать cor data для последующей идентификации ответа. Запрос может содержать resp_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 - Дата и время начала диапазона в iso формате.
  • to_datetime - Дата и время окончания диапазона в iso формате.
  • filters - Опциональные фильтры для типов действий. Если не указаны, возвращаются события со всеми типами действий.
  • player - Включать события с действиями плеера.
  • do1 - Включать события с действиями для цифрового выхода DO1.
  • do2 - Включать события с действиями для цифрового выхода DO2.
  • do3 - Включать события с действиями для цифрового выхода DO3.


PUB lm/scheduler/events/periods/response

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


Payload format

[
 {
   id: str
   title: str
   start: str
   end: str
   priority: int
   duration: float
 }
]

Example

[
 {
   "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
 }
]
  • id - Уникальный идентификатор события.
  • title - Название события.
  • priority - Приоритет события. Чем выше значение тем выше приоритет.
  • start - Дата и время начала события в ISO формате.
  • end - Дата и время окончания события в ISO формате.
  • duration - Продолжительность события в секундах.


PUB lm/scheduler/player/status

Публикует текущее активное событие плеера если оно есть.


Payload formatСобытие есть:

{
 status: Literal['running'],
 event: {
   id: str,
   title: str,
   action: {
     cmd: Literal['play']
     entity_type: Literal['playlist', 'cue']
     entity_id: int  
   }
 }
}

Example

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


События нет:

{
 status: Literal['no_event'],
}

Example

{
 "status": "no_event"
}
  • status - Текущий статус расписания. Может принимать значения ‘running’, ‘no_event’.
  • event - Активное событие со всеми параметрами. Присутствует только когда status равен ‘running’.
  • id - Уникальный идентификатор события.
  • title - Название события.
  • action - Действие которое должно быть выполнено для данного события.
  • cmd - Команда для выполнения. Всегда равна ‘play’.
  • entity_type - Тип сущности для воспроизведения. Может принимать значения ‘playlist’, ‘cue’.
  • entity_id - Уникальный идентификатор сущности для воспроизведения.


PUB lm/scheduler/do/*/status

Публикует текущее активное событие управления цифровым выходом DO1 если оно есть.


PUB lm/scheduler/do/1/statusPUB lm/scheduler/do/2/statusPUB lm/scheduler/do/3/status


Payload formatСобытие есть:

{
 status: Literal['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
   }
 }
}


События нет:

{
 status: Literal['no_event'],
}

Example

{
 "status": "no_event"
}
  • status - Текущий статус расписания для DO1. Может принимать значения ‘running’, ‘no_event’.
  • event - Активное событие со всеми параметрами. Присутствует только когда status равен ‘running’.
  • id - Уникальный идентификатор события.
  • title - Название события.
  • action - Действие которое должно быть выполнено для данного события.
  • state - Состояние цифрового выхода. Может принимать значения 0 (выключен) или 1 (включен).


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
 }


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
       style: str
       firmware_version: str
       ports: dict[
           int,
           {
               bind_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]
               out_signal: Optional[Literal['DMX', 'SPI']]
               is_data_transmitting: 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
           }
       ]
       rdm_devices_count: int
   }
}


PUB lm/artnet_devices_management_service/rdm/devices/changes

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


Payload format

{
   status: Literal['created', 'updated', 'deleted']
   device: {
       uid: str
       art_net_device_mac: str
       art_net_device_ip: str
       port: int
       supported_params: dict[str, Any]
   }
}
  • uid - Уникальный идентификатор устройства.
  • art_net_device_mac - Mac адрес ArtNet устройства к которому подключено данное rdm устройство.
  • art_net_device_ip - IP адрес ArtNet устройства к которому подключено данное rdm устройство.
  • port - Номер порта ArtNet устройства к которому подключено данное rdm устройство.
  • supported_params - Словарь параметров и их значений.


PUB lm/artnet_devices_management_service/cmd_response

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

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


Payload format

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


Example

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



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

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",
}


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

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


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”, }


7. Управление 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 - неактивен.



8. Управление 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",
}



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

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 - Интервал между миганиями в миллисекундах.


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

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