En los dos posts anteriores aprendimos cómo configurar Frigate y cómo crear un bot en Telegram y usarlo en Home Assistant para enviar mensajes a un grupo o canal.
En este post simplemente mostraré dos automatizaciones en las que uso estos dos conceptos para enviar una foto y un vídeo de la última detección de Frigate a un canal de Telegram.
Envío de foto a un canal de Telegram al realizar una detección.
alias: Notificar con foto al detectar una persona en una cámara
description: ""
trigger:
- platform: mqtt
topic: frigate/events
condition:
- condition: template
alias: Is a new event?
value_template: "{{ event_type == 'new' }}"
- condition: template
alias: Is a person related event?
value_template: "{{ object_type == 'person' }}"
- condition: template
alias: Is a camera event?
value_template: "{{ camera is defined }}"
action:
- service: notify.telegram
data:
message: Foto {{ camera_name }}
data:
parse_mode: html
photo:
- url: >-
{{ base_location }}/api/frigate/notifications/{{ id }}/snapshot.jpg?format=android
caption: Foto {{ camera_name }}
variables:
base_location: http://127.0.0.1:8123
id: "{{ trigger.payload_json['after']['id'] }}"
event_type: "{{ trigger.payload_json['type'] }}"
object_type: "{{ trigger.payload_json['after']['label'] }}"
camera: "{{ trigger.payload_json['after']['camera'] }}"
camera_name: "{{ camera | replace('_', ' ') }}"
start_time: "{{ trigger.payload_json['after']['start_time'] }}"
mode: single
Ten en cuenta que el nombre del servicio, notify.telegram_urgente en mi caso, tendrá que ser el que hayas indicado en la configuración de Home Assistant (ver post cómo crear un bot en Telegram).
Es interesante notar que para que la automatización se inicie usamos el topic frigate/events que es el que usa Frigate para el envío de mensajes a través de mqtt. Además, como Frigate envía varios mensajes cada vez que realiza una detección, tendremos especial cuidado de enviar notificación sólo de las nuevas detecciones y, como Frigate nos permite detectar muchos objetos diferentes, notificaremos sólo las detecciones de personas (desgraciadamente la detección de Frigate no es perfecta y un cierto número de detecciones son falsos positivos, que podemos mitigar en mayor o menor medida).
Envío de vídeos a un canal de Telegram al realizar una detección.
alias: Notificar con vídeo al acabar de detectar una persona en una cámara
description: ""
trigger:
- platform: mqtt
topic: frigate/events
condition:
- condition: template
alias: Is a end event?
value_template: "{{ event_type == 'end' }}"
- condition: template
alias: Is a person related event?
value_template: "{{ object_type == 'person' }}"
- condition: template
alias: Is a camera event?
value_template: "{{ camera is defined }}"
action:
- delay:
seconds: 5
- service: notify.telegram
data:
message: Vídeo {{ camera_name }}
data:
parse_mode: html
video:
- url: >-
{{ base_location }}/api/frigate/notifications/{{ id }}/{{ camera }}/clip.mp4
caption: Vídeo {{ camera_name }}
variables:
base_location: http://127.0.0.1:8123
id: "{{ trigger.payload_json['after']['id'] }}"
event_type: "{{ trigger.payload_json['type'] }}"
object_type: "{{ trigger.payload_json['after']['label'] }}"
camera: "{{ trigger.payload_json['after']['camera'] }}"
camera_name: "{{ camera | replace('_', ' ') }}"
start_time: "{{ trigger.payload_json['after']['start_time'] }}"
mode: single
Al igual que con las fotografías, usaremos el evento frigate/events sólo que, en este caso, esperaremos a que la detección finalice, procediendo en este momento (de hecho 5 segundos después) a enviar el clip de vídeo completo.
Hay que tener en cuenta que esta automatización no funcionará para vídeos muy grandes (de más de 50 MB) ya que el API de Telegram limita el tamaño de los archivos que se pueden enviar, pero la experiencia me dice que los clips de detección raramente alcanzan ese tamaño.