Aproveitando um questionamento que foi feito no forum, deixo aqui a forma de utilização do node RBE, report-by-exception (relatório por exceção), que serve para bloquear a continuidade de um fluxo enquanto o valor não for alterado.
Isto é útil, por exemplo, quando utilizando um Sonoff Pow em uma automação e um mesmo valor continua sendo enviado seguidas vezes e só queremos a continuidade do fluxo quando este valor for alterado, ou então quando o valor de uma chave é repetido constantemente e só queremos quando o valor alterar.
Vou colocar dois exemplos simples para entendimento do funcionamento, que servirá de base para adaptação.
Exemplo 1:
02 inject
01 RBE
01 debug
Atribua os valores “0” e “4” aos injects como indicado:
Configure o RBE como indicado:
Para verificar a saída selecione o “debug messages” no ícone indicado:
Injete várias vezes o valor “0”:
Verá que somente um valor “0” é indicado no “debug messages” e não ocorre a repetição deste mesmo valor “0” a cada pressionamento.
Faça o mesmo com o valor “4” no segundo inject.
Verá que somente o primeiro valor “4” é indicado no “debug messages” e não ocorre a repetição deste mesmo valor “4” a cada pressionamento.
Injete várias vezes, alternadamente, ou não, os valores “0” e “4”.
Verá que a cada alteração do valor injetado há a indicação deste valor no “debug messages” e quando repetido não há nova indicação deste valor.
Ou seja, o RBE bloqueará todos os valores repetidos e só dará continuidade ao fluxo quando este valor for alterado.
Exemplo 2:
Supondo que uma máquina lava e seca está ligada à tomada através de um Sonoff Pow para criar automações, gerenciar o consumo de energia elétrica e notificar na Alexa cada ciclo que está sendo executado, caso não ocorra interrupção do fluxo ocorrerão seguidas notificações e outras automações no fluxo, sendo necessário apenas uma.
O RBE fará este controle, bloqueando as seguidas repetições.
Obs.:
1) Apenas para exemplo simples está sendo utilizado somente uma saída do node “switch” e uma parte de uma automação, que na prática seria mais completa;
2) também, está sendo suposto inicialmente que a potência indicada permanecerá em um único valor quando a lava e seca estiver somente ligada, ainda sendo programada, sem executar alguma ação (no caso 3W).
01 events state
01 switch
01 RBE
02 call services
Vou colocar somente a configuração de dois nodes necessários para entendimento.
Configuração do switch:
Configuração do RBE:
No caso, o RBE foi configurado como “Block unless value changes” (Bloqueie a menos que o valor mude), desta forma ocorrerá uma notificação na Alexa e enquanto o equipamento estiver somente sendo programado não ficará enviando diversas notificações do mesmo estado.
E se fosse adicionado um novo fluxo para notificar quando o equipamento estiver lavando, porém, o valor da potência não seja um valor fixo, mas esteja dentro de uma faixa de valores, por exemplo, de 5 a 15W?
Configuração do switch:
Configuração do novo RBE:
Neste caso, o RBE foi configurado como “Block if value change is greater or equal to”
(Bloqueie se a alteração do valor for maior ou igual a), e foi definido um intervalo de “8” (por estar trabalhando com número), desta forma o RBE não apenas estará bloqueando um valor fixo, mas todos os valores dentro da faixa de intervalo definida.
Enfim, são várias as possibilidades de acordo com o requerido na automação, alterando no RBE o “Mode”, o intervalo, a entrada ou saída e as propriedades.
Complemento para “Mode”:
a)
Block unless value changes.
Bloqueie a menos que o valor mude.
Block unless value changes (ignore initial value).
Bloqueie a menos que o valor mude (ignore o valor inicial).
Block unless value change is greater or equal to.
Bloqueie a menos que a alteração do valor seja maior ou igual a.
Block unless value change is greater than.
Bloqueie a menos que a alteração do valor seja maior que.
Block if value change is greater or equal to.
Bloqueie se a alteração do valor for maior ou igual a.
Block if value change is greater than.
Bloqueie se a alteração do valor for maior que.
b)
Compare to last valid output value.
Compare com o último valor de saída válido.
Compare to last input value.
Compare com o último valor de entrada.
Espero que possa ser útil!