LOUD — Controle de Zonas via UDP
Referência técnica para integradores. Mostra como descobrir e controlar as zonas de um amplificador LOUD na rede local usando o protocolo ASCII dos dispositivos Xcene/LOUD.
1. Formato do pacote ASCII
$<ID>><PATH>@<PROTOCOLO>?<QUERY>&_to=<IP><SEED>#
Exemplo:
$3A7F>/ac/zona0@0?vl=50&_to=192.168.0.10<123456#
| Campo | Descrição |
|---|---|
$3A7F |
4 últimos dígitos do MAC do device destino. 0000 = broadcast. |
>/ac/zona0 |
Path da ação. |
@0 |
Número do protocolo (tabela abaixo). |
?vl=50 |
Parâmetros chave=valor separados por &. Vazio = leitura do estado atual. |
&_to=192.168.0.10 |
(Opcional) IP para resposta exclusiva. Device abre TCP de volta neste IP. |
<123456 |
Seed — número único por envio, evita processamento duplicado. Use 0 apenas para testes. |
# |
Fim do pacote. |
Os separadores $ > @ ? < # são obrigatórios, mesmo que o campo esteja vazio.
Tabela de protocolos
| Código | Nome | Uso |
|---|---|---|
0 |
Set Data | Ler ou definir valores no device |
1 |
Delete Data | Remover dados (ex.: itens de cena) |
8 |
Send All | Broadcast — mesma mensagem para vários devices |
9 |
Description | Descobrir ações e parâmetros disponíveis |
2. Device LOUD
| Propriedade | Valor |
|---|---|
| ID | 3A7F |
| Modelo | Multiroom |
| Zonas de controle | /ac/zona0, /ac/zona1, /ac/zona2, /ac/zona3, /ac/zona4, /ac/zona5 |
| Config avançada de zonas | /lb/Zona (indexada por _n=0..5) |
Outras ações (Bluetooth, Inputs, IR, WiFi, modo Dualzone/Singlezone/4.1) também estão disponíveis via path /lb/*, mas não são cobertas aqui.
3. Descoberta — Protocolo 9 (DESCRIPTION)
Pergunta ao device quais zonas e parâmetros ele expõe. Suporta wildcard ou path específico.
Listar todas as ações do device:
$3A7F>/*@9?<12345#
Listar apenas a zona 0:
$3A7F>/ac/zona0@9?<12345#
Modelo de resposta (zona 0):
$3A7F>/ac/zona0@9?{"name":"zona0","path":"/ac/zona0","params":[
{"name":"pw","friendlyName":"power","params":["toggle","on","off"],"type":"Boolean"},
{"name":"mt","friendlyName":"mute","params":["toggle","on","off"],"type":"Boolean"},
{"name":"in","friendlyName":"input","params":["AUX1","AUX2","AUX3","AUX4","AUX5","BT","OPT"],"type":"Chosen"},
{"name":"vl","friendlyName":"volume","params":["$inc=[1,20]","$dec=[1,20]","$max=99","$min=0"],"type":"Integer"},
{"name":"bs","friendlyName":"bass","params":["$inc=[1,20]","$dec=[1,20]","$max=0","$min=-15"],"type":"Integer"},
{"name":"tr","friendlyName":"treble","params":["$inc=[1,20]","$dec=[1,20]","$max=0","$min=-15"],"type":"Integer"},
{"name":"md","friendlyName":"middle","params":["$inc=[1,20]","$dec=[1,20]","$max=0","$min=-15"],"type":"Integer"}
]}<12345#
4. Parâmetros de uma zona (/ac/zonaN)
| Param | Nome amigável | Tipo | Valores / Faixa | Exemplo |
|---|---|---|---|---|
pw |
power | Boolean | on, off, toggle |
pw=on |
mt |
mute | Boolean | on, off, toggle |
mt=off |
in |
input | Chosen | AUX1, AUX2, AUX3, AUX4, AUX5, BT, OPT |
in=BT |
vl |
volume | Integer | 0 a 99 |
vl=50 |
bs |
bass | Integer | -15 a 0 (dB) |
bs=-5 |
tr |
treble | Integer | -15 a 0 (dB) |
tr=-3 |
md |
middle | Integer | -15 a 0 (dB) |
md=-2 |
5. Comandos práticos
Todos os exemplos usam a zona 0 (/ac/zona0) do device 3A7F. Para outras zonas, troque o path (/ac/zona1, /ac/zona2, ...). A seed (<123#) deve ser trocada a cada envio.
5.1 Consultar estado completo
Envio:
$3A7F>/ac/zona0@0?<111#
Resposta:
$3A7F>/ac/zona0@0?code=1&pw=on&mt=off&in=AUX1&vl=50&bs=0&tr=0&md=0<111#
code=1 = sucesso.
5.2 Ligar / desligar / toggle
$3A7F>/ac/zona0@0?pw=on<112#
$3A7F>/ac/zona0@0?pw=off<113#
$3A7F>/ac/zona0@0?pw=toggle<114#
Resposta (eco de confirmação):
$3A7F>/ac/zona0@0?code=1&pw=on<112#
5.3 Mutar / desmutar
$3A7F>/ac/zona0@0?mt=on<115#
$3A7F>/ac/zona0@0?mt=off<116#
Resposta:
$3A7F>/ac/zona0@0?code=1&mt=on<115#
5.4 Trocar fonte de áudio
$3A7F>/ac/zona0@0?in=AUX1<117#
$3A7F>/ac/zona0@0?in=BT<118#
$3A7F>/ac/zona0@0?in=OPT<119#
Resposta:
$3A7F>/ac/zona0@0?code=1&in=BT<118#
5.5 Definir volume
$3A7F>/ac/zona0@0?vl=75<120#
Resposta:
$3A7F>/ac/zona0@0?code=1&vl=75<120#
5.6 Ajustar equalização (graves, médios, agudos)
$3A7F>/ac/zona0@0?bs=-5<121#
$3A7F>/ac/zona0@0?md=-3<122#
$3A7F>/ac/zona0@0?tr=-2<123#
Resposta:
$3A7F>/ac/zona0@0?code=1&bs=-5<121#
6.7 Comando combinado (múltiplos parâmetros)
$3A7F>/ac/zona0@0?pw=on&in=BT&vl=60&mt=off<124#
Resposta:
$3A7F>/ac/zona0@0?code=1&pw=on&in=BT&vl=60&mt=off<124#
6. Configuração avançada da zona (/lb/Zona)
/lb/Zona guarda a configuração persistente de cada zona (nome, limites, defaults). Como o device tem 6 zonas, as operações usam o parâmetro _n (0 a 5) para indicar qual zona está sendo lida/gravada.
Parâmetros
| Param | Tipo | Faixa / Valores | Descrição |
|---|---|---|---|
nmc |
String | até 15 caracteres | Nome amigável da zona |
vli |
Integer | 0 a 30 |
Volume inicial (ao ligar) |
vll |
Integer | 40 a 99 |
Volume máximo permitido |
ii |
Chosen | AUX1..AUX5, BT, OPT |
Fonte padrão ao ligar |
mdda |
Chosen | Normal, Power Automático |
Modo de ligar automático |
md |
Integer | -15 a 0 |
Médio default |
tb |
Integer | -15 a 0 |
Agudo default |
bs |
Integer | -15 a 0 |
Grave default |
6.1 Ler a configuração da zona 0
Envio:
$3A7F>/lb/Zona@0?_n=0<130#
Resposta:
$3A7F>/lb/Zona@0?code=1&nmc=Sala&vli=15&vll=99&ii=AUX1&mdda=Normal&md=-5&tb=-3&bs=-2&_n=0<130#
6.2 Renomear a zona 0 para "Sala"
$3A7F>/lb/Zona@0?nmc=Sala&_n=0<131#
O valor em nmc pode ser URI-encoded se tiver espaços/acentos (ex.: nmc=Sala%20de%20Estar).
6.3 Definir volume inicial e máximo da zona 1
$3A7F>/lb/Zona@0?vli=20&vll=80&_n=1<132#
7. Notas rápidas
- Seed única por envio: o device descarta pacotes com seed repetida recente (deduplicação anti-eco). Gere um número novo a cada pacote.
_to=<IP>: opcional mas recomendado quando você quer resposta unicast direta para a sua máquina (ex.: atrás de firewall multicast restritivo). O device também pode abrir TCP de volta neste IP na porta5203.- Separadores:
$ > @ ? < #são obrigatórios mesmo se o campo estiver vazio. Ex.: leitura sem parâmetros é$3A7F>/ac/zona0@0?<SEED#. - Envios sequenciais: equipamentos são low-energy; evite enviar múltiplos pacotes UDP em paralelo. Use intervalo de ~50 ms entre envios consecutivos.
codena resposta:code=1(ou que começa com1) indica sucesso. Respostas semcodeem protocolo@9(DESCRIPTION) são normais.- Broadcast
0000: substitua$3A7Fpor$0000para enviar a todos os devices da rede. Útil apenas para descoberta (/if/device@0), não para controle.