Caso queiram gravar um video de uma ESP camera que tenha Esphome a maneira mais simples que encontrei foi criar um shell_command que pode ser executado manualmente ou por exemplo numa automação.
Pois o serviço camera.record do HA não funciona com a mesma e o token da camera está sempre a ser alterado, obrigando a usar um template no shell_comand para o ir buscar.
Este é o shell_command em confirmation.yaml e é necessário também o ffmpeg ativo:
shell_command:
camera_video: ffmpeg -i https://<oteu>.duckdns.org/api/camera_proxy_stream/camera.camera_1?token={{ state_attr('camera.camera_1','access_token') }} -t 10 -c:v libx264 -preset slow -crf 23 -c:a copy /config/www/cameras/video_{{ now().strftime("%Y_%m_%d__%H_%M_%S") }}.mp4
ffmpeg:
E esta é a programação da câmera:
esphome:
name: cam1
platform: ESP32
board: esp32cam
wifi:
ssid: !secret wifi_name
password: !secret wifi_pass
fast_connect: True
manual_ip:
static_ip: !secret ip_cam1
gateway: !secret gateway
subnet: !secret subnet
ap:
ssid: "Cam1"
password: !secret wifi_pass
captive_portal:
logger:
api:
password: !secret api_pass
reboot_timeout: 0s
ota:
esp32_camera:
external_clock:
pin: GPIO0
frequency: 20MHz
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
name: Camera 1
i2c:
sda: 26
scl: 27
scan: False
output:
- platform: gpio
pin: GPIO4
id: gpio_4
light:
- platform: binary
output: gpio_4
name: "Camera 1 - Luz"
switch:
- platform: restart
name: "Camera 1 - Restart"
binary_sensor:
- platform: status
name: "Camera 1 - Status"
sensor:
- platform: uptime
name: "Camera 1 - Uptime Sensor"
id: camera_1_uptime_sensor
- platform: wifi_signal
name: "Camera 1 - WiFi Signal Sensor"
update_interval: 60s
text_sensor:
- platform: template
name: "Camera 1 - Uptime Sensor2"
lambda: |-
int seconds = (id(camera_1_uptime_sensor).state);
int days = seconds / (24 * 3600);
seconds = seconds % (24 * 3600);
int hours = seconds / 3600;
seconds = seconds % 3600;
int minutes = seconds / 60;
seconds = seconds % 60;
return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
icon: mdi:clock-start
update_interval: 70s
- platform: version
name: "Camera 1 - ESPHome Version"
Neste caso faz um video de 10 seg, mas pode ser maior ou menor, basta no código do shell_command onde tem -t 10 colocar por exemplo -t 20 para criar um video de 20 seg.
O ficheiro .mp4 sera guardado na pasta /config/www/cameras com o nome video+“data”.mp4, o que tambem podem alterar.
O vídeo é criado apartir das imagens que a camera vai enviando automaticamente o que faz com que um vídeo de 10 seg na realidade sejam imagens de 30 seg ou mais o que dá a sensação que está a andar muito rápido, ou seja a camera envia em 10 segundos 10 imagem (frames) que no vídeo vão corresponder a 1 segundo (10 frames por segundo).
Depois uso o GalleryPanel para ter acesso facil aos videos.
O único problema que tenho no momento é que no telemóvel (android) não abre o video na APP do HA nem no Chrome, so usando o MXplayer ou o VLC.
Já tentei diferentes codecs no shell_command não deu com nenhum… Se alguém tiver uma solução agradeço…
Fica a partilha… Espero que seja útil para alguém.