trivum interfaz HTTP
25-jul-2023
La interfaz HTTP trivum acepta solicitudes que un navegador web puede probar fácilmente y devuelve respuestas en formato XML.
1. Comandos
1.1. ZoneCommand
Permite hacer cosas básicas como desactivar una zona o cambiar el volumen.
/xml/zone/runCommand.xml?zone=@zoneId&command=commandNumber
zoneId
El ID de una zona. Para ver la lista de ID posibles, busque en la configuración web en
Automation /trivum API
o vea a continuación el ejemplo de getAll.xml.
Es posible que algunos actuadores no aborden la primera zona con @0 sino con @1 debido a archivos de configuración internos no utilizados. Para solucionar esto, puede restablecer toda la configuración mediante: |
En lugar de @0
se puede dar el nombre de la zona. Si contiene caracteres especiales, reescríbalos usando %
:
/xml/zone/runCommand.xml?zone=living%20room&command=…
commandNumber
Este es un comando numérico con estos valores posibles:
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
Ejemplos
llamar | function |
---|---|
|
Enumere todos los ID de zona posibles. |
|
Obtener el estado de una sola zona. Los parámetros opcionales son: &addSourceBasicData &addSourceStatusData |
|
Lista de zonas con información completa del grupo. |
|
Cambie la primera zona a transmisión predeterminada. |
|
Apague la primera zona. |
|
Desactivar todas las zonas. |
|
Silencio en |
|
Silencio desactivado |
1.2. Establecer fuente de zona
Seleccione una fuente de zona por nombre corto
/xml/zone/set.xml?zone=@0&source=@shortSourceName
shortSourceName
texto | acción | remark |
---|---|---|
|
primera entrada analógica |
Dependiendo del modelo de dispositivo, de 0 a 8 analógicas las entradas son compatibles. 231} |
primero trivum favorito |
|
|
primera trivum lista de reproducción |
|
|
primer ajuste predeterminado |
|
|
fuente de transmisión predeterminada de la zona |
reproduciendo selección reciente |
|
sintonizador de FM por defecto de la zona |
reproduciendo frecuencia reciente |
|
Ejemplos
Llamada a la API |
comentario |
|
cambiar a la primera entrada analógica |
|
cambie al sintonizador de FM predeterminado de la zona y reproduzca la frecuencia reciente |
|
cambia al sintonizador de FM predeterminado de la zona y la presintonía de la estación de reproducción 3 |
|
cambie a la transmisión predeterminada de la zona y reproduzca trivum favorito 2 |
|
cambie a la transmisión predeterminada de la zona y reproduzca la radio web TuneIn preestablecida 5 |
|
Solo C4: use una fuente por ranura de tarjeta n. (n >= 0) |
|
Apagar todas las zonas. |
1.3. Establecer atributo de zona
Cambia los valores básicos en una zona, como volumen, silencio, balance o bajo.
Llamada a la API |
comentario |
|
establecer volumen (0 … 100) |
|
igual que |
|
establezca el saldo, de -15 (totalmente a la izquierda) a 15 (totalmente a la derecha) |
|
establecer reducción o mejora de graves, de -15 a 15 |
|
establecer reducción o mejora de agudos, de -15 a 15 |
1.4. Trivum Favoritos
Para crear favoritos trivum:
-
reproducir algún contenido musical, como un álbum NAS
-
luego selecciona
…
en la parte superior derecha -
luego seleccione "Agregar a trivum favoritos".
Obtener la lista de trivum favoritos:
/api/v1/trivum/favorito.xml
Juega un trivum favorito:
/xml/zone/set.xml?source=@f1&zone=@0
También puede agregar opciones:
opción |
comentario |
|
seleccione una pista de inicio aleatoria |
|
jugar en orden aleatorio permanente |
1.5. listas de reproducción trivum
Obtén la lista de trivum listas de reproducción:
/api/v1/trivum/lista de reproducción.xml
Reproduce una lista de reproducción trivum:
/xml/zone/set.xml?source=@y1&zone=@0
También puede agregar opciones:
opción |
comentario |
|
para comenzar en una pista aleatoria |
|
para reproducir solo pistas aleatorias |
1.6. TuneIn Favoritos
Estos también se pueden crear con …
en la parte superior derecha mientras se reproduce una estación TuneIn.
Obtenga la lista de favoritos de TuneIn:
/api/v1/tunein/favorito.xml
Juega un favorito de TuneIn:
/xml/zone/set.xml?source=@i1&zone=@0
1.7. Presets de FM
Lista de preajustes de FM:
/xml/system/getTunerStationList.xml
En C4, esto muestra la lista de presintonías de FM de todo el sistema, pero no hay presintonías locales almacenadas por tarjeta sintonizadora de FM.
1.8. Estado y control NAS
Llamada a la API |
comentario |
|
obtener el estado de la biblioteca NAS |
|
vuelva a ejecutar el escaneo NAS completo |
1.9. Manejo de grupo
Los grupos se pueden crear, cambiar o eliminar mediante una llamada:
/xml/zone/createGroup.xml?zone=zVisu&oldgroup=zMaster&members=++----------
Parámetros:
nombre |
comentario |
zVisu |
índice de la zona actual de la visualización client |
zMaestro |
índice del maestro de grupo cuya música se debe usar (si ambas zonas están reproduciendo actualmente fuentes diferentes) |
+/- |
caracteres que indican gráficamente qué zonas deben formar parte
de un grupo. por ejemplo, con un sistema de 4 zonas, escriba 4 caracteres
o menos (se rellena con |
Ejemplo: la segunda zona se une a la reproducción de la primera zona
-
la primera zona está reproduciendo una transmisión, la segunda zona está reproduciendo un sintonizador de FM, todas las demás zonas están apagadas.
-
la segunda zona debe agregarse a un grupo con la primera zona,
y debe hacerse cargo de la música de la primera zona (la transmisión).
/xml/zone/createGroup.xml?zone=1&oldgroup=0&members=++--
Resultado: la segunda zona comienza a reproducir la misma secuencia que la primera zona.
Ejemplo: la primera zona se une a la reproducción de la segunda zona
-
la primera zona está reproduciendo una transmisión, la segunda zona está reproduciendo un sintonizador de FM, todas las demás zonas están apagadas.
-
la primera zona debe agregarse a un grupo con la segunda zona, y debe hacerse cargo de la música de la segunda zona (el sintonizador).
/xml/zone/createGroup.xml?zone=0&oldgroup=1&members=++--
Resultado: la primera zona comienza a reproducir el mismo sintonizador de FM como segunda zona.
Esto significa que si ambas zonas están reproduciendo fuentes diferentes,
"oldgroup" decide qué música reproducir después de que el grupo se una.
Ejemplo: la segunda zona debería abandonar el grupo
/xml/zone/createGroup.xml?zone=0&oldgroup=0&members=+---
Aquí es relevante el cambio de +
a -
en la lista de miembros.
Cambiar el nivel de volumen dentro de un grupo
Dentro de un grupo, las zonas normalmente no usan niveles de volumen aislados,
pero un cambio en el volumen afecta a todos los miembros del grupo.
Esta interdependencia la maneja la llamada:
/xml/zona/setVolume.xml
De forma predeterminada, esta llamada no establecerá simplemente un nivel de volumen absoluto, sino que avanza un poco en la dirección de un volumen objetivo dado. Esto se usa mejor con un botón + o - en su visualización.
Llamada a la API |
comentario |
|
Reduzca el volumen del grupo para todo el grupo. id es cualquier ID de zona del grupo. El volumen de todos los miembros de la zona se reducirá unos pocos pasos. |
|
Aumente el volumen del grupo para todo el grupo. El volumen de todos los miembros de la zona aumentará unos pocos pasos. |
|
Aumente el volumen de una sola zona paso a paso, sin afectar a otros miembros del grupo. |
|
Disminuya el volumen de una sola zona paso a paso, sin afectar a otros miembros del grupo. |
|
Detenga el paso de volumen inmediatamente. |
|
Configure el volumen absoluto para una sola zona, aislada de otros miembros del grupo. (Usar con cuidado.) |
Para obtener la información del nuevo nivel de volumen dentro de un grupo, haga una llamada a getChanges y observe la lista de estado del volumen.
/xml/zone/getChanges.xml?zone=@0&visuid=90&apiLevel=2&now
Ejemplo de salida, si está agrupado, en zona/estado:
<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>
Para obtener una explicación completa de getChanges, consulte Obtener estado de zona.
1.10. Paginación
Las paginaciones deben configurarse en la configuración web. Entonces se pueden usar las siguientes llamadas:
Inicia la búsqueda
/xml/paginación/inicio.xml
Parámetros
nombre | descripción |
---|---|
|
ID de paginación, 0 - 31 |
|
opcional, 5 - 100. si no se proporciona, se utiliza el nivel de volumen de megafonía configurado. |
|
opcional, 5 - 100 segundos. si no se suministran, se utilizan los ajustes de parada configurados. |
Ejemplo
/xml/paginación/start.xml?id=0&volume=10&autostoptime=10
Un aviso se detiene automáticamente después del tiempo definido, pero puede detenerlo antes llamando al:
/xml/paginación/stop.xml?id=0
2. Selección de música interactiva
Comienza con:
/xml/system/getWebTouchMenu.xml?which=music&zone=@0&visuid=90
Esto produce registros como:
<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>
luego, por registro:
-
decodificar y mostrar el campo de texto en su visualización.
_20
significa un carácter con código Ascii 0x20 (un espacio). -
si se toca, llame a la url de acción y muestre el siguiente nivel de menú.
No confíe en la disponibilidad permanente de niveles de menú específicos. |
3. Obtener estado de zona
3.1. sincrónico
Sondee el estado de una zona con una breve llamada a la API:
/xml/zone/getChanges.xml?zone=@0&visuid=90&apiLevel=2&now
Parámetros
nombre |
función |
|
un número del 1 al 99 para identificar su instancia de visualización externa. |
|
siempre debe ser 2. esto producirá |
|
le dice al servidor que devuelva el estado de la nueva zona inmediatamente y que cierre la conexión. |
|
si dos visualizaciones acceden al mismo servidor con el mismo visuid
, puede aparecer un error "used two". en este caso, la visualización más reciente
debe agregar |
Acerca de las unidades de control (Visualizaciones)
Si envía solicitudes con visuid=90
, se crea un objeto Control Unit con ID 90 en el servidor.
Puede obtener la lista de unidades de control actuales en la configuración web, en Unidades de control.
Después del primer acceso, la unidad aparece como "No configurada". Tan pronto como cambie su configuración, por ejemplo, configurando la opción "Off presionando brevemente power", se llama Configurado, y las limpiezas posteriores de la lista de Unidades de control no eliminarán este.
Si no hay solicitudes para esta unidad, después de un tiempo se incluirá en "unidades de control actualmente inactivas".
3.2. Asíncrono
Esto significa que una llamada HTTP no regresará inmediatamente, sino que se bloqueará hasta que algo cambie.
Ejemplo:
/xml/zone/getChanges.xml?zone=@0&visuid=90&apiLevel=2
Observe que falta & now
. Lo siguiente sucederá:
en la primera llamada a la API:
Se crea una Unidad de Control con ID 90 y se vincula con la primera zona.
La llamada a la API vuelve inmediatamente, con todos los datos de estado de la zona.
en todas las demás llamadas a la API:
La Unidad de Control 90 existente se reutiliza. La llamada API puede bloquearse, hasta que:
-
se alcanza un tiempo de espera (10 segundos aprox.). en este caso obtienes una respuesta como:
<rows><system><timeout>1</timeout>
-
o hasta que algo cambie, por ejemplo, el volumen en la zona.
si (muchos) datos de estado han cambiado en el servidor entre dos llamadas a getChanges, es posible que la llamada no se bloquee en absoluto, pero devuelva el nuevo estado inmediatamente.
cuando reciba un tiempo de espera, simplemente vuelva a ejecutar getChanges inmediatamente. esto significa que puede ejecutar getChanges indefinidamente, en un bucle, por ejemplo, en un subproceso de E/S separado. Debido a que una solicitud regresa solo en los cambios, esto no causará problemas de carga con el servidor.
cuando no recibe un tiempo de espera, es decir, la llamada regresa inmediatamente o después de unos segundos (tan pronto como algo haya cambiado), luego procese los datos de estado y luego vuelva a ejecutar la solicitud getChanges.
3.3. Apéndice: ejemplo esquemático para una aplicación Visu Client
3.3.1. Aplicación de hilo único
Esto requiere que pueda probar, en su lenguaje de programación, si existen datos de respuesta para un socket (a través de la llamada select()).
Tema principal
-
inicio: enviar
/xml/zone/getChanges.xml?visuid=90&now
-
loop begin: actualiza la GUI.
-
procesar eventos de entrada del usuario.
-
enviar comandos sincrónicos como:
/xml/zone/runCommand.xml?…
recibir respuesta, verificar rc Y procesar datos de estado xml
(igual que con las respuestas de getChanges) -
verifique si existen datos de respuesta para la llamada getChanges en curso
(en código C: seleccione () llame al socket)
SI existen datos del servidor trivum:-
Busque
<userdata name="rc">0</userdata>
.
Si NO está presente
_ procesa el error y espera unos segundos.
De lo contrario, si NO es un tiempo de espera
_ procesar respuesta xml (datos de estado)
Endif
llamada asíncrona (solo enviar)
/xml/zone/getChanges.xml&visuid=90&onlyChanges
Endif
-
-
si no llegan datos del servidor en 1 minuto
-
llamada asíncrona (solo enviar)
/xml/zone/getChanges.xml&visuid=90&onlyChanges
endif
-
-
volver a ejecutar el bucle
-
3.3.2. Ejemplo de aplicación de dos hilos
Se puede usar si prefiere ejecutar bloqueos de recepciones en sockets en un subproceso de E/S separado.
Tema principal
-
actualizar la interfaz gráfica de usuario.
-
procesar eventos de entrada del usuario.
-
enviar comandos sincrónicos como:
/xml/zone/runCommand.xml?…
recibir respuesta, verificar rc Y procesar datos de estado xml
(igual que con las respuestas de getChanges) -
recibir datos de estado y errores de Status Thread.
-
vuelva a ejecutar este bucle.
Tema de estado
-
SI en el primer ciclo:
-
enviar
/xml/zone/getChanges.xml?visuid=90&now
OTRO -
enviar
/xml/zone/getChanges.xml?visuid=90&onlyChanges
-
-
recibir respuesta (esto se bloquea hasta 10 segundos)
-
Busque
<userdata name="rc">0</userdata>
.
Si esto NO está presente, entonces hay un error.
Asegúrese de no simplemente volver a ejecutar el ciclo en caso de errores,
sino al menos esperar unos segundos e informar al hilo principal. -
Busque
<rows><system><timeout>1</timeout>
.
SI esto está presente-
vuelva a ejecutar el ciclo inmediatamente.
MÁS -
procese los datos de estado de respuesta,
y copie los nuevos datos de estado en el subproceso principal.
-
-
vuelva a ejecutar este bucle.