Wanderson Niquini

Fechadura Yale no Home Assistant: identificando usuário e recebendo alertas na alexa

Fechadura Yale no Home Assistant: identificando usuário e recebendo alertas na alexa

Neste post você vai aprender a identificar o usuário que digitou uma senha na fechadura Yale e validar essa informação no NodeRed e receber saudações pela alexa.

Estou usando uma fechadura Yale YRD 226 (https://amzn.to/3ypjJOf) e o módulo zigbee T2 (https://amzn.to/3hwWg6Y). Mas o procedimento abaixo deve funcionar para todos os modelos Yale que integram no zigbee2mqtt.

O primeiro passo é arrastar para o seu fluxo o nó mqtt in configura-lo.

Agora vamos pegar o topic da sua fechadura. Para isso basta acessar o zigbee2mqtt e clicar no menu logs. Faça qualquer ação (abri ou fechar) na fechadura para que ela registre no log. Você pode utilizar o campo Filtrar por texto para facilitar sua busca. (Não poderia deixar de mencionar que hoje temos o zigbe2mqtt traduzido para o Português Brasil graças ao Jhonattan Souza | https://github.com/jhonattan-souza)

Como pode ver na imagem abaixo o topic da minha fechadura é zigbee2mqtt/fechadura_porta_sala

Voltando ao seu fluxo no NodeRed dê um duplo clique no nó mqtt in para que possamos configura-lo. Se você já possui o servidor mqtt configurado no NodeRed basta seleciona-lo, caso contrário clique no ícone do lápis, conforme imagem abaixo.

Em Server insira o ip do seu home assistant e em Port a sua porta mqtt (por padrão á porta é 1883).

Agora clique na aba Security e insira seu usuário e senha mqtt.

Clique em add para salvar suas configurações

Agora você precisa arrastar para seu fluxo o nó switch que será usado para filtrar o usuário que digitou a senha.

Clicando duas vezes sobre o nó switch você vai configura-lo conforme a imagem abaixo.

Em property você vai adicionar .action_user na frente do payoad, ficando a mensagem completa assim: msg.payload.action_user

Agora clique em + add e adicione a quantidade de linhas de acordo com os usuários que você tem cadastrado na sua fechadura.

Para identificar o código do usuário basta acessar novamente o zigbee2mqtt no menu logs e abrir a fechadura com a senha do usuário que gostaria de saber o código. O resultado será algo similar a isso

Agora que você já sabe o action_user basta voltar ao fluxo e adiciona-lo ao nó switch.

A partir daqui vai da sua criatividade o que fazer após a senha ser digitada.

No fluxo abaixo eu defini horários e frases randômicas que serão ditas pela alexa assim que cada usuário digitar sua senha.

Eu coloquei um delay de 2s antes de iniciar a fala e usando o nó time range defini os horários para dia / tarde / noite.

O nó function você vai definir as frases que serão ditas de forma aleatória (cada vez que digitar a senha você escutará uma frase diferente).

Código do nó function.

const array = 
[
    "Bom dia Wanderson",
    "Olha ele chegando de novo. Bom dia Wanderson",
    "Olá Wanderson, bom dia pra você",
    "O papai chegou. Bom dia Wanderson",
];
const randomElement = array[Math.floor(Math.random() * array.length)];
msg.payload = randomElement;
return msg;

Por fim utilizando o nó alexa routine você vai definir em qual dispositivo alexa as frases serão ditas.

Se você ainda não possui o nó alexa routine instalado sugiro a leitura do post abaixo sobre como instalar e configurar o palette alexa remote 2.

https://niquini.com/como-instalar-e-configurar-o-palette-alexa-remote-2-no-nodered/

Agora você já pode usar essa informação para por exemplo ligar a tv ou colocar sua música preferida para tocar quando chegar em casa.

Abaixo está o código json do fluxo caso queira importa-lo para o seu NodeRed.

[{"id":"71438622.7624a8","type":"tab","label":"Flow 4","disabled":false,"info":""},{"id":"68ad9fd7.4ebc4","type":"switch","z":"71438622.7624a8","name":"Usuários","property":"payload.action_user","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"2","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":400,"y":320,"wires":[["85fd8bc0.5edb48"],["f413bf49.d3e26"]]},{"id":"477f20fb.88862","type":"alexa-remote-routine","z":"71438622.7624a8","name":"Fala","account":"462b8f82.e8f52","routineNode":{"type":"speak","payload":{"type":"regular","text":{"type":"msg","value":"payload"},"devices":["G091AA081164049B"]}},"x":1130,"y":160,"wires":[[]]},{"id":"2d30fe72.bdb8d2","type":"time-range-switch","z":"71438622.7624a8","name":"Bom dia","lat":"","lon":"","startTime":"00:01","endTime":"11:59","startOffset":0,"endOffset":0,"x":760,"y":160,"wires":[["b0c73155.46151"],[]]},{"id":"8b4cabc2.7b3418","type":"time-range-switch","z":"71438622.7624a8","name":"Boa tarde","lat":"","lon":"","startTime":"12:00","endTime":"17:59","startOffset":0,"endOffset":0,"x":760,"y":220,"wires":[["10c570c9.0a653f"],[]]},{"id":"efc68c93.854de","type":"time-range-switch","z":"71438622.7624a8","name":"Boa noite","lat":"","lon":"","startTime":"18:00","endTime":"23:59","startOffset":0,"endOffset":0,"x":760,"y":280,"wires":[["e5cba28b.ad9a8"],[]]},{"id":"e78b4506.1b1508","type":"alexa-remote-routine","z":"71438622.7624a8","name":"Fala","account":"462b8f82.e8f52","routineNode":{"type":"speak","payload":{"type":"regular","text":{"type":"msg","value":"payload"},"devices":["G091AA081164049B"]}},"x":1130,"y":220,"wires":[[]]},{"id":"d9819da3.bf1eb","type":"alexa-remote-routine","z":"71438622.7624a8","name":"Fala","account":"462b8f82.e8f52","routineNode":{"type":"speak","payload":{"type":"regular","text":{"type":"msg","value":"payload"},"devices":["G091AA081164049B"]}},"x":1130,"y":280,"wires":[[]]},{"id":"7332821c.cb2ccc","type":"alexa-remote-routine","z":"71438622.7624a8","name":"Fala","account":"462b8f82.e8f52","routineNode":{"type":"speak","payload":{"type":"regular","text":{"type":"msg","value":"payload"},"devices":["G091AA081164049B"]}},"x":1130,"y":360,"wires":[[]]},{"id":"192887f4.8b7be8","type":"time-range-switch","z":"71438622.7624a8","name":"Bom dia","lat":"","lon":"","startTime":"00:01","endTime":"11:59","startOffset":0,"endOffset":0,"x":760,"y":360,"wires":[["850b3fe1.04849"],[]]},{"id":"35c9e4c0.71decc","type":"time-range-switch","z":"71438622.7624a8","name":"Boa tarde","lat":"","lon":"","startTime":"12:00","endTime":"17:59","startOffset":0,"endOffset":0,"x":760,"y":420,"wires":[["8f022d5f.89a67"],[]]},{"id":"f6e643b4.1786c","type":"time-range-switch","z":"71438622.7624a8","name":"Boa noite","lat":"","lon":"","startTime":"18:00","endTime":"23:59","startOffset":0,"endOffset":0,"x":760,"y":480,"wires":[["d50de7be.34d258"],[]]},{"id":"f9a34475.1f6258","type":"alexa-remote-routine","z":"71438622.7624a8","name":"Fala","account":"462b8f82.e8f52","routineNode":{"type":"speak","payload":{"type":"regular","text":{"type":"msg","value":"payload"},"devices":["G091AA081164049B"]}},"x":1130,"y":420,"wires":[[]]},{"id":"f18e4bfd.a508f8","type":"alexa-remote-routine","z":"71438622.7624a8","name":"Fala","account":"462b8f82.e8f52","routineNode":{"type":"speak","payload":{"type":"regular","text":{"type":"msg","value":"payload"},"devices":["G091AA081164049B"]}},"x":1130,"y":480,"wires":[[]]},{"id":"b0c73155.46151","type":"function","z":"71438622.7624a8","name":"Frases bom dia","func":"const array = \n[\n    \"Bom dia Wanderson\",\n    \"Olha ele chegando de novo. Bom dia Wanderson\",\n    \"Olá Wanderson, bom dia pra você\",\n    \"O papai chegou. Bom dia Wanderson\",\n];\n\nconst randomElement = array[Math.floor(Math.random() * array.length)];\n\nmsg.payload = randomElement;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":160,"wires":[["477f20fb.88862"]]},{"id":"10c570c9.0a653f","type":"function","z":"71438622.7624a8","name":"Frases boa tarde","func":"const array = \n[\n    \"Boa tarde Wanderson\",\n    \"Olha ele chegando de novo. Boa tarde Wanderson\",\n    \"Olá Wanderson, boa tarde pra você\",\n    \"O papai chegou. Boa tarde Wanderson\",\n];\n\nconst randomElement = array[Math.floor(Math.random() * array.length)];\n\nmsg.payload = randomElement;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":950,"y":220,"wires":[["e78b4506.1b1508"]]},{"id":"e5cba28b.ad9a8","type":"function","z":"71438622.7624a8","name":"Frases boa noite","func":"const array = \n[\n    \"Boa noite Wanderson\",\n    \"Olha ele chegando de novo. Boa noite Wanderson\",\n    \"Olá Wanderson, boa noite pra você\",\n    \"O papai chegou. Boa noite Wanderson\",\n];\n\nconst randomElement = array[Math.floor(Math.random() * array.length)];\n\nmsg.payload = randomElement;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":950,"y":280,"wires":[["d9819da3.bf1eb"]]},{"id":"850b3fe1.04849","type":"function","z":"71438622.7624a8","name":"Frases bom dia","func":"const array = \n[\n    \"Bom dia Miguel\",\n    \"Miguel você anda saindo demais. Bom dia pra você!\",\n    \"Olha ele chegando de novo. Bom dia Miguel\",\n    \"Olá Miguel, bom dia pra você\",\n];\n\nconst randomElement = array[Math.floor(Math.random() * array.length)];\n\nmsg.payload = randomElement;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":360,"wires":[["7332821c.cb2ccc"]]},{"id":"8f022d5f.89a67","type":"function","z":"71438622.7624a8","name":"Frases boa tarde","func":"const array = \n[\n    \"Boa tarde Miguel\",\n    \"Miguel você anda saindo demais. Boa tarde pra você!\",\n    \"Olha ele chegando de novo. Boa tarde Miguel\",\n    \"Olá Miguel, boa tarde pra você\",\n];\n\nconst randomElement = array[Math.floor(Math.random() * array.length)];\n\nmsg.payload = randomElement;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":950,"y":420,"wires":[["f9a34475.1f6258"]]},{"id":"d50de7be.34d258","type":"function","z":"71438622.7624a8","name":"Frases boa noite","func":"const array = \n[\n    \"Boa noite Miguel\",\n    \"Miguel você anda saindo demais. Boa noite pra você!\",\n    \"Olha ele chegando de novo. Boa noite Miguel\",\n    \"Olá Miguel, boa noite pra você\",\n];\n\nconst randomElement = array[Math.floor(Math.random() * array.length)];\n\nmsg.payload = randomElement;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":950,"y":480,"wires":[["f18e4bfd.a508f8"]]},{"id":"85fd8bc0.5edb48","type":"delay","z":"71438622.7624a8","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":580,"y":220,"wires":[["8b4cabc2.7b3418","2d30fe72.bdb8d2","efc68c93.854de"]]},{"id":"f413bf49.d3e26","type":"delay","z":"71438622.7624a8","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":580,"y":420,"wires":[["192887f4.8b7be8","35c9e4c0.71decc","f6e643b4.1786c"]]},{"id":"df9396cf.1ae348","type":"api-call-service","z":"71438622.7624a8","name":"Notificação Wanderson","server":"62d8d83f.4b03c8","version":3,"debugenabled":false,"service_domain":"notify","service":"mobile_app_wanderson_niquini","entityId":"","data":"{\"message\":\"Fechadura destrancada por Miguel\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1900,"y":440,"wires":[[]]},{"id":"130827b5.a2f6c8","type":"api-call-service","z":"71438622.7624a8","name":"Notificação Brenda","server":"62d8d83f.4b03c8","version":3,"debugenabled":false,"service_domain":"notify","service":"mobile_app_brenda_niquini","entityId":"","data":"{\"message\":\"Fechadura destrancada por Miguel\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1880,"y":320,"wires":[[]]},{"id":"47bc5b17.075be4","type":"api-call-service","z":"71438622.7624a8","name":"Notificação Miguel","server":"62d8d83f.4b03c8","version":3,"debugenabled":false,"service_domain":"notify","service":"mobile_app_miguel_niquini","entityId":"","data":"{\"message\":\"Fechadura destrancada por Miguel\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1880,"y":380,"wires":[[]]},{"id":"1875149a.6a0fcb","type":"api-call-service","z":"71438622.7624a8","name":"Notificação Wanderson","server":"62d8d83f.4b03c8","version":3,"debugenabled":false,"service_domain":"notify","service":"mobile_app_wanderson_niquini","entityId":"","data":"{\"message\":\"Fechadura destrancada por Brenda\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1900,"y":680,"wires":[[]]},{"id":"a63657f4.5838d8","type":"api-call-service","z":"71438622.7624a8","name":"Notificação Brenda","server":"62d8d83f.4b03c8","version":3,"debugenabled":false,"service_domain":"notify","service":"mobile_app_brenda_niquini","entityId":"","data":"{\"message\":\"Fechadura destrancada por Brenda\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1880,"y":560,"wires":[[]]},{"id":"48bbfbee.a91314","type":"api-call-service","z":"71438622.7624a8","name":"Notificação Miguel","server":"62d8d83f.4b03c8","version":3,"debugenabled":false,"service_domain":"notify","service":"mobile_app_miguel_niquini","entityId":"","data":"{\"message\":\"Fechadura destrancada por Brenda\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1880,"y":620,"wires":[[]]},{"id":"d5c14a32.8f83b8","type":"mqtt in","z":"71438622.7624a8","name":"","topic":"zigbee2mqtt/fechadura_porta_sala","qos":"0","datatype":"json","broker":"d0d297e.ebaed68","nl":false,"rap":false,"x":160,"y":320,"wires":[["68ad9fd7.4ebc4"]]},{"id":"462b8f82.e8f52","type":"alexa-remote-account","name":"Alexa","authMethod":"proxy","proxyOwnIp":"192.168.8.181","proxyPort":"3455","cookieFile":"/config/alexa-nodered.cookie","refreshInterval":"3","alexaServiceHost":"alexa.amazon.com.br","amazonPage":"amazon.com.br","acceptLanguage":"pt-BR","userAgent":"","useWsMqtt":"on","autoInit":"on"},{"id":"62d8d83f.4b03c8","type":"server","name":"Home Assistant","version":1,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true},{"id":"d0d297e.ebaed68","type":"mqtt-broker","name":"","broker":"192.168.8.181","port":"1883","clientid":"","usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""}]

Abraços!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *