A ideia inicial era criar um fluxo que pudesse automatizar as lampadas da cozinha, com um sensor de presença de modo que as luzes fossem ligadas com a presença de alguém e automaticamente desligadas quando não houvesse ninguem na cozinha, e automaticamente voltasse as lampadas para 100%, caso alguem entrasse ou se movesse.
Com a utilização do node While Loop, Wait Until e outros que vou descrever detalhadamente e com um exemplo real a seguir, foi possível atingir esse objetivo.
O Fluxo final, ficou conforme a imagem abaixo
Clique aqui para fazer o download do fluxo em e importar em seu node red
O fluxo divide-se basicamente em 3 partes, sendo as partes das extremidades (superior e inferior) idênticas, uma para cada lâmpada (aqui seria possível melhorar o fluxo usando o node “get entities”), e a parte central, que eh o controle das demais.
Abaixo um detalhamento de cada node e como foi configurado.
Esse é um sensor de movimento que basicamente vai enviar ON ou OFF para o payload (se não sabe o que é um payload, leia aqui Payload? Oq é isso, pra que serve e como usar no Node-red! Tutorial básico!
Esse é o node “while-loop”, a estrela desse tutorial, esse node basicamente entra em loop, executando os fluxos subsequentes até que uma condição seja atendida.
Para instala-lo vá até o menu no canto superior direito e clique em Manage palette.
Clique em Install e na busca escreva “while”, vai aparecer o pack com os nodes, incluindo o while loop! E clique em install.
Na lista de nodes irá aparecer o pack!
Agora voltando ao tutorial:
Esse node precisa de uma condicao que retorn “false” ou “true”. nesse caso, estou testando se o payload recebido é “off” (msg.payload==“off”)
Se o payload recebido for “on”, quer dizer que existe movimento no sensor, e o fluxo seguirá para o node que vai ligar as luzes da cozinha
Caso o payload recebido seja “off”, significa que não há movimento na cozinha e o node while-loop entrará em ação seguindo a sequência abaixo para as duas lâmpadas (na imagem principal, uma acima e outra abaixo).
A cada loop, as seguinte ações são executadas.
Node “delay”, segura o fluxo pelo tempo determinado, no caso 45s
Node "current state ", informa o estado atual de uma entidade, e retorna "true"ou “false” baseado no teste
Aqui estou testando se a luz 01 esta ligada, para começar a dimerizar aos poucos
Node “function”, que capturo o brilho atual da lampada, dimerizar a partir desse valor.
msg.payload = msg.data.attributes.brightness;
return msg;
Node “function” novamente, onde a partir da informacao de brilho atual, reduzo o valor de 50 (o brilho pode ir de 0 a 255).
var brightness = msg.payload; //setup brightness and set to msg.payload
brightness = parseInt(brightness);if (brightness > 51) {
brightness = brightness - 50;
} else {
brightness = 1;
}msg.payload = brightness;
return msg;
Créditos dessas funções para o video do canal home sight ( (43) Node Red + Home Assistant -Master Class 5. How to control light dimming with Zigbee light and remote - YouTube
Node “Call-Service” basicamente vou pegar o novo valor que a luz será dimerizada e aplicar (reduzir) ao valor atual.
Em Data, insira o valor abaixo
{ “entity_id”: “light.ikea_light_cozinha_01”, “brightness”: {{payload}} }
O node Call-Service que aplicou o valor do brilho à lâmpada, é ligado a 2 outros nodes:
Node “wait until” e o node “current state”
Node “wait until”, onde verifico que o brilho da lâmpada ja foi reduzido ao máximo possivel, para então desligar a lampada.
Nesse caso, estou dizendo para o node esperar até que o atributo brilho seja inferior a 10 (aproximadamente 1%)
e quando essa condição for atendida, o node “call service” atua para desligar a lampada.
a outra saída do node que ajustou o brilho da lampada eh verificar novamente o status do sensor de movimento da cozinha, através do node e enviar o fluxo de volta para o node “while-loop” que dependendo do payload recebido, (on ou off) fará um novo loop, ou ligará as luzes em 100% de brilho, saindo do loop.
Detalhe do node que faz a última verificação do sensor de movimento , antes de enviar o fluxo novamente para o início.
E para finalizar, essa parte abaixo, inicia o node “while-loop” passando o payload “no” quando o interruptor for acionado para ligar a luz fisicamente (não sendo ligada pelo sensor de movimentos)
Clique aqui para fazer o download do fluxo em e importar em seu node red
A ideia principal foi a abordagem do uso dos nodes “while-loop” e “wait-until” em um exemplo prático que pudesse a partir daí servir de insumo para novas ideias.
Espero ter ajudado, grande abraço.
Edvaldo Castro