Problema com deteção de presença em Life360 + Node-Red

Olá amigos, boa noite.

Os meus trackers de bateria funcionam para todos os que estão no meu círculo. Batem perfeitamente.

Aproveito para deixar uma dúvida que eu tenho falando de Life 360.

Quando utilizava o zanzito, toda a minha automação eu fazia através do automations.yaml e funcionava corretamente. Depois que instalei o Life 360, me coloquei a tentar aprender a programar através do NodeRed, o que me parecia ser muito mais fácil.

Consegui para a grande maioria das coisas. Um dos meus problemas está em uma automação na qual minha esposa vai até a casa de sua mãe e recebo a notificação, porém não consigo fazer o inverso, isto é, quando ela deixa a casa da mãe.

O que está acontecendo: Quando ela deixa a casa da mãe, o estado dela vai para not_home, o qual é o mesmo quando ela sai da minha casa. Então eu recebo no Telegram duas mensagens, uma de que ela saiu da minha casa (não verdadeira) e outra de que ela saiu da casa da mãe (a correta). Como faço para solucionar este problema? Abaixo vou colocar a automação antiga (yaml) para que possam entender.

#- alias: 'Sandra Chegou Casa D. Inês'
  #hide_entity: true
  #trigger:
  #- platform: state
    #entity_id: device_tracker.sandra
    #from: 'not_home'
    #to: 'sandras_mom'
  #action:
  #- service: notify.telegram
    #data:
      #message: Sandra chegou na casa D. Maria Inês

#- alias: 'Sandra Deixou Casa D. Inês'
  #hide_entity: true
  #trigger:
  #- platform: state
    #entity_id: device_tracker.sandra
    #from: 'sandras_mom'
    #to: 'not_home'
  #action:
  #- service: notify.telegram
    #data:
      #message: Sandra deixou a casa da D. Maria Inês

Lembrando que esta automação está com # porque eu não estou utilizando ela, e sim no NodeRed.

Um grande abraço à todos,

Olá @guga_carvalho , antes de mais peço-te que respeites o assunto dos tópicos. É prático ir colocando tudo no mesmo tópico, mas depois torna-se inútil para os outros utilizadores a curto prazo. Isto faz também com que seja difícil pesquisar a melhor solução para os problemas. A regra é: Novo Assunto = Novo Tópico. Por esse motivo a tua pergunta foi movida para este novo tópico.

No NR podes usar um Function node para saberes qual era o estado anterior do device tracker, utilizando o seguinte código.

var newState = msg.data.new_state.state;
var oldState = msg.data.old_state.state;
if (oldState == "home" && newState == "not_home") {
    return [ msg, null ];
}
else { return [ null, msg ]; 
}

Depois utilizas um Switch node que lê o data.old_state.state e compara com as zonas configuradas.

OK @j_assuncao. Irei estar mais atento a esta instrução.

Um grande abraço,

1 Curtiu

@j_assuncao só não entendi muito bem como vou fazer a aplicação no switch node.

Ele pode ser configurado com uma ou mais variáveis. No caso específico da minha esposa, em uma das variáveis eu colocaria a zona da casa da mãe dela? Seria isso? E na outra colocaria o que?

Estou ainda apanhando um pouco com a lógica do NodeRed.

Abraço,

No Switch node colocas todas as zonas que tens configuradas excepto a home.

Entendi. Porém só vou selecionar algumas, porque tenho mais de 50 zonas configuradas.

Só o node function que está apresentando este erro quando eu injeto um string para testar com o payload home ou not_home.

Ele está dando este erro “TypeError: Cannot read property ‘new_state’ of undefined” do debug.

Abraço,

Dependo de que tipo de node estás a usar para ler a localização. Podes mostrar uma imagem da flow?

A Flow na parte superior é a que eu quero implementar.

A inferior é a que eu estou testando e esta apresentando o erro.

Abraço,

Porque não estás a injectar o Events: State node no Function node. O Eventes envia outros payloads que o código precisa.

Entendi… Então vai ser só colocar o nó do function depois do events, o switch e depois continuo com o restante da minha Flow? Seria isso?

No switch eu posso só deixar uma zona? Se for o caso, depois eu crio uma outra Flow para alguma zona que eu queira.

Abraço,

Sim, é isso mas deves colocar tudo na mesma flow para evitar teres funções duplicadas.

@j_assuncao, devo estar fazendo algo errado. Veja como fiz o flow e não parece estar funcionando.

O problema está em ela sair da casa da mãe e ficar not_home. Não estou conseguindo fazer isso. Será que a configuração está certa?

Abraços,

Experimenta o seguinte:

[{"id":"fa54016d.8b63a","type":"server-state-changed","z":"ccdf3b82.1b8198","name":"Tracker","server":"f535e5f5.331e48","version":1,"entityidfilter":"device_tracker.jorge","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":false,"x":590,"y":760,"wires":[["a36661c7.e68ae"]]},{"id":"a36661c7.e68ae","type":"rbe","z":"ccdf3b82.1b8198","name":"State Changed?","func":"rbe","gap":"","start":"","inout":"out","property":"payload","x":760,"y":760,"wires":[["8c8965ab.e9c9f8"]]},{"id":"8c8965ab.e9c9f8","type":"change","z":"ccdf3b82.1b8198","name":"Payload","rules":[{"t":"move","p":"payload","pt":"msg","to":"status","tot":"msg"},{"t":"change","p":"topic","pt":"msg","from":"device_tracker.","fromt":"str","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":940,"y":760,"wires":[["2a6b000b.ddbc6"]]},{"id":"2a6b000b.ddbc6","type":"switch","z":"ccdf3b82.1b8198","name":"Home?","property":"status","propertyType":"msg","rules":[{"t":"eq","v":"home","vt":"str"},{"t":"eq","v":"not_home","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":1100,"y":760,"wires":[[],["b5ba9a26.fb9f58"]]},{"id":"b5ba9a26.fb9f58","type":"function","z":"ccdf3b82.1b8198","name":"Previous State","func":"var newState = msg.data.new_state.state;\nvar oldState = msg.data.old_state.state;\nif (oldState == \"home\" && newState == \"not_home\") {\n    return [ msg, null ];\n}\nelse { return [ null, msg ]; \n}","outputs":2,"noerr":0,"x":620,"y":860,"wires":[[],["f6e5cedc.adc46"]]},{"id":"f6e5cedc.adc46","type":"switch","z":"ccdf3b82.1b8198","name":"Out From Where?","property":"data.old_state.state","propertyType":"msg","rules":[{"t":"eq","v":"escola","vt":"str"}],"checkall":"false","repair":false,"outputs":1,"x":850,"y":860,"wires":[["4b28595.d763fa8"]]},{"id":"4b28595.d763fa8","type":"debug","z":"ccdf3b82.1b8198","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":1070,"y":860,"wires":[]},{"id":"f535e5f5.331e48","type":"server","z":"","name":"HA_Connection","legacy":false,"hassio":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true}]

Anota%C3%A7%C3%A3o%202019-08-01%20173648

Não posso garantir que funcione à primeira pois o meu flow para a localização é algo bastante simples :wink:

Simples :rofl::rofl::rofl:

Vou tentar aqui e vou te falando.

Abração e obrigado.

1 Curtiu

@j_assuncao eu notei que no seu flow, neste nó de events: state, as opções de iniciar com a conexão e quando o estado mudar estão desabilitadas.

Deixo do jeito que está na flow que você me mandou? Ou habilito a opção de mudar iniciar quando o estado mudar?

Abraço,

Podes deixar assim senão quando reinicias o HA e/ou o NR vão começar a sair mensagens.

1 Curtiu

OK, vou deixar e mudar os meus outros flows também.

Tks.

@j_assuncao, neste nó eu completo a informação deste tracker com o tracker da minha esposa. Correto?

Abraços,

Não é preciso mexer nesse node, fica assim como está.


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade