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.
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 !!