A partir de la instalación del servidor de Home Assistant en una Raspberry Pi con ArchLinux, vamos a continuar añadiendo servicios para esta plataforma.
En esta ocasión vamos a hacer uso de varias integraciones, incluyendo algunas con las que trabajamos en artículos anteriores, para proponer una solución que permita el envío vía Telegram de las imágenes captadas por una cámara situada en la entrada del hogar al ser abierto el portón.
Para ello, se hará uso de una tarjeta basada en ESP32 que incluye un sensor PIR para detección de movimientos y una cámara tipo ojo de pez que servirá para tomar las fotografías. Por otro lado, la detección de la apertura del portón se realizará mediante un sensor de puertas tipo Hall. Las imágenes se enviarán vía Telegram.
Elementos necesarios
Vamos a utilizar los siguientes elementos:
- Tarjeta basada en ESP32 LILYGO TTGO T-Camera Plus
- Sensor de puertas Aqara MCCGQ11LM
Instalaciones y configuraciones
Tarjeta ESP32
Software
Vamos a programar la TTGO T-Camera Plus con ESPHome a partir del siguiente archivo YAML:
esphome:
name: esp32cam
platform: ESP32
board: esp-wrover-kit
wifi:
ssid: "ssid_red"
password: "passwd_red"
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
esp32_camera:
name: cam_entrada
external_clock:
pin: GPIO32
frequency: 20MHz
i2c_pins:
sda: GPIO13
scl: GPIO12
data_pins: [GPIO5, GPIO14, GPIO4, GPIO15, GPIO18, GPIO23, GPIO36, GPIO39]
vsync_pin: GPIO27
href_pin: GPIO25
pixel_clock_pin: GPIO19
resolution: VGA
jpeg_quality: 10
vertical_flip: true
horizontal_mirror: true
binary_sensor:
- platform: gpio
id: cam_entrada_pir
name: "cam_entrada_pir"
pin:
number: 33
i2c:
sda: 21
scl: 22
scan: True
Para subir el código basta con conectar por USB la tarjeta al PC y escribir desde la línea de comandos:
$ esphome tcamera.yaml run
Integración en Home Assistant
La integración en Home Assistant se realiza mediante los menús «Ajustes» -> «Dispositivos y Servicios» -> [+ AÑADIR INTEGRACIÓN]. En esta última seleccionamos «ESPHome». Aquí introducimos la dirección IP del ESP32, que podemos consultar, por ejemplo, con nmap (corresponderá a un dispositivo Espressif).
Nmap scan report for 192.168.1.168 Host is up (0.018s latency). MAC Address: 44:44:44:44:44:44 (Espressif)
Una vez introducido, pulsamos [ENVIAR] y nos pedirá que indiquemos el área del hogar donde estará instalado, normalmente la entrada.
Soporte
Por último, necesitaremos un soporte para la TTGO T-Camera Plus. Este lo imprimiremos en nuestra impresora 3D a partir de las piezas disponibles en Thingiverse. Necesitaremos 3 archivos STL: para el soporte de pared, para la caja y para la tapadera. Para esta última seleccionaremos la versión «espcam_front_fish.stl».
Imprimiremos el conjunto en PLA a una resolución de 0,2 mm y un relleno del 20% en cúbico.
Sensor de puertas
El sensor de puertas, al ser Zigbee, podemos integrarlo directamente con ZHA en Home Assistant.
Nótese que el dispositivo en cuestión queda identificado con «lumi.sensor_magnet.aq2».
Telegram
Necesitaremos tener nuestro Home Assistant configurado para poder enviar mensajes por Telegram.
Automatización en Home Assistant
Esta automatización tomará una secuencia de 3 imágenes capturadas por la cámara, una vez detectada la apertura del portón y algún movimiento, y la enviará por Telegram.
- id: '1683558847977'
alias: Entrada a casa
description: Captura imagen de quien entra en casa
trigger:
- type: opened
platform: device
device_id: yyyy
entity_id: binary_sensor.lumi_lumi_sensor_magnet_aq2_opening
domain: binary_sensor
condition: []
action:
- repeat:
while:
- condition: or
conditions:
- type: is_on
condition: device
device_id: xxxx
entity_id: binary_sensor.espcam01_pir
domain: binary_sensor
- type: is_open
condition: device
device_id: yyyy
entity_id: binary_sensor.lumi_lumi_sensor_magnet_aq2_opening
domain: binary_sensor
sequence:
- service: telegram_bot.send_photo
data:
authentication: digest
file: /config/capturas/entrada.jpg
capton: Entrada/salida a las {{ now().strftime("%H:%M:%S del %d/%m/%Y")
}}
- repeat:
count: '3'
sequence:
- service: camera.snapshot
data:
filename: /config/capturas/entrada.jpg
target:
area_id: entrada
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 500
- service: telegram_bot.send_photo
data:
authentication: digest
file: /config/capturas/entrada.jpg
caption: Entrada/salida a las {{ now().strftime("%H:%M:%S del %d/%m/%Y")
}}
mode: single
Así, cuando se abra el portón, recibiremos las imágenes en nuestro Telegram.