NODE RED Ajuda com sequência


(Nelson Oliveira) #1

Boas, decidi começar a trocar todo o meu sistema de automação para node red e estou a ter alguma dificuldade em perceber como posso criar uma sequencia baseada na hora de um sensor. Neste caso utilizo um sensor “next_alarm” que recebe o proximo despertador definido no meu telemovel.
Sem%20t%C3%ADtulo-1

  trigger:
  - minutes: /1
    platform: time
    seconds: 0
  condition:
  - condition: template
    value_template: '{{ (((as_timestamp(now()) | int) + 3*60) | timestamp_custom("%Y-%m-%d %H:%M:00")) == states.sensor.next_alarm.state }}'
  action:
  - data:
      entity_id: scene.wakeup
    service: scene.turn_on

Essa é a automação. Alguem me pode ajudar a criar a sequencia? A minha duvida é como fazer a parte da condition.


(Jorge Assunção) #2

Para isso podes utilizar o node simpletime (tem de ser instalado) e usar a hora do alarme para controlar a acção. Mais logo quando estiver no PC posso colocar um exemplo.


(Nelson Oliveira) #3

Agradecia :slight_smile:


(Jorge Assunção) #4

@Nelson_Oliveira
À pouco quando te respondi disse que podias usar o simpletime mas enganei-me, o que queria dizer era schedex (que também não vem instalado de origem).

Abaixo tens um exemplo de um flow muito parecido com aquilo que tu queres.

A explicação do flow aplicada ao teu caso é a seguinte:

  • 1º node - É utilizado um node poll-state para saber a hora do próximo alarme, com um Update Interval de 10 segundos e a opção Output on Changed activada. Este primeiro node funciona como a condição da tua automação, corre a cada 10 segundos e como tens a opção Output on Changed activa sempre que alterares a hora do alarme o node vai validar se a condição é verdadeira ou falsa.

  • 2º node - É um node template que serve para pegar no payload do primeiro node e altera-lo de modo a que possa ser injectado no schedex através da função ontime {{payload}}.

  • 3º node - O node schedex é onde se faz a comparação entre a hora actual e a hora do alarme. Caso essa hora de ligar (On Time) seja igual ou superior à do alarme é gerado o payload 1 na saida do node. Este node deve ser bem configurado para que funcione correctamente em especial a latitude e longitude. Exemplo:

  • 4º node - Finalmente o node api-call-service vai chamar o domínio scene, serviço turn_on e entidade scene.wakeup

Presumo que tenhas uma automação scene.turn_off ou um temporizador e dependendo de como tens isso implementado, o flow pode ser mais ou menos complicado.


(Nelson Oliveira) #5

Podes fazer print a9 config do segundo node? O meu problema é mesmo esse, receber a informacao, e transformar isso numa hora e dia


(Jorge Assunção) #6

A configuração do segundo node é esta:

Aqui vai só passar a hora para o schedex. Quando te referes a dia é a dia de semana (seg, ter, qua…) ou dia de calendário (1, 2, 3…)?


(Nelson Oliveira) #7

onde diz payload devo substituir por:

'{{ (((as_timestamp(now()) | int) + 3*60) | timestamp_custom("%Y-%m-%d %H:%M:00")) == states.sensor.next_alarm.state }}'

? ou fica so mesmo payload?


(Jorge Assunção) #8

Fica exactamente como lá está.


(Nelson Oliveira) #9


Existe um problema… no pamyload do meu sensor, vem tambem a data…o k causa erro no schedex…da invalid time “Data” como ves na foto… alguma ideia?


(Jorge Assunção) #10

Sim, usa um sensor template no HA para tirar apenas a parte da hora e lês esse valor com o primeiro node. Isso pode ser feito também no NR com JavaScript.


(Nelson Oliveira) #11

como faço o template? tentei usar o da next_alarm e remover a parte dos dias…mas nao funciona…?


(Jorge Assunção) #12

Tenta isto:


(Nelson Oliveira) #13

Ja consegui dessa forma, mas deparei me com um pormenor, dessa forma ele so assimila a proxima hora…ou seja, quando se trata de um despertador que ao sabado e domingo ta off, ele vai ligar na mesma… ou seja, preciso que o schedex (ou outro) me leita tambem a parte da data que é emitida…


(Nelson Oliveira) #14
value_template: '{{ ((as_timestamp(states.sensor.next_alarm.state) | timestamp_custom("%H:%M:00"))) }}'

Ou talvez possa acrescentar no NR algum tipo de condiçao que vá buscar a data(crio tambem um sensor template so para extrair a data) e compare à data actual e caso seja igual faca a sequencia, caso nao seja nao faca nada. Como alcanco isso no NR? Ou qual node usar?


(Jorge Assunção) #15

Explica lá melhor o que é esse sensor.next_alarm.


(Nelson Oliveira) #16

ora isto é assim: eu uso isto:

Que é uma app (Hassalarm) que quando poes um despertador no telemovel, ele envia o valor do proximo despertador (com a data) . Essa app cria o sensor “next_alarm”.

o schedex so le a hora(criando um sensor template que extrai a hora), mas como nao recebe a data, aos fins de semana ele vai fazer a sequencia na mesma.

Pelo que vejo aqui existem duas soluçoes:

Ou troco o schedex por algo que aceite tanto a hora como a data que o sensor.next_alarm tem.
Ou crio outro sensor template(sensor.desp_data) que extraia so a data. e no NR crio algum tipo de condiçao do genero data de hoje= data do sensor.desp_data.
A opção de trocar o schedex(ou arranjar forma do schedex receber a data) parece-me mais “limpa” e simples mas talvez a mais dificil de alcançar?


(Jorge Assunção) #17

Nope! Vê lá bem a imagem do schedex que eu coloquei. Logo no topo tens os dias da semana para escolher. Se só tens alarmes aos dias de semana desmarcas o sábado e o domingo.


(Nelson Oliveira) #18

Mas a questão é essa, eu nao quero definir manualmente no schedex, quero que o schedex o faça a partir da data do next_alarm… não percebo porque é que não lê a data do sensor…
Alguma ideia?


(Jorge Assunção) #19

Sim, tenta isto:


(Nelson Oliveira) #20

como instalo no nr? nao encontro…(hassio)