Tuto Comment configurer une caméra dans Homebridge Jeedom
Bonjour à tous, je suis @Nebz !
Hé, mais il est passé où nechry ?
Il est toujours là, tapi dans l’ombre, ne vous inquiétez pas 🙂 Il vous a déjà parlé de moi lors de cet excellent article sur les portes de garage. Vous vous demandez ce que je fais ici ? Je vous répondrai que Rocket13011 de Jeedom m’a laissé reprendre une partie du développement du plugin officiel App Mobile pour le décharger un peu : la partie Homebridge justement ! Depuis le 30/10, le plugin Homebridge est indépendant.
Je viens donc ici en tant qu’invité pour vous faire un article sur la recherche à effectuer pour configurer votre caméra dans Homebridge.
NB : Ceci est bien un guide pour votre recherche, il ne suffit pas de copier coller et espérer que ca marche pour vous, si vous voulez que ca fonctionne, il faut s’investir un peu…
Par où commencer ?
Au début, il y a eu une pomme, un arbre, une femme, un homme mais ils n’avaient pas d’ordinateur… c’était pas fun… donc je fais une avance rapide jusque HAP-NodeJS, un projet développé par KhaosT.
C’est son code qui communique avec le HomeKit officiel de Apple mais ce n’est pas un projet officiel Apple, il a été développé par ingénierie inversée.
Par dessus, Homebridge a été créé par nfarina pour être plus modulaire, plus adaptable, ces modules s’appellent des plateformes.
L’une des plateformes est Homebridge-Jeedom dont je vous parlais plus haut, c’est donc la partie que je développe. Elle permet de transformer les périphériques Jeedom en accessoires Homebridge.
Il existe plus d’une centaine de plateformes différentes pour Homebridge, vous pouvez vous en rendre compte ici.
Je vais ici vous parler d’une autre plateforme : homebridge-ffmpeg-camera. J’ai pensé qu’il serait intéressant de l’inclure aussi dans le plugin App Mobile et dans Homebridge. Ce module, cette plateforme est développée par… KhaosT le créateur de HAP-NodeJS (la boucle est bouclée) ! Cela me semblait un bon gage de qualité.
Comme son nom l’indique, cette plateforme se base sur l’utilitaire de conversion audio/video ffmpeg. Mauvaise nouvelle, celui-ci n’existe pas sur Raspbian Jessie… Heureusement, un contournement existe : c’est avconv qui est installé avec le plugin Camera. S’il est présent à la place de ffmpeg, on va l’utiliser. (Raspbian Stretch incluera ffmpeg). Pour les autres (Smart etc), il est probable que vous l’ayez déjà. (Tapez ffmpeg en ligne de commande pour vérifier)
Vous avez dû voir les différents avertissements dans le plugin disant que nous ne vous aiderons pas concernant l’ajout d’une plateforme supplémentaire dans Homebridge, pourquoi ?
Pour une raison évident :, il y a autant de développeurs que de plateformes et je ne veux/peux pas faire le support pour chacune ! Si vous décidez d’en implémenter une dans votre Homebridge, merci de vous référer à son auteur pour son support.
Comment installer une plateforme
Homebridge est développé en NodeJS, ce langage dispose d’un utilitaire de gestion de modules. Pour installer homebridge-ffmpeg-camera, par exemple, j’ai donc dû lancer la commande suivante :
sudo npm install -g homebridge-camera-ffmpeg
Ce n’est pas exactement cette commande car je l’installe à partir d’une copie (un fork) que nous avons fait dans le GitHub de jeedom. Ceci afin de contrôler et tester les nouvelles versions avant de vous les envoyer 🙂 Mais vous avez compris le principe 🙂 Pas besoin de l’installer, c’est déjà là !
Par contre, il faut encore la configurer, dans notre cas : lui indiquer nos caméras ! Ceci se fait via un fichier au format JSON. C’est ce fichier que nous allons préparer ici. Pour ensuite le coller dans le champ disponible via le bouton « Plateforme Homebridge Supplémentaire » de la page configuration du plugin App Mobile ou Homebridge.
Si vous désirez installer plusieurs plateformes, il faudra séparer chaque objet JSON d’un « | » (pipe : prononcer à l’anglaise pour ne pas prêter à confusion), je vous montrerai plus tard.
Anatomie du JSON de type Platform
La configuration au format JSON en question doit avoir une structure très précise, voici un exemple :
{ "platform":"Camera-ffmpeg", "cameras":[ { "name":"Camera", "videoConfig":{ "source":"-re -i rtsp://username:password@192.168.31.51:88/videoMain", "stillImageSource":"-i http://username:password@192.168.31.51:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=username&pwd=password&", "maxStreams":2, "maxWidth":1280, "maxHeight":720, "maxFPS":30, "vcodec": "h264" } } ] }
Dont voici les différents éléments :
- platform : il faut ici taper le nom de la plateforme, qui sera dans notre cas « Camera-ffmpeg » (case sensitive).
- cameras : il s’agit d’un tableau (notation []) d’objets (notation {}) de type camera (plusieurs cameras sont gérables normalement).
- name : le nom de votre caméra tel qu’il sera affiché dans Maison.
- videoConfig : un objet {} qui contiendra les paramètres de votre caméra.
- source : ligne de commande ffmpeg pour lire la source vidéo (format mjpeg ou rtsp). Elle sera utilisée lorsque vous appuyerez sur la caméra dans Maison pour avoir un Live (voir chapitre suivant).
- stillImageSource : ligne de commande ffmpeg pour la capture d’une image fixe. Elle sera utilisée pour s’afficher toutes les +/- 20 sec dans la pièce dans Maison. Cette intervalle n’est pas paramétrable, elle est automatiquement gérée par HomeKit (voir chapitre suivant).
- maxStreams : nombre maximum de connexions simultanées gérées par le homebridge (rarement plus de 2 personnes regarderont la caméra au même moment, je pense, non ?).
- maxWidth / maxHeight : la résolution maximale (ou configurée) de votre caméra (à trouver dans l’interface web de la caméra ou bien sur la boite).
- maxFPS : le nombre d’image par secondes maximal (ou configuré) de votre caméra (à trouver dans l’interface web de la caméra ou bien sur la boite).
- vcodec : optionnel, vous trouverez certaines configurations sans, mais il sera quasi toujours « h264 ». (En Raspbian Stretch sous Raspberry PI 3 uniquement, vous pouvez mettre « h264_omx »)
Lignes de commande ffmpeg
C’est ici que cela devient spécifique et compliqué. Ces lignes sont différentes pour chaque caméra !!!
la « source » vidéo
Nous allons donc devoir trouver le flux vidéo brut de votre caméra.
Je connais ma caméra ou utilise déjà le plugin Jeedom RTSP
Ce plugin prend en entrée un flux RTSP, reprenez-le !
- 75% de chance que ca soit un format RTSP, lancez vlc > media > Ouvrir un flux réseau et entrez-y votre url (username et password compris !!!) pour la tester.
Vous voyez votre caméra ? ok on la garde.
Non ? on passe à l’étape suivante.
- 25% de chance que ca soit un format MJPEG, lancez un navigateur (chrome) et entrez-y votre url pour la tester (username et password compris !!!).
Vous voyez votre caméra ? ok on la garde.
Non ? on passe à l’étape suivante.
Je connais le modèle de ma caméra mais pas son URL
Il va falloir chercher un peu…
je vous donne deux liens pour cela (ils se trouvent aussi dans la configuration des plateformes supplémentaires) :
- Le wiki du projet homebridge-ffmpeg-camera (je vous invite à ajouter votre marque modèle de caméra quand vous aurez un fichier json qui fonctionne)
- Une référence des sources de camera par marque
Si vous ne la trouvez pas en 1, passez en 2, vous trouverez quelque chose d’identique à cela :
Effectuez des essais avec VLC comme vu plus haut.
Je n’ai pas trouvé dans la liste ou ça ne fonctionne pas
Ca se complique… il va falloir analyser le code html de la page web de votre caméra et là je ne peux pas vous faire de guide… cherchez un tag video ou embed qui contiendrait une src explicite.
Vous ne trouvez toujours pas ? je ne peux plus rien faire pour vous… essayez avec une caméra plus grand public…
J’ai trouvé et ça fonctionne !!!
il faut maintenant construire la ligne de commande, le plugin ajoutera des paramètres à celle-ci mais il en faut quelques-uns à la base:
"-re -i rtsp://username:password@192.168.31.51:88/videoMain"
il faut donc au minimum « -re -i » devant l’url, on peut aussi ajouter :
- Pour du RTSP :
"-rtsp_transport tcp -re -i rtsp://username:password@192.168.31.51:88/videoMain"
- Pour du Mjpeg :
"-f mjpeg -re -i [URL]"
Je ne peux pas vous dire quand c’est nécessaire, il faut tester sans et avec, le paramètre est sensé optimiser la qualité et la performance.
On trouve aussi ce genre de ligne de commande lorsque la caméra offre la vidéo et le son séparés :
"-re -f mjpeg -i http://admin:password@10.0.1.101/mjpeg.cgi -i http://admin:password@10.0.1.101/audio.cgi"
la « stillImageSource » image
Nous allons donc devoir trouver une image qui se regénère à chaque chargement.
Je connais ma caméra ou utilise déjà le plugin Jeedom Camera
Ce plugin prend, en entrée, une url d’image justement ! Reprenez là ! (ou bien la sortie du plugin RTSP)
Testez l’url dans un navigateur internet (internet explorer supporte la notation http://username:password@192.168.1.1/etc mais chrome aussi !)
Je connais le modèle de ma caméra mais pas son URL
Mêmes sites que plus haut 🙂
Je n’ai pas trouvé dans la liste ou ça ne fonctionne pas
On recherche encore dans le code html, on cherche un bouton snapshot dans l’interface ou un endroit qui affiche une image fixe qui se rafraîchit à chaque F5 sur la page.
Vous ne trouvez toujours pas mais vous avez trouvé le flux vidéo ? on peut contourner et capturer une image du flux :
"-i rtsp://username:password@192.168.31.51:88/videoMain -vframes 1 -r 1"
J’ai trouvé et ça fonctionne !!!
Il faut maintenant construire la ligne de commande, le plugin ajoutera des paramètres à celle-ci mais il en faut un de base:
"-i http://username:password@192.168.31.51:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=username&pwd=password&"
il faut donc au minimum « -i » devant l’url.
J’ai trouvé les deux et testé, je fais quoi ?
Félicitation, ce n’était pas facile ou bien super simple (ça arrive avec certains modèles !)
Il faut maintenant créer votre joli format json comme décrit ci-dessus et vous le validez sur ce site ! oui, oui, j’insiste ! sinon vous risquez de casser Homebridge avec une virgule mal placée 😉
Puis vous le collez dans le champ qui est fait pour, sauvegardez et relancez le démon :
Vérifiez le log mobile_homebridge (ou homebridge_daemon dans le plugin Homebridge), si vous avez bien validé, tout se charge, et vous devriez trouver une ligne :
[Mon Jan 1 2027 01:12:34 GMT+0000 (UTC)] Camera is running on port 55231.
Vous lancez Maison sur votre iDevice, le petit + en haut à droite et on ajoute la caméra avec le même code PIN que le Jeedom.
On teste le « stillImageSource » en confirmant (après quelques secondes) qu’on a bien une capture fixe dans la pièce :
On teste la « source » en confirmant (à distance ça peut prendre jusqu’à 30s) qu’on a bien un Live fonctionnant quand on appuie sur la caméra :
Elle est automatiquement ajoutée aux autres iDevices, ça marche aussi sur Apple Watch.
J’ai une deuxième caméra
La logique voudrait que vous ajoutiez un second objet de type camera dans le tableau cameras… mais non ! Enfin, ça fonctionnera… mais les logs ne seront pas clairs (bug dans homebridge). On ajoutera donc une seconde platform identique aux ne contiendra qu’une seule caméra :
{ "platform":"Camera-ffmpeg", "cameras":[ { "name":"Camera 1", "videoConfig":{ "source":"-re -i rtsp://username:password@192.168.31.51:88/videoMain", "stillImageSource":"-i http://username:password@192.168.31.51:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=username&pwd=password&", "maxStreams":2, "maxWidth":1280, "maxHeight":720, "maxFPS":30 } } ] }|{ "platform":"Camera-ffmpeg", "cameras":[ { "name":"Camera 2", "videoConfig":{ "source":"-re -i rtsp://username:password@192.168.31.51:89/videoMain", "stillImageSource":"-i http://username:password@192.168.31.51:89/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=username&pwd=password&", "maxStreams":2, "maxWidth":1280, "maxHeight":720, "maxFPS":30 } } ] }
Vous remarquerez le « | » entre les deux objets (ne validez pas le code complet, le | ne sera pas valide, il faut valider chaque json séparément)
Je suis sympa et j’aide les gens
Ca c’est bien ! Je vous invite donc à modifier le wiki du Projet homebridge-ffmpeg-camera afin que d’autres personnes trouvent plus facilement leurs caméras.
Conclusion
Voilà, vous avez maintenant vos caméras dans Maison !
J’espère avoir fait le tour de toutes vos questions. J’en suis conscient, ce n’est pas simple à mettre en place…
Si vous avez déjà pas mal joué avec vos caméras, c’est un atout majeur.
Si vous n’y êtes pas parvenu, ne vous découragez pas, demandez une caméra en prêt pour voir si ça se passe mieux. Le succès est vraiment lié au modèle de caméra, à votre recherche et un peu de perfectionnisme pour éviter les erreurs de syntaxe.
Vous comprendrez que je ne répondrai pas aux demandes spécifiques à votre caméra, tout est ici, si ca ne marche pas, je ne peux rien faire de plus…
Je ne connais pas toutes les finesses de cette plateforme, vous pouvez donc rencontrer des bugs. Je vous invite dans ce cas à visiter le GitHub du projet et à demander directement de l’aide chez eux (pour les problèmes non liés spécifiquement à votre caméra évidemment)
Côté charge système, c’est relativement faible, le transcodage ne tourne que lorsqu’on regarde la caméra en directe.
Malheureusement, les applications tierces comme Eve ne les supportent pas encore. C’est donc dans Maison que tout se passe.
Si vous avez une AppleTV, un iPad iOS 10+ qui reste à la maison ou un HomePod, vous pouvez même consulter à distance. Rien n’est envoyé chez Apple.
Voilà, c’était donc mon premier article 🙂 Sujet très technique que j’ai essayé de vous simplifier au maximum… J’espère qu’il vous sera utile, probablement à bientôt !
Bonus
Ca fonctionne tout seul : placez la caméra dans la même pièce dans Maison qu’un détecteur de mouvement configuré avec une notification et vous recevez une capture dans la notification :
Merci à nechry pour cette opportunité ainsi que tout le beta testing et les explications diverses 🙂
EDIT 10-11-2017 : Adaptation pour plugin Homebridge indépendant.
Merci pour ces explications !
Salut! Merci pour les explications !
J’ai un souci lors de l’ajout du Json customisé.
J’ai 2 caméras intégrés sur le json. Tout fonctionnait très bien, j’avais bien la StillImage, mais pas de streaming live: FFmpeg exited on error 1.
J’ai repris le json à 0, afin de rétablir un streaming live en RTSP. Seul souci maintenant, je n’ai meme plus de StillImage, et un joli message » La camera ne répond pas ».
Pourtant, cela fonctionne via VLC, donc le lien est le bon..
Aurais-tu une idée ?
PS: Certificat SSL expiré sur ton site 😉 Erreur HSTS sur Chrome 😉
Un grand MERCHY ! !
Bonjour,Un grand merci pour cet article. Est-il possible d’avoir le scnéario qui permet d’envoyer une capture au déclenchement du detecteur de mouvement? Un grand merci d’avance,
oui si les deux sont dans la même pièce et que la notification est activé sur le capteur, si ma mémoire est bonne. mais je n’ai jamais exploité cette fonction. Sinon tu peux toujours utiliser jeedom pour faire la capture
Merci beaucoup !!
Grace à toi , j’ai bien mes 2 caméras dans l’application « Maison » me reste plus qu’a acheter une Apple Watch pour être au top !
Encore merci super tuto !