[TUTO] ESPCAM et esphome : stream votre cam pour faire de la detection de mouvement

salut à tous,

Les cameras ESPCAM programmées avec ESPHOME sont supers simples à mettre en place avec un cout de quelques € (inferieur à 10€), et supers simples à rendre accessibles sur votre lovelace d’Home Assistant ! ca OK ! c’est déjà génial !

MAIS, quand vous souhaitez effectuer l’enregistrement de flux vidéo, faire de la détection de mouvements, même de la reconnaissance faciale ou d’objets (voiture, camion, ect) et lecture de plaques d’immatriculation ect… vous ne trouverez pas beaucoup d’information, voir pas du tout. vous ne trouvez rien sur les forums US…rien…
que ce soit sur lovelace ou motion eye, rien de rien…

Le gros probleme avec les espcam sous esphone est que le token du flux video de la cam change à chaque requete et/ou toutes les x minutes… donc l’url change en permanence.

On voit ici l’attribut d’état de la camera access_token et entity_picture
Pour lovelace, cela ne pose pas de probleme puisque c’est lovelace qui demande à HA l’autorisation d’afficher le flux video :

image

.
Pour ma part, je veux des espcam32 (sou esphome et pas arduino), je souhaites les avoir en live sur lovelace (ca OK je reviendrais pas là dessus) ET pouvoir enregistrer les flux vidéos en cas de détection de mouvement.

De quoi vais je avoir besoin?

  • HA
  • d’une ESPCAM32 sous esphome fonctionnelle sous HA
  • Node Red
  • un host pour heberger Zoneminder (ou Blueiris par exemple ou un autre logiciel de video surveillance)

En fin de tuto, vous trouverez ce qu’il faut pour faire de la reconnaissance faciale avec ces limites, reconnaissance de véhicule et lecture de plaques d’immatriculation en fonction de votre installation. Vous aurez ainsi la possibilité de faire plein de choses selon vos envies et vos besoins avec zoneminder comme aussi définir des zone de surveillance sur une image)

J’utilise donc, vous l’aurez compris, ZoneMinder qui est gratuit, en installant sur une SD de 32Gio et un RPI3b 2020-02-13-raspbian-buster-zoneminder-1.34-0.1.img.bz2 , donc un fichier img déployé sur une SD via balena etcher ou autre et hop, zoneminder est déjà installé.

Donc à ce stade, vous avez votre espcam qui fonctionne sur HA et Zoneminder.

Nous allons nous servir de notre copain Nodered :

I. Le premier noeud est le noeud Http in :

image

Le champ URL sera la nouvelle adresse de votre caméra, vous l’inventez ! faites quelque chose de facile à retenir.
Ma camera sera donc accessible http://ipd’HA:1880/endpoint/camera.parking

ok?

donc nous sommes d’accord, lorsque j’utiliserai cette nouvelle url, je serais ainsi redirigé vers l’url de ma camera avec son token qui change tout le temps.
http://ipd’ha:1880/endpoint/camera.parking affichera le contenu de la page http://ipd’ha:8123/api/camera_proxy_stream/camera.camera_parking?token=1999ca807ee3829354e4848cfd11f3ed82c189c7dc37a71c9a4fae31011221c1

Pour ce faire, il faut continuer avec les prochains noeuds :

II. Le current state:

image

Alors vous allez demander comment ai je fait pour avoir un sensor.camera_parking_url_token ? eh bien j’ai créé un sensor à partir de l’attribut d’une entité ! tout simplement !
rappeler vous ce tuto : [TUTO] créer une entité à partir de l’attribue d’une entité - Tutoriels Home Assistant - HACF
et de ceci :
image

Je veux donc créer une entité, un sensor, à partir de l’attribut entity_picture de l’entité camera.camera_parking

et pour créer ce sensor il vous suffira de rajouter ces lignes dans votre partie sensor du fichier de configuration.yaml ou votre fichier sensors.yaml en fonction de vote situation :

################################   sensor token cameras ESPHOME    #######################

#camera_parking_url_token
  - platform: template
    sensors:
      camera_parking_url_token:
        friendly_name: 'camera_parking_url_token'
        value_template: "http://192.168.x.xxx:8123/api/camera_proxy_stream/camera.camera_parking?token={{ state_attr('camera.camera_parking','access_token') }}" #ici, on indique que la valeur de cette entité correspond à la valeur de l'attribut de l'entité

ce sensor sensor.camera_parking_url_token donnera donc l’état suivant :
image

et son état, qui est donc l’url de la camera, changera automatiquement lorsque le token changera ! c’est glop !!

III. La fonction :
Alors au début, avec mon @fredarro préféré, nous étions parti pour stocker la valeur en global, experience tres enrichissante mais nous avons préféré partir sur cette fonction. Donc rajouter le noeud Function et copier / coller ceci :

msg.statusCode = 303;
msg.headers = {
    Location: msg.data.state
}
delete msg.payload;
return msg;

IV. HTTP Reponse:

là encore, super simple, il faut rajouter simplement le noeud HTTP RPONSE :

V. Résumé :

donc maintenant mon url http://ipd’HA:1880/endpoint/camera.parking me redirigera vers l’url de la camera parking avec son TOKEN à jour !

/!\ si votre node red est hebergé en dehors d’HA, ce sera l’ip de nodered qu’il faudra utiliser mais finissant toujours par :1880/endpoint/camera.xxxx

Votre camera à donc un flux video diffusé en HTTP avec une url fixe !

VI. Test avec zoneminder :
ajouter une camera avec les parametrage suivant :


ne pas oublier de définir le % fusion image de référence !

et dans l’onglet Source :

voila !

alors vous pourrez donc définir vs zone de detection, vos alarmes, lecture de plaque numeraolgique, définir la methode d’enregistrement :
Aucun : la caméra est désactivée
Monitor : la camera affiche juste son flux temps-réel
Modect : Enregistre que si un mouvement est détecté
Record : enregistre juste son flux 24h/24 / pas de détection
Mocord : enregistre son flux 24h/24 ET détecte les mouvements
Nodect : n’enregistre pas tant qu’un élément externe à zm ne lui dit pas de le faire via la fonction zmtrigger

voici quelques infos sur l’utilisation de ZM :

[TUTO] Installer & utiliser ZoneMinder et zmeventnotification (reconnaissance faciale / plaque d’immatriculation / objets) avec Nextdom – Projets Divers – NextDom Forum partie 2

voici le flow utilisé et à personnaliser avec votre environnement :

[{"id":"71ea81a8.735a9","type":"http in","z":"36a01081.2eb61","name":"","url":"camera","method":"get","upload":false,"swaggerDoc":"","x":180,"y":500,"wires":[["1252f167.7ae52f"]]},{"id":"cd25c5f6.302598","type":"http response","z":"36a01081.2eb61","name":"","statusCode":"","headers":{},"x":350,"y":660,"wires":[]},{"id":"1252f167.7ae52f","type":"api-current-state","z":"36a01081.2eb61","name":"","server":"df03acce.f940b","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.camera_parking_url_token","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":260,"y":580,"wires":[["29a1a441.4a63dc"]]},{"id":"29a1a441.4a63dc","type":"function","z":"36a01081.2eb61","name":"","func":"msg.statusCode = 303;\nmsg.headers = {\n    Location: msg.data.state\n}\ndelete msg.payload;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":140,"y":660,"wires":[["cd25c5f6.302598"]]},{"id":"df03acce.f940b","type":"server","name":"Home Assistant","legacy":false,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

un grand MERCI à @fredarro pour ce travail d’équipe !

4 J'aime

Merci @jybi89 et @fredarro, pour ce super travail.
Le tuto très clair et bien expliqué qui met en avant tous les éléments pour mettre en œuvre une solution de vidéosurveillance de A à Z !
J’ai commandé une espcam qui je devrais recevoir bientôt, j’ai hâte de tester tout cela :sunglasses:

Je ne connais pas du tout Zoneminder j’imagine qu’il supporte n’importe quel type de caméra ? Via leur flux vidéo ?

merci, j’ai essayé de faire clair et ca permet de redonner quelques references :wink:
zoneminder est franchement pas mal je trouve, j’ai essayé Blueiris mais faut l’heberger sur un serveur windows et mon infra ne le permet pas actuellement.
et j’ai fini par adopter ZM qui est pour finir assez simple malgres une apparence sobre.
Il existe une integration HA de ZM également mais je ne m’y suis pas penché.
Oui ZM integre peut etre tout les protcoles de camera, mais je ne suis pas en mesure de le confirmer, j’utilise juste du rtsp et du http.

J’utilisais vidéo station sous synology pour gérer mes caméras, mais on atteint vite les limites du système, et je cherchais justement à m’en débarrasser, ce sujet tombe a pique !

PS : J’ai vu qu’il existait une image docker pour zoneminder, ça peut être intéressant aussi :+1:

1 J'aime

@jybi89, ca fait plaisir de te donner un coup de main quand on voit le résultat.
Ton tuto est un modèle et je suis sûr qu’il sera utile à de nombreuses personnes.
Bravo et très bonnes fêtes à tous.
:+1: :clap:

2 J'aime

Super tuto, merci beaucoup!

Tout c est bien passer, j ai installé zoneminder sur une VM de ma freebox delta, n’ayant pas d’autre pi.

1 J'aime