Caso queira usar apenas a lógica dos lembretes sem integrar com Alexa, pode pular a Parte 1 e seguir diretamente para a Parte 2 mais abaixo.
Logicamente, isso vai requerer um pouco mais de conhecimento para adaptar as automações para outra situação que preferir.
Parte 1
Breve explicação sobre a integração com Alexa através de uma skill personalizada
Este tutorial depende da configuração do código abaixo para fazer integração com Alexa:
Alexa Intents - Main file is "examples_request.yaml" · GitHub
Não vou entrar em detalhes a respeito do trecho acima porque é um assunto para outro tutorial completamente diferente.
Mas em resumo, é toda a configuração de uma skill na Alexa capaz de reconhecer respostas positivas e negativas (além de outros detalhes), e repassar o tratamento para o Home Assistant por meio de “intent scripts”.
Já adiantando, o código acima utiliza o tutorial oficial como base, mas possui diversas modificações para atender situações não previstas.
Considerando que a configuração acima foi toda realizada e esteja funcionando plenamente, podemos continuar para o nosso tutorial…
Parte 2
Para facilitar, todo o código da lógica dos lembretes está neste link abaixo:
Esta configuração acima consiste basicamente no seguinte:
Esta parte é uma explicação detalhada do código genérico e que vale a pena ler se quiser entender o funcionamento nos detalhes. Senão, basta copiar e colar…
Explicação detalhada da parte genérica
Sensores
- 1 template sensor baseado em trigger para persistir as datas dos lembretes ( sensor.lembretes_de_pagamentos )
- Inicialmente minha ideia era usar
input_datetime
, mas não encontrei um jeito de definir atributos customizáveis nele (vencimento, recorrencia, pergunta, resposta) - Se alguém descobrir um jeito, talvez seja possível eliminar este sensor
- No momento, só funciona com 2 tipos de recorrências: 2 semanas e 1 mês (padrão)
- Este sensor atualiza apenas quando há chamada do evento “update_lembrete” (trigger)
- Não requer modificação, só copiar e colar
- Inicialmente minha ideia era usar
- 1 template sensor baseado em estado para manter a lista de pagamentos pendentes ( sensor.lembretes_de_pagamentos_pendentes )
- É apenas um sensor totalizador para facilitar a automação sobre os lembretes pendentes
- Este sensor é calculado e atualizado automaticamente a cada segundo
- Não requer modificação, só copiar e colar
Automações
- 1 automação para monitorar a situação do sensor totalizador de lembretes pendentes
- Faz a chamada do script que inicia o fluxo com a parte 1 do tutorial
- Executa a partir das 09h30
- Coloquei esta situação para não fazer Alexa me notificar tão cedo
- Há uma condição para só executar durante o dia entre 09h30 e 20h00
- Qualquer lembrete que ultrapassar essa situação, vai ficar pro dia seguinte
- Responsável por ler alguns atributos fixos (vencimento, pergunta, resposta) e traduzi-los numa chamada de um script que irá chamar Alexa
- 1 automação para reagendar o lembrete para o próximo vencimento (sucesso)
- Monitora uma resposta positiva identificada pela Alexa e traduz num comando para ajustar o lembrete para o próximo vencimento
- Nesta automação, precisei acrescentar um pequeno atraso para dar tempo da Alexa falar a resposta completa antes de iniciar o fluxo do próximo lembrete
- 1 automação para postergar o lembrete em 1 hora (falha)
- Monitora uma resposta negativa ou ausência de resposta identificada pela Alexa e traduz num comando para ajustar o lembrete em 1 hora relativo ao horário atual
- Como a resposta da Alexa numa situação negativa é bem curta, não senti necessidade de acrescentar um comando de atraso, mas caso aconteça com vocês, o ponto de ajuste seria aqui. Talvez um atraso de 1 ou 2 segundos
Todas as 3 automações descritas acima integram-se com a Parte 1 do tutorial.
Caso opte por usar apenas a parte de lembrete e não integrar com Alexa, a ação da primeira automação e os gatilhos das 2 últimas também precisarão ser ajustados para atender ao seu cenário.
Já esta outra parte varia caso a caso e vale a pena entender bem…
- N sensores binários para representar cada lembrete ( binary_sensor.lembrete_* )
- São os lembretes propriamente ditos e podem existir quantos forem necessários
- Precisa ser do tipo “binary_sensor”
- Precisa que o “entity_id” comece com “lembrete_” para ser reconhecido pelos sensores da parte genérica explicada anteriormente
- Como o “entity_id” é gerado a partir do “name”, então faz sentido colocar o nome começando com "Lembrete "
- A não ser que queira modificar o “entity_id” manualmente depois para atender a essa restrição
- No momento, o atributo “recorrencia” reconhece 3 situações:
2W
,1M
e'{{ {"months":x,"days":y} }}'
- É opcional e o valor padrão é “1M”
-
2W
representa 2 semanas e é relativo em relação a data atual- É o mesmo que definir
'{{ {"months":0,"days":14} }}'
- É o mesmo que definir
-
1M
representa 1 mês e é absoluto em relação a data atual- É o mesmo que definir
'{{ {"months":1,"days":0} }}'
- É o mesmo que definir
- Qualquer outro período diferente desses 2 anteriores, precisa informar no formato
'{{ {"months":x,"days":y} }}'
- Informe “months” se a recorrência for contabilizada em meses
- Informe “days” se a recorrência for contabilizada em dias
- O atributo “vencimento” depende do atributo “recorrencia”
- É opcional e o valor padrão é 1
- Se for
2W
, o valor é somado ao dia atual - Caso contrário, o valor é o dia absoluto a ser considerado
- Há uma situação ainda em aberto que dá problema quando o vencimento definido não existe em algum mês. Então, minha sugestão é evitar os dias 29, 30 e 31.
- O atributo “pergunta” é a fala que Alexa deve fazer quando o lembrete estiver pendente
- É obrigatório
- O atributo “resposta” é a fala que Alexa deve fazer quando reconhecer uma resposta positiva
- É opcional e o valor padrão é “Lembrete ajustado para o próximo dia {vencimento}”
- Faz sentido ajustar esse atributo caso a recorrência seja
2W
- Perceba que o “state” é sempre o mesmo
- Ele é extraído a partir da informação persistida pelo sensor baseado em trigger da parte genérica explicada anteriormente
- Caso ele tenha sido criado pela primeira vez, o sensor já vai entrar como se estivesse pendente e Alexa já perguntar sobre ele
Bônus
No código, há também um trecho comentado para integração com o Telegram.
Caso não haja resposta, uma mensagem é enviada pelo Telegram com possibilidade de registrar o pagamento via comando /pago <domain.entity_id>
Logicamente, há também uma automação para tratar o comando acima.
Segue o vídeo para exemplificar como ficou o funcionamento na prática deste tutorial:
Bom, é isso.
A medida que forem surgindo perguntas, vou evoluindo esta postagem para contemplar maiores detalhes.