Realizar Cálculo com 02 Variáveis de Devices Diferentes

Olá ! Preciso de ajuda para a seguinte situação:
Tenho dois devices na mesma aplicação, um device faz a leitura do peso e o outro device faz leitura de altura. Gostaria de calcular o IMC.
A plataforma recebe os dados de um device utilizando um workflow com um nó de input mqtt e utiliza um tópico específico do próprio device.
Para o outro device, a plataforma recebe de forma direta, sem workflow e utiliza o tópico padrão wnology/ID/state.
Eu mostro de forma individual através de dois displays o valor do peso e da altura.
O que eu preciso é que um display mostre o valor do IMC. A fórmula é IMC = Peso/Altura²
Como utilizar um display ou outro bloco fazer o cálculo e só exibir o valor?

Olá Valter!

Você pode fazer cálculos diretamente em blocos de Dashboard.
Para este simples cálculo, podemos usar o bloco “indicator”.
Veja como pode ficar:

Para este bloco, você deverá criar duas queries, uma para obter o peso e outra para obter a altura do seu device:

Veja que os resultados estas queries aparecerão nas variáveis “value-0 e value-1”.

Agora com estes resultados, podemos realizar vários cálculos direto na área de saída dos textos das condições apresentadas.
Esta área é um ambiente que aceita handelbars, então podemos usar equações e handelbars juntas para calcular e já apresentar.
Eu escolhi diretamente a condição padrão (default).

Para te facilitar, eu copiei em texto aqui o código utilizado:

Peso em kg     {{value-0}}

Formatando Peso 3 casas decimais: {{format value-0 ',.3f'}}

Altura em cm  {{value-1}}

Altura em m  {{divide value-1 100}}

Altura em m "formatado 2 casas": {{format (divide value-1 100)  ',.2f' }}

Altura ao quadrado: {{ multiply (divide value-1 100) (divide value-1 100) }}

IMC = peso / altura^2 :  {{ format (divide value-0 (multiply (divide value-1 100) (divide value-1 100)) )   ',.2f'}}


Segue o link da documentação para saber a sintaxe destas equações:

Boa Tarde Alexandre ! consegui realizar o cálculo conforme orientação. Tenho outra dúvida, pois estou com problema no envio de dados pelo sensor de altura e gostaria de entrar com este dado de forma manual. Como posso criar uma variável ou um campo onde eu digito o valor manualmente e depois utilizo este valor para realizar o cálculo, sem tem que utilizar o simulador para isso? Agradeço imensamente.

Olá Valter!

É possível utilizando algumas formas, a mais simples é usando um bloco de “input Control”.
Inicialmente você digita o valor em um campo de texto.
Com um button você consegue enviar este valor para um workflow

Vamos lá:

Insira um bloco de “Input Controls”, com dois controles:
1 - Um “Text Input”
2 - Um “Button Trigger”

Configure ele desta forma:
1 - Optei por deixar em "Dynamic Value" , assim ele pode mostrar o valor atual do atributo.
2 - Em "Attribute", selecionei o atributo que pretendo alterar.
3 - Deixei em agregação “last” para smpre trazer o último valor salvo.

Este valor deverá ser levado a um workflow de “Aplicação”.
Então iremos criar um workflow na Aplicação (1)
Inicialmente vamos somente criar um "Virtual Button"
Podemos renomear ele para algo mais sugestivo: por exemplo “Entrada Manual” (2).
Vamos inserir um "debug" para acompanharmos o que acontece.

image

Agora vamos voltar ao Dashboard para configurarmos o botão lá nos "Inputs Controls"

Abra novamente o bloco e depois insira um controle “Button Trigger”
1 - Selecione “Trigger Workflow
2 - Encontre o Workflow que foi criado no passo anterior
3 - Localize o nome dado ao “Virtual Button”.
4 - É no campo "payload" que iremos “chamar” o valor digitado no campo texto e enviar ele em um JSON para o workflow. Por isto, siga a sintaxe da figura para incorporar o valor vindo do bloco texto. Note que montamos o JSON com a variável “text-0” existente no campo de entrada de texto.

Agora podemos testar:
Digite algum valor e, em seguida, pressione o botão.
Os valores enviados sempre aparecerão no objeto "data".
Note que no “Debug” já aparece o valor digitado.

Agora só precisamos persistir este valor no atributo.
1 - Vamos inserir o bloco “Device State” (de saída)
2 - E ajustar o valor que chegou no objeto "data", para o atributo desejado:

O Resultado fica assim:

OK ! Muito Obrigado !! Sempre que precisei fui bem orientado. Agradeço imensamente !!

1 Curtida