Integração MQTT - IRIDIUM
Este documento descreve a API de desenvolvedor do protocolo de integração do módulo de I/O IRIDIUM. O conteúdo é de uso interno/restrito e não deve ser publicado no portal público.
Este documento especifica o protocolo e as mensagens trocadas entre o módulo de I/O IRIDIUM e um servidor externo quando um broker MQTT atua como intermediário da comunicação. 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 módulo de I/O ao servidor.
Fonte: IRIDIUM — Módulo de I/O, Manual de Integração MQTT v1.2 (dez/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.
- O fluxo de mensagens tem quatro naturezas:
- Mensagens enviadas de forma independente e automática pelo módulo de I/O (keepalives, atualizações de status).
- Mensagens enviadas pelo módulo de I/O sempre que ocorrem eventos específicos (alteração no estado de inputs, por exemplo).
- Mensagens enviadas de forma independente e automática pelo servidor (keepalives).
- Mensagens enviadas pelo servidor sempre que ocorrem eventos específicos (acionamento de relés, envio de configurações).
- Muitas mensagens exigem resposta. Por exemplo, uma mensagem enviada pelo servidor para comandar um output do módulo de I/O exige que o módulo gere uma nova mensagem-resposta informando o status da operação.
O módulo de I/O IRIDIUM não faz controle de acesso (não trata cartões, biometria, escort nem listas de identificadores). Seu protocolo MQTT é dedicado ao monitoramento de 8 entradas digitais e à atuação sobre 4 saídas a relé, além dos comandos comuns de operação, configuração e impressão de ticket.
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 deve ser configurado nos módulos de I/O e no servidor com o mesmo valor, e faz parte do nome do tópico na comunicação com o broker MQTT. Para garantir a maior compatibilidade possível, recomenda-se o formato:
- Máximo de 16 caracteres.
- Caracteres utilizados — regexp
[a-zA-Z0-9].
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 módulos de I/O:
cond5991/#
Todos os módulos de I/O 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 módulo de I/O específico. Cada módulo de I/O possui um alias/apelido que faz parte do tópico:
cond5991/modulodeio88/to (servidor → módulo de I/O específico)
cond5991/modulodeio88/from (módulo de I/O → servidor)
A tabela a seguir resume a forma mais simples de realizar uma integração (facility = Facility ID; alias = apelido do módulo de I/O):
| Tópico | Origem | Destino |
|---|---|---|
${facility}/broadcast/to | Servidor | Todos os módulos de I/O |
${facility}/${alias}/to | Servidor | Módulo de I/O específico |
${facility}/${alias}/from/# | Módulo de I/O específico | Servidor |
${facility}/+/from/# | Todos os módulos de I/O | Servidor |
Tópicos das variáveis de entrada e saída
Para monitoramento e atuação sobre variáveis existem tópicos específicos. O nome do tópico de monitoramento do valor de uma determinada variável é dado por:
${facility}/io/${boardId}/status/${variavel}
Para atuar sobre uma variável, o nome do tópico é dado por:
${facility}/io/${boardId}/setoutput/${variavel}
A tabela abaixo resume a formação dos tópicos de I/O:
| Tópico | Origem | Destino |
|---|---|---|
${facility}/io/${alias}/status/${variavel} | Módulo de I/O específico | Servidor |
${facility}/io/${alias}/setoutput/${variavel} | Servidor | Módulo de I/O específico |
O módulo de I/O IRIDIUM possui 8 entradas digitais e 4 saídas a relé. Os nomes das variáveis (${variavel}) são:
| Entrada/Saída | Nome da variável |
|---|---|
| Entrada 1 | input1 |
| Entrada 2 | input2 |
| Entrada 3 | input3 |
| Entrada 4 | input4 |
| Entrada 5 | input5 |
| Entrada 6 | input6 |
| Entrada 7 | input7 |
| Entrada 8 | input8 |
| Saída 1 | relay1 |
| Saída 2 | relay2 |
| Saída 3 | relay3 |
| Saída 4 | relay4 |
As variáveis input1..input8 (entradas) só geram mensagens de status (módulo → servidor). As variáveis relay1..relay4 (saídas) podem gerar mensagens de status e também ser comandadas via setoutput (servidor → módulo). Ver Atuar sobre variáveis de saída e Alteração de estado de variáveis.
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
msgiddeve estar entre 0 e 60000. - Nas mensagens que exigem resposta, a resposta sempre deve referenciar o
msgidoriginal. Caso seja gerada uma resposta commsgiddiferente do da solicitação original, a mensagem será ignorada pelo módulo de I/O.
Valores JSON
É importante respeitar o tipo de dado (string/int) na formatação JSON. Mensagens que não respeitem o tipo esperado serão ignoradas e não tratadas pelo módulo de I/O.
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}/${alias}/to (e o broadcast para keepalive), e o tópico de resposta (quando há) é ${facilityid}/${alias}/from/ack.
Keepalive
O servidor deve publicar periodicamente um keepalive para que os módulos de I/O determinem se devem entrar em modo de contingência. Caso o módulo de I/O não receba keepalive por mais de 2 minutos, entra automaticamente em contingência e só sai ao receber um keepalive com timestamp válido. Sugere-se publicar com a flag retain_message ativa.
Tópico: ${facilityid}/broadcast/to
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "keepalive" | Valor fixo |
timestamp | string(12) | Data/hora formato YYMMDDHHMMSS |
{
"cmd": "keepalive",
"timestamp": "191231123456"
}
Resposta: não há.
Solicitar envio de estado (get_info)
Solicita ao módulo de I/O que envie uma mensagem com informações sobre seu estado atual.
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "get_info" | Valor fixo |
timestamp | string(12) | YYMMDDHHMMSS |
{
"cmd": "get_info",
"timestamp": "191231123456"
}
Resposta: não há resposta direta. O módulo de I/O enviará imediatamente uma mensagem de atualização de estado (ver Info).
Buscar versão (get_version)
Obtém a versão do módulo de I/O com resposta específica. Útil para testes de comunicação.
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "get_version" | Valor fixo |
timestamp | string(12) | YYMMDDHHMMSS |
msgid | int(5) | 0 a 60000 |
{
"cmd": "get_version",
"timestamp": "191231123456",
"msgid": 5399
}
Resposta — tópico ${facilityid}/${alias}/from/ack:
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "version" | Valor fixo |
timestamp | string(12) | YYMMDDHHMMSS |
msgid | int(5) | ID da mensagem original |
version | string | Versão de firmware em uso |
{
"cmd": "version",
"timestamp": "210626084338",
"msgid": 5399,
"version": "1.1.0"
}
Upgrade de firmware (upgrade)
Instrui o módulo de I/O a realizar upgrade de firmware. A mensagem deve conter um endereço HTTP(S) de onde obter o firmware; o módulo faz um GET no endereço, baixa, valida e inicia automaticamente a atualização.
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "upgrade" | Valor fixo |
timestamp | string(12) | YYMMDDHHMMSS |
msgid | int(5) | 0 a 60000 |
protocol | string(5) | "http" ou "https" |
host | string | Endereço base do host |
port | int | Porta de conexão (geralmente 80 ou 443) |
path | string | URI do arquivo |
{
"cmd": "upgrade",
"timestamp": "191231123456",
"msgid": 9483,
"protocol": "https",
"host": "www.iongrade.com.br",
"port": 443,
"path": "/firmware/v1.17.3.bin"
}
Resposta (gerada após o upgrade) — tópico ${facilityid}/${alias}/from/ack:
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "upgrade_result" | Valor fixo |
timestamp | string(12) | YYMMDDHHMMSS |
msgid | int(5) | ID da mensagem original |
status | string | "done" ou "error" |
version | string | Versão de firmware em uso |
date | string(6) | Data de publicação da versão (YYMMDD) |
{
"cmd": "upgrade_result",
"timestamp": "191231123456",
"msgid": 9483,
"status": "done",
"version": "v1.17.2",
"date": "191231"
}
Forçar modo offline (force_offline)
Força o módulo de I/O a entrar em modo offline imediatamente. Útil para manutenções programadas, evitando que a entrada em offline ocorra por timeout de comunicação.
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "force_offline" | Valor fixo |
timestamp | string(12) | YYMMDDHHMMSS |
msgid | int(5) | 0 a 60000 |
{
"cmd": "force_offline",
"timestamp": "191231123456",
"msgid": 8431
}
Resposta: não há. Para voltar ao modo online é necessário enviar um keepalive.
Ajustar relógio/calendário (set_date)
Embora o módulo de I/O IRIDIUM ajuste o calendário via NTP e mantenha relógio interno sustentado por bateria, em alguns casos é necessário ajustar o relógio manualmente.
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "set_date" | Valor fixo |
timestamp | string(12) | Nova data/hora no formato YYMMDDHHMMSS |
msgid | int(5) | 0 a 60000 |
{
"cmd": "set_date",
"timestamp": "210311120132",
"msgid": 8431
}
Resposta:
{
"cmd": "datetime_adj",
"timestamp": "210311120132",
"msgid": 8431
}
Imprimir ticket QRCode (print)
Envia dados para impressão de um ticket em impressora conectada a uma das UARTs do módulo de I/O. A diretiva ${qrcode} no campo data determina onde o QR Code é impresso dentro do texto.
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "print" | Valor fixo |
timestamp | string(12) | YYMMDDHHMMSS |
msgid | int(5) | 0 a 60000 |
data | string(512) | Texto a imprimir; usar ${qrcode} para posicionar o QR Code |
qrcode | string(99) | QR Code a ser impresso |
port | int(1) | UART a ser utilizada (1 ou 2) |
topic | string(64) | Tópico onde a resposta deve ser publicada |
{
"cmd": "print",
"msgid": 22995,
"timestamp": "210626094902",
"data": "Seja bem vindo ${qrcode} Valido ate 31/12/2024",
"qrcode": "Conteudo do QRCode",
"port": 1,
"topic": "MEUFACILITY/iridiumABCD1234/returnfromprintjob/8181"
}
O parâmetro data contém os dados a serem impressos no ticket, com o texto e a posição do QR Code dentro dele. Para maior compatibilidade, sugere-se o envio exclusivo de caracteres ASCII (chars 20 a 126). Para quebras de linha, utilizar um caractere CR (char 10). A string ${qrcode} no campo data é substituída por um QR Code contendo os dados informados no campo qrcode.
Resposta — tópico definido em topic:
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "printer_status" | Valor fixo |
timestamp | string(12) | YYMMDDHHMMSS |
msgid | int(5) | ID da mensagem original |
port | int(1) | UART utilizada (1 ou 2) |
status | string | "ok" ou "ok low paper" ou "no paper" ou "print timeout" |
{
"cmd": "print_status",
"timestamp": "210626094901",
"msgid": 22995,
"port": 1,
"status": "done"
}
A tabela da resposta documenta cmd como "printer_status", mas o exemplo da fonte usa "print_status". Conferir o valor exato com o firmware antes de tratar a mensagem.
Atuar sobre variáveis de saída
Para atuar sobre variáveis de saída (acionar relés, por exemplo) deve-se enviar uma mensagem para o tópico específico daquela variável com o valor a ser escrito.
Tópico: ${facilityid}/io/${alias}/setoutput/${variavel}
Onde ${variavel} é uma das saídas a relé (relay1..relay4).
| Chave | Valor/tipo | Observações |
|---|---|---|
timestamp | string(12) | YYMMDDHHMMSS |
value | string(n) | Valor a escrever na variável: "0" = Desligado; "1" = Ligado |
{
"timestamp": "210625160134",
"value": "0"
}
Resposta: não há.
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 módulo de I/O IRIDIUM. A mensagem contém o nome do arquivo; a resposta contém os dados.
Mensagem — tópico ${facilityid}/${alias}/to:
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "getconfig" | Valor fixo |
msgid | int(5) | 0 a 60000 |
file | string(32) | Nome do arquivo a ler |
{
"cmd": "getconfig",
"msgid": 16041,
"file": "/config_time.json"
}
Resposta — tópico ${facilityid}/${alias}/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": "210626084700",
"msgid": 16041,
"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 módulo de I/O IRIDIUM. 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.
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}/${alias}/to:
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "setconfig" | Valor fixo |
msgid | int(5) | 0 a 60000 |
file | string(32) | Nome do arquivo a ajustar |
data | object | Parâmetros do comando (depende do arquivo) |
{
"cmd": "setconfig",
"msgid": 16041,
"file": "/config_relays.json",
"data": {
"relay1_default_state": "0",
"relay2_default_state": "0",
"relay3_default_state": "1",
"relay4_default_state": "0"
}
}
Resposta (comum a todos os setconfig) — tópico ${facilityid}/${alias}/from/ack:
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "setconfig_ack" | Valor fixo |
timestamp | string(12) | YYMMDDHHMMSS |
msgid | int(5) | ID da mensagem original |
status | string | "done" ou "error" |
{
"cmd": "setconfig_ack",
"timestamp": "191231123456",
"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_network.json — NETWORK
Tipo de rede usado na comunicação (WiFi ou Ethernet RJ45). Exige reboot para ter efeito.
| Chave | Valor/tipo | Observações |
|---|---|---|
networkmode | string(1) | "0" = Sem rede; "1" = Ethernet RJ45; "2" = WiFi; "5" = GSM 4G/5G |
Na leitura (getconfig) o campo networkmode admite "5" = GSM 4G/5G. Na tabela de ajuste (setconfig) do manual o valor "5" não aparece listado — confirmar com o firmware se o ajuste para GSM via setconfig é suportado.
/config_ethernet.json — ETHERNET
Parâmetros da conexão Ethernet RJ45. Exige reboot para ter efeito.
| Chave | Valor/tipo | Observações |
|---|---|---|
fixip | int(1) | 0 = IP fixo; 1 = Usar DHCP |
ip | string(15) | Endereço IP a utilizar |
dns | string(15) | Endereço IP do servidor DNS |
gateway | string(15) | Endereço IP do gateway |
subnet | string(15) | Máscara da rede |
/config_wifi.json — WIFI
Parâmetros da conexão WiFi. Exige reboot para ter efeito.
| Chave | Valor/tipo | Observações |
|---|---|---|
fixip | int(1) | 0 = IP fixo; 1 = Usar DHCP |
ip | string(15) | Endereço IP a utilizar |
dns | string(15) | Endereço IP do servidor DNS |
gateway | string(15) | Endereço IP do gateway |
subnet | string(15) | Máscara da rede |
ssid | string(32) | Nome da rede WiFi a conectar |
pass | string(16) | Password |
authmode | string(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 |
/config_modem.json — GSM 4G/5G
Parâmetros da conexão de rede GSM 4G/5G. Exige reboot para ter efeito.
| Chave | Valor/tipo | Observações |
|---|---|---|
modemtype | string(1) | "0" = Nenhum; "1" = BK-SIM7600 4G |
apn | string(15) | Nome da operadora |
user | string(15) | Usuário |
pass | string(15) | Password |
authenticateppp | int(1) | Fazer autenticação PPP. 0 = Não; 1 = Sim |
{
"modemtype": "1",
"apn": "claro.com.br",
"user": "claro",
"pass": "claro",
"authenticateppp": 1
}
/config_mqtt.json — MQTT
Parâmetros da conexão com o broker MQTT. Exige reboot para ter efeito.
| Chave | Valor/tipo | Observações |
|---|---|---|
brokerconnectiontype | string(1) | "0" = Sem conexão com broker; "1" = Accelero Cloud; "2" = Custom broker |
brokermqtt | string(64) | Host do broker |
brokerport | string(5) | Porta do broker |
brokerusername | string(16) | Usuário do broker |
brokerpass | string(16) | Senha do usuário |
brokerusetls | int(1) | 0 = Não utilizar TLS; 1 = Usar TLS |
brokerfacilityid | string(32) | Facility ID |
brokerclientid | string(32) | Client ID no broker |
{
"brokerconnectiontype": "1",
"brokermqtt": "meumosquitto.com.br",
"brokerport": "1883",
"brokerusername": "admin",
"brokerpass": "senhasecreta",
"brokerusetls": 0,
"brokerfacilityid": "TESTE",
"brokerclientid": "iridium3"
}
/config_time.json — TIME
Parâmetros da conexão com o servidor NTP. Exige reboot para ter efeito.
| Chave | Valor/tipo | Observações |
|---|---|---|
ntpon | int(1) | 0 = Não usa servidor NTP; 1 = Usa servidor NTP |
ntphost | string(64) | Host do servidor NTP |
ntpzone | int(3) | Timezone |
ntpregion | string(16) | Região |
ntpdaylightsaving | int(1) | 0 = Não ajusta horário de verão; 1 = Ajusta horário de verão |
Na fonte, a linha do campo de horário de verão aparece como int(1) na coluna de chave; pelo exemplo de mensagem o nome correto é ntpdaylightsaving. Adotado ntpdaylightsaving conforme o exemplo do manual.
/config_uarts.json — UARTS
Parâmetros das UARTs (portas seriais). Efeito imediato.
| Chave | Valor/tipo | Observações |
|---|---|---|
uart1active | int(1) | 0 = Inativa; 1 = Ativa |
uart1type | string(1) | "0" = Nenhum; "1" = Printer ATM 202 Ticket |
uart1baud | string(6) | "1200", "2400", "4800", "9600", "19200", "38400", "57600" ou "115200" |
uart2active | int(1) | Idem uart1active |
uart2type | string(1) | Idem uart1type |
uart2baud | string(6) | Idem uart1baud |
A tabela de leitura (getconfig) do arquivo UARTS no manual lista uart1type como "0" = Nenhum / "9" = Printer ATM 202 Ticket, enquanto a tabela de ajuste (setconfig) lista "0" = Nenhum / "1" = Printer ATM 202 Ticket. Os exemplos de mensagem da fonte usam "uart1type": "9". Há divergência entre leitura e ajuste na fonte — confirmar o valor exato com o firmware antes de usar.
/config_relays.json — RELAYS
Parâmetros das 4 saídas a relé. Efeito imediato.
| Chave | Valor/tipo | Observações |
|---|---|---|
relay1_default_state | string(1) | "0" = Desligado; "1" = Ligado |
relay2_default_state | string(1) | Idem relay1_default_state |
relay3_default_state | string(1) | Idem relay1_default_state |
relay4_default_state | string(1) | Idem relay1_default_state |
relay1_duration | string(3) | Tempo de duração da informação do relé 1 (*) |
relay2_duration | string(3) | Tempo de duração da informação do relé 2 (*) |
relay3_duration | string(3) | Tempo de duração da informação do relé 3 (*) |
relay4_duration | string(3) | Tempo de duração da informação do relé 4 (*) |
(*) O tempo de duração da informação indica o tempo (em segundos) em que a informação da variável deve ser considerada válida. Ao enviar uma informação sobre o estado de uma variável, o módulo de I/O reenvia ciclicamente a informação 5 segundos antes da duração caducar. O valor
"0"desliga o envio cíclico da informação.
{
"relay1_default_state": "0",
"relay2_default_state": "0",
"relay3_default_state": "0",
"relay4_default_state": "0",
"relay1_duration": "30",
"relay2_duration": "30",
"relay3_duration": "30",
"relay4_duration": "30"
}
/config_inputs.json — INPUTS
Parâmetros das 8 entradas de sinal. Efeito imediato.
| Chave | Valor/tipo | Observações |
|---|---|---|
input1_default_state | string(1) | "0" = Desligado; "1" = Ligado |
input2_default_state | string(1) | Idem input1_default_state |
input3_default_state | string(1) | Idem input1_default_state |
input4_default_state | string(1) | Idem input1_default_state |
input5_default_state | string(1) | Idem input1_default_state |
input6_default_state | string(1) | Idem input1_default_state |
input7_default_state | string(1) | Idem input1_default_state |
input8_default_state | string(1) | Idem input1_default_state |
input1_duration | string(3) | Tempo de duração da informação da entrada 1 (*) |
input2_duration | string(3) | Tempo de duração da informação da entrada 2 (*) |
input3_duration | string(3) | Tempo de duração da informação da entrada 3 (*) |
input4_duration | string(3) | Tempo de duração da informação da entrada 4 (*) |
input5_duration | string(3) | Tempo de duração da informação da entrada 5 (*) |
input6_duration | string(3) | Tempo de duração da informação da entrada 6 (*) |
input7_duration | string(3) | Tempo de duração da informação da entrada 7 (*) |
input8_duration | string(3) | Tempo de duração da informação da entrada 8 (*) |
(*) O tempo de duração da informação indica o tempo (em segundos) em que a informação da variável deve ser considerada válida. Ao enviar uma informação sobre o estado de uma variável, o módulo de I/O reenvia ciclicamente a informação 5 segundos antes da duração caducar. O valor
"0"desliga o envio cíclico da informação.
{
"input1_default_state": "0",
"input2_default_state": "0",
"input3_default_state": "0",
"input4_default_state": "0",
"input5_default_state": "0",
"input6_default_state": "0",
"input7_default_state": "0",
"input8_default_state": "0",
"input1_duration": "30",
"input2_duration": "30",
"input3_duration": "30",
"input4_duration": "30",
"input5_duration": "30",
"input6_duration": "30",
"input7_duration": "30",
"input8_duration": "30"
}
Mensagens enviadas pelo módulo de I/O
Keepalive (keepalive)
Enviado periodicamente para que o servidor monitore o status. Publicado com flag retain_message ativa.
Tópico: ${facilityid}/${alias}/from/keepalive
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "keepalive" | Valor fixo |
timestamp | string(12) | YYMMDDHHMMSS |
{
"cmd": "keepalive",
"timestamp": "191231123456"
}
Resposta: não há.
Info (info)
Enviada periodicamente com o estado atual do módulo de I/O. Publicada com flag retain_message ativa. Também é enviada imediatamente após o comando get_info.
Tópico: ${facilityid}/${alias}/from/info
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "info" | Valor fixo |
timestamp | string(12) | YYMMDDHHMMSS |
boardid | string | Identificador único do módulo de I/O |
version | string | Versão de firmware em uso |
media | string | Mídia de comunicação: "wired" ou "wireless" |
iplocal | string | Configuração IP — endereço local |
ipdns | string | Configuração IP — servidor DNS |
ipgateway | string | Configuração IP — gateway |
subnetmask | string | Configuração IP — máscara de rede |
uart1active | int(1) | 0 (inativo) ou 1 (ativo) |
uart1desc | string | Descrição do dispositivo conectado |
uart2active | int(1) | 0 (inativo) ou 1 (ativo) |
uart2desc | string | Descrição do dispositivo conectado |
{
"cmd": "info",
"timestamp": "210626074341",
"boardid": "iridium15BF9CE8",
"version": "1.1.0",
"media": "wireless",
"iplocal": "192.168.17.70",
"ipdns": "192.168.17.1",
"ipgateway": "192.168.17.1",
"subnetmask": "255.255.0.0",
"uart1active": 1,
"uart1desc": "Printer ATM 202 Ticket",
"uart2active": 1,
"uart2desc": "Printer ATM 202 Ticket"
}
Resposta: não há.
Status (status)
O módulo de I/O IRIDIUM envia periodicamente seu status atual de conexão. Publicada com flag retain_message ativa.
Tópico: ${facilityid}/${alias}/from/status
| Chave | Valor/tipo | Observações |
|---|---|---|
cmd | "status" | Valor fixo |
status | string(12) | "connected" ou "disconnected" |
A mensagem com status "disconnected" é enviada pelo broker via LWT (Last Will Testament), ou seja, quando o broker detecta a falha de comunicação com o módulo de I/O IRIDIUM.
{
"cmd": "status",
"status": "connected"
}
Resposta: não há.
Alteração de estado de variáveis
O módulo de I/O IRIDIUM envia uma mensagem sempre que há alteração de status de variáveis de entrada e saída. Existe um tópico específico para cada variável (input1..input8, relay1..relay4).
Tópico: ${facilityid}/io/${alias}/status/${variavel}
| Chave | Valor/tipo | Observações |
|---|---|---|
timestamp | string(12) | YYMMDDHHMMSS |
value | string(1) | Valor da variável: "0" = Desligada; "1" = Ligada |
delta | string(1) | Alteração de valor desde a última informação: "0" = Não houve alteração; "1" = Houve alteração |
timestampdelta | string(12) | YYMMDDHHMMSS do horário da última alteração de valor |
duration | string(3) | Tempo (s) em que esta informação pode ser considerada válida |
{
"timestamp": "210630054437",
"value": "0",
"delta": "0",
"duration": "30",
"timestampdelta": "210630054231"
}
Resposta: não há.