Timelapse in Home Assistant
In Home Assistant visualizzo alcune immagini di webcam presenti in zona della mia casa in montagna. A volte è interessante capire com’è stato la meteo nelle ultime ore.
Così ho cercando un po’ su internet alcune possibili soluzioni, ma non ho trovato un’integrazione utile. Così ho esteso la ricerca e ho trovato questo spunto.
Idea di base
La webcam è configurata come camera generic
e un automazione salva a cadenza regolare le immagini in una cartella specifica. Durante la notte un’altra automazione crea il timelapse e cancella i file delle immagini.
Configurazione di base
Prima di tutto si deve aggiungere la seguente configurazione nel file configuration.yaml
per permettere di salvare le foto della webcam. Nel esempio sotto la cartella è /config/photo
. Questo esempio si riferisce ad hass.io
, altrimenti potrebbe essere necessario togliere la cartella /config
.
homeassistant:
allowlist_external_dirs:
- "/config/photo/"
Automazione - salvare foto webcam
Questa automazione permette di scaricare ogni 30 minuti una foto della webcam scelta. La condizione scatta le foto solo quando c’è luce, io ho aggiunto anche però qualche foto prima dell’alba e dopo il tramonto.
Le foto sono salvate in una cartella dedicata e hanno un nome in base alla data e l’ora (per ordinarle in seguito).
alias: Take photo from webcam
description: ''
trigger:
- platform: time_pattern
minutes: /30
condition:
- condition: sun
before: sunset
before_offset: '01:00:00'
after: sunrise
after_offset: '-01:00:00'
action:
- service: camera.snapshot
data:
filename: >-
/config/photo/webcam1/webcam1_{{ now().strftime("%Y%m%d-%H%M") }}
entity_id: camera.generic_camera
mode: single
Configurazione - comandi shell
Nella configurazione di HA aggiungere il seguente comando per generare il timelapse con ffmpeg (il coltellino svizzero della conversione video). Le opzioni importanti da modificare sono (per generare un video mp4):
-framerate
: in questo esempio il video verrà generato con 2 immagini al secondo-i
: la cartella e il formato delle immagini scaricate-crf
: la qualità del video generato, il valore deve essere tra 0 e 51-y
: il nome e la cartella dove creare il video
Il secondo comando disponibile serve per cancellare le foto una volta generato il timelapse.
shell_command:
timelapse_webcam1: 'ffmpeg -framerate 2 -pattern_type glob -i "/config/photo/webcam1/*.jpg" -c:v libx264 -crf 30 -pix_fmt yuv420p -y /config/www/webcam1/webcam1.mp4'
delete_files_webcam1: 'rm -f /config/photo/webcam1/*.jpg'
Automazione - generare timelapse e cancellare file
Questa è l’automazione che si occupa di far eseguire i comandi descritti in precedenza. Nel mio caso faccio eseguire l’automazione durante la notte. Tra un comando ho aggiunto un ritardo di 30 min.
alias: 'Generate timelapse '
description: ''
trigger:
- platform: time
at: '00:30:00'
condition: []
action:
- service: shell_command.timelapse_webcam1
data: {}
- delay: '00:30:00'
- service: shell_command.delete_files_webcam1
data: {}
mode: single
Pagina HTML e visualizzazione in Lovelace
Questo è l’ultimo capitolo che permette di visualizzare nella schermata di Lovelace il video del timelapse creato. Aggiungere nella cartella /config/www/webcam1
il seguente file HTML chiamandolo webcam1.html
.
<!DOCTYPE html>
<html>
<head>
<title>Webcam1 timelapse</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdn.plyr.io/3.6.3/plyr.css">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
</head>
<body>
<video id="player" poster="video.jpg" autoplay loop muted>
<source src="webcam1.mp4" type="video/mp4" size="720">
</video>
<script src="https://cdn.plyr.io/3.6.3/plyr.js"></script>
<script>const player = new Plyr('#player');</script>
</body>
</html>
Nella dashboard di Lovelance basta aggiungere una card per un iframe con i seguenti valori. Nell’URL della card del iframe si deve sostituire la cartella di base /config/www/
con /local/
.
type: iframe
url: /local/webcam1/webcam1.html
aspect_ratio: 80%
title: Timelapse Webcam1
Conclusione
Grazie a questa configurazione ogni volta che si apre la dashboard il video del timelapse parte automaticamente. Il video però si riferisce alle immagini del giorno precedente. Se si dispone di abbastanza potenza di calcolo è possibile eseguire regolarmente la generazione del video, on-demand è però difficile.