Comme d'aucuns ont pu le remarquer, le flux des caméras sous Home Assistant à tendance parfois à laguer et ne pas être très réactif. On pourrait penser que ça vient de la qualité des caméras, pourtant j'utilise un système Unifi Protect très bien intégré à Home Assistant et parfois j'ai l'impression d'avoir les mêmes lags que sur une chinoiserie achetée pas cher sur Ali ! En fait Home Assistant utilise le protocole RSTP afin de communiquer avec les caméras ou dans mon cas le NVR et en l'état le résultat n'est pas à la hauteur de ce que j'obtiens avec l'appli Unifi Protect. Sauf que je veux avoir ça dans HA car ça m'apporte plein d'options intéressantes. Voir la version simple à la fin !
Afin de contourner ce problème il y a WebRTC que les développeurs connaissent bien. Et l'un d'eux, Alex, qui est également l'auteur d'autres très bonnes intégration, a développé Go2RTC qui va de façon transparente nous permettre d'utiliser WebRTC pour visualiser nos caméras.
J'avais déjà lu quelques sujets sur WebRTC et HA, mais ce qui m'a donné subitement envie de l'intégrer est la vidéo de ce jeune homme :
Ceux qui me suivent savent que je ne suis pas fan des tutoriaux vidéo, surement une question de génération (je suis vieux !), mais passer du temps à faire play / pause m'agace et me fait perdre du temps. Ceci étant il explique clairement l'essentiel que je vais reprendre ici en l'adaptant à l'infrastructure Unifi Protect.
Le problème est documenté et sera probablement corrigé dans une prochaine version de Go2RTC, en attendant il faut le contourner. L'intégration Unifi Protect intègre les caméras en se basant sur le flux RSTPS, ce qui va nous donner ça :
"url": "rtsps://192.168.10.1:7441/2sgdfdsgdfgf3DNu5F?enableSrtp"
Sauf que Go2RTC ne supporte pas SRTP, et donc c'est le bug ! La bonne URL est donc celle ci :
"url": "rtsps://192.168.10.1:7441/2sgdfdsgdfgf3DNu5F"
Je n'ai pas trop cherché, mais je n'ai pas trouvé ou faire la modification et comme Go2RTC recrée les liens lors de chaque démarrage, j'ai contourné le problème en créant dans HA des caméras génériques basées sur la bonne URL (on pense à décocher la vérification du certificat car il est généralement bidon et on n'entre pas d'authentification puisque le lien est open bar).
On répète ça sur toutes les caméras et on pense à les renommer proprement.
L'étape suivant va consister à installer l'addon Go2RTC. Pour ça on va dans les addons HA et on ajoute l'adresse du dépôt idoine dans les sources et on installe :
https://github.com/AlexxIT/hassio-addons
Une fois cet addon installé et lancé on va ajouter l'intégration RTSPtoWebRTC à Home Assistant que l'on fera pointer sur :
http://localhost:1984
Et c'est presque tout, miracle vos caméras sont maintenant bien plus réactives !
A ce stade les barbus vont me dire, oui, mais tous ces ports passent bien en local, mais depuis l'extérieur ? Ouvrir des ports n'étant pas conseillé (j'utilise Nabu Casa ou Cloudflared), on va tuneliser en utilisant le service Ngrok sur lequel on va devoir créer un compte. Une fois le compte créé et validé , on récupère le token d'authentification que l'on vient coller dans la console de Go2RTC :
ngrok:
command: ngrok tcp 8555 --authtoken <token>
webrtc:
listen: ":8555" # external TCP/UDP port
candidates:
- stun:8555
Ensuite on va configurer l'option dans l'intégration RTSPtoWebRTC :
stun.l.google.com:19302
Voilà, c'est fini. La suite de la vidéo nous parle de Frigate et Fully Kiosk. Deux sujets que j'aborderais une autre fois.
Version simple
A la base je voulais juste un affichage plus fluide de mes caméras et j'ai installé toute cette usine qui a certainement un intérêt dans un contexte Frigate. Mais si l'on souhaite uniquement un peu de fluidité dans l'affichage et profiter de WebRTC simplement, et bien il y a plus simple.
Dans ce cas le seul composant à installer est l'intégration WebRTC Camera depuis HACS et de le configurer en l'ajoutant aux intégrations.
Ensuite on peu ajouter une carte Lovelace très simplement :
type: 'custom:webrtc-camera'
url: 'rtspx://192.168.6.1:7441/3jurvIekaWvpee222'
Ou aller plus loin avec quelques option :
type: custom:webrtc-camera
streams:
- url: ''
- url: 'rtspx://192.168.6.1:7441/3jurvIekaWee222'
shortcuts:
- name: Privacy
icon: mdi:cctv-off
service: switch.toggle
service_data:
entity_id: switch.terrasse_nord_privacy_mode
ui: true
poster: https://demo.home-assistant.io/stub_config/bedroom.png
muted: true
La doc est très complète et ça remplacera efficacement la carte Picture Glance pour afficher les caméras. Ca fonctionne mais ça reste un peu pauvre, alors même si vous n'utilisez pas Frigate rien n'empêche d'utiliser leur carte qui est bien plus riche et permettra par exemple de caster le rendu vers un téléviseur...