Integração BACnet/IP
O BACnet/IP (ASHRAE 135) é o protocolo padrão para AVAC comercial: unidades de tratamento de ar (UTA), caixas VAV, chillers, controladores de bombas de calor, contadores de energia e sistemas de gestão técnica centralizada (GTC). O HyperVisu lê e escreve nos objetos de dispositivos BACnet — uma entrada analógica para temperatura, um valor analógico para setpoint, um valor binário para habilitação, um valor multi-estado para velocidade de ventilador — via UDP na rede local. Os valores são recebidos por subscrição de alteração de valor (COV) quando o dispositivo a suporta, e por polling nos restantes casos; a seleção é feita automaticamente por objeto.
Requisitos: serviço BACnet/IP ativo (consulte "Serviços e Protocolos"), endereço IP do dispositivo (ou o endereço do router BACnet associado), porta UDP (padrão 47808), opcionalmente a instância do dispositivo (device instance), e os objetos pretendidos (tipo e instância) — ou utilize a deteção automática e o seletor de objetos.
Ligações. O BACnet/IP suporta múltiplas ligações: uma ligação por dispositivo BACnet (consulte "Ligações"). O servidor abre um único socket UDP para todas elas. Campos:
| Campo | Descrição |
|---|---|
| Device address | Endereço IP do dispositivo BACnet ou do router associado. |
| Port | Porta UDP em que o dispositivo escuta (padrão 47808). |
| Device instance | Instância do objeto de dispositivo BACnet (0–4194302). Deixe em branco para ignorar a verificação; se definida, um dispositivo com outra instância reportará erro. |
| COV subscription lifetime | Duração da subscrição de alteração de valor antes da renovação. Deixe em branco para assumir o valor padrão do serviço (600 s). |
| Poll Interval (seconds) | Frequência de leitura dos pontos sem subscrição COV (padrão 30 s). O COV é o método rápido, pelo que um ciclo de polling mais longo é normal. |
Criar a ligação. Em Add connection, selecione o cartão BACnet e introduza um Instance Name e o Device address; Port e Device instance são opcionais (uma porta vazia assume o padrão 47808). O assistente não efetua varrimento de rede e não cria ligações sem endereço: se ainda não souber o endereço, insira um temporário e corrija-o posteriormente com a pesquisa. Clique em Create connection; a nova ligação abre nas respetivas definições.
Scan network. O varrimento só está disponível numa ligação guardada. Junto a Where it connects, clique em Scan network. A janela BACnet devices on the network envia um Who-Is por broadcast e lista todos os dispositivos que responderam — Device 192.168.1.255) quando os broadcasts são filtrados entre VLANs, ou o IP direto de um dispositivo (192.168.1.70:47808) — a única forma de alcançar dispositivos em portas não padrão. Scan again repete o varrimento; o último resultado é mantido enquanto a janela estiver fechada.
📘 Nota: Already configured identifica um dispositivo ao qual uma ligação já aponta, seja por endereço e porta ou por instância. A ligação em edição também é contabilizada, pelo que o seu próprio controlador pode apresentar esta indicação.
Test envia um Who-Is direto ao dispositivo e valida a resposta — incluindo a instância do dispositivo, caso tenha sido definida. O resultado indica a instância do dispositivo que respondeu; se responder o dispositivo incorreto, o teste falha indicando ambas as instâncias. Na janela Add connection, Test valida os valores introduzidos. Numa ligação guardada, testa os valores gravados e não os campos pendentes de gravação: clique primeiro em Save connection e depois em Test.

Associação de um objeto (consulte "Associação BACnet/IP" abaixo). Por cada objeto, selecione o Object type e o Instance number; o sistema armazena o endereço no formato <ligação>:<tipo>:<instância>, ex.: 5:AV:12 (Analog Value 12 na ligação 5). Tipos de objetos:
| Tipo | Objeto BACnet | Valor | Notas |
|---|---|---|---|
AI / AO / AV | Analog input / output / value | Número | AO é comandável. |
BI / BO / BV | Binary input / output / value | 0/1 | BO é comandável. |
MSI / MSO / MSV | Multi-state input / output / value | Número inteiro, a começar em 1 | MSO é comandável. |
A cadeia de tipo de dados do objeto contém as opções disponíveis no editor: [TYPE][:PROP=<id>][:PRIORITY=<1-16>][:COV=AUTO | Y | N][:SCALE=<f>][:OFFSET=<f>]:
| Campo | Guardado como | Significado |
|---|---|---|
| Value type | REAL / BOOL / UINT / INT / ENUM | Tipo de dados BACnet utilizado na escrita. Mantenha em Automatic — é deduzido a partir do tipo de objeto — exceto se estiver a endereçar uma propriedade específica. |
| Property identifier | PROP= | 85 corresponde a present-value, utilizado na grande maioria das associações. Altere apenas para propriedades específicas de fabricante. |
| Scale / Offset | SCALE= / OFFSET= | Leitura: valor = bruto × escala + offset; a escrita aplica o inverso. Executado no próprio protocolo, antes de qualquer transformação no objeto (consulte "Transformações de Valores e Diagnóstico") — não aplique escalas em ambos os locais. |
| Change-of-value subscription | COV= | Automatic — subscreve, recorrendo a polling em caso de recusa (padrão). Required — gera aviso se o dispositivo recusar. Never — utiliza sempre polling. A subscrição reporta apenas a propriedade 85 (present-value); para outras propriedades é feito polling. Apresentado em How updates arrive em objetos de leitura. |
| Write priority | PRIORITY= | Prioridade de comando BACnet de 1 a 16 para objetos comandáveis. Deixe vazio para não enviar prioridade (o dispositivo assume 16). Apresentado em Commanding em objetos de escrita. |
📘 Nota: Os valores multi-estado BACnet começam em 1, enquanto os modos no HyperVisu começam em 0. Configure o offset para
-1numa associação multi-estado, exceto se o dispositivo utilizar base 0 — o editor apresenta um lembrete. Os valores brutos em base 1 são mantidos propositadamente para coincidirem com os valores apresentados no YABE ou na GTC.
Seletor de objetos. Com a ligação ativa, o editor lista os Objects on this device — a tabela de objetos interna do dispositivo com nome, tipo, instância, valor atual e unidade (ex.: AI:0 · SupplyAirTemp · 21.5 °C). Utilize Find an object para pesquisar por nome, descrição ou AV:12, clique numa linha para preencher o tipo e a instância (e Units, se o campo estiver vazio e o controlador fornecer unidade), e Re-read para atualizar. A lista de objetos é mantida em memória durante um minuto; Re-read força uma nova leitura. O tipo e a instância permanecem editáveis: se a lista apresentar Object list unavailable ou o dispositivo recusar a enumeração, o ponto pode ser associado manualmente.

Comportamentos relevantes
- COV prioritário, polling de segurança. Os pontos subscritos são atualizados pelo dispositivo conforme variam, saindo da fila de polling; a subscrição é renovada antes de expirar. Se o dispositivo recusar a subscrição, passa a ser feito polling. Um ciclo lento de verificação (a cada 10 intervalos de polling) lê os pontos subscritos para recuperar subscrições perdidas após o reinício de um dispositivo.
- Polling em lote (batched) (várias propriedades por pedido), alternando para leitura individual em dispositivos sem suporte para pedidos agrupados.
- Feedback de escrita. Após a escrita, um ponto sem subscrição COV ativa apresenta imediatamente o valor escrito em vez de reverter até ao próximo ciclo de polling; com COV, a própria notificação do dispositivo confirma o valor.
- Estado. O UDP não estabelece ligação persistente, pelo que up significa "respondeu recentemente" (no dobro do intervalo de polling, mín. 90 s) e down significa ausência de resposta; um dispositivo sem resposta é testado periodicamente (a cada 30 s após cinco falhas) e regressa automaticamente ao estado up assim que responder.
- Tabelas de prioridade. Um objeto comandável tem 16 níveis de prioridade. Se uma GTC escrever num nível de prioridade numérica inferior (mais prioritário), sobrepõe-se ao HyperVisu e o dispositivo parecerá ignorar o widget — o editor alerta para este comportamento em tipos comandáveis; Write priority permite ajustar o nível de envio.
Associações típicas: interruptor em BV/BO; dimmer ou estore em AV/AO (0–100); temperatura de climatização em AI (Entrada), setpoint em AV (Entrada/Saída) e modo em MSV com offset -1; contador em AI com escala ajustada à unidade; velocidade de ventilador em MSV/MSO com offset -1.
Exemplo prático — controlador de unidade de tratamento de ar
Controlador BACnet com ID 1234 em 192.168.1.70:47808, com temperatura de insuflação AI:0, setpoint AV:1, habilitação BV:2 e velocidade do ventilador MSV:3 (1–4).
- Ative o BACnet/IP em Serviços (consulte "Serviços e Protocolos").
- Crie uma ligação BACnet (consulte "Ligações"): em Add connection, introduza o Device address
192.168.1.70e clique em Create connection. Na ligação guardada, clique em Scan network, selecione o Device 1234 e clique em Use this device; mantenha o intervalo de polling em30. Clique em Save connection e depois em Test: o resultado confirmará a instância 1234. - Em Devices, adicione uma Analog input "UTA Insuflação" e selecione a ligação BACnet em Protocol — no respetivo objeto de valor, escolha
AI:0no seletor. - Adicione uma Analog output "UTA Setpoint": objeto
AV:1, direção In/Out, tipo de valor Automatic. - Adicione um Switch "UTA Habilitação": objeto
BV:2. - Adicione um dispositivo Analog output chamado "UTA-2 Velocidade Ventilador": associe o objeto a
MSV:3com offset-1(os estados BACnet 1–4 passam a 0–3). Um objeto multi-estado requer um widget numérico — o widget de Ventilação gere velocidades através de objetos on/off individuais, não suportando valores multi-estado. - Clique em Save object em cada objeto, clique em Apply changes na barra lateral e confirme. A temperatura de insuflação é atualizada por COV; os restantes pontos seguem o polling ou as respetivas subscrições.
Associação BACnet/IP
Os objetos BACnet são configurados na janela de definições do objeto (consulte "Definições de Objeto, Registo e Notificações"). Os cartões incluem:
Objeto BACnet
| Campo | Descrição |
|---|---|
| Objects on this device | Lista de objetos interna do dispositivo — AI:0 · nome · valor atual unidade — com Find an object (nome, descrição ou AV:12) e Re-read. Clique numa linha para preencher os dois campos abaixo. Visível se a ligação e o serviço BACnet/IP estiverem ativos; caso contrário, insira o tipo e instância manualmente. |
| Object type | Analog input / output / value (AI/AO/AV), Binary input / output / value (BI/BO/BV), Multi-state input / output / value (MSI/MSO/MSV). |
| Instance number | Instância do objeto no dispositivo (0–4194302). O endereço guardado é <ligação>:<tipo>:<instância>, ex.: 5:AV:12. |
Valor e escala
| Campo | Descrição |
|---|---|
| Value type | Automatic (inferido do tipo de objeto — REAL para analógico, ENUM para binário, UINT para multi-estado) ou formato explícito REAL / BOOL / UINT / INT / ENUM, utilizado na escrita. |
| Property identifier | 85 corresponde a present-value e é a opção indicada para quase todas as integrações. Altere apenas para propriedades específicas do fabricante. |
| Scale / Offset | valor = bruto × escala + offset na leitura, o inverso na escrita. Processado internamente no protocolo, antes de qualquer transformação no objeto (consulte "Transformações de Valores e Diagnóstico") — não dimensione nos dois locais. Em objetos multi-estado, configure o offset para -1 (estados BACnet começam em 1, modos HyperVisu em 0). |
Receção de atualizações
| Campo | Descrição |
|---|---|
| Change-of-value subscription | Automatic — subscrever, fallback para polling (padrão), Required — avisar se recusado, ou Never — apenas polling. As subscrições reportam apenas o present-value; outras propriedades requerem polling. |
Comando (tipos de objeto comandáveis)
| Campo | Descrição |
|---|---|
| Write priority | Prioridade de comando BACnet de 1 a 16. Deixe vazio para não definir prioridade (o dispositivo assume 16). Outro sistema a escrever numa prioridade numérica inferior sobrepõe-se aos comandos do HyperVisu. |
Os tipos de objeto, a sintaxe dos dados e um exemplo prático encontram-se na secção BACnet/IP acima.
