Mirilla avanzada basada en ESP32-CAM con notificación a Telegram y control desde Home Assistant

A partir de la instalación de un servidor de Home Assistant, vamos a continuar añadiendo servicios para esta plataforma.

En esta ocasión vamos a hacer uso de varias integraciones, con las que trabajamos en artículos anteriores, para proponer una solución que permita el control de una mirilla digital desde Home Assistant y el envío vía Telegram de la imagen captada cuando se produce una llamada al timbre del portón.

A diferencia de la mirilla que planteamos en un artículo anterior, que básicamente era una cámara detrás de una mirilla estándar, aquí presentamos una estructura completa impresa en 3D que integra una cámara OV2640.

Integraciones necesarias

Timbre

Vamos a utilizar nuestra solución de detección de llamada a timbre basada en sensor de vibración.

Telegram

Tendremos nuestro Home Assistant configurado para poder enviar mensajes por Telegram.

Mirilla

Vamos a basar la mirilla propiamente dicha en un ESP32-CAM, que montará una cámara OV2640 en su versión con FOV de 160 grados y cable plano de 20 centímetros.

Software

Utilizaremos el YAML disponible en Github en nuestro ESP32-CAM.

esp32_camera:
  id: espcam
  name: esp-cam
  external_clock:
    pin: GPIO0
    frequency: 10MHz
  i2c_pins:
    sda: GPIO26
    scl: GPIO27
  data_pins: [GPIO5, GPIO18, GPIO19, GPIO21, GPIO36, GPIO39, GPIO34, GPIO35]
  vsync_pin: GPIO25
  href_pin: GPIO23
  pixel_clock_pin: GPIO22
  power_down_pin: GPIO32
  #resolution: 1024x768
  resolution: XGA
  jpeg_quality: 40  # max. 63
  max_framerate: 12.0fps
  idle_framerate: 0.0fps
  vertical_flip: true
  horizontal_mirror: false
  brightness: 0 # -2 to 2
  contrast: 0 # -2 to 2
  special_effect: none
  # exposure settings
  aec_mode: auto
  aec2: false
  ae_level: 0
  aec_value: 300
  # gain settings
  agc_mode: auto
  agc_gain_ceiling: 2x
  agc_value: 0
  # white balance setting
  wb_mode: auto

Nótese que en el fragmento anterior de código se pueden configurar valores como la velocidad de cuadros en estado de reposo (idle_framerate) que, en este caso, se pone a cero para evitar que la cámara se active innecesariamente.

Estructura

Se ha realizado un diseño en 3D que permite aprovechar el hueco de la mirilla tradicional, disponible en Thingiverse.

Esta pieza respeta las dimensiones del cable plano de la cámara para que pueda pasar por ella sin problemas. Se recomienda su impresión con un relleno al 30% de tipo giroide.

La cámara quedará protegida por el lado de fuera del portón con un embellecedor, que imprimiremos con un relleno típico del 20% de tipo cúbico.

En el embellecedor encajan tanto la cámara como el pasador de la mirilla.

Por otro lado, dispondremos de una base sobre la que descansará la ESP32-CAM e irá sujeta al pasador con una tuerca que habremos impreso para ello.

Por último, dispondremos de una tapa que cierre el conjunto.

No olvidemos alimentar el dispositivo con 5 voltios a través de los pines 5V y GND.

Integración en Home Assistant

Por lo general, el dispositivo será automáticamente detectado por Home Assistant. En todo caso, siempre se puede añadir mediante el menú de Ajustes -> Integraciones -> [+ AÑADIR INTEGRACIÓN].

Podemos añadir al panel de control una tarjeta que nos permita visualizar la cámara en cualquier momento, cuyo código YAML sería el siguiente.

show_state: false
show_name: true
camera_view: auto
type: picture-entity
entity: camera.esp_cam
name: Mirilla
camera_image: camera.esp_cam

Asimismo, se añadirá una automatización que tomará la imagen capturada por la cámara, una vez detectada una llamada al timbre, y la enviará por Telegram.

alias: Mirilla
description: ""
trigger:
  - type: vibration
    platform: device
    device_id: vibr
    entity_id: binary_sensor.lumi_lumi_vibration_aq1_vibration
    domain: binary_sensor
condition:
  - type: is_not_open
    condition: device
    device_id: hall
    entity_id: binary_sensor.lumi_lumi_sensor_magnet_aq2_opening
    domain: binary_sensor
    for:
      hours: 0
      minutes: 0
      seconds: 1
action:
  - service: camera.snapshot
    data:
      filename: /config/capturas/mirilla.jpg
    target:
      device_id: miri
  - service: telegram_bot.send_photo
    data:
      file: /config/capturas/mirilla.jpg
      caption: Llaman al timbre a las {{ now().strftime("%H:%M:%S del %d/%m/%Y") }}
  - service: input_boolean.turn_on
    data: {}
    target:
      entity_id: input_boolean.timbre
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 0
  - service: input_boolean.turn_off
    data: {}
    target:
      entity_id: input_boolean.timbre
mode: single

Así, cuando llamen a nuestro timbre recibiremos la imagen de la persona que nos visita.

Deja un comentario