Pular para o conteúdo
Home Assistant

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

Capa do artigo: 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âmeraDescubra como salvar instantâneos de câmeras facilmente com o Home Assistant usando o serviço “snapshot” em um script personalizadoblog.palomamacetko.com.brHome Assistant — Salvando um Vídeo curto de uma câmeraCapture vídeos curtos da sua câmera e armazene em formato MP4blog.palomamacetko.com.brHome Assistant — Convertendo arquivo em Base64Convertendo arquivos para Base64 no Home Assistant: Aprenda como criar uma função “shell” para converter arquivos em Base64 e utilizá-la em suas automaçõesblog.palomamacetko.com.brHome Assistant — Enviado notificação via WhatsAppAutomatizando emergências: Integrando Google Home e Home Assistant para envio de mensagensblog.palomamacetko.com.br

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,9Abrange 1 zonas. | Compatível com smartlife. | É sem fio. | Com Wi-Fi. | Detector afastamento. | Proteção e segurança garantidas.mercadolivre.com.br

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,48Definição da câmera: HD 720p. | Inclui visão noturna. | É ideal para o controle é segurança de lares, lugares de trabalho e prédios.mercadolivre.com.br

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

API para WhatsAppO 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, VIDEOSwhatsgw.com.br

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:

WhatsGWApiAPI 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.documenter.getpostman.com

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âmeraDescubra como salvar instantâneos de câmeras facilmente com o Home Assistant usando o serviço “snapshot” em um script personalizadoblog.palomamacetko.com.br

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 Base64Convertendo arquivos para Base64 no Home Assistant: Aprenda como criar uma função “shell” para converter arquivos em Base64 e utilizá-la em suas automaçõesblog.palomamacetko.com.br

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:

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! 🌈🌟

Leia também

Home Assistant

Home Assistant - Câmera utilizando um ESP32-CAM

Aprenda a configurar e integrar uma câmera ESP32-CAM no Home Assistant - Explore os recursos e funcionalidades da câmera ESP32-CAM e saiba como incorporá-la ao seu sistema Home Assistant com nosso guia passo a passo