HTTP-интерфейс trivum
25 июля 2023
HTTP-интерфейс trivum принимает запросы, которые можно легко проверить с помощью веб-браузера, и возвращает ответы в формате XML.
1. команды
1.1. ZoneCommand
Позволяет делать основные вещи, такие как переключение зоны, или изменение громкости.
/xml/zone/runCommand.xml?zone=@zoneId&command=commandNumber
ZoneId
Идентификатор зоны. Список возможных идентификаторов см. в веб-конфигурации в разделе
Automation/trivum API
или см. ниже пример getAll.xml.
Некоторые приводы могут обращаться к первой зоне не по @0, а по @1 из-за внутренних неиспользуемых файлов конфигурации. Чтобы исправить это, вы можете сбросить всю конфигурацию, выполнив следующие действия: |
Вместо @0
можно указать имя зоны. Если он содержит специальные символы, перепишите их, используя %
:
/xml/zone/runCommand.xml?zone=living%20room&command=…
commandNumber
Это числовая команда с этими возможными значениями:
ZONECMD_POWER_OFF 001 ZONECMD_MUTE 002 toggle mute ZONECMD_MUTE_ON 680 since v9.29 ZONECMD_MUTE_OFF 681 since v9.29 ZONECMD_VOLUME_INC 003 ZONECMD_VOLUME_DEC 004 ZONECMD_VOLUME_INC2 009 ZONECMD_VOLUME_DEC2 010 ZONECMD_VOLUME_INC5 011 ZONECMD_VOLUME_DEC5 012 ZONECMD_ALLOFF 015 ZONECMD_SNOOZE 017 ZONECMD_LOCAL_SOURCE 019 if present (LineIn) ZONECMD_USE_PREV_SOURCE 029 see Zones / zone / KNX/HTTP sources ZONECMD_JOIN 030 ZONECMD_UNJOIN 031 ZONECMD_USE_NEXT_SOURCE 041 see Zones / zone / KNX/HTTP sources ZONECMD_USE_NEXT_ZONE 042 see Zones / zone / KNX/HTTP sources ZONECMD_DEFAULT_STREAMING 050 if present ZONECMD_DEFAULT_TUNER 051 if present ZONECMD_VOLUME_DEC_1 080 ZONECMD_VOLUME_DEC_10 089 ZONECMD_VOLUME_INC_1 090 ZONECMD_VOLUME_INC_10 099 MULTIKEY_BASIC_FORWARD 400 skip to next track, preset MULTIKEY_BASIC_BACKWARD 401 skip to prev. track, preset MULTIKEY_BASIC_FASTFORWARD 402 MULTIKEY_BASIC_FASTBACKWARD 403 MULTIKEY_BASIC_PLAYPAUSE 406 MULTIKEY_PLAY 431 MULTIKEY_PAUSE 432 MULTIKEY_STOP 433 MULTIKEY_STATION_DOWN 490 MULTIKEY_STATION_UP 491 MULTIKEY_NEXT_ALBUM 493 MULTIKEY_PREVIOUS_ALBUM 494 MULTIKEY_NEXT_PLAYLIST 495 MULTIKEY_PREVIOUS_PLAYLIST 496 ZONECMD_START_PAGING_1 500 ZONECMD_START_PAGING_32 531 ZONECMD_STOP_PAGING_1 550 ZONECMD_STOP_PAGING_32 581 ZONECMD_STOP_PAGING_ALL 599 ZONECMD_PRESET_1 600 ZONECMD_PRESET_7 606 ZONECMD_GROUP_START_1 621 ZONECMD_GROUP_START_8 628 ZONECMD_GROUP_STOP 630 ZONECMD_GROUP_STOP_1 631 ZONECMD_GROUP_STOP_8 638 ZONECMD_GROUP_STOP_ALL 639 ZONECMD_STREAMING_NOPLAY 641 ZONECMD_VOLUME_00 900 ZONECMD_VOLUME_99 999 ZONECMD_ROOM_VOLUME_00 1000 ZONECMD_ROOM_VOLUME_99 1099
Примеры
позвонить | function |
---|---|
|
Список всех возможных идентификаторов зон. |
|
Получить статус отдельной зоны. Необязательные параметры: &addSourceBasicData &addSourceStatusData |
|
Список зон с полной информацией о группах. |
|
Переключите первую зону на потоковую передачу по умолчанию. |
|
Выключите первую зону. |
|
Выключить все зоны. |
|
Отключить звук вкл |
|
Отключение звука |
1.2. Установить источник зоны
Выберите источник зоны по сокращенному названию
/xml/zone/set.xml?zone=@0&source=@shortSourceName
shortSourceName
текст | действие | примечание |
---|---|---|
|
первый аналоговый вход |
в зависимости от модели устройства, от 0 до 8 поддерживаются аналоговые входы. |
|
первая предустановка FM-тюнера |
Требуется, чтобы для зоны был настроен FM-тюнер по умолчанию. |
`f2 |
первое trivum избранное |
|
|
первый список воспроизведения trivum |
|
|
первая предустановка настройки |
|
|
источник потока зоны по умолчанию |
играет недавний выбор |
|
по умолчанию FM-тюнер зоны |
играет последняя частота |
Примеры
вызов API |
примечание |
|
переключиться на первый аналоговый вход |
|
переключиться на FM-тюнер зоны по умолчанию и воспроизвести последнюю частоту |
|
переключиться на FM-тюнер зоны по умолчанию и настроить предустановку станции воспроизведения 3 |
|
переключиться на потоковую передачу зоны по умолчанию и играть trivum избранное 2 |
|
переключиться на потоковую передачу зоны по умолчанию и воспроизвести предустановку веб-радио TuneIn 5 |
|
Только для C4: используйте источник с гнездом карты n. (n >= 0) |
|
Выключить все зоны. |
1.3. Установить атрибут зоны
Измените основные значения в зоне, например, громкость, отключение звука, баланс или бас.
вызов API |
примечание |
|
установить громкость (0 … 100) |
|
то же, что и |
|
установить баланс, от -15 (полностью слева) до 15 (полностью справа) |
|
установить уменьшение или усиление басов, от -15 до 15 |
|
установить снижение или усиление высоких частот, от -15 до 15 |
1.4. trivum Избранное
Чтобы создать фавориты trivum:
-
воспроизвести какой-либо музыкальный контент, например альбом NAS
-
затем выберите «…» в правом верхнем углу
-
затем выберите "Добавить в trivum избранное".
Получить список фаворитов trivum:
/api/v1/тривум/фаворит.xml
Играйте в любимую мелочь:
/xml/zone/set.xml?source=@f1&zone=@0
Вы также можете добавить опции:
вариант |
примечание |
|
выбрать случайный стартовый трек |
|
играть в постоянном случайном порядке |
1.5. Плейлисты trivum
Получить список из trivum плейлистов:
/api/v1/тривум/плейлист.xml
Воспроизвести список воспроизведения trivum:
/xml/zone/set.xml?source=@y1&zone=@0
Вы также можете добавить опции:
вариант |
примечание |
|
запустить наугад трек |
|
воспроизводить только случайные треки |
1.6. Избранное в TuneIn
Их также можно создать с помощью …
в правом верхнем углу во время воспроизведения станции TuneIn.
Получите список избранных TuneIn:
/api/v1/tunein/favorite.xml
Воспроизведение любимого TuneIn:
/xml/zone/set.xml?source=@i1&zone=@0
1.7. FM-предустановки
Список предустановок FM:
/xml/система/getTunerStationList.xml
На C4 отображается общесистемный список предустановок FM, но нет локальных предустановок, хранящихся на карте FM-тюнера.
1.8. Состояние и контроль состояния NAS
вызов API |
примечание |
|
получить статус библиотеки NAS |
|
повторно запустить полное сканирование NAS |
1.9. Управление группой
Группы могут быть созданы, изменены или удалены одним вызовом:
/xml/zone/createGroup.xml?zone=zVisu&oldgroup=zMaster&members=++----------
Параметры:
имя |
примечание |
zVisu |
индекс текущей зоны визуализации client |
zМастер |
индекс мастера группы, музыку которого следует использовать (если обе зоны в данный момент воспроизводят разные источники) |
+/- |
символов, сообщающих графически, какие зоны должны быть частью
группы. например, в системе с 4 зонами введите 4 символа
или меньше (автоматически заполняется символом |
Пример: вторая зона присоединяется к воспроизведению первой зоны
-
первая зона воспроизводит поток, вторая зона воспроизводит FM-тюнер, все остальные зоны выключены.
-
вторая зона должна быть добавлена в группу с первой зоной,
, и она должна принимать музыку из первой зоны (поток).
/xml/zone/createGroup.xml?zone=1&oldgroup=0&members=++--
Результат: вторая зона начинает играть тот же поток, что и первая зона.
Пример: первая зона присоединяется к воспроизведению второй зоны
-
первая зона воспроизводит поток, вторая зона воспроизводит FM-тюнер, все остальные зоны выключены.
-
первая зона должна быть добавлена в группу со второй зоной, и она должна брать музыку из второй зоны (тюнера).
/xml/zone/createGroup.xml?zone=0&oldgroup=1&members=++--
Результат: первая зона запускает тот же FM-тюнер, что и вторая зона.
Это означает, что если обе зоны воспроизводят разные источники, то
"oldgroup" решает, какую музыку воспроизводить после присоединения к группе.
Пример: вторая зона должна покинуть группу
/xml/zone/createGroup.xml?zone=0&oldgroup=0&members=+---
Релевантно здесь изменение от +
до -
в списке участников.
Изменение уровня громкости в группе
Внутри группы зоны обычно не используют изолированные уровни громкости,
но изменение громкости влияет на всех членов группы.
Эта взаимозависимость обрабатывается вызовом:
/xml/зона/setVolume.xml
По умолчанию этот вызов не просто устанавливает абсолютный уровень громкости, но он небольшой шаг в направлении заданного целевого уровня громкости. Это лучше всего использовать с кнопкой + или - в вашей визуализации.
вызов API |
примечание |
|
Уменьшите громкость группы для всей группы. id — это любой идентификатор зоны из группы. Громкость всех членов зоны будет уменьшена на несколько шагов. |
|
Увеличьте громкость группы для всей группы. Громкость всех членов зоны будет увеличена на несколько шагов. |
|
Пошагово увеличивайте громкость одной зоны, не затрагивая других членов группы. |
|
Ступенчатое уменьшение объема одной зоны, не затрагивая других членов группы. |
|
Немедленно остановить изменение громкости. |
|
Установите абсолютный объем для одной зоны, изолированной от других членов группы. (Используйте с осторожностью.) |
Чтобы получить новую информацию об уровне громкости в группе, выполните вызов getChanges и просмотрите список состояния громкости.
/xml/zone/getChanges.xml?zone=@0&visuid=90&apiLevel=2&now
Пример вывода, если сгруппирован, под зоной/статусом:
<zone> ... <status> <volume>17</volume> - volume of zone making the getChanges call ... <group> <zone>0</zone> <volume>17</volume> - volume for zone id 0 </group> <group> <zone>1</zone> <volume>26</volume> - volume for zone id 1 </group> <group> ... </group> <groupMembers>2</groupMembers> </status> </zone>
Полное объяснение getChanges см. на Получить статус зоны.
1.10. Paging
Страницы должны быть настроены в веб-конфигурации. Затем можно использовать следующие вызовы:
Начало пейджинга
/xml/пейджинг/start.xml
параметры
имя | описание |
---|---|
|
идентификатор пейджинга, 0 - 31 |
|
необязательно, 5 - 100. , если не указан, используется настроенный уровень громкости подкачки. |
|
опционально, 5–100 секунд. , если не указано, используются настроенные параметры остановки. |
Пример
/xml/paging/start.xml?id=0&volume=10&autostoptime=10
Пейджинг останавливается автоматически по истечении заданного времени, но вы можете остановить его раньше, вызвав:
/xml/пейджинг/stop.xml?id=0
2. Интерактивный выбор музыки
Начинается с:
/xml/system/getWebTouchMenu.xml?that=music&zone=@0&visuid=90
Это создает такие записи, как:
<row> <type>action</type> <mode>menu</mode> <action>/xml/system/getWebTouchMenu.xml?which=trivumFavorites&keypad=4</action> <icon>/imgs/visuIconServiceFavorites_128px.png</icon> <text>trivum_20favorites</text> </row>
то за запись:
-
декодируйте и отобразите текстовое поле в вашей визуализации.
_20
означает символ с кодом Ascii 0x20 (пробел). -
если коснуться, вызовите URL-адрес действия и отобразите следующий уровень меню.
Не полагайтесь на постоянную доступность определенных уровней меню. |
3. Получить статус зоны
3.1. Синхронный
Опросите статус зоны одним коротким вызовом API:
/xml/zone/getChanges.xml?zone=@0&visuid=90&apiLevel=2&now
параметры
имя |
функция |
|
число от 1 до 99 для идентификации экземпляра внешней визуализации. |
|
всегда должно быть 2. это создаст xml-объекты «кнопка» в разделе «клавиатура/базовая». |
|
указывает серверу немедленно вернуть статус новой зоны и закрыть соединение. |
|
если две визуализации обращаются к одному и тому же серверу с одинаковым визуальным идентификатором
, может появиться ошибка "используется дважды". в этом случае самая последняя визуализация
должна добавить |
О блоках управления (визуализации)
Если вы отправляете запросы с visuid=90
, на сервере создается объект Control Unit с идентификатором 90.
Вы можете получить список текущих блоков управления в веб-конфигурации в разделе Control Units.
После первого доступа устройство отображается как "Не настроено". Как только вы измените его конфигурацию, например, установив опцию "Off коротким нажатием на power", он называется Configured, и последующие очистки списка блоков управления не удалят его.
Если запросов на этот блок нет, через некоторое время он будет числиться под " неактивными в данный момент блоками управления ".
3.2. Асинхронный
Это означает, что вызов HTTP не вернется немедленно, но будет заблокирован до тех пор, пока что-то не изменится.
Пример:
/xml/zone/getChanges.xml?zone=@0&visuid=90&apiLevel=2
Обратите внимание, что & now
отсутствует. Произойдет следующее:
при первом вызове API:
Блок управления с ID 90 создан и связан с первой зоной.
Вызов API немедленно возвращается с полными данными о состоянии зоны.
при всех дальнейших вызовах API:
Существующий блок управления 90 используется повторно. Вызов API может быть заблокирован до тех пор, пока:
-
достигнут тайм-аут (примерно 10 секунд). в этом случае вы получите ответ вида:
<rows><system><timeout>1</timeout>
-
или пока что-то не изменилось, например, громкость в зоне.
если (много) данных о статусе изменилось на сервере между двумя вызовами getChanges, вызов может вообще не блокироваться, а немедленно возвращать новый статус.
когда вы получите тайм-аут, просто немедленно перезапустите getChanges. это означает, что вы можете запускать getChanges бесконечно, в цикле, например, в отдельном потоке ввода-вывода. Поскольку запрос возвращается только при изменении, это не вызовет проблем с нагрузкой на сервер.
когда вы не получаете таймаут, т.е. вызов возвращается сразу или через несколько секунд (как только что-то изменилось), то обрабатывайте статусные данные, а затем повторно запускайте запрос getChanges.
3.3. Приложение: схематический пример клиентского приложения Visu
3.3.1. Однопоточное приложение
Это требует, чтобы вы могли проверить на своем языке программирования, существуют ли данные ответа для сокета (через вызов select()).
Основная тема
-
начало: отправить
/xml/zone/getChanges.xml?visuid=90&now
-
начало цикла: обновить графический интерфейс.
-
обрабатывать события ввода от пользователя.
-
отправлять синхронные команды, такие как:
/xml/zone/runCommand.xml?…
получать ответ, проверять rc И обрабатывать данные состояния xml
(то же, что и с ответами getChanges) -
проверить, существуют ли данные ответа для текущего вызова getChanges
(в коде C: вызов select() на сокете)
ЕСЛИ существуют данные с сервера trivum:-
Найдите
<userdata name="rc">0</userdata>
.
Если НЕ присутствует
_ обработайте ошибку и подождите несколько секунд.
В противном случае, если НЕ время ожидания
_ обработка XML-ответа (данные о состоянии)
Endif
асинхронный вызов (просто отправить)
/xml/zone/getChanges.xml&visuid=90&onlyChanges
Endif
-
-
если данные с сервера не приходят в течение 1 минуты
-
асинхронный вызов (просто отправить)
/xml/zone/getChanges.xml&visuid=90&onlyChanges
endif
-
-
повторный цикл
-
3.3.2. Пример приложения с двумя потоками
Может использоваться, если вы предпочитаете выполнять блокировку получения сокетов в отдельном потоке ввода-вывода.
Основная тема
-
обновить графический интерфейс.
-
обрабатывать события ввода от пользователя.
-
отправлять синхронные команды, такие как:
/xml/zone/runCommand.xml?…
получать ответ, проверять rc И обрабатывать данные состояния xml
(то же, что и с ответами getChanges) -
получать данные о состоянии и ошибки из потока состояния.
-
перезапустите этот цикл.
Статус темы
-
ЕСЛИ на первом цикле:
-
отправить
/xml/zone/getChanges.xml?visuid=90&now
ДРУГОЕ -
отправить
/xml/zone/getChanges.xml?visuid=90&onlyChanges
-
-
получить ответ (это блокируется до 10 секунд)
-
Найдите
<userdata name="rc">0</userdata>
.
Если этого НЕТ, то это ошибка.
Не просто перезапустите цикл при ошибках
, но хотя бы подождите несколько секунд и сообщите об этом основному потоку. -
Найдите
<rows><system><timeout>1</timeout>
.
ЕСЛИ присутствует-
немедленно перезапустите цикл.
ДРУГОЕ -
обработайте данные о состоянии ответа
и скопируйте новые данные о состоянии в основной поток.
-
-
перезапустите этот цикл.