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.