Home Assistant - Enviando Vídeo/Foto da Câmera em caso de Sensor de Porta/Janela detectar abertura

Mantenha sua casa segura com uma solução inteligente! Descubra como configurar seu sistema para capturar imagens/vídeos quando um sensor de porta/janela é acionado e notificar via whatsapp.

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:

Home Assistant — Salvando Snapshot de uma câmera
Descubra como salvar instantâneos de câmeras facilmente com o Home Assistant usando o serviço “snapshot” em um script personalizado
Home Assistant — Salvando um Vídeo curto de uma câmera
Capture vídeos curtos da sua câmera e armazene em formato MP4
Home Assistant — Convertendo arquivo em Base64
Convertendo arquivos para Base64 no Home Assistant: Aprenda como criar uma função “shell” para converter arquivos em Base64 e utilizá-la em suas automações
Home Assistant — Enviado notificação via WhatsApp
Automatizando emergências: Integrando Google Home e Home Assistant para envio de mensagens

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:

Sensor De Porta E Janela Tuya Wi-fi P/ Alexa E Google - R$ 59,9
Abrange 1 zonas. | Compatível com smartlife. | É sem fio. | Com Wi-Fi. | Detector afastamento. | Proteção e segurança garantidas.

Também iremos utilizar uma Câmera Intelbras muito TOP, mas, você pode utilizar qualquer câmera integrada ao Home Assistant:

Câmera Ip 1 Megapixel 3.6mm 30m Poe Vip 1130 B G4 Intelbras - R$ 312,48
Definição da câmera: HD 720p. | Inclui visão noturna. | É ideal para o controle é segurança de lares, lugares de trabalho e prédios.

E para o envio das mensagens via WhatsApp, iremos utilizar a API da Whatsgw:

API para WhatsApp
O WhatsGW é uma API para WhatsApp que permite integrar suas contas do WA aos seus sistemas e soluções, ideal para envio de NOTIFICAÇÕES, PDF, IMAGENS, VIDEOS

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:

WhatsGWApi
API Rest para trabalhar com a plataforma WhatsGW Antes de começar siga o tutorial do sistema, ele vai te ajudar a checar se está tudo devidamente configurado para você fazer o envio da sua primeira mensagem.

💡
Esta API NÂO é oficial, com isto, não utilize para enviar centenas de mensagens em poucos minutos.
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:

Home Assistant — Salvando Snapshot de uma câmera
Descubra como salvar instantâneos de câmeras facilmente com o Home Assistant usando o serviço “snapshot” em um script personalizado

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:

Home Assistant — Convertendo arquivo em Base64
Convertendo arquivos para Base64 no Home Assistant: Aprenda como criar uma função “shell” para converter arquivos em Base64 e utilizá-la em suas automações

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

💡
Cuidado com a duração, mais tempo mais grande será o arquivo, recomendo não exceder 30 segundos.

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:

💡
Observe que esta detecção não é 100% precisa, existem muitos falso-positivo.
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! 🌈🌟