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

node-red
life360

(Guga Machado de Carvalho) #1

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,


Como Configurar o Life360
(Jorge Assunção) #2

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.


(Jorge Assunção) #3

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.


(Guga Machado de Carvalho) #4

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

Um grande abraço,


(Guga Machado de Carvalho) #5

@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,


(Jorge Assunção) #6

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


(Guga Machado de Carvalho) #7

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,


(Jorge Assunção) #8

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


(Guga Machado de Carvalho) #9

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

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

Abraço,


(Jorge Assunção) #10

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


(Guga Machado de Carvalho) #11

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,


(Jorge Assunção) #12

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


(Guga Machado de Carvalho) #13

@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,


(Jorge Assunção) #14

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:


(Guga Machado de Carvalho) #15

Simples :rofl::rofl::rofl:

Vou tentar aqui e vou te falando.

Abração e obrigado.


(Guga Machado de Carvalho) #16

@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,


(Jorge Assunção) #17

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


(Guga Machado de Carvalho) #18

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

Tks.


(Guga Machado de Carvalho) #19

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

Abraços,


(Jorge Assunção) #20

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