Saltar para o conteúdo
Elausys

HyperVisu / Integrações

Dispositivos virtuais e Node-RED

Widgets virtuais, fluxos Node-RED personalizados no equipamento e a sua interligação.

elausys · 29 julho 2026
Nesta página

Dispositivos virtuais

Um dispositivo virtual não tem qualquer ligação física — o próprio servidor conserva o seu estado. Os dispositivos virtuais interligam as funções das instalações avançadas. Utilizações típicas:

  • Pontos controlados por fluxos Node-RED (abaixo).
  • Grupos de dispositivos — um grupo é um widget virtual que controla os seus membros (ver «Grupos de dispositivos»).
  • Saídas de lógica materializadas — a saída de uma função transformada num widget real (ver «Configuração de funções e saídas»).
  • Indicadores e valores de referência para automatizações («Modo de férias», «Desvio da temperatura pretendida»).

Crie-os na área de trabalho Dispositivos como qualquer outro widget, com Protocol definido como VIRTUAL. Para cada objeto, configure:

DefiniçãoSignificado
Range - Min / Range - MaxOs valores que o objeto aceita. Um valor escrito do exterior (por um fluxo ou pelo webhook) fora do intervalo é recusado; um objeto novo começa com 0 a 100.
Persist StateSe o valor atual é conservado após reiniciar o servidor. Ative para indicadores e valores de referência; deixe desativado para sinais momentâneos.

Um objeto virtual não tem definição de valor predefinido. Ative Persist State se o último valor tiver de ser recuperado após um reinício. O Object ID apresentado sob o título da caixa de diálogo do objeto é o identificador que um fluxo ou o webhook utiliza para endereçar o objeto.

As definições de objeto de um widget virtual.

Node-RED

O Node-RED é um serviço opcional do servidor (ative-o em «Serviços e protocolos») para criar fluxos personalizados — pontes MQTT, API de cloud específicas, lógica à medida que não se enquadra no motor de lógica ou um controlador para um dispositivo que o HyperVisu não suporta.

  • Ativar: em Services, ative Node-RED. A linha mostra Changes need a restart; clique em Restart Server na faixa Pending Changes e aguarde que o servidor volte a estar disponível.
  • Abrir: quando o serviço estiver em execução, Node-Red aparece no grupo APPS da barra lateral de administração. Clique para abrir o editor de fluxos num novo separador.
  • Ligação: inicie sessão com a sua conta HyperVisu.
  • Controlar dispositivos: os nós Hypervisu da paleta leem e escrevem diretamente nos dispositivos HyperVisu (ver «Os nós HyperVisu» abaixo). Os dispositivos virtuais são o ponto de encontro natural: o fluxo calcula, o dispositivo virtual apresenta o resultado e participa em cenários, automatizações e vistas como qualquer outro dispositivo.
  • API webhook: os fluxos e os sistemas de terceiros também podem utilizar a API webhook de dispositivos, protegida pela verificação do número de série (ver «Webhooks e API de terceiros»). O interruptor Webhooks da página Services tem de estar ativo (ver «Serviços e protocolos»). Mantenha o número de série secreto: quem o conhecer pode escrever através do webhook.

💡 Sugestão: prefira o motor de lógica (ver «Motor de lógica — Conceitos e tela») para a lógica habitual dos edifícios — é monitorizada, validada e visível para os residentes. Utilize o Node-RED para o que exige código.

Os nós HyperVisu

O Node-RED do servidor inclui uma categoria Hypervisu na paleta: um nó por tipo de dispositivo, um nó Input Target, dois nós de comandos globais e um nó Scenario. Um nó de dispositivo representa um dispositivo HyperVisu. Envie-lhe uma mensagem para comandar o dispositivo; quando o dispositivo muda, o nó emite o novo valor por uma das suas saídas.

A paleta deslocada até à categoria Hypervisu.
NóTipo de dispositivo (ver «Visão geral dos tipos de widgets»)Entradas → saídas
PushbuttonBotão de pressãoQualquer mensagem → 1 saída
Light Switch, SwitchInterruptor de iluminação, interruptor2 destinos → 2 saídas
Analog OutputSaída analógicaUm número → 1 saída
Shutter / BlindEstore / persiana8 destinos → 8 saídas
Temperature ControllerTemperatura / termóstato5 destinos → 5 saídas
DimmerRegulador de luminosidade4 destinos → 4 saídas
RGB DimmerRegulador de luminosidade RGB4 destinos → 4 saídas
Tunable White DimmerRegulador de branco ajustável6 destinos → 6 saídas
Analog InputEntrada analógicaUm número → 1 saída
Digital InputEntrada digitaltrue / false → 1 saída
Text InputEntrada de textoUm texto → 1 saída
AlarmAlarme7 destinos → 7 saídas
AudioÁudio13 destinos → 13 saídas
VentilationVentilação10 destinos → 10 saídas
Air ConditioningAr condicionado11 destinos → 11 saídas
Door LockFechadura de porta2 destinos → 2 saídas
MeterContador4 destinos → 4 saídas
ChargerCarregador de veículo elétrico8 destinos → 8 saídas
Global Lights, Global ShuttersTodas as luzes ou estores de uma divisão ou categoriaLigar / desligar, subir / descer — sem saída
ScenarioUm cenárioQualquer mensagem o executa — sem saída
Input Target—Adiciona o nome do destino a uma mensagem (ver «O nó Input Target»)

Como os nós acedem ao servidor. O Node-RED do servidor inclui um subfluxo Hypervisu já colocado num separador de fluxo, junto dos nós que encaminham mensagens de e para os nós de dispositivo (um nó de ligação, um nó Widget out e um nó de reencaminhamento). O subfluxo inicia sessão no servidor com uma conta de serviço dedicada, carrega as divisões, categorias, dispositivos e cenários e mantém a ligação em tempo real aberta. Deixe estes nós no lugar: sem eles, os nós de dispositivo têm listas vazias e não emitem mensagens. A paleta também inclui um nó Msg Forwarder: faz parte deste encaminhamento e já está colocado — não adicione outro aos seus fluxos.

O separador de fluxo Dashboard.

⚠️ Aviso: os fluxos atuam com todos os direitos e um nó Global Lights ou Global Shutters atua sobre todos os dispositivos correspondentes da divisão ou categoria, incluindo os físicos.

Adicionar um nó de dispositivo

Requisitos: serviço Node-RED ativo (ver «Node-RED» acima), servidor ativado e dispositivo criado na área de trabalho Dispositivos.

  1. No editor Node-RED, arraste o nó do tipo de dispositivo da categoria Hypervisu da paleta para o fluxo.
  2. Faça duplo clique no nó. A caixa de diálogo apresenta as divisões, categorias e dispositivos da instalação.
  3. Escolha Room, depois Category e, em seguida, Widget (o dispositivo). Cada lista filtra a seguinte. O dispositivo tem de ser do tipo do nó: um nó Dimmer apresenta apenas reguladores de luminosidade.
  4. Verifique Description e a lista de objetos por baixo: apresentam os objetos do dispositivo com os respetivos Object IDs, para confirmar que escolheu o dispositivo certo.
  5. Name to display é preenchido automaticamente como «Room - Device». Altere-o se pretender outro rótulo na tela.
  6. Clique em Done.
  7. Ligue um nó inject (ou qualquer nó que produza um valor) à entrada e um nó debug a cada saída que pretenda observar.
  8. Clique em Deploy.
A caixa de diálogo aberta do nó Light Switch.

Se um dispositivo que acabou de criar não aparecer nas listas, reinicie os fluxos (menu Deploy → Restart Flows), recarregue a página do editor e abra novamente a caixa de diálogo.

Mensagens de entrada e saída

Uma mensagem para um nó de dispositivo contém duas propriedades:

PropriedadeConteúdo
msg.inputTargetO objeto do dispositivo a que se destina o valor, identificado pelo nome — por exemplo Switch On/OFF ou Dimming setpoint. Os nomes por nó constam da «Referência dos nós», abaixo. Utilize um nó Input Target para o definir (ver «O nó Input Target»).
msg.payloadO valor: true / false, um número, um texto ou um objeto RGB {"red": 255, "green": 120, "blue": 0}.

Uma mensagem emitida por uma saída contém o valor em msg.payload e o Object ID do objeto em msg.topic. A saída n corresponde ao destino n da lista do nó, pela mesma ordem.

Os destinos de um nó são de dois tipos:

  • Comandos (Switch On/OFF, Dimming setpoint, Up/Down output…) — o envio comanda o dispositivo, tal como um toque na aplicação.
  • Retornos de estado (Feedback, Status feedback, Actual setpoint, Temperature…) — o estado comunicado pelo dispositivo. Uma escrita a partir de um fluxo atualiza o valor apresentado pelo HyperVisu; nada é enviado ao dispositivo.

Quando as saídas são acionadas:

Saída de um…É acionada quando
Destino de comandoo fluxo envia esse destino (o valor sai de imediato); a aplicação, um cenário, uma automatização ou outro fluxo comanda o dispositivo — apenas quando o valor muda.
Destino de retorno de estadoo dispositivo comunica um valor — sempre, mesmo quando se repete.

ℹ️ Nota: os nomes distinguem maiúsculas de minúsculas. Uma mensagem com nome desconhecido, ou sem msg.inputTarget num nó que o exige, é ignorada sem erro — por exemplo Switch ON/OFF em vez de Switch On/OFF.

Node-RED como controlador de dispositivo

O Node-RED pode assegurar a ligação a um dispositivo para o qual o HyperVisu não dispõe de protocolo:

  1. Crie um dispositivo virtual do tipo adequado (ver «Dispositivos virtuais» acima).
  2. Adicione o respetivo nó a um fluxo. Ligue as saídas de comando aos nós que comunicam com o dispositivo real (HTTP, MQTT, série…).
  3. Ligue as respostas do dispositivo real de volta ao nó, através de um nó Input Target definido para o destino de retorno de estado correspondente.

Os residentes utilizam o dispositivo nas aplicações como habitualmente; o fluxo transmite os comandos e devolve o estado.

A barra lateral de depuração após uma injeção «ON» no nó Light Switch.

O nó Input Target

O nó Input Target define msg.inputTarget a partir de uma lista, para não ter de escrever os nomes.

  1. Arraste um nó Input Target para entre a origem do valor e o nó de dispositivo.
  2. Faça duplo clique nele.
  3. Em Widget, escolha o tipo de dispositivo (Dimmer, Shutter/Blind, Audio…).
  4. Em Input, escolha o destino. A lista apresenta os destinos desse tipo pela ordem das saídas do nó de dispositivo.
  5. Preencha Name, se pretender. Sem nome, o nó apresenta o nome do destino na tela.
  6. Clique em Done e depois em Deploy.
A caixa de diálogo aberta do nó Input Target.

O nó reencaminha todas as mensagens com msg.inputTarget adicionado e apresenta por baixo o último valor: um ponto verde com Value: …, ou um anel vermelho com No input target selected quando Input está vazio. Um nó de dispositivo tem geralmente vários nós Input Target antes dele, um por destino utilizado.

💡 Sugestão: num nó function, defina a mesma propriedade — msg.inputTarget = "Dimming setpoint"; msg.payload = 40; return msg;. Uma função pode depois enviar vários destinos em sequência com node.send().

Referência dos nós

Cada entrada apresenta os destinos pela ordem das saídas. C = comando, F = retorno de estado. Os exemplos provêm de um fluxo de teste com dispositivos virtuais: nós inject à esquerda, nós Input Target no meio, o nó de dispositivo e um nó debug por saída à direita.

Importar um exemplo

Cada exemplo abaixo é disponibilizado como ficheiro que pode importar no seu Node-RED. Os nós de dispositivo destes ficheiros não estão associados a nenhum dispositivo: apresentam «(set device)» no nome.

  1. Transfira o ficheiro de exemplo.
  2. No editor Node-RED, abra o menu principal (☰) e escolha Import.
  3. Clique em select a file to import e escolha o ficheiro, ou cole o seu conteúdo na caixa de diálogo.
  4. Escolha current flow ou new flow, clique em Import e depois na tela para colocar o grupo.
  5. Faça duplo clique no nó de dispositivo e escolha Room, Category e Widget da sua instalação (ver «Adicionar um nó de dispositivo»). Para Global Lights e Global Shutters, escolha uma divisão ou categoria; para Scenario, um cenário. Clique em Done.
  6. Clique em Deploy.

⚠️ Aviso: os nós inject de um exemplo comandam o dispositivo assim que lhes clica. Associe primeiro os exemplos a um dispositivo de teste ou virtual e defina o dispositivo antes de implementar — um nó sem dispositivo limita-se a registar erros.

Botão de pressão

EntradaSaída
Qualquer mensagem — msg.inputTarget e msg.payload não são necessários1 · o valor enviado, sempre que o botão é utilizado (aplicação, cenário ou fluxo), assim que o servidor o recebe

O subtipo do dispositivo determina o valor: ON envia true, OFF envia false, Toggle envia o contrário do último valor.

O exemplo Pushbutton.

Pushbutton.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Interruptor de iluminação e interruptor

#DestinoTipoValor
1Switch On/OFFCtrue / false
2FeedbackFtrue / false
O exemplo Light Switch.

Light-Switch.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

O exemplo Switch.

Switch.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Saída analógica

EntradaSaída
Um número em msg.payload, dentro do intervalo do dispositivo; msg.inputTarget é opcional (Analog Output)1 · Comando — o valor, sempre que o dispositivo é comandado (aplicação, cenário, automatização ou fluxo)
O exemplo Analog Output.

Analog-Output.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Estore / persiana

#DestinoTipoValor
1Up/Down outputCfalse = subir, true = descer
2Stop outputCtrue = parar
3Blind Position inputFposição 0–100 %
4Blind Position outputCposição 0–100 %
5Moving Up inputFtrue durante a subida
6Moving Down inputFtrue durante a descida
7Slat Position inputFângulo das lâminas 0–100 %
8Slat Position outputCângulo das lâminas 0–100 %

As posições seguem a regra do HyperVisu: 100 % significa totalmente fechado. Os destinos das lâminas só existem em estores com lâminas. As saídas 1 e 2 são acionadas em cada comando, mesmo quando o valor se repete.

O exemplo Shutter / Blind.

Shutter-Blind.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Controlador de temperatura

#DestinoTipoValor
1SetpointC°C
2TemperatureFtemperatura medida, °C
3Actual setpointF°C
4Mode SelectionCnúmero do modo: 1 Conforto, 2 Espera, 3 Noite
5Actual modeFnúmero do modo
O exemplo Temperature Controller.

Temperature-Controller.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Regulador de luminosidade

#DestinoTipoValor
1Switch On/OFFCtrue / false
2Status feedbackFtrue / false
3Dimming setpointC0–100 %
4Dimming feedbackF0–100 %
O exemplo Dimmer.

Dimmer.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Regulador de luminosidade RGB

#DestinoTipoValor
1Switch On/OFFCtrue / false
2Status feedbackFtrue / false
3RGB setpointC{"red": 0–255, "green": 0–255, "blue": 0–255}
4RGB feedbackFmesmo formato
O exemplo RGB Dimmer.

RGB-Dimmer.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Regulador de branco ajustável

#DestinoTipoValor
1Switch On/OFFCtrue / false
2Status feedbackFtrue / false
3Dimming setpointCluminosidade 0–100 %
4Dimming feedbackFluminosidade
5Temperature setpointCtemperatura de cor, dentro do intervalo do objeto do dispositivo
6Temperature feedbackFtemperatura de cor
O exemplo Tunable White Dimmer.

Tunable-White-Dimmer.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Entrada analógica e entrada digital

NóEntradaSaída
Analog InputUm número em msg.payload, dentro do intervalo do dispositivo; msg.inputTarget opcional (Analog Input)1 · o valor, sempre que o dispositivo comunica um
Digital Inputtrue / false; msg.inputTarget opcional (Digital Input)1 · o estado, sempre que o dispositivo comunica um

São medições: um valor escrito por um fluxo só sai pela saída depois de o servidor o armazenar, não no momento em que o fluxo o envia.

O exemplo Analog Input.

Analog-Input.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

O exemplo Digital Input.

Digital-Input.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Entrada de texto

EntradaSaída
Um texto em msg.payload; msg.inputTarget opcional (Text)1 · o texto, sempre que muda no servidor

O nó só aceita textos de um fluxo para um dispositivo de texto VIRTUAL. No KNX, um texto (DPT 16) contém no máximo 14 caracteres.

O exemplo Text Input.

Text-Input.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Alarme

#DestinoTipoValor
1Arm CommandCenvia sempre true, independentemente do conteúdo da mensagem
2Partial Arm CommandCenvia sempre true
3Disarm CommandCenvia sempre true
4Armed StatusFtrue / false
5Partial Armed StatusFtrue / false
6Disarmed StatusFtrue / false
7Alarm StatusFtrue quando o alarme é acionado

Não é pedido PIN, mesmo que o alarme esteja protegido por um.

O exemplo Alarm.

Alarm.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Áudio

#DestinoTipoValor
1Volume setpointC0–100
2Volume feedbackF0–100
3Zone On/OffCtrue / false
4Zone feedbackFtrue / false
5Mute On/OffCtrue / false
6Mute feedbackFtrue / false
7Play/StopCtrue = reproduzir, false = parar
8Play/Stop feedbackFtrue / false
9Source selectionCnúmero da fonte
10Source feedbackFnúmero da fonte
11Previous/NextCfalse = anterior, true = seguinte
12Track TitleFtexto
13Track ArtistFtexto

A saída 11 é acionada a cada pressão, mesmo quando o valor se repete.

O exemplo Audio.

Audio.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Ventilação

#DestinoTipoValor
1Auto On/OffCtrue / false
2Auto feedbackFtrue / false
3Slow On/OffCtrue / false
4Slow feedbackFtrue / false
5Medium On/OffCtrue / false
6Medium feedbackFtrue / false
7High On/OffCtrue / false
8High feedbackFtrue / false
9BoostCtrue / false
10Boost feedbackFtrue / false
O exemplo Ventilation.

Ventilation.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Ar condicionado

#DestinoTipoValor
1On/OffCtrue / false
2On/Off feedbackFtrue / false
3Heating ModeCtrue
4Heating feedbackFtrue / false
5Cooling ModeCtrue
6Cooling feedbackFtrue / false
7Auto ModeCtrue
8Auto feedbackFtrue / false
9SetpointC°C
10Actual setpointF°C
11TemperatureFtemperatura medida, °C
O exemplo Air Conditioning.

Air-Conditioning.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Um segundo exemplo Air Conditioning no mesmo dispositivo, com nós Input Target.

Air-Conditioning-Input-Targets.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Fechadura de porta

#DestinoTipoValor
1Lock/UnlockCtrue = trancar, false = destrancar
2FeedbackFtrue / false
O exemplo Door Lock.

Door-Lock.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Contador

#DestinoTipoValor
1Power/FlowFnúmero (W, ou caudal para água e gás)
2Energy/VolumeFnúmero (kWh, ou volume)
3Exported EnergyFnúmero (kWh)
4State Of ChargeFnúmero (%)

Sem msg.inputTarget, o valor é enviado para Power/Flow. Um contador só tem os objetos da sua função (ver «Visão geral dos tipos de widgets»): um contador de rede não tem estado de carga. Um valor escrito por um fluxo sai pela saída depois de o servidor o armazenar.

O exemplo Meter.

Meter.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Carregador

#DestinoTipoValor
1Start/StopCtrue = iniciar, false = parar
2ChargingFtrue / false
3Charging CurrentCA
4ConnectedFtrue quando um veículo está ligado
5ErrorFtrue / false
6Actual PowerFW
7Last EnergyFkWh da última sessão
8Last durationFduração da última sessão
O exemplo Charger.

Charger.json — importe-o no Node-RED, faça duplo clique no nó de dispositivo para escolher o seu dispositivo e clique em Deploy.

Global Lights, Global Shutters e Scenario

NóNa caixa de diálogoEntradaSaída
Global LightsRoom ou Category (escolher um limpa o outro)msg.inputTarget = On ou Off; o conteúdo da mensagem é ignorado—
Global ShuttersRoom ou Categorymsg.inputTarget = Up ou Down—
ScenarioScenarioQualquer mensagem executa o cenário—

Os nós globais enviam o mesmo comando que os botões globais da aplicação: todas as luzes ou todos os estores da divisão ou categoria.

O exemplo de comandos globais.

Global-Commands-and-Scenario.json — importe-o no Node-RED, faça duplo clique em cada nó para escolher a divisão ou categoria (nós globais) ou o cenário e clique em Deploy.

A caixa de diálogo do nó Global Lights.

ℹ️ Nota: ao voltar a abrir um nó Global Lights ou Global Shutters, ambas as listas apresentam um valor — a lista Category apresenta apenas a primeira entrada. O nó atua sobre a lista que alterou por último: neste caso a divisão, como indica o nome. Para mudar para uma categoria, escolha-a em Category (a divisão é então limpa).

Perguntas frequentes

O que é um dispositivo virtual?

É um widget cujo estado é conservado no servidor sem uma ligação física de protocolo. Pode representar um indicador, um grupo, um valor calculado ou um ponto Node-RED.

Como conservar um valor virtual após um reinício?

Ative Persist State no respetivo objeto de comunicação. Um objeto virtual não tem definição de valor predefinido.

Onde abro o Node-RED?

Ative o serviço opcional Node-RED na página Services e reinicie o servidor. Quando estiver em execução, a respetiva entrada aparece em APPS na barra lateral de administração e abre o editor de fluxos num novo separador.

Quando devo utilizar o Node-RED em vez do motor de lógica?

Utilize o motor de lógica para a lógica habitual dos edifícios, com validação e monitorização. O Node-RED é adequado para integrações e fluxos personalizados que não se enquadram nesses blocos.

Porque é que um nó HyperVisu ignora a minha mensagem?

O nome do destino em msg.inputTarget está em falta, mal escrito ou com maiúsculas incorretas — por exemplo Switch ON/OFF em vez de Switch On/OFF. Defina-o com um nó Input Target. Verifique também se o nó está associado a um dispositivo: um exemplo importado mostra «(set device)» até escolher um.

Os fluxos precisam do PIN do alarme?

Não. Um fluxo arma e desarma um alarme sem PIN, mesmo que esteja protegido, tal como os cenários e as automatizações.

Continuar a explorar

Encontre os outros guias deste produto na documentação.

Voltar a Integrações