Doorbell
Per la prima scrittura:
- connettere uno dei pin di IO a GND, come mostrato in figura
- attaccare l'USB
- dare i permessi alla porta, esempio:
chmod 660 /dev/ttyUSB0
- riavviare esphome
- uploadare la configurazione
Per le scritture wireless non serve che GND sia connesso a un pin di IO
Configurazione base per camera e led
esphome: name: esp-citofono platform: ESP32 board: esp32dev # Enable logging logger: # Enable Home Assistant API api: wifi: ssid: "wifi ssid" password: "password" esp32_camera: name: Videocamera citofono 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 max_framerate: 5 fps # Flashlight CHECK PIN output: - platform: gpio pin: GPIO4 id: gpio_4 light: - platform: binary output: gpio_4 name: doorbell light sensor: - platform: wifi_signal name: doorbell wifi signal update_interval: 30s - platform: uptime name: doorbell uptime
RTSP Server
Installazione del fork di esphome, che sostituirà esphome originale
mkdir esphome_rtsp cd esphome_rtsp git clone https://github.com/crossan007/esphome cd esphome checkout feature/rtsp-server pip install . esphome ~/config dashboard
Aggiungere alla configurazione di esp32cam:
esp32_camera: # id per rtsp server id: cam external_clock: pin: GPIO0 ... ... rtsp_server: port: 8675 camera: cam
Visualizzare stream RTSP con VLC:
VLC menu -> Media -> Open network stream -> rtsp://indirizzo_ip_esp:8675
HTTP Server
In alternativa si può usare anche questo componente http e convertire successivamente in rtsp quando lo stream passa per il raspberry. Nel mio caso stranamente ha dato risultati migliori. https://github.com/ayufan/esphome-components#25-esp32_camera_web_server
Conversione del video
La camera manda una sequenza di immagini JPEG con framerate variabile. Per mostrarle su Alexa è necessario convertirle in uno stream video con codec H264 (più leggero) o MPEG4. Dato che la potenza dell'esp è limitata è meglio affidare questo compito al raspberry.
- Lanciare un server rtsp sul raspberry, ad esempio https://github.com/aler9/rtsp-simple-server (togliere i servizi inutili nella configurazione)
- sudo apt-get install ffmpeg
- Lanciare uno tra questi comandi sul raspberry per prendere il flusso della camera, convertirlo in video e lanciare lo stream sul server rtsp
Formato H264 (più compresso)
ffmpeg -use_wallclock_as_timestamps 1 -i http://indirizzo_ip_esp32cam:8080 -c:v libx264 -preset veryslow -tune zerolatency -movflags +faststart -pix_fmt yuv420p -disposition:v:0 default -r 5 -g 1 -f rtsp rtsp://indirizzo_ip_raspberry:8443/stream
Formato MPEG4
ffmpeg -use_wallclock_as_timestamps 1 -i http://192.168.1.254:8080 -c:v mpeg4 -tune zerolatency -movflags +faststart -pix_fmt yuv420p -disposition:v:0 default -r 5 -g 1 -f rtsp rtsp://indirizzo_ip_raspberry:8443/stream
Modificare framerate (-r) e gop (-g) a piacere
Mentre ffmpeg è in esecuzione è importante guardare il numero di frame duplicate e droppate da ffmpeg nella barra di stato, e aggiustare il framerate di conseguenza (modificarlo anche nella configurazione esphome della camera)
Il preset veryslow comprime molto e tiene leggera la banda. Se la speed di ffmpeg va sotto a x1 si può usare un preset più veloce per alleggerire il lavoro al processore.
Monocle
- Installare la skill Monocle su Alexa
- Accedere a https://portal.monoclecam.com/
- Aggiungere un feed e configurarlo
URL: rtsp://ip_locale_raspberry:8443/stream
Name: citofono
Authentication: None
Video resolution: Quella inserita nella configurazione della camera
Video codec: H264
Audio codec: None
Tags: @proxy
L'url è quello del server rtsp su cui ffmpeg manda il video convertito
Aggiungere il tag @proxy solo se si vuole utilizzare il Monocle Gateway, ovvero il sistema di redirect che esce dalla rete locale per far arrivare il flusso dal dominio di monocle
Per installare Monocle Gateway sul raspberry seguire questa guida: https://monoclecam.com/monocle-gateway/install/linux-raspi