X
    Categorías: Domotica

Home Assistant #16: Instalamos una cámara

Si tenéis pensado poner una alarma en casa o tener algo para el control de la misma cuando no estáis, o, incluso cuando estáis para usarlas de sensor de presencia, necesitaréis, al menos, instalar una cámara.

Elección de la mejor cámara para Home Assistant

Esta respuesta no tiene una respuesta inmediata ni tampoco una respuesta correcta para todos, ya que, muchos, buscan economizar el sistema y buscan economizar el sistema al máximo. Por poner un ejemplo, en mi caso, cuando empecé a usar Home Assistant, fui mirando ofertas de las que se publican en diferentes canales de Telegram, y conseguí 2 Xiaofang y 2 Fluoreon a buenos precios y, hasta ahora, salvo una Xiaofang que pasó a mejor vida por instalarla en la terraza, tengo las otras 3 funcionando sin problemas.

Hay muchas cámaras ya soportadas de manera oficial y de muchos precios, y, supongo, que cuando estéis leyendo este pequeño tutorial, seguramente habrá más añadidos y mejorado el soporte de algunas que ahora todavía no está totalmente terminado.

La manera de funcionar depende de cada cámara y, en el peor de los casos que la marca que tengáis o que hayais visto a buen precio, mientras tenga servidor RTSP (lo suelen indicar en las especificaciones) u ONVIF (también lo indican) debería funcionarnos sin problemas, eso si, en muchos casos, los fabricantes no especifican la URL a la que se accede para ver el streaming RTSP. Cabe decir que las cámaras Fluoreon que compré indicaban ONVIF, pero no llegó a funcionarme, posiblemente, no eran totalmente compatibles.

Otro de los puntos a mirar dentro de los componentes de cámara de Home Assistant es el soporte al que llega Home Assistant, ya que, en algunos, solo tenemos soporte para el vídeo, en otro, notificaciones de la propia cámara o incluso en algunos hasta podemos añadir los sensores de movimiento de las propias cámaras como es el caso de las cámaras Axis.

La mayoría de cámaras, son usadas con ffmpeg para visualizar el streaming de video, tanto cuando lo vemos en el escritorio como para verlo en tiempo real cuando pulsamos sobre ella. El problema que he encontrado es que si tenemos por ejemplo 2 cámaras, y queremos usarlas como detectoras de movimiento, son 4 ffmpeg funcionando de continuo, algo que a la Raspberry Pi 3 se le queda algo justo y no termina de ir bien, por lo que acabé delegando el movimiento a sensores de movimiento y usando la cámara para grabar solo cuando es necesario.

Otra cosa interesante es si vuestra cámara, o la que elijáis para usar en Home Assistant permite descargar una imagen cada segundo también libera el sistema. Para poder sacar las url de la cámara, he usado en algunos casos ispyconnect, podéis mirar antes de comprar.

Configuración de la cámara en Home Assisant

Vamos a poner una cámara genérica, en la que podemos o bien acceder al streaming de video por rtsp o bien, con una imagen estática que se actualiza cada segundo.

Si tenéis la URL del streaming de vídeo y queréis comprobar que va, podéis usar el VLC, poniendo la en Archivo / Abrir URL, si veis la cámara, os debería funcionar con Home Assistant.

Si queremos configurar el streaming, sería, dentro del apartado “camera:” (si no lo tenéis lo tendréis que poner en el configuration.yaml sin ningún espacio por la izquierda). Vamos a suponer que nuestra cámara está en la dirección 192.168.1.100 de nuestra red de casa y para acceder al RTSP tenemos que poner el puerto 554 y luego la dirección es en “/2” otros pueden ser “/rtsp” etc:

  - platform: ffmpeg
    input: -rtsp_transport udp -i rtsp://192.168.1.100:554/2
    name: Camara1

En caso de que lo podáis hacer por medio de una imagen, liberaréis mucho la Raspberry Pi, tendréis que ponerlo así. Asumimos de nuevo que la cámara está en la 192.168.1.100 y que el directorio donde vemos la captura actualizada cada segundo es /web/tmpfs/snap.jpg”:

  - platform: generic
    name: Camara1
    still_image_url: http://user:pass@192.168.1.100/web/tmpfs/snap.jpg

Una vez hecho esto, salváis el fichero y podéis probar a reiniciar Home Assistant para ver si coge la configuración. En caso de estar correcto, debería saliros algo así:

Si por el contrario os da error, tendréis que intentar localizar el error en Home Assistant para ver que os dice.

Detectar movimiento con la cámara en Home Assistant

Como he comentado antes, se puede poner la cámara para detectar movimiento en la misma, por medio de los cambios que de la cámara, algo que puede resultar útil si conseguimos afinar lo suficiente para que nos notifique de alguna forma. En caso de querer hacerlo, tenemos el componete de ffmpeg_motion con el que usando el ffmpeg podremos determinar el % de diferencia entre fotogramas para saltar o no. Cabe decir que en mi caso, no me funcionaron todo lo bien que quisiera y, el motivo, estoy convencido que era por culpa de que el ffmpeg necesitaba muchos recursos y la Pi3 se quedaba corta, por lo que acabé delegando la detección a un sensor de movimiento, siendo mucho más efectivo.

Para poner la detección por medio de la cámara, tenemos que poner en la configuración, dentro de “binary_sensor:” lo siguiente:

  - platform: ffmpeg_motion
    name: Camara1_movimiento
    input: -rtsp_transport tcp -i rtsp://192.168.1.100:554/2
    changes: 10
    reset: 1

Los datos, son los mismos que los de la imagen, tan solo entran en juego nuevos como por ejemplo, “changes” que define el % de diferencia entre una imagen y la siguiente para que considere que hay movimiento. Por ejemplo, en el código que os he puesto, si hay un 10% de cambios, saltará el aviso del sensor, cuanto más alto, menos preciso, pero menos falsos positivos. Otro parámetro es el reset, que es el tiempo que tarda el sensor en reiniciarse para poder volver a detectar movimiento, por defecto es 20 segundos, pero en el ejemplo he puesto 1 segundo. También podríamos poner un detector de ruido por medio del audio de la cámara con la siguiente configuración en el mismo sitio:

  - platform: ffmpeg_noise
    name: Salon-Ruido
    input: -rtsp_transport udp -i rtsp://192.168.1.100:554/2

Una vez hecho esto, tendremos, cuando reiniciemos, el o los sensores y que podremos usar de igual forma que si se tratara de un sensor normal de movimiento.

Grabación de vídeo y envío de fotos y vídeos por Telegram en Home Assistant

Hasta el momento, tan solo tenemos las cámaras puestas en el sistema y tenemos el detector de movimiento si os habéis decidido a ponerlo con la propia cámara, pero ahora, nos falta poder hacer algo con las cámaras para si detectamos movimiento, para eso, como no todas las cámaras nos brindan la posibilidad de hacerlo directamente, la solución que encontré pasaba por “salir” de Home Assistant y hacer cosas por la consola, os explico el procedimiento.

Cuando tengamos las cámaras funcionando y, sea el sensor de la cámara o uno de movimiento real salte avisando de movimiento, lanzará 2 comandos de consola de linux, con uno grabaremos un video que dejaremos en el directorio /home/homeassistant/.homeassistant/www para poder usarlo luego y recogerá la imagen, en caso de tenerla, que nos deja la cámara cada segundo para también enviarla posteriormente.

Si nos vamos casi al final de la configuración, tenemos (y si no, lo creamos) el apartado “shell_command:” y, dentro, tendremos que poner estos dos comandos:

videocamara1: 'timeout 30s /usr/bin/ffmpeg -rtsp_transport udp -i rtsp://192.168.1.100:554/2 -ss 00:00:0.0 -t 10 -an /home/homeassistant/.homeassistant/www/camara1.mp4 -y'
fotocamara1: 'timeout 5s /usr/bin/wget --output-document=/home/homeassistant/.homeassistant/www/camara1.jpg http://user:pass@192.168.1.100/web/tmpfs/snap.jpg'

Os explico un poco lo que hace el código:

  • timeout 30s: He detectado que el ffpmeg se me quedaba muchas veces colgado, por lo que si después de 30 segundos, no ha terminado, la aplicación es cerrada
  • /usr/bin/ffmpeg: Ubicación del ffmpeg
  • -rtsp_transport udp -i rtsp://192.168.1.100:554/2 -ss 00:00:0.0 -t 10 -an /home/homeassistant/.homeassistant/www/camara1.mp4 -y: son las opciones para el ffmpeg en el que le decimos el tipo de streaming, la dirección de la cámara (igual que hemos visto antes) y la ubicación del fichero que queremos grabar, como siempre será el mismo nombre, le ponemos el -y para que lo sobreescriba sin preguntar.

Para el caso de la cámara, son opciones parecidas, aunque, cambia un poco:

  • timeout 5s: En este caso, a los 5 segundos mata el proceso
  • /usr/bin/wget: En lugar de ffmpeg, usaremos el wget, un programa de la consola de linux para descargar directamente
  • –output-document=/home/homeassistant/.homeassistant/www/camara1.jpg http://user:pass@192.168.1.100/web/tmpfs/snap.jpg: Fichero de salida y la dirección de la foto para descargar, al igual que el video lo dejamos todo en www dentro del directorio de configuración

Ahora que tenemos los scripts que lanzaremos, nos iremos a crear las automatizaciones, que, serán, sencillamente, cuando detecte movimiento en el sensor que usemos (el de la propia cámara o bien un sensor de movimiento real), lanzamos los scripts, hacemos una pausa de 20 segundos en el caso del video, y de 5 segundos en el caso de la foto, y mandaremos los ficheros creados por Telegram.

Hasta la fecha sigo usando el editor del propio Home Assistant, por lo que os muestro las capturas de cómo lanzo los comandos yo. Si empezamos con el vídeo, vemos el trigger (disparador) que sería el sensor de movimiento, en mi caso es un sensor de movimiento Xiaomi Aqara, cuando su estado pasa de off a on.

En las condiciones, para probar, podéis no poner nada, en mi caso, tengo un interruptor que intentaré explicar más adelante con el que la casa está con la alarma activada, y, por tanto, solo me notifica cuando está así.

En las Acciones, vemos que lo primero que se hace es llamar al comando shell_command.videocamara1 que es que tenemos configurado en nuestro fichero configuration.yaml, le damos un delay (retardo) de 15 segundos ya que debe grabar 10 segundos y con 5 segundos extra por lo que pudiera tardar más y, finalmente, se llama al servicio de notificación de Telegram que tenemos configurado en nuestro Home Assistant en el que le damos el video para mandar.

En el caso de la foto, es muy similar el ejemplo, la diferencia radica en que le damos solo 5 segundos de delay (retardo) y que el fichero a mandar es la foto, no el vídeo, el resto es igual.

Si todo ha salido bien, deberiais tener en vuestro Telegram, tanto el vídeo como el jpg de la imagen si la tenéis configurada y os llegaría, primero un mensaje con la foto y unos segundos después, el gif animado o mp4 dependiendo del tamaño que tenga el vídeo de salida, dando un resultado similar a este:

 

Si lo miramos en Telegram, sería algo así:

De esta forma, deberíamos tener las cámaras plenamente funcionales para poder usarlas y no solo ser componentes pasivos grabando si no que puedan informarnos por medio de los sensores de movimiento, aunque, quizá, necesitaréis algo más potente con el fin de cubrir las necesidades de ffmpeg.

Espero que os haya servido el tutorial, y, como siempre, si tenéis dudas o queréis avanzar más, tenemos un grupo de Telegram donde podéis estar al tanto de todo y solucionar vuestras dudas. La información la tenéis al final del tutorial.

¿Os ha funcionado?

IMPORTANTE: Con el fin de ayudaros de una forma más directa, he creado un grupo en Telegram de Home Assistant en Español donde podemos ayudarnos todos así como evitar que os quedéis atascados, si tenéis telegram podéis pulsar aquí para uniros y si no lo tenéis, os recomiendo que os lo instaléis ya que lo usaremos en el tutorial para notificarnos.

La entrada Home Assistant #16: Instalamos una cámara se publicó primero en Domótica en Casa.

Eduardo Ruiz: Informático de vocación, apasionado de la tecnología y blogger desde hace mucho tiempo, escribo de lo que me entretiene y disfruto con ello. Si deseas seguirme, usa el rss del blog o en mi perfil de .
Artículos relacionados