Home Assistant - Enviando Vídeo/Foto da Câmera em caso de Sensor de Porta/Janela detectar abertura
Olá meus Unicórnios! 🦄✨
Hoje temos um tutorial super legal, que abrange várias tecnologias diferentes, e sistemas diferentes (Exatamente o que gosto rsrrs).
O que iremos aprender
- Enviar Fotos/Vídeos via WhatsApp utilizando uma API baratinha (Não oficial)
- Salvar uma foto e um vídeo de uma câmera de segurança
- Criar uma automação que será disparada quando um sensor de porta/janela é acionado
Tutoriais recomendados
Para este tutorial, é necessário que você tenha um conhecimento previo.
Com isto, recomendo que você veja alguns outros tutoriais relacionados:
O que iremos utilizar
Neste tutorial, estou utilizando um Sensor de Porta/Janela muito barato, compatível com a Tuya, e por vez, compatível com o Home Assistant:
Também iremos utilizar uma Câmera Intelbras muito TOP, mas, você pode utilizar qualquer câmera integrada ao Home Assistant:
E para o envio das mensagens via WhatsApp, iremos utilizar a API da Whatsgw:
Identificando o "ID" de nossa Câmera
Gosto muito das câmeras intelbras pela sua ampla compatibilidade.
A câmera que indique pode ser adicionada ao Home Assistant através da integração "Dahua":
Clique em "Dispositivos" para ter acesso a todas as câmeras:
Clique na câmera que será utilizada em seu script:
Serão abetos controles e sensores, o sensor que iremos utilizar é o "Main", que é uma entidade de "Câmera" com o Stream primário da câmera:
Na janela aberta, clique no ícone de "Configurações":
O ID de sua câmera será exibido em "ID da Entidade":
Neste exemplo, o ID é:
camera.quarto_main
Configurando conta na Whatsgw
Depois de criar uma conta na Whatsgw, adicionar créditos (Sim, é pago) e conectar se celular, entre em "Administração -> Telefones" e copie a "API Key":
Esta é uma API excelente, que permite enviar Texto/Fotos/Vídeos, inclusive enviar para Grupos.
Neste tutorial não vou detalhes como a API deles funciona, já que iremos apenas utilizar como caminho, mas, você pode explorar (é bem simples) em:
Se fizer isto, o WhatsApp pode bloquear seu número.
Configurando serviços de Notificação ligados a Whatsgw
Agora que temos nossa "API KEY" da conta Whatsgw iremos criar serviços de notificação, dentro do Home Assistant, que façam envios de:
- Texto
- Fotos
- Vídeos
Para cada tipo de envio iremos criar um serviço de notificações separada, isto facilita muito o envio das notificações.
Para isto, abra o arquivo "configuration.yaml" na pasta raiz do Home Assistant.
Aqui iremos criar três "notify", sendo um para cada tipo de mensagem.
Notificação de Texto
Aqui temos que inserir o Json abaixo para criar a função de notificação chamada "whatsgw_texto":
- name: whatsgw_texto
platform: rest
resource: "https://app.whatsgw.com.br/api/WhatsGw/Send"
method: POST_JSON
data:
apikey: "[SUA_API_KEY]"
phone_number: "[TELEFONE_DE_ORIGEM]"
contact_phone_number: "[TELEFONE_DE_DESTINO]"
message_type: "text"
message_body: "{{ message }}"
check_status: "1"
Aqui precisamos alterar os campos:
- SUA_API_KEY: A API KEY que você copiou do painel da Whatsgw
- TELEFONE_DE_ORIGEM: Telefone que você adicionou na conta Whatsgw - Exemplo: 5547999999999
- TELEFONE_DE_DESTINO: Telefone de quem ira receber a mensagem - Exemplo: 5547999999999
Observe também que esta função poderá receber alguns parâmetros:
- message: A mensagem que iremos enviar
Notificação de Imagem
Aqui temos que inserir o Json abaixo para criar a função de notificação chamada "whatsgw_imagem":
- name: whatsgw_imagem
platform: rest
resource: "https://app.whatsgw.com.br/api/WhatsGw/Send"
method: POST_JSON
data:
apikey: "[SUA_API_KEY]"
phone_number: "[TELEFONE_DE_ORIGEM]"
contact_phone_number: "[TELEFONE_DE_DESTINO]"
message_type: "image"
message_body_mimetype: "image/jpeg"
message_caption: "{{ message }}"
message_body_filename: "arquivo.jpg"
message_body: "{{ data.arquivo }}"
check_status: "1"
Aqui precisamos alterar os campos:
- SUA_API_KEY: A API KEY que você copiou do painel da Whatsgw
- TELEFONE_DE_ORIGEM: Telefone que você adicionou na conta Whatsgw - Exemplo: 5547999999999
- TELEFONE_DE_DESTINO: Telefone de quem ira receber a mensagem - Exemplo: 5547999999999
Observe também que esta função poderá receber alguns parâmetros:
- message: A mensagem que iremos enviar
- data.arquivo: O Arquivo em Base64
Notificação de Vídeo
Aqui temos que inserir o Json abaixo para criar a função de notificação chamada "whatsgw_video":
- name: whatsgw_video
platform: rest
resource: "https://app.whatsgw.com.br/api/WhatsGw/Send"
method: POST_JSON
data:
apikey: "[SUA_API_KEY]"
phone_number: "[TELEFONE_DE_ORIGEM]"
contact_phone_number: "[TELEFONE_DE_DESTINO]"
message_type: "video"
message_body_mimetype: "video/mp4"
message_caption: "{{ message }}"
message_body_filename: "arquivo.mp4"
message_body: "{{ data.arquivo }}"
check_status: "1"
Aqui precisamos alterar os campos:
- SUA_API_KEY: A API KEY que você copiou do painel da Whatsgw
- TELEFONE_DE_ORIGEM: Telefone que você adicionou na conta Whatsgw - Exemplo: 5547999999999
- TELEFONE_DE_DESTINO: Telefone de quem ira receber a mensagem - Exemplo: 5547999999999
Observe também que esta função poderá receber alguns parâmetros:
- message: A mensagem que iremos enviar
- data.arquivo: O Arquivo em Base64
Criando Automação
Agora que já temos o serviço de notificação, iremos criar uma automação no Home Assistant, para que seja disparada quando o Sensor de Porta/Janela indicar que a porta foi aberta.
Também iremos configurar para aguardar 30 segundos antes de disparar a automação, para eventuais falsos-positivos.
Em seu "Home Assistant", clique em "Configurações -> Automações & Cenas":
Na janela de Automações, clique em "Criar Automação":
Após isto, clique em "Criar nova Automação":
Configurando o Gatilho
Na seção "Quando" clique em "Adicionar Gatilho":
Selecione "Dispositivo":
No campo "Dispositivo" selecione seu Sensor de Porta/Janela:
No campo "Gatilho" selecione o gatilho com sufixo "Porta Aberta":
No campo "Duração" preencha "30 segundos" (Para disparar a automação quando a porta ficar aberta por mais de 30 segundos):
Depois disto, iremos ter um Gatilho semelhante a este:
Mudando para a Edição do YAML
Agora vem a parte mais legal!
Para as próximas ações, iremos utilizar o YAML, nade de interface gráfica porque somos programadoras e queremos codar!
Clique nos três pontos do lado direito superior:
Selecione "Editar como YAML":
Observe que neste momento, temos já um código, que é o código do Gatilho que criamos na etapa anterior:
description: ""
mode: single
trigger:
- type: opened
platform: device
device_id: 99999999999999999999999999999999
entity_id: 11111111111111111111111111111111
domain: binary_sensor
for:
hours: 0
minutes: 0
seconds: 30
condition: []
action: []
Neste código, não iremos mexer, apenas iremos adicionar ações em "Actions".
Configurando as Ações
Todas as ações serão adicionadas na variável "action", onde cada ação ira começar por "-".
Basicamente temos que seguir uma sequência de ações para cada envio.
Definir uma variável para armazenar o nome do arquivo e sua extensão
- variables:
arquivo_nome: "{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg"
Aqui estamos criando uma variável que ira ter a Data (No formato 2024-03-01_120000) e a extensão "JPG".
No caso do vídeo, iremos alterar a extensão para "MP4".
Acionar o serviço da câmera que ira salvar uma foto/vídeo do câmera
- service: camera.snapshot
data:
entity_id: camera.quarto_main
filename: /config/www/cameras/{{ arquivo_nome }}
Observe que estamos salvando dentro da pasta "/config/www/cameras/" e o nome do arquivo esta vindo da variável
Aqui também é importante observar que esta pasta precisa estar liberada para receber arquivos dos scripts, para isto, você pode consultar meu outro tutorial:
Acionar um comando shell para converter o arquivo em base64
- service: shell_command.get_base64_image
data:
arquivo: /config/www/cameras/{{ arquivo_nome }}
response_variable: arquivo_raw
A API da WhatsGW não funciona bem ao receber arquivos em Links, com isto, precisamos encaminhar em Base64.
A função "get_base64_image" não existe no Home Assistant, este é uma função que criei em outro tutorial:
Chamar o serviço de notificações passando o arquivo (em base64 como parâmetro)
- service: notify.whatsgw_imagem
data:
message: Foto do Quarto
data:
arquivo: "{{ arquivo_raw.stdout }}"
- variables:
arquivo_nome: "{{ now().strftime('%Y%m%d_%H%M%S') }}.mp4"
Observe que estamos chamando o serviço de notificação com o nome que criamos ao criar estas funções no começo do tutorial:
- whatsgw_texto: Para envio de Texto
- whatsgw_imagem: Para envio de Imagens
- whatsgw_video: Para envio de Vídeos
Nesta chamado, também estamos passando uma legenda para a foto, através da variável "message".
Configurando o envio da Mensagem de Texto
Antes de começar a tratar os arquivos, iremos enviar uma mensagem de texto, avisando que a porta foi aberta:
- service: notify.whatsgw_texto
data:
message: |-
*ATENÇÃO!!!!!*
>> Porta foi Aberta <<
Configurando o envio da Foto da Câmera
Agora iremos tirar um Snapshot da Câmera (Um frame da câmera):
- variables:
arquivo_nome: "{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg"
- service: camera.snapshot
data:
entity_id: camera.quarto_main
filename: /config/www/cameras/{{ arquivo_nome }}
- service: shell_command.get_base64_image
data:
arquivo: /config/www/cameras/{{ arquivo_nome }}
response_variable: arquivo_raw
- service: notify.whatsgw_imagem
data:
message: Foto do Quarto
data:
arquivo: "{{ arquivo_raw.stdout }}"
Aqui temos de observar alguns itens:
- Em "entity_id" é necessário indicar o ID da entidade de sua câmera
- Em "message" você pode adicionar uma legenda para esta foto
Configurando o envio de um Vídeo Curto da Câmera
Agora iremos salvar 10 segundos Câmera:
- variables:
arquivo_nome: "{{ now().strftime('%Y%m%d_%H%M%S') }}.mp4"
- service: camera.record
data:
entity_id: camera.quarto_main
filename: /config/www/cameras/{{ arquivo_nome }}
duration: 10
- service: shell_command.get_base64_image
data:
arquivo: /config/www/cameras/{{ arquivo_nome }}
response_variable: arquivo_raw
- service: notify.whatsgw_video
data:
message: Vídeo do Quarto
data:
arquivo: "{{ arquivo_raw.stdout }}"
Aqui temos de observar alguns itens:
- Em "entity_id" é necessário indicar o ID da entidade de sua câmera
- Em "duration" você pode inserir o tempo, em segundos, que será gravado
- Em "message" você pode adicionar uma legenda para esta foto
Salvando a Automação
Agora que já terminamos todas as configurações, clique em "Salvar":
Preencha um "Nome" para sua automação e clique em "Salvar":
Testando Automação
Abra a porta, para que o sensor acione, e aguarde 30 segundos, após isto, você deve receber as mensagens:
EXTRA: Disparando a Automação quando a câmera identificar movimento
Se você estiver utilizando a câmera que indiquei, deve ter notado um sensor chamado "Motion Alarm":
Este sensor, é alterado quando a câmera identifica um movimento.
É um sensor do tipo "binary_sensor", ou seja, ele retorna "on/off" quando "detecta/não detecta" movimento:
Então, em sua automação, podemos configurar o Gatilho para ser disparado quando a Câmera identificar movimento:
Então, monte seu fluxo tratando os casos de falso positivo.
Novidades em Breve!
Em breve iremos abordar uma forma muito mais precisa de detectar presença, utilizando ondas de frequência FMCW!
Então, fique ligado para novidades muito em breve!
Por hoje é só, meus unicórnios! 🦄✨
Que a magia do arco-íris continue brilhando em suas vidas! Até mais! 🌈🌟