Skip to main content

Barium — Integração MQTT (OpenBarium)

Documento de uso interno/restrito

Este documento descreve a API de desenvolvedor do protocolo de integração do anunciador de áudio Barium. O conteúdo é de uso interno/restrito e não deve ser publicado no portal público.

Este documento especifica o protocolo OpenBarium e as mensagens trocadas entre o anunciador de áudio BARIUM e um broker MQTT durante a operação do produto. A estrutura de tópicos, o formato das mensagens e o fluxo de informações descritos aqui são tudo o que é necessário para integrar o Barium a qualquer software de gestão.

Fonte: BARIUM — Anunciador de mensagens, Manual de Integração MQTT v1.11 (nov/2021).

Visão geral do protocolo

  • Todas as mensagens utilizam formato JSON.
  • Espera-se que o broker MQTT tenha suporte ao padrão MQTT V3.1.
  • Algumas mensagens são enviadas de forma independente e automática pelo equipamento (ex.: keepalive, status, info).
  • As demais mensagens são comandos enviados pelo servidor (reproduzir áudio, ajustar relógio, ler/ajustar configuração) — boa parte exige resposta (ack).

Configuração do MQTT no equipamento

A conexão MQTT do Barium é configurada na tela de configuração MQTT do equipamento (página de configuração WiFi servida pelo próprio dispositivo). Os campos seguem o objeto de configuração /config_mqtt.json descrito mais adiante.

config mqtt

Campo da telaParâmetro (/config_mqtt.json)Descrição
ConnectionbrokerconnectiontypeTipo de conexão: sem broker, Accelero Cloud ou broker customizado
Facility IDbrokerfacilityidFacility ID da instalação (ver Facility ID)
TLSbrokerusetlsHabilita conexão TLS com o broker
BrokerbrokermqttURL/endereço do broker
PortbrokerportPorta do broker (ex.: 1883)
User namebrokerusernameUsuário do broker
PasswordbrokerpassSenha do usuário
Device IdbrokerboardidIdentificador do Barium usado no tópico (Device ID)

Conceitos básicos

Facility ID

Toda instalação deve possuir um Facility ID, identificador único da instalação. Por exemplo, em um condomínio fictício o Facility ID poderia ser cond5991.

O Facility ID faz parte do nome do tópico na comunicação com o broker MQTT, tanto nas mensagens publicadas (publish) quanto nas recebidas (subscribe). Para garantir a maior compatibilidade possível, recomenda-se o formato:

  • Máximo de 16 caracteres.
  • Caracteres utilizados — regexp [a-zA-Z0-9].

Device ID

Com exceção do tópico broadcast, todas as mensagens têm como origem ou destino um Barium específico. Cada equipamento possui um Device ID configurável que faz parte do tópico (ex.: barium07A6175A). O Device ID é configurado no campo Device Id da tela MQTT e corresponde ao parâmetro brokerboardid.

Estrutura de tópicos MQTT

A comunicação segue regras básicas na estrutura de tópicos para garantir que as mensagens sejam capturadas de forma eficiente.

O Facility ID sempre é o primeiro nível na estrutura. Por exemplo, um client que faça subscribe no tópico abaixo receberá todas as mensagens enviadas, tanto pelo servidor quanto pelos equipamentos:

cond5991/#

Todos os equipamentos Barium fazem subscribe automático no tópico broadcast abaixo, usado pelo servidor para enviar mensagens de controle, como keepalives:

cond5991/broadcast/to

Com exceção desse tópico broadcast, o restante das mensagens sempre tem como origem ou destino um Barium específico, identificado pelo Device ID no tópico:

cond5991/barium07A6175A/to (servidor → Barium específico)
cond5991/barium88/from (Barium → servidor)

A tabela a seguir resume a forma mais simples de realizar uma integração (facility = Facility ID; deviceid = Device ID do Barium):

TópicoOrigemDestino
facility/broadcast/toServidorTodos os dispositivos
facility/deviceid/toServidorEquipamento específico
facility/deviceid/from/#Equipamento específicoServidor
facility/+/from/#Todos os equipamentosServidor
Sobre ${alias} nos tópicos de resposta

No manual, os tópicos de resposta (ack) aparecem como ${facilityid}/${alias}/from/ack. O ${alias} corresponde ao mesmo Device ID (${deviceid}) do equipamento — o manual usa os dois termos de forma intercambiável.

Identificação das mensagens

Todas as mensagens são formatadas em JSON. A maior parte possui a chave msgid, número identificador da mensagem.

  • O valor de msgid deve estar entre 0 e 60000.
  • Nas mensagens que exigem resposta (ex.: confirmação de alteração de configuração), a resposta sempre deve referenciar o msgid original. Caso a resposta use um msgid diferente, a mensagem é ignorada.

Valores JSON

É importante respeitar o tipo de dado (string/int) na formatação JSON. Mensagens que não respeitem o tipo esperado são ignoradas e não tratadas pelo equipamento.

Dada a especificação:

{
"msgID": "integer(5)",
"timestamp": "string(12)"
}

Mensagens inválidas (tipo incorreto):

{
"msgID": "123",
"timestamp": "190101121314"
}
{
"msgID": 123,
"timestamp": 190101121314
}

Mensagem válida:

{
"msgID": 123,
"timestamp": "190101121314"
}

Alguns valores possuem tamanho máximo, indicado entre parênteses (ex.: string(12)). Esse limite deve ser respeitado para que a mensagem seja válida — "msgID": 123456 é inválido para um campo integer(5).

Há campos obrigatórios e opcionais. Caso falte um valor obrigatório, a mensagem é ignorada. No caso de valores opcionais, a ausência implica o uso de um valor default pré-determinado.


Mensagens enviadas pelo servidor

Salvo indicação contrária, o tópico de envio dessas mensagens é ${facilityid}/${deviceid}/to e o tópico de resposta (quando há) é ${facilityid}/${deviceid}/from/ack.

Solicitar envio de status (get_info)

O servidor pode solicitar ao equipamento que envie uma mensagem informando sua configuração atual.

ChaveValor/tipoObservações
cmd"get_info"Valor fixo
timestampstring(12)YYMMDDHHMMSS
{
"cmd": "get_info",
"timestamp": "210702123456"
}

Resposta: não há resposta direta. O equipamento enviará imediatamente uma mensagem de atualização de status (ver Info).

Reproduzir áudio (play)

O servidor pode solicitar ao equipamento que reproduza um arquivo de áudio localizado em sua memória ou em uma URL.

ChaveValor/tipoObservações
cmd"play"Valor fixo
msgidint(5)0 a 60000
modestring(16)Origem do arquivo: "file" = arquivo no Barium; "http" = arquivo em uma URL
filestring(128)Nome/URL do arquivo mp3
volumeint(3)Nível de volume a utilizar (0 a 100)
{
"cmd": "play",
"msgid": 1674,
"mode": "file",
"file": "bom_dia.mp3"
}

Resposta — tópico ${facilityid}/${deviceid}/from/ack:

ChaveValor/tipoObservações
cmd"play_ack"Valor fixo
timestampstring(12)YYMMDDHHMMSS
msgidint(5)ID da mensagem original
statusstring"done" ou "error"
{
"cmd": "play_ack",
"timestamp": "210702123456",
"msgid": 1674,
"status": "done"
}

Interromper reprodução (stop)

Finaliza a reprodução de um arquivo de áudio comandada anteriormente.

ChaveValor/tipoObservações
cmd"stop"Valor fixo
msgidint(5)ID da mensagem — 0 a 60000
{
"cmd": "stop",
"msgid": 1675
}

Resposta — tópico ${facilityid}/${deviceid}/from/ack:

ChaveValor/tipoObservações
cmd"stop_ack"Valor fixo
timestampstring(12)YYMMDDHHMMSS
msgidint(5)ID da mensagem original
statusstring"done" ou "error"
{
"cmd": "stop_ack",
"timestamp": "210702123456",
"msgid": 1675,
"status": "done"
}

Pausar reprodução (pause)

Suspende a reprodução de um arquivo de áudio comandada anteriormente.

ChaveValor/tipoObservações
cmd"pause"Valor fixo
msgidint(5)ID da mensagem — 0 a 60000
{
"cmd": "pause",
"msgid": 1676
}

Resposta — tópico ${facilityid}/${deviceid}/from/ack:

ChaveValor/tipoObservações
cmd"pause_ack"Valor fixo
timestampstring(12)YYMMDDHHMMSS
msgidint(5)ID da mensagem original
statusstring"done" ou "error"
{
"cmd": "pause_ack",
"timestamp": "210702123456",
"msgid": 1676,
"status": "done"
}

Continuar reprodução (resume)

Retoma a reprodução de um arquivo de áudio suspensa anteriormente.

ChaveValor/tipoObservações
cmd"resume"Valor fixo
msgidint(5)ID da mensagem — 0 a 60000
{
"cmd": "resume",
"msgid": 1677
}

Resposta — tópico ${facilityid}/${deviceid}/from/ack:

ChaveValor/tipoObservações
cmd"resume_ack"Valor fixo
timestampstring(12)YYMMDDHHMMSS
msgidint(5)ID da mensagem original
statusstring"done" ou "error"
{
"cmd": "resume_ack",
"timestamp": "210702123456",
"msgid": 1677,
"status": "done"
}

Ajustar relógio/calendário (set_date)

Embora o Barium ajuste o calendário via NTP e mantenha relógio interno com bateria, em alguns casos é necessário ajustar o relógio manualmente.

ChaveValor/tipoObservações
cmd"set_date"Valor fixo
timestampstring(12)Nova data/hora no formato YYMMDDHHMMSS
msgidint(5)0 a 60000
{
"cmd": "set_date",
"timestamp": "210702120132",
"msgid": 8431
}

Resposta:

{
"cmd": "datetime_adj",
"timestamp": "210702120132"
}

Arquivos de configuração

A leitura e o ajuste de parâmetros usam um par de comandos genéricos: getconfig / getconfig_ack (leitura) e setconfig / setconfig_ack (ajuste). O campo file identifica o arquivo de configuração; o objeto data contém os parâmetros, que variam por arquivo.

Ler arquivos de configuração (getconfig)

Lê os parâmetros de configuração do Barium. A mensagem contém o nome do arquivo; a resposta contém os dados.

Mensagem — tópico ${facilityid}/${deviceid}/to:

ChaveValor/tipoObservações
cmd"getconfig"Valor fixo
msgidint(5)0 a 60000
filestring(32)Nome do arquivo a ler
{
"cmd": "getconfig",
"msgid": 16049,
"file": "/config_time.json"
}

Resposta — tópico ${facilityid}/${deviceid}/from/ack. O cabeçalho (cmd: "getconfig_ack", timestamp, msgid, file) é comum; o objeto data traz os campos específicos do arquivo lido (ver tabelas a seguir).

{
"cmd": "getconfig_ack",
"timestamp": "210702120132",
"msgid": 16049,
"file": "/config_time.json",
"data": {
"ntpon": 1,
"ntphost": "ntp.iongrade.com.br",
"ntpzone": "-3",
"ntpdaylightsaving": 0
}
}

Ajustar arquivos de configuração (setconfig)

Envia parâmetros de configuração do Barium. A mensagem tem um cabeçalho com o nome do arquivo e o objeto data com os campos a alterar. Os dados são armazenados em memória não-volátil.

info

Nas mensagens setconfig os parâmetros não são obrigatórios — podem ser enviados apenas os que se deseja alterar; os demais são mantidos intactos. Algumas mudanças têm efeito imediato; outras exigem reboot (indicado em cada arquivo abaixo).

Mensagem — tópico ${facilityid}/${deviceid}/to:

ChaveValor/tipoObservações
cmd"setconfig"Valor fixo
msgidint(5)0 a 60000
filestring(32)Nome do arquivo a ajustar
dataobjectParâmetros do comando (depende do arquivo)
{
"cmd": "setconfig",
"msgid": 8431,
"file": "/config_volume.json",
"data": {
"volume": "60"
}
}

Resposta (comum a todos os setconfig) — tópico ${facilityid}/${deviceid}/from/ack:

ChaveValor/tipoObservações
cmd"setconfig_ack"Valor fixo
timestampstring(12)YYMMDDHHMMSS
msgidint(5)ID da mensagem original
statusstring"done" ou "error"
{
"cmd": "setconfig_ack",
"timestamp": "210702120132",
"msgid": 8431,
"status": "done"
}

Campos do objeto data por arquivo

As tabelas abaixo listam os campos do objeto data de cada arquivo de configuração. Os mesmos campos valem para a leitura (getconfig_ack) e para o ajuste (setconfig).

/config_wifi.json — WIFI

Parâmetros da conexão de rede WiFi. Exige reboot para ter efeito.

ChaveValor/tipoObservações
fixipint(1)0 = IP fixo; 1 = Usar DHCP
ipstring(15)Endereço IP a utilizar
dnsstring(15)Endereço IP do servidor DNS
gatewaystring(15)Endereço IP do gateway
subnetstring(15)Máscara da rede
ssidstring(32)Nome da rede WiFi a conectar
passstring(16)Password
authmodestring(1)"0" = OPEN; "1" = WEP; "2" = WPA_PSK; "3" = WPA2_PSK; "4" = WPA_WPA2_PSK; "5" = WPA2_ENTERPRISE; "6" = WPA3_PSK; "7" = WPA2_WPA3_PSK
{
"fixip": 1,
"ip": "192.168.17.176",
"gateway": "192.168.17.1",
"dns": "192.168.17.1",
"subnet": "255.255.0.0",
"ssid": "minharedewifi",
"pass": "senhasecreta",
"authmode": "2"
}

/config_mqtt.json — MQTT

Parâmetros da conexão com o broker MQTT (correspondem à tela MQTT CONFIG). Exige reboot para ter efeito.

ChaveValor/tipoObservações
brokerconnectiontypestring(1)"0" = Sem conexão com broker; "1" = Accelero Cloud; "2" = Custom broker
brokermqttstring(64)URL do broker
brokerportstring(5)Porta do broker
brokerusernamestring(16)Usuário do broker
brokerpassstring(16)Senha do usuário
brokerusetlsint(1)0 = Conexão normal; 1 = Usar TLS
brokerfacilityidstring(32)Facility ID
brokerboardidstring(32)Device ID do Barium
{
"brokerconnectiontype": "1",
"brokermqtt": "meumosquitto.com.br",
"brokerport": "1883",
"brokerusername": "admin",
"brokerpass": "senhasecreta",
"brokerusetls": 0,
"brokerfacilityid": "TESTE",
"brokerboardid": "barium07A6175A"
}
Resíduo de copy-paste na fonte

No manual, a observação do campo brokerboardid aparece como "Aurum Id" (e o exemplo usa "catraca1"), resquício de copy-paste do manual da controladora Aurum. Normalizado aqui para Device ID do Barium — semanticamente é o identificador do próprio anunciador no tópico MQTT.

/config_time.json — TIME

Parâmetros da conexão com o servidor NTP. Efeito imediato.

ChaveValor/tipoObservações
ntponint(1)0 = Não usa servidor NTP; 1 = Usa servidor NTP
ntphoststring(64)URL do servidor NTP
ntpzoneint(3)Timezone
ntpregionstring(16)Região
ntpdaylightsavingint(1)0 = Não ajusta horário de verão; 1 = Ajusta horário de verão
{
"ntpon": 1,
"ntphost": "ntp.iongrade.com.br",
"ntpzone": "-3",
"ntpregion": "20",
"ntpdaylightsaving": 0
}
note

Na tabela da fonte o campo de horário de verão aparece como int(1) sem nome; o exemplo JSON usa ntpdaylightsaving. Adotado ntpdaylightsaving (provável erro de digitação na fonte).

/config_volume.json — VOLUME

Volume de reprodução de áudio. Efeito imediato.

ChaveValor/tipoObservações
volumestring(3)Volume do áudio ("0" a "100")
{
"volume": "60"
}

/config_filecmd.json — INPUT CMD

Arquivo de áudio reproduzido quando comandado pela entrada digital de comando. Efeito imediato.

ChaveValor/tipoObservações
filenamestring(32)Nome do arquivo a ser reproduzido
{
"filename": "bom_dia.mp3"
}
note

A tabela de setconfig da fonte indica filename como string(3), enquanto a leitura (getconfig_ack) indica string(32). Adotado string(32), coerente com os nomes de arquivo dos exemplos (provável erro de digitação na fonte).


Mensagens enviadas pelo Barium

Status

Quando o Barium se conecta ao broker, envia uma mensagem com seu status "connected" para que o servidor monitore o estado da comunicação. A mensagem é publicada com a flag retain_message ativa.

Tópico: ${facilityid}/${deviceid}/from/status

ChaveValor/tipoObservações
cmd"status"Valor fixo
statusstring(12)"connected" (*) ou "disconnected"

(*) A mensagem "disconnected" é enviada pelo broker via LWT (Last Will and Testament) — ou seja, publicada caso o broker detecte falha de comunicação com o Barium.

{
"cmd": "status",
"status": "connected"
}

Resposta: não há.

Info

Ao ser ligado, e a cada 60 minutos, o Barium envia uma mensagem com seu estado atual para que o servidor monitore dados relevantes. A mensagem é publicada com a flag retain_message ativa.

Tópico: ${facilityid}/${deviceid}/from/info

ChaveValor/tipoObservações
cmd"info"Valor fixo
timestampstring(12)YYMMDDHHMMSS
boardidstringIdentificador único do equipamento
serialidstringNúmero de série de fabricação
versionstringVersão de firmware em uso
mediastringMídia de comunicação: "wired" ou "wireless"
iplocalstringConfiguração IP — endereço local
ipdnsstringConfiguração IP — servidor DNS
ipgatewaystringConfiguração IP — gateway
subnetmaskstringConfiguração IP — máscara de rede
{
"cmd": "info",
"timestamp": "210703123456",
"boardid": "barium75123456",
"serialid": "9991",
"version": "1.0.1",
"media": "wireless",
"iplocal": "192.168.0.77",
"ipdns": "8.8.8.8",
"ipgateway": "192.168.0.1",
"subnetmask": "255.255.255.0"
}

Resposta: não há.

Keepalive

A cada 30 segundos o Barium envia uma mensagem informando que está ativo.

Tópico: ${facilityid}/${deviceid}/from/change-ap

ChaveValor/tipoObservações
cmd"keepalive"Valor fixo
timestampstring(12)YYMMDDHHMMSS
uptimeint(9)Tempo de operação após o último reset
nrestartint(9)Quantidade de resets desde a fabricação
ncmqttint(9)Quantidade de reconexões ao broker após o reset
{
"cmd": "keepalive",
"timestamp": "210703123456",
"uptime": 15398,
"nrestart": 23,
"ncmqtt": 1
}

Resposta: não há.


Documentos relacionados