Node "While-Loop" e outros - Exemplo de Dimerização de lampadas até desligamento total

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.

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

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

3

Agora voltando ao tutorial:

image
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

image

image

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
image

image

Node "current state ", informa o estado atual de uma entidade, e retorna "true"ou “false” baseado no teste
image

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

image

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).
image

image

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

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” image e o node “current state” image

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” image atua para desligar a lampada.

a outra saída do node image que ajustou o brilho da lampada eh verificar novamente o status do sensor de movimento da cozinha, através do node image e enviar o fluxo de volta para o node “while-loop” image 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)

image

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

4 Likes

Excelente tutorial! Parabéns!!! :clap: :clap: :clap:

1 Like

Parabéns pelo tutorial! Apenas como sugestão, coloque tb código para importação do Fluxo via Clipboard. Isso reduz o trabalho pra quem quer implementar e evita erros ao digitar o código.

2 Likes

Obrigado, coloquei um link para download do código. Valeu

1 Like

Valeu Leandro, teus posts são muito bons também, vou tentar sempre colocar aqui algo que for interessante para compartilhar. Abraço.

1 Like

Obrigado! É isso ai, se todos compartilhassem o fórum seria + ativo e todos aprenderíamos juntos!

2 Likes