====== Doorbell ====== [[https://fr.aliexpress.com/item/1005002488501278.html?spm=a2g0o.productlist.0.0.3fd216eftYmjNU&algo_pvid=1f7b861c-5dff-4e47-b28b-74e50af365fb&algo_exp_id=1f7b861c-5dff-4e47-b28b-74e50af365fb-8&pdp_ext_f=%7B%22sku_id%22%3A%2212000020840038573%22%7D|ESP32CAM]] [[https://esphome.io/components/esp32_camera.html|Esphome camera component]] [[https://github.com/crossan007/esphome/tree/feature/rtsp-server|Esphome RTSPserver github]] {{:projects:iotaiuto:esp32cam.png?400|}} 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