[TUTO] Faire du Hue/Hue Like avec une Caméra, un Raspberry et Hypérion

Dans le précédent article je vous ai fait part de la possibilité de faire de l'Ambilight par le biais d'une caméra avec la solution clé en main Ambivision Pro.

 

J'avais au cours de celui-ci évoqué la possibilité d'en faire autant en fabrication maison avec un Raspberry, comme l'avait expérimenté, il y a déjà plusieurs années, Waldo bronchart créant par la même occasion son propre programme de gestion Ambilight. ( plus d'infos ici ).

 

Ayant aussi expérimenté la chose, la mise en place d'un fonctionnement Ambilight par caméra en combinaison avec Hypérion s'est révélé trop contraignant et non conforme à mes attentes.

 

Pour rappel, lorsque l'on créer un fichier de configuration Hypérion via HyperCon on doit renseigner le nombre de LEDs que l'on possède à l'Horizontale et à la verticale et d'autres petites informations comme le présence de LED au niveau du pied...

 

Le logiciel en déduira par la suite le nombre de tronçons de bande de LEDs que l'on possède. Dans le logiciel HyperCon, ces tronçons correspondent aux bandes de détection de couleurs. Ces bandes sont ensuite divisés en carrés plus petits representant chacune des LEDs présente à l’arrière de votre TV ou un numéro leurs sont attribués afin de définir leurs emplacements dans l'espace.

 

Ces bandes forment alors un cadre bien symétrique, représentant la zone d'analyse de l'image qui se trouve généralement le plus près du bord de l’écran. Alors quel est le soucis .???

 

Le soucis est que lorsque l'on place la camera en face ou sur le coté de la TV, que ce soit avec une camera possédant un objectif simple ou "Œil de Poisson", on est confronté à plusieurs paramètres :

  • Hauteur de la camera
  • Recul de la camera
  • Placement de la camera pour permettre une captation entière de l'image pour un alignement aux bandes de détection
  • Angles de l'image qui convergent vers l’intérieur lors de l'utilisation d'un objectif "Œil de Poisson"
  • ...

Ce sont les raisons pour laquelle je propose ce tuto non pas pour faire de l'Ambilight ( bien que vous pouvez le faire si vous le désirez ), mais plutôt pour du Hue ou du Hue Like.

 

J'attend de voir si j'arrive à faire quelque chose avec le logiciel de Waldo ( pour de l'Ambilight), peut être que j'aurai plus de chance d'avoir de meilleurs résultats car on peut définir un cadre asymétrique ( genre trapèze ) sur l'image capturé. ( Rien que pour la compilation d'OpenCV  avec mon Pi Zéro j'en ai eu pour la journée ).

 

Une fois n'est pas coutume nous n'utiliserons ni OpenELEC, ni LibreELEC pour ce tuto mais passerons par Pinn ( version Lite ) afin d'installer Raspbian, en version lite également. ( ou en version full si vous le voulez. Vous pourrait aussi installer LibreELEC ou d'autres OS en Multi-Boot ).

 

Pour ce Tuto j'ai donc utilisé :

  • Mon Raspberry Pi Zéro dans son boitier AmBiPiBox
  • Deux caméras ( 2 cams pour effectuer des tests et voir la comparaison entre 2 modèles différents ) pour Pi Zero en connexion direct sur le port cam ( mais il vous est possible d'utiliser une camera USB )
  • Ma petite TV et mon ordinateur portable comme source de capture
  • Une boule Ambilight avec un NodeMCU et un palet Ambilight avec un ESP-01 pour simuler le Hue Like ( voir ici )

Malgré le fait que je n'ai pas de Philips Hue, je vous montrerai comment effectuer les modifications sur votre fichier de configuration Hypérion pour une prise en charge des ces éléments ( Je viens de passer commande, merci Amazon Day Prime ;-^) ).

 

Pour info : Il y a un point important à prendre en compte pour ceux qui veulent tester la mise en place avec des Hue, voir le paragraphe traitant de la Génération du fichier hyperion.hue.json pour en savoir plus.

 

Vous trouverez un article comparant différentes caméras pour Raspberry ici

 

Voici le résultat en vidéo avec mon ordinateur portable comme source de capture. Notez que c'est la 1ere et que je n'avais pas régler les soucis de latence ou autre pouvant survenir.

Préalable

 

J'aurai besoin :

  • D'un Raspberry ( Zéro pour moi, j'aurai préféré un Pi Zero W mais bon il existait pas encore )
  • D'une camera pour Raspberry branché sur le port Cam ou en USB ( pour cette derniere à vous de la faire reconnaître par Raspbian car je ne traiterai pas de son installation )
  • D'une carte mémoire µSD d'au moins 4 Go
  • D'un Clavier/Souris USB
  • Du logiciel PINN lite et d'un logiciel type Winzip, Winrar ou 7Zip pour l'extraction
  • Du logiciel Putty et de WinSCP pour les accès distant
  • Du logiciel HyperCon
  • Du logiciel Notepad++ pour l’édition des fichiers de configuration
  • De jeter un œil sur le Tuto traitant du Hue Like et de sa mise en oeuvre
  • De parcourir le Wiki d'hypérion parlant de la configuration du Hue
  • D'avoir un ou plusieurs dispositif Hue Like ou éléments Hue. ( avec un pont )

Pour Rappel : Je ne dispose que de caméra en connexion direct sur le port Cam des Raspberry donc si vous possédez une camera USB ou bien même un autre MicroPC, il faudra adapter le tuto en conséquence.

 

Préparation de la carte MicroSD

 

Comme je vous l'ai dit plus haut, nous utiliserons Raspbian pour faire du Hue / Hue like par le biais d'une camera.

 

Alors pourquoi Raspbian ???

Car cet OS est moins restreint qu'OpenELEC ou LibreELEC nous permettant d'installer plus de paquets en ligne de commande et que les modules pour les caméras sont déjà présents dans le système, ne demandant juste qu'a être activé...

 

Ensuite pourquoi PINN ??

Car PINN est une version amélioré de NOOBS permettant l'installation d'un ou plusieurs systèmes de manière totalement autonome ( car il téléchargera et extractera seul les images systèmes ) et simplifié ( car quelques clics suffiront pour la mise en place ) à la portée du plan grand nombres. 

 

Vous l'aurez compris, PINN est un logiciel incontournable. Avant de le copier sur la carte mémoire, Il nous faudra dans un premier temps :

  • Vérifier que la carte mémoire ne contient qu'une seule partition et qu'elle occupe la totalité de l'espace ( visible dans le gestionnaire de disque, Touche Windows + X pour raccourci puis Gestion du Disque ). Sinon faire les modifications nécessaires
  • Formater cette partition en FAT32.

Une fois les modifications faites nous pouvons passer à l'extraction des fichiers. Apres téléchargement, vous devriez avoir une archive pinn-lite.zip. Il vous faudra :

  • Ouvrir l'archive dans votre logiciel de décompression 
  • Décompresser son contenu directement dans votre carte mémoire ( Attention, les fichiers doivent se trouver à la racine de la carte et non pas dans un dossier pinn-lite par exemple )
  • Ou si vous le pouvez, faites un Click Droit sur l'archive puis Extraire les fichiers vers et sélectionner la lettre correspondant à votre carte et enfin OK

 Une fois les fichiers en place, introduisez la carte mémoire dans votre Raspberry et le mettre sous tension pour initialiser le système.

 

Premier pas sur PINN et choix des OS à installer

 

Lorsque l'on démarrera le Raspberry on doit voir à l’écran :

  • Un carré Arc-en ciel puis peu de temps après
  • Une première barre de progression puis
  • Une seconde barre de progression avec à l’arrière-plan le logiciel PINN en train de s'initialiser.

Si votre Raspberry est connecté par câble ethernet pas de soucis, la liste des systèmes qu'il sera possible d'installer s'affichera sans aucune manipulation.

Par contre, pour ceux comme moi qui passe par le réseau Wifi il vous faudra faire quelques manipulations supplémentaires en :

  • Sélectionnant Close pour fermer le message nous informant qu'aucune connexion réseau à était établi puis
  • Changer la langue en bas d’écran de English vers Français ( le changement de clavier Qwerty vers Azerty se fera automatiquement )
  • Sélectionner votre réseau Wifi ( pour moi ASUS_4G-N12 ) puis entrer le mot de passe associé pour le connexion ( vous pouvez cocher la case Show Password pour voir le mot de passe au cas ou ) 
  • Sélectionner OK pour initialiser la connexion.

Une fois la connexion établi, la liste des systèmes devient disponible.

La liste des systèmes affiché, il nous faudra choisir celui ou ceux que nous souhaitons installer. Pour ma part j'ai coché Raspbian lite mais aurais très bien pu choisir en plus :

  • OpenELEC_rpi1
  • LibreELEC_RPi
  • Data Partition
  • ...

Ce qui est bien avec PINN c'est qu'au fur et à mesure d'ajout de systèmes, le Total de Mo Requis augmentera en conséquence. ( On voit aussi l'espace total de la carte mémoire qui est de 7480 Mo, soit 7.5Go ). Ça nous permettra de voir exactement la taille que prend chaque système, de savoir ou nous en sommes et si il est possible de rajouter d'autres systèmes sur notre carte.

 

Une fois le ou les choix fait :

  • Sélectionner l'icone Installer en haut à gauche
  • Valider l'installation suite au message d'information affiché à l’écran.

Le téléchargement et l'installation des systèmes débuterons après validation. Un message nous informera de la fin du processus. Redémarrer le Pi en sélectionnant OK.

 

Pour Info : Si vous avez sélectionné plusieurs systèmes, un menu Multi-Boot s'affichera vous demandant de choisir quel système exécuter. Ce choix vous sera proposé à chaque démarrage/redémarrage par contre, celui-ci démarrera automatiquement le dernier OS que vous avez amorcé, et non plus le 1er de la liste.

 

1er démarrage et 1ère configuration

 

Raspbian lite aura terminé son initialisation lorsque l'on verra à l’écran la ligne RaspberryPi Login. Il faudra alors entrer :

  • Le nom d'utilisateur pi puis
  • Le mot de passe raspberry ( normalement le clavier est en Qwerty donc le mot de passe à taper sur votre clavier sera rqspberry )

Si tout se passe comme prévu le message d’accueil devrait s'afficher ainsi que la ligne pi@raspberrypi :~$ , invitant à taper une commande, chose que nous allons faire. Nous allons exécuter :

  • sudo-raspiconfig puis valider ( le - sur le clavier Qwerty se trouve sur la touche °)] sur mon clavier Azerty, ça devrait être pareil pour vous ).

Nous arrivons sur la fenêtre de configuration de Raspbian. Pour des questions pratique nous allons activer la prise en charge des connexions SSH, non activé par défaut et poursuivre sur PC à distance en :

  • Sélectionnant la ligne Interlacing Options puis
  • La ligne SSH, puis Oui pour valider le lancement du serveur SSH sur le Pi et enfin OK pour revenir au menu principal
  • Descendre et sélectionner Finish pour quitter la fenêtre de configuration ou appuyer sur la touche Echap de votre clavier.

Il ne nous reste plus qu'a récupérer l'adresse IP obtenu par le Pi en exécutant la commande :

  • ifconfig 

Ceux qui sont en ethernet devront localiser la ligne eth0 et regarder au niveau de la seconde ligne après inet adr : . Même chose pour les autres utilisant une connexion Wifi mais cette fois-ci en localisant la ligne Wlan0 .

J'ai obtenu l'adresse IP 192.168.1.13, la même qui m'a était assigné dans PINN. Maintenant que je la connais et que SSH est activé je vais pouvoir me connecter au PI à distance et ne plus passer par le mini clavier USB, certes utile mais pas très pratique.

 

Nous passerons donc par Putty pour plus de confort d'utilisation. Voici la procédure pour se connecter sur son Pi :

  • Ouvrir le logiciel Putty puis
  • Dans le champ Host, entrer l'adresse IP obtenu avec ifconfig, soit pour moi 192.168.1.13
  • Entrer un nom dans Save Sessions, par exemple Pi Zero cam
  • Cliquer sur Save pour enregistrer le profil
  • Cliquer sur Open pour lancer la connexion ( une fenêtre d'information s'affichera à ce moment la, cliquer sur Oui )
  • Une fois l'affichage de login as dans la fenêtre de connexion, entrer le nom d'utilisateur pi puis valider
  • Et enfin, lors de la demande de mot de passe saisir, non pas rqspberry comme tout à l'heure mais raspberry puis valider de nouveau

Comme pour la connexion sur la TV, le message d’accueil doit s'afficher ainsi que la ligne pi@raspberrypi :~$ dans l'attente d'une commande.

 

Activation du module caméra et première capture d'image

 

Activation du module caméra

 

Maintenant que nous avons accès à distance au système, les manœuvres vont devenir plus simple. La première des choses à faire sera d'activer la prise en charge de la caméra mais avant cela, exécutons cette commande :

  • vcgencmd get_camera

Voici le résultat :

Aie; Aucune camera de trouvé et pourtant la Cam est connecté sur le Raspberry. C'est normal en fait car nous n'avons pas activé la prise en charge de la caméra. Il va donc nous falloir :

  • Exécuter une nouvelle fois la commande sudo raspi-config
  • Retourner dans Interlacing Options puis
  • Sélectionner la ligne Camera
  • Selectionner Oui puis OK pour valider l'activation de la caméra
  • Descendre jusqu’à Finish et valider ( ou appuyer sur Echap ) 

Si j'execute la commande vcgencmd get_camera j'obtiendrai toujours le même message supported=0 detected=0. Pour que la prise en charge soit effective il va donc falloir redémarrer le Raspberry en tapant la commande :

  • sudo reboot

Une fois fait, se reconnecter en SSH et exécuter de nouveau la commande vcgencmd get_camera. Le message doit être différent, comme sur l'impression écran suivante :

Ma camera est bien détecté et prise en charge, confirmer par la ligne  supported=1 detected=1.

C'est un bon début mais hyperion à besoin que le périphérique /dev/videoX ( ou X peut être 0, 1, 2... ) soit présent or si j’exécute :

  • ls /dev/video*

Voila ce que j'obtiens :

Rien du tout, pas de /dev/video0. ( Si vous avez branché un Videograbber il le trouvera en /dev/video0 ). Afin de faire une liaison entre la caméra vers un nom en /dev/videoX il nous faudra éditer le fichier modules, se trouvant dans le dossier /etc.

 

Avant cela, nous allons taper 2 commandes, la première pour effectuer un mappage temporaire de la camera vers /dev/video0 et la seconde pour voir si cela à fonctionné. Les voici :

  • sudo modprobe bcm2835-v4l2
  • ls /dev/video0

Voici le résultat :

On a bien la présence de /dev/video0 donc le mappage à était réaliser. Maintenant que l'on sait que ça fonctionne, il va falloir rendre ce mappage permanent.

Pour cela, nous allons executer les quelques lignes de commandes que voici :

  • sudo -s ( pour passer en root )
  • cat /etc/modules ( pour voir le contenu de /etc/modules, on voit bien qu'il est vide )
  • echo bcm2835-v4l2 >> /etc/modules ( pour copie de la ligne bcm2835-v4l2 dans le fichier modules )
  • Si vous voulez récupérer le son il faudra aussi exécuter cette ligne echo snd-bcm2835 >> /etc/modules
  • cat /etc/modules ( pour voir de nouveau le contenu du fichier modules où la ligne bcm2835-v4l2 est présente )
  • exit ( pour sortir du mode root. je l'ai mise à titre indicatif mais pas obligatoire, taper reboot directement sinon )
  • sudo reboot ( pour redémarrer le système afin que la ligne soit active ).

Voici le résultat de mes commandes, et en plus le résultat de la commande ls/dev/video0 et dmesg | grep video0 après redémarrage :

Ces images confirme que le mappage de la camera à bel et bien était effectué et on voit que  /dev/video0 est présent au redémarrage du Pi.

 

Première capture d'image

 

Notre camera est active et opérationnel pour fonctionner avec Hyperion ( enfin pas tout à fait, vous verrez plus tard ). Nous allons effectuer une première capture d’écran en exécutant cette commande :

  •  raspistill -v -o Screen.jpg ( pour prendre une photo en ayant les informations qui s'affiche à l’écran, option -v )
  • ls ( pour voir si le fichier Screen.jpg à bien était généré)

Le capture à était réalisé avec succès. Pour récupérer le fichier Screen.jpg nous allons utiliser WinSCP, un client pour FTP. Pour cela :

  • Ouvrir le logiciel WinSCP ( après l'avoir installé bien entendu )
  • Entrer dans le champ Host Name l'adresse IP du Raspberry soit pour moi 192.168.1.13
  • Entrer le nom d'utilisateur et le mot de passe juste en dessous de ce champ donc pi et raspberry
  • Cliquer sur Login pour établir la connexion.

Lors de l’établissement de la connexion un message de sécurité s'affichera. Cliquer sur Update pour continuer. Vous devriez être connecté en FTP, d'ou la présence dans la fenêtre de droite du fichier Screen.jpg...

Il suffira alors de le faire glisser vers la fenêtre de gauche pour lancer la copie sur votre disque dur, puis de l'ouvrir avec la visionneuse de photo ou tout autre logiciel.

Voici la photo obtenue avec ma camera Œil de Poisson ( vous voyez les courbures en bas de l'image dont je faisais référence en introduction ) :

Pour info : La résolution d'image était de 2592x1944, je l'ai réduite à 720x576.

 

Installation de RPI Web Cam Interface

 

Nous savons que notre caméra fonctionne, qu'elle est capable de prendre des photos et qu'elle est accessible via /dev/video0. Enfin il nous faut encore tester la prise en charge de la vidéo mais pas de soucis à avoir de ce coté la, on sais qu'elle en est capable /;-)).

 

Avant de s'attaquer à HyperCon, nous allons installer une petite application, à savoir RPI Web Cam Interface, nous permettant d'avoir accès à sa caméra en temps réel et ce via une interface Web, très pratique pour positionner sa caméra.

 

Voici la procédure pour son installation. Exécuter les commandes suivantes ( les unes après les autres ) :

  • sudo apt-get update && sudo apt-get upgrade ( pour effectuer la mise à jour de Raspbian si besoin, un peu long peut être )
  • sudo apt-get install -y git ( pour installer le paquet git, sans demande de confirmation, nécessaire pour les commandes suivantes )
  • git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git ( récupération du programme RPI Cam Web Interface )
  • cd RPi_Cam_Web_Interface ( entrée dans le dossier RPI Cam Web Interface )
  • chmod u+x *.sh ( changement des droits de tous les fichiers .sh pour pouvoir les exécuter )
  • ./install.sh ( exécution du script d'installation ).

Lorsque vous exécuterez le script install.sh, celle-ci va télécharger et installer de nouveaux paquets nécessaire au fonctionnement de RPI Cam Web Interface.

Il y aura à un moment donné un premier écran bleu ou il faudra choisir des options. L'une d'entre d'elle sera à modifier en particulier.

En effet, la valeur Autostart doit être changé de yes en no donc :

  • Descendre avec le clavier sur le yes au niveau de la ligne xAutostart
  • Supprimer le mot yes et taper no
  • Descendre jusqu'en bas puis appuyer une fois sur la touche Tabulation pour que le mot Accepter soit en surbrillance ( si Annuler est en surbrillance à la place d'Accepter appuyer sur la flèche gauche ou droite de votre clavier pour basculer de l'un à l'autre )
  • Valider pour continuer le processus d'installation

Pour info : Vous pouvez également changer le xServer en prenant un plus léger comme lighttpd ou nginx au lieu d'apache et aussi le port qui est 80.

 

Le processus d'installation suit donc son cours. Lorsque le script sera terminé un nouvel écran bleu s'affichera vous demandant :

  • Si vous voulez démarrer le programme, Répondre Non

Un message vous informe qu'il faudra le lancer manuellement, pas de problème c'est ce que l'on veut. 

Si vous exécuter la commande ls, voici ce que vous obtiendrez :

On peut voir des fichiers exécutable en .sh et en .txt. Ceux qui nous interesse sont :

  • start.sh ( pour démarrer le programme )
  • stop.sh ( pour l’arrêter )
  • remove.sh ( pour lancer la désinstallation de Rpi Cam Web Interface )
  • config.txt ( reprenant les informations du 1er écran bleu )
  • et bien d'autres...

Il est temps pour nous de lancer le programme, pour cela, exécuter cette commande :

  • ./start.sh ou bien sh start.sh 

Rien ne s'affiche, ne vous inquiétez pas c'est normal ( Ne pas fermer cette fenêtre SSH, nous en aurons besoin plus tard ).

 

Pour accéder à la camera il faudra se rendre sur un navigateur internet et taper l'adresse suivante :

  • http://AdresseDuPI:Port/html soit pour moi http://192.168.1.13/html ( pas besoin d'indiquer le port car j'utilise le port par défaut 80 )

Voici ce que j'obtiens :

Un accès à la camera en temps réel, à partir d'un smartphone ou d'un PC, pratique pour régler son positionnement.

 

En cliquant sur Camera Settings vous avez accès aux paramètres de configuration ( qui sont vraiment très complet ). Il sera aussi possible via cette interface de :

  • Stopper/Relancer la capture
  • Activer le fonctionnement par détection de mouvement
  • Prendre une photo, Enregistrer une vidéo
  • Arrêter / Redémarrer le système ( via l'onglet System )
  • et bien d'autres ....

Comme nous allons configuré la capture avec Hypérion en 720x576 ( comme pour un Videograbber et un Hdmi2AV ), pour le réglage du positionnement de la camera il vaudrait mieux en faire de même car selon la résolution que vous choisissez, le positionnement ne sera adéquate. ( Vous pouvez si vous le voulez ne pas descendre aussi bas et tout aussi bien rester en 1280x720... mais ça créera de la latence donc il est préférable d'avoir la résolution la plus basse possible et acceptable )

Pour cela :

  • Cliquer sur l'onglet Camera Settings puis
  • Load Preset et choisir une résolution dans la liste
  • Ou, si ça ne vous convient pas, entrer la valeur que vous désirez dans Video res, donc pour moi ça sera 720 x 576

Nous voila donc avec une camera positionné correctement. N'oublier pas la résolution que vous avez défini, elle vous sera utile plus tard pour définir la résolution de capture de la camera pour Hypérion.

 

Inutile pour nous d'explorer toutes ces options car nous n'utiliserons cette interface que pour positionner la camera. Toutefois, celle-ci peut s’avérer être vraiment utile pour les personnes voulant mettre en place rapidement un système de vidéosurveillance.

 

Bref, une fois que le positionnement de la camera est à votre gout ( en ayant le maximum de partie de la Tv sur l'image ), nous pouvons stopper le service en lançant cette commande : 

  • ./stop.sh ou sh stop.sh

Apres l’exécution de cette commande toujours pas de lignes qui s'affiche à l’écran, ce qui est normal. Par contre vous constaterez qu'il n'y a plus aucune réaction de la camera sur l'interface. 

 

Si vous voulez relancer le programme ultérieurement, pour régler à nouveau la caméra ou autre n'oubliez pas que les fichiers se trouve dans le dossier RPi_Cam_Web_Interface donc lorsque vous effectuerai une connexion en SSH, ne pas oublier de faire un :

  • cd RPi_Cam_Web_Interface puis
  • ./start.sh ou ./stop.sh pour démarrer ou arrêter le programme

Passons à la partie Ambilight de notre tuto.

 

Installation d'Hyperion via HyperCon

 

Tout est prêt pour que l'on puisse utiliser HyperCon et par la même occasion installer Hyperion sur Raspbian via son onglet SSH. Il est aussi possible de l'installer en ligne de commande mais pourquoi s’embêter ?

 

Commençons par :

  • Ouvrir le Logiciel HyperCon
  • Cliquer sur l'onglet SSH
  • Vérifier que All systems ( not OE/LE ) est sélectionné dans le champ System
  • Modifier l'adresse IP par celle de votre Raspberry soit pour moi toujours la 192.168.1.13
  • Vérifier que le nom d'utilisateur est bien pi et changer le mot de passe si besoin en entrant raspberry
  • Cliquer sur Connect pour établir la connexion sur le Pi ( elle doit se faire sinon vérifier vos paramètres )
  • Cliquer ensuite sur le bouton Install/Upd. Hyperion pour lancer l'installation
  • Un message d'information ( nous disant entre autre que ça va prendre du temps ) demandant une validation s'affiche, cliquer sur Oui
  • Cliquer pour finir sur le bouton Show Traffic pour ouvrir la fenêtre d'information

Pour le moment on y voit que 2 lignes, SSH traffic et ssh connected ce qui est normal ( ça fait beaucoup de normal lol ). Patientez un moment, des lignes s'afficheront comme sur la dernière image ci-dessous. Le processus d'installation sera terminé lorsque vous verrez la ligne :

  • Rebooting now, we added dtparam=spi=on to config.txt

confirmant l'installation d'hyperion et le redémarrage de Raspbian pour la prise en charge des modifications.

 

Tentative de capture via HyperCon et Correction des problèmes rencontrés 

 

 

La camera est prête, bien positionné et utilisable en /dev/video0,  hyperion est installé alors pourquoi ne pas essayer de récupérer une image comme on le ferai avec un VideGrabber.

 

Essayons de voir si ça fonctionne en :

  • Cliquant de nouveau sur Connect ( car Raspbian à redémarrer et nous avons perdu la connexion ) puis
  • Click Droit sur le fond Arc-en-ciel, et sélectionner Take Grabber screenshot

Ça ne marche pas, catastrophe, tout ça pour rien !!!! lol 

 

Pas de panique, si vous cliquer sur Show Traffic ( ou vous le remettez au premier plan si vous l'avez deja ouvert ) vous verrez le message d'erreur suivant VIDIOC_S_STD ERROR 25, Inappropriate ioctl for device.

En fait après quelques essais j'ai trouvé le 1er coupable ( Parce qu'il y en a plusieurs, j'en ai bavé ), c’était le format Pal/NTSC.

 

Quand on veut récupérer une image via le menu contextuel, HyperCon lancera cette longue commande ( que l'on voit aussi juste au dessus du message d'erreur ) :

  • hyperion-v4l2 --device /dev/video0 --video-standard PAL --input 0 --width -1 --height -1 --crop-left 0 --crop-right 0 --crop-top 0 --crop-bottom 0 --size-decimator 1 --frame-decimator 2 --red-threshold 0.0 --green-threshold 0.0 --blue-threshold 0.0 --screenshot

Alors j'ai procédé par dichotomie et j'ai vu que le problème venait de cette partie :

  • --video-standard PAL

J'en ai donc déduis que la commande à exécuter était donc :

  • hyperion-v4l2 --device /dev/video0 --input 0 --width -1 --height -1 --crop-left 0 --crop-right 0 --crop-top 0 --crop-bottom 0 --size-decimator 1 --frame-decimator 2 --red-threshold 0.0 --green-threshold 0.0 --blue-threshold 0.0 --screenshot

Par contre pour lancer cette commande modifié il faudra obligatoirement passer par la connexion SSH ( que je vous avais demandé de ne pas fermer un peu plus haut ) car on a que 2 choix possible dans HyperCon, Pal ou NTSC, donc :

  • Retourner dans la fenêtre SSH
  • Exécuter la commande cd .. ( pour retourner dans le dossier précédent, vu que nous sommes dans RPi_Cam_Web_Interface, ou sinon exécuter la commande cd $HOME si vous êtes complètement ailleurs. Si vous venez de vous connecter ne taper pas cette commande ) puis
  • Copier la ligne modifié qui se trouve au dessus et la coller en faisant un Clic Droit à l'intérieur de la fenêtre SSH 
  • Appuyer sur Entrée pour valider l’exécution.

Quoi !!! encore un message d'erreur et différent en plus !!! et oui encore un. Vous noterez que le message d'erreur précédent à disparu, ce qui est une bonne nouvelle quand même.

 

Bon cette fois-ci on nous parle de format de pixel qui n'est pas prise en charge et que seul les UYVY, YUYV et RGB32 le sont. Pour moi c'est du chinois et ne saurait pas vous dire la différence entre tout ces formats.

 

Ce n'est pas une raison pour ne pas remédier à ce problème. Alors en ayant cherché un peu j'ai trouvé la solution. Tout d'abord nous allons voir dans quelle format par défaut est configuré notre caméra et pour cela exécutons la commande :

  • v4l2-ctl --all

Voici ce que j'obtiens :

Regarder plus attentivement dans le grand cadre rouge, au niveau de la ligne Pixel Format. Qu'est ce que vous voyez ?? JPEG non ???

 

Bon maintenant que l'on connais le format par défaut, qui n'est pas l'un des 3 compatibles, il nous faut voir les formats prise en charge par la caméra et espérons que l'un des 3 soit présent. Pour en avoir la liste nous allons exécuter la commande :

  •   v4l2-ctl --list-formats

Et voila la liste en question :

Alelouia !!! On y voit 2 formats de Pixel prise en charge, l'index 1 et l'Index 8.

 

Vous allez me dire "C'est bien beau mais comment on fait maintenant pour passer du JPEG en YUYV par exemple ??"

Tout simplement en exécutant cette commande :

  • v4l2-ctl --device /dev/video0 --set-fmt-video=pixelformat=UYVY

Pour être sur du changement de format, retapons une nouvelle fois la commande v4l2-ctl --all et voyons le résultat :

Je vous mets aussi les 2 résultats obtenus , avant et après modifications ou on voit bien les changements de format :

OK !!! On progresse.

 

On a fait les modifs alors si on exécute de nouveau la commande modifié pour récupérer une image de la camera, qu'est ce qui se passera ??

 

Pour rappel, voici la commande à exécuter :

  • hyperion-v4l2 --device /dev/video0 --input 0 --width -1 --height -1 --crop-left 0 --crop-right 0 --crop-top 0 --crop-bottom 0 --size-decimator 1 --frame-decimator 2 --red-threshold 0.0 --green-threshold 0.0 --blue-threshold 0.0 --screenshot

Et le résultat :

Pour info : j'ai exécuté un ls suite à celle-ci pour vous montrer la présence du fichier screenshot.png généré par cette commande.

 

Miracle !!!! Enfin çà marche. ( mais ce n'est pas encore terminé, lol, il reste encore une manipulation ).

 

Maintenant que vous avez effectué une impression écran avec la ligne de commande hyperion-v4l2, il vous est possible de la récupérer et de l'afficher dans HyperCon. Pour cela :

  • Retourner dans HyperCon
  • Refaites un Click Droit sur le fond Arc-en-ciel puis sélectionner Take Grabber Screenshot.

Est ce que ça va marcher ???

J'ai pas bien positionné la cam, j'aurai pu mieux faire c'est vrai. ;-/(). Comme je l'ai dit, pour faire de l'Ambilight, c'est pas top, surtout à la verticale.

 

Et oui ça fonctionne maintenant, pourquoi ???

 

Ça n'a rien a voir avec les manipulations que nous avons fait précédemment enfin, pas tout a fait. En fait lorsque l'on clique sur Take Grabber Screenshot, HyperCon récupère l'image screenshot.png que nous avions généré manuellement donc normalement ça marche pas mais ça marche aussi dans un sens en ayant contourné la chose.

 

Si vous voulez afficher une autre image dans HyperCon, répéter la génération du fichier screenshot.png en ligne de commande puis refaites une importation dans HyperCon via le menu Contextuel ( utile surement pour ceux qui veulent tester l'Ambilight via ce procédé et ainsi avoir le résultat en regardant les couleurs qu'HyperCon affichera en bordure de bandes de détection, et savoir si la configuration est adéquate ).

 

Voila une bonne chose de faites. Cependant nous voila face à un nouveau problème. ( je vous ai dit que ce n'était pas terminé ).

 

Effectivement, le changement de format de Pixel n'est actif tant que l'on ne redémarre pas le système donc une fois le système réamorcé, celui-ci repassera en JPEG. Alors comment faire ??

 

En rajoutant une ligne de commande dans un fichier s’exécutant au démarrage. Cette commande sera la même que nous avions exécuter plus haut dans le tuto à savoir v4l2-ctl --device /dev/video0 --set-fmt-video=pixelformat=UYVY.

 

Sachez aussi qu'il vous est également possible de réduire la résolution de la caméra en rajoutant les informations qui suivent dans la ligne de commande :

  • width=720,height=576

Ce qui nous donnerait comme ligne finale :

  • v4l2-ctl --device /dev/video0 --set-fmt-video=width=720,height=576,pixelformat=UYVY

Le fichier en question est rc.local qui se trouve dans le répertoire /etc. Donc voici les commandes à exécuter pour insérer cette ligne :

  • sudo -s ( pour passer en mode root )
  • sed -e '/^exit/ i\v4l2-ctl \--device \/dev/video0 \--set-fmt-video=width=720,height=576,pixelformat=UYVY' /etc/rc.local > rc.local_mod ( pour insérer, en ligne 19 avant exit 0, la ligne v4l2-ctl --device /dev/video0 --set-fmt-video=width=720,height=576,pixelformat=UYVY dans le fichier provisoire rc.local_mod copie du fichier /etc/rc.local )
  • cat rc.local_mod > /etc/rc.local ( pour copier le contenu du fichier rc.local_mod dans le fichier /etc/rc.local )
  • rm rc.local_mod ( pour supprimer le fichier temporaire rc.local_mod )
  • exit ( pour sortir du mode root )

Et voici en image ce que ça donne ( J'ai exécuté 2 fois un cat /etc/rc.local pour voir le contenu avant et après exécution de la commande ) :

A chaque redémarrage du système nous aurons le basculement du format ainsi que la réduction de la résolution d'image qui sera effectué.

Vous pouvez aussi faire un sudo reboot pour voir par vous même si tout se passe comme prévu ( il vaut mieux le faire pour être sur ).

 

J'aurai pu vous mettre les manipulations à effectuer directement pour éventuellement vous faire gagner du temps mais quel aurait était l’intérêt d'un tel tuto ??? 

 

Que vous repartiez sans rien avoir appris ?? Que vous soyez perdu en ne sachant pas pourquoi j'ai exécuté telle commande ou fait telle manipulation ??

 

Pour moi ça ne mène à rien. Il vaut mieux savoir le pourquoi pour comprendre le comment !!!

 

Vous avez peut être perdu du temps en lecture mais au moins, avez vus et surement mieux compris le cheminement que j'ai suivi pour résoudre les problèmes rencontrés tout au long de cette mise en situation.

 

Création du fichier de configuration hyperion.huelike.json et hyperion.hue.json

 

Tout est enfin prêt pour que l'on puisse passer à la création du fichier de configuration Hypérion. Enfin !!!

 

Par contre avant cela voyons un petit détail qui à son importance. Etant donné que j'avais déjà traité de la mise en place de Hue Like dans une installation Ambilight, je survolerai cette partie tout en vous donnant des informations détaillés et vous renvoi vers le tuto en question que vous trouverez ici.

 

Pour rappel, je dispose de 2 éléments Hue Like que j'ai conçu à partir d'une boule de Noel à remplir et d'un palet que j'ai dessiné et imprimé à l'aide de mon imprimante 3D. ( plus d'infos dans la rubrique Projet et sur la fabrication d'un Pixel Like ).

 

Voici les images de synthèses et les photos de mes 2 Hue Like ( que j'ai plus touché et laissé de coté depuis leur création il y a déjà plusieurs mois ).

Le Palet est composé d'un ESP-01 et d'un anneau de 12 LEDs en rechargement par connexion MicroUSB. La boule est composé elle d'un NodeMCU Amica, d'un anneau de 16 LEDs et d'un double système de recharge, par MicroUSB et par Induction ( on la voit sur sa station de recharge sans Fil sur l'image de synthèse, sur la photo la boule de gauche était la 1ere version de ce que donnera le futur palet ). Les 2 anneaux sont en WS2812B.

 

Bref, je suis pas la pour vous parler de mes joujoux mais d'un tuto. Donc les 2 éléments fonctionnent en Wifi. Ils se connectent à mon réseau local dès leur mise sous tension et reçoivent une adresse IP en DHCP de mon routeur.

 

Certains diront, Pourquoi un adressage dynamique alors que lorsque l'on utilise des ESP8266/NodeMCU/ESP-01... pour faire de l'Ambilight en Wifi, on doit spécifier une adresse IP statique ??

 

Tout simplement car nous utiliserons le MultiCast. En fait peu importe le nombre d’éléments que vous avez, ils se connecteront à votre réseau local et obtiendrons une adresse IP par exemple de type 192.168.0.x. ou encore 192.168.1.x

 

Le MultiCast ensuite, pour faire simple, est un procédé permettant d'envoyer des informations à plusieurs équipements de votre réseau locale en ne tenant pas compte de l'adresse IP pour la réception ( à la différence d'un ping par exemple ou l'on s'adressera directement à une adresse IP en particulier ). L'essentiel c'est qu'il aient une adresse IP du réseau local. Ils recevront tous les même infos mais ne traiterons que la partie pour laquelle ils sont programmés.

 

Même chose pour les Hue, ils recevront une adresse IP mais ça sera le Pont qui s'occupera de contrôler vos lampes ou ampoules en fonction des informations qu'il recevra d’Hypérion. ( je dis ça, j'ai même pas de pont ou lampes mais c'est une question de logique, sinon à quoi pourrait bien servir ce pont ?? ).

 

Voici le schéma de mon installation pour le test :

Toute mon installation fonctionne en Wifi.

 

On y voit mon Pi Zero dans son boitier AmbiPiBox avec la camera connecté sur le port Cam et les 2 Orbs ( nom que porte les dispositifs Hue Like en utilisation avec Hyperion ). Pour la génération du fichier de configuration hyperion.hue.json je ferai en sorte de simuler 2 lampes Hue, remplaçant mes 2 Orbs.

 

Tout est enfin prêt pour passer à la génération des fichiers de configurations.

 

Génération du fichier de configuration hyperion.huelike.json

 

Pour générer un fichier de configuration il va nous falloir retourner dans HyperCon. Une fois le logiciel ouvert, on se retrouve sur l'onglet Hardware ou il faudra, dans la partie Device :

  • Changer le nom MyHyperionConfig par HyperionHueLike
  • Sélectionner le type WS2801 et le changer en AtmoOrb. L'interface change du tout au tout
  • Rajouter un ,2 dans le champ IDs car je dispose de 2 Orbs ( si j'en avais eu 3 j'aurai rajouter ,2,3 et ainsi de suite...)
  • Saisir le nombre de LEDs égal à celui de mon Orb en contenant le plus, donc ma grosse boule Ambilight, soit 16.

J'ai laissé les autres options de la partie Device par défaut. La rubrique construction ne sera pas utilisé car il n'y aura plus que 2 zones, non pas en bordures d'image comme c'est le cas en Ambilight mais en portion d'image.

Chaque Orb affichera les couleurs correspondant, à la moitié gauche de l'image pour la boule Amblight, à la moitié droite pour le palet.

 

Voici une image de mon installation pour le test :

On voit la camera posé sur mon boitier AmbiPiBox, les Hue Like et sur l’écran ce qui est en train d’être filmé. Le boitier est posé sur mon Ordi Portable.

 

Pour Info : J'ai positionné la camera de telle façon à ce que l'image à capté soit la plus précise possible. C'est sur que ce n'est pas pratique d'avoir un boitier de 13 cm posé sur son ordi. Après, il est possible de restreindre l'ensemble Pi Zero W + caméra à une boite d'allumette et ainsi avoir quelques choses de beaucoup plus discret.

 

Comme nous passons par la camera, remplaçant le VideoGrabber, il faudra activer la prise en charge de la capture matérielle et désactiver la logicielle. Pour cela :

  • Cliquer sur l'onglet Grabber puis
  • Décocher la case Enabled qui se trouve sous la rubrique Internal Frame Grabber
  • Cocher la case Enabled qui se trouve sous la rubrique GrabberV4L2 ( des options grisées deviennent accessible )

Les autres options sont à laisser par défaut. Le -1 dans Width et Height signifie qu’Hypérion utilisera la résolution paramétré un peu plus haut dans la ligne de commande qui s’exécute au démarrage, soit 720x576.

Les autres onglets et options resteront inchangées. Vous pouvez toutefois changer 2 options dans l'onglet Process si besoin. ( baisser la valeur Time[ms] de 200 à 100 voir même 50 pour réduire la latence ou encore augmenter Update Freq. [HZ] de 20 à 30, en fonction des LEDs que vous avez ).

 

 Je vous renvoi vers mes autres tutos si vous voulez utiliser la fonction Forwarder pour l’exécution de plusieurs instances d'Hyperion ou avoir d'autres informations sur HyperCon pas exemple.

 

Les modifications sur le logiciel faites, il reste plus qu'a :

  • Cliquer sur Create Hyperion Configuration ( qui se trouve en bas à gauche )
  • Saisir un nom pour le fichier, par exemple hyperion.huelike.json
  • L'enregistrer par exemple sur le bureau pour le trouver plus facilement ( car il va falloir qu'on l’édite ).

Notre fichier est sauvegardé, prêt à être envoyé vers le Raspberry, enfin pas tout à fait. Il nous faudra éditer ce fichier à l'aide de Notepad++ pour supprimer une information et voir d'autres options également mais un peu plus tard. 

 

Est ce que vous vous rappelez du problème que l'on a eu avec le format PAL. En fait en ayant activé la prise en charge du grabber, lors de la génération du fichier, HyperCon à rajouté les options figurant dans la partie GrabberV4L2, en autre, le format vidéo PAL.

 

Il nous faudra donc :

  • Editer le fichier hyperion.huelike.json avec Notepad++
  • Faire une recherche dans le fichier avec la mot PAL
  • Supprimer la ligne  "standard" : "PAL", du fichier
  • J'en ai également profité pour passer la valeur time_ms de 200 à 100 ( un conseil mettre 50 ) et updateFrequency de 20 à 30
  • Sauvegarder les modifications.

Notre fichier est quasiment prêt mais je vais vous faire attendre encore un peu. Nous verrons la définition des zones de détection un peu plus tard.

Vous pouvez sauter le prochain paragraphe si vous le souhaitez mais c'est toujours mieux d'avoir lus toutes les informations dispos au cas ou.

En attendant, passons à la génération du second fichier pour les personnes possédant des Philips Hue.

 

Génération du fichier de configuration hyperion.hue.json

 

Nous venons de générer le fichier hyperionhue.like.json et allons répéter la même procédure pour la gestion de nos dispositifs Hue en générant hyperion.hue.json.

 

Mise à jour : J'ai fait depuis l'acquisition d'ampoules Hue. Voir mon suivre mon dernier tuto à partir d'ici 

Utilisation de Philips Hue avec Kodi, avec son PC/MAC, en combinaison avec son installation Ambilight, et/ou avec des Hue Like et revenir si besoin vous avez d'informations car dans ce dernier je ne suis pas rentrer complément dans les details, l'ayant fait par contre dans celui-la. Celui-ci, Celui-la, on s’emmêle les pinceaux. Bref lisez tout si vous le pouvez. Désolé /;-/)).

 

Comme indiqué, je n'ai pas de lampe, ampoule ou pont de la marque Philips donc ça ne sera que de la théorie, mais je suis assez confiant sur les infos que je vais vous fournir, ayant parcouru le Wiki d'hyperion au préalable pour savoir comment faire.

 

Avant de faire des manipulations dans HyperCon, il va falloir récupérer des informations concernant vos dispositifs Hue. Sur le Wiki d'hyperion traitant des Philips Hue, on nous indique qu'il faut récupérer dans l'application Hue pour Smartphone ou TV :

  • Les IDs des lampes ou ampoules que l'on souhaite utilisés
  • L'adresse IP du pont 
  • Le nom d'utilisateur afin de s'y connecter

Sur l'image ci-dessous on vous indique comment faire pour les récupérer. Par contre information importante, on vous dit aussi qu'il est préférable de définir un adressage IP pour votre pont, sinon cela compliquera un peu les choses avec des changements IP fréquentes...

Une fois que vous avez ces informations, nous pouvons commencer. Je vous rappelle que je traiterai de l'installation de 2 Hue donc si vous voulez en utiliser plus, il faudra adapter les modifications en conséquences. Donc : 

  • Retourner dans HyperCon et cliquer sur l'onglet Hardware ( ou exécuter le logiciel si il ne l'est pas )
  • Dans la partie Device, Changer le nom MyHyperionConfig par HyperionHue
  • Changer le type en HyperionHue
  • Dans le champ Host renseigner l'adresse IP de votre pont ( je vais pour ma part mettre celle de mon routeur en 192.168.1.254 )
  • Entrer le nom d'utilisateur ( que vous avez récupérer en effectuant la procédure indiqué ) dans le champ Username ( j'ai mis YouS ;-/) )
  • Laisser la case Switch on Black coché ( car d’après le Wiki, toutes les couleurs ne sont apparemment pas reproductible, résultant à avoir des couleurs un peu bleu ou rouge lorsque l'image sera un sombre). Si vous voulez une harmonie dans les transitions, décocher cette case ( évitant aux lampes de s’éteindre entièrement lorsque du noir sera à l’écran ). 
  • Laisser la valeur Transition Time sur 1 car c'est le minimum ( peut être modifiable en 0.5 par exemple dans le fichier de configuration ? )
  • Laisser l'ordre de couleurs sur RGB.

C'est vraiment dommage que l'on ne puisse pas entrer dans HyperCon le nombre de Hue que l'on souhaite faire fonctionner. Cela pose un petit problème lors de la création du fichier de configuration.

 

En Effet, si'lon regarde attentivement la partie Construction, on verra que des valeurs sont renseignés définissant le nombre de LEDs dont on dispose sur les 4 cotés de notre écran. Un total de 46 LEDs est affiché à l’écran.

 

Lors de le création du fichier de configuration, dans la partie LEDs, il y'aura donc 46 Lignes correspondant à la zone de détection pour chacune d'entre elles sur les 2 axes, verticale et horizontale. On la trouve sous cette forme :

 

"leds" : 

[

{

"index" : 0,

"hscan" : { "minimum" : 0.5000, "maximum" : 0.5625 },

"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }

},

.....

{

"index" : 45,

"hscan" : { "minimum" : 0.5625, "maximum" : 0.6250 },

"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }

}

],

 

Bref ce n'est pas le sujet du moment, nous l'aborderons plus tard lors de la définition des zones de détection. La ou je veux en venir c'est que nous n'utilisons que 2 Hue donc nous ne devons avoir seulement que 2 index dans le fichier de configuration et pas 46. ( comme lorsque je sélectionne AtmoOrb ou je n'obtiens que 2 lignes, Index 0 et Index 1 ).

 

Il faudra donc palier à ce problème en :

  • Entrant la valeur 0 dans les champs LEDs Horizontal, LEDs Right, Bottom Gap et 1st LED offset 
  • Entrant le nombre de Hue, soit pour moi 2,  que je souhaite utiliser dans le champ LEDs Left ( j'aurai aussi pu le faire avec LED Right. Pas avec LEDs Horizontal car la valeur est doublé pour la definition des LEDs à la verticale ).

Lors de la génération du fichier je n'aurai plus 46 lignes index mais seulement 2. 

Voici un extrait du futur fichier de configuration ou on a seulement nos 2 Index.

 

On a vu plus haut lors de le génération du fichier hyperion.huelike.json que nous n'utiliserons pas l'Internal Frame Grabber, mais seulement le GrabberV4L2. 

 

Un problème se pose. Voici ce qu'indique le Wiki d'Hyperion :

 

Rate limitation

  • The performance of the Philips Hue system is limited. The bridge can handle up to 10-30 requests / second. Due to this limitation, the framegrabber frequency should be set to _10 / number-of-lights Hz_.This is an example for two lights

"framegrabber" :

         {

                  "width" : 64,

                  "height" : 64,

                  "frequency_Hz" : 5.0

         },

  • Les performances du pont Philips sont limités. Il ne peut traiter qu'entre 10 et 30 requêtes par seconde, A cause de cette limitation, la fréquence du framegrabber devra être configuré comme ceci : Valeur en Hz = 10 / Nombre de LED. Voici un exemple pour 2 Lampes. 

Or, dans le configuration du GrabberV4L2 il n'y a pas de réglage de la fréquence en Hz. Alors je sais pas du tout ce que ça donnera avec les Hue, s'il faut, pour ne pas surcharger le pont, baisser le nombre d'images par seconde de la camera par exemple ou alors si ça fonctionnera sans aucune modification. N'ayant pas de Hue, je ne peux tester son fonctionnement.

 

Je vais quand même activé le mode Internal Frame Grabber au cas ou, peut être que lors de la sélection du mode HyperionHue, celui-ci récupère la valeurs frequency_Hz qui sais, même si j'y crois pas trop. Je n'ai pas trouvé plus d'information malheureusement.

 

Donc, retournons sur notre interface HyperCon puis :

  • Cliquer sur l'onglet Grabber
  • Cocher la case Enabled qui se trouve sous d'Internal Frame Grabber
  • Changer la valeur Priority Channel d'Internal Frame Grabber de 890 à 900 ( car sinon il sera prioritaire sur le GrabberV4L2 )
  • De la même manière, changer le valeur Priority channel dans la partie GrabberV4L2 de 900 à 890

Notre fichier est prêt à être créer. De la même façon que pour le précédent à savoir :

  • Cliquer sur Create Hyperion Configuration ( qui se trouve en bas à gauche )
  • Saisir un nom pour le fichier, par exemple hyperion.hue.json
  • L'enregistrer par exemple sur le bureau pour le trouver plus facilement ( car il va falloir qu'on l’édite ).
  • Editer le fichier hyperion.hue.json avec Notepad++
  • Faire une recherche dans le fichier avec la mot PAL
  • Supprimer la ligne  "standard" : "PAL", du fichier
  • Rechercher le mot frequency_Hz
  • Changer le 10.0 en 5.0 ( même si je pense que ca ne changera pas grand chose mais bon autant essayer ).

Par contre, il manque une valeur dans le fichier de configuration, lightIds. Cette variable servira à définir les numéros des éléments Hue qu'Hyperion devra gérer.

 

Il faudra donc :

  • Rajouter sous la ligne "username" .. la ligne "lightIds"   : [1,2], ( Pour avoir une gestion Ambilight avec Hyperion des éléments 1 et 2 ). Ne pas oublier la virgule, très important. Seul la dernière ligne n'en possède pas ).

Si vous avez par exemple 4 éléments Hue, comme sur l'impression écran plus haut, et que vous voulez paramétrer une utilisation avec Hyperion de celles portant le numéro 2 et 3, il faudra :

  • Changer la valeur [1,2] par la valeur [2,3].

Et ainsi de suite, si 3 lampes alors [1,2,3]. 

Dernier point à modifier, le linear smoothing. Sur le Wiki on nous indique que :

  •  Smoothing : Should be turned off since it results in too frequent requests to the bridge.
  • Lissage : Devra être désactivé sinon il risque d'y avoir trop de requêtes vers le pont

Donc pour le désactivé :

  • Faire une recherche dans le fichier du mot linear et remplacer la valeur de type defini sur "linear" par "none"
  • Sauvegarder les modifications apportés au fichier

 

Nos 2 fichiers de configuration sont à présent opérationnel, enfin pas tout à fait. Il ne nous reste plus qu'a définir les zones de détection que l'on souhaite utiliser pour chacun des éléments.

 

Comprendre et configurer les zones de détections de couleurs

 

 

Nous touchons au but. Nos fichiers sont prêt mais il reste encore une information importante à paramétrer, les zones de détection.

Ces zones sont défini selon 2 axes :

  • Horizontal avec la valeur hscan
  • Vertical avec la valeur vscan

Voici une impression écran provenant du Wiki ou on peut voir la définition de 3 zone de détection avec deux Ampoules et une lampes

Nous allons nous concentrer sur les 2 premières à savoir l'ID 1 ( Index 0 ) et l'ID 2 ( Index 1 ).

 

Comprendre la détection de Zone

 

Voici la définition de zone de la 1ère portant l'index 0 ( car hyperion prend en compte le 0 pour définir un élément, même pour les LEDs ou il faut rajouter +1 au total du plus grand Index présent dans le fichier de configuration ) :

{

"index" : 0,

"hscan" : { "minimum" : 0.8000, "maximum" : 1.0000 },

"vscan" : { "minimum" : 0.0000, "maximum" : 0.3000 }

},

 

Ces valeurs forme un rectangle ( ou carré selon les configurations ) représentant la zone de détection. Pour y voir plus clair, prenons un exemple d'un écran 15 pouces en 16:9, mesurant 33 cm x 19 cm.

 

Pour comprendre la valeur hscan :

  • Il faudra partir du coin en haut à gauche
  • La valeur minimum hscan est à 0.8000, cela veut dire qu'il faudra se décaler de 80% vers la droite en partant de l'angle gauche de l'image pour avoir le premier angle de notre quadrilatère ( 33cm * 20% = 6.5. La détection ne se fera que sur 6.5 cm )
  • La valeur maximum hscan est à 1.0000, soit la bordure de l'image de droite.

Ensuite viens la valeur vscan :

  • Que l'on parte du coin en haut à gauche ou droit n'a pas d'importance vu que nous allons descendre.
  • La valeur minimum vscan est à 0.0000, cela veut dire que nous partons d'un coin
  • La valeur maximum vscan est à 0.3000, soit un traitement de l'image de 30% de droite. Pour avoir notre 2ème angle de notre quadrilatère, il faudra descendre de 30% de la hauteur de notre écran sur l'axe vertical ( 19cm * 30% = 5.7 cm. )
  • La valeur maximum vscan est à 1.0000, soit la bordure de l'image du bas 

Pour résumer :

  • Nous avons un traitement de l'image de 20% sur l'axe horizontal et de 30% sur l'axe vertical
  • Cela revient en fait à avoir un rectangle de détection de 6.5 cm sur 5.7 cm se trouvant dans le coin en haut à droite.

 

Prenons un nouvel exemple de travaux pratique de définition de zone pour la lampe 2 se trouvant dans le coin à gauche :

  • Je souhaite avoir un carré représentant 25% de l'axe horizontal et 50% de l'axe vertical.
  • Je souhaite avoir un décalage de 5% sur les 2 axes

Voici donc les valeurs que je devrai appliquer :

{

"index" : 0,

"hscan" : { "minimum" : 0.0500, "maximum" : 0.3000 },

"vscan" : { "minimum" : 0.0500, "maximum" : 0.5500 }

},

  • J'ai bien mes 0.05, soit 5% de décalage dans les valeurs minimum par rapport au coin en haut à gauche. ( Sinon la valeur serait 0.000 )
  • Comme je me suis décalé de 0.05 vers la droite et vers le bas, il faut que je rajoute cette valeur au 0.25 ( 25% ) de l'axe horizontal et 0.5 ( 50% ) de l'axe vertical.
  • Mes valeurs maximum sont donc 0.3000 pour le hscan et 0.5500 pour le vscan.

C'est peut être un peu confus dans votre tête mais une fois que vous avez compris la technique ça marche toute seul.

Pour savoir plus facilement comment trouver ces valeurs :

  • Poser sur papier un rectangle avec en dans le coin en haut à gauche un 0 ( valeur minimum hscan et vscan )
  • En haut à droite un 1 ( valeur maximum hscan )
  • En bas à droite un 1 ( valeur maximum vscan )
  • Dessiner le rectangle de détection que vous souhaitez avoir
  • Les valeurs sont trouvable assez facilement une fois que le rectangle est formé.

Configuration des Zones de détection dans le fichier de configuration

 

Maintenant que vous avez compris la définition des détections de zones, voici celle que j'ai défini pour les 2 Orbs et Hue :

{

"index" : 0,

"hscan" : { "minimum" : 0.0000, "maximum" : 0.5000 },

"vscan" : { "minimum" : 0.0000, "maximum" : 1.0000 }

},

{

"index" : 1,

"hscan" : { "minimum" : 0.5000, "maximum" : 1.0000 },

"vscan" : { "minimum" : 0.0000, "maximum" : 1.0000 }

}

 

Si vous avez assimilé la définition des zones de détection, vous savez déjà celles que j'ai configuré :

  • Pour l'Index 0, soit la lampe ou Orb portant l'ID 1, la zone de détection sera l’entière partie gauche de l’écran
  • De la même façon, pour l'Index 1 portant l'ID 2, il y aura un traitement de la partie droite de l’écran.

Voici ce que donne la partie "leds" de mes fichier de configuration :

  • Modifier les valeurs hscan et vscan dans votre fichier de configuration pour définir des zones de détection pour vos équipements
  • Sauvegarder les modifications. 

Même si vous avez défini des IDs qui ne se suivent pas comme 1,2 et 4, les index à utilisé eux se suivront et seront 0,1 et 2.

 

Nos fichiers sont maintenant correctement configurées. Il est temps de passer au chose sérieuse.

 

Transfert des fichiers de configuration sur le serveur et exécution automatique

 

Dernière partie de notre tuto, enfin !!! Je sais, on me l'a dit à 2 reprises de partitionner les infos. Je ferai de mon mieux pour les prochains.

 

Configuration des Zones de détection dans le fichier de configuration

 

Il nous faut transférer le fichier de configuration que vous avez choisi de générer. Pour ma part, possédant des Hue Like, je ferai le transfert du fichier hyperion.huelike.json.

 

Pour cela je vais utiliser WinSCP donc :

  • Relancer le logiciel si vous l'avez fermer
  • Établir une connexion sur votre Raspberry ( voir plus haut, en tout début de tuto si vous ne vous rappelez plus comment faire )
  • Une fois établi, sur la partie de droite cliquer sur le menu déroulant puis sélectionner le dossier /<root> ( vous vous retrouvez avec une longue liste de dossier )
  • Localiser le dossier etc et double cliquer dessus. Vous faites face à une liste encore plus longue
  • Dans celle-ci, localiser la ligne hyperion et double cliquer dessus. Pas de fichier présent dans le dossier normalement.
  • Dans la partie de gauche, sélectionner le menu déroulant et sélectionner l'icone Desktop
  • Localiser votre fichier hyperion.huelike.json ou hyperion.hue.json et le faire glisser vers la partie droite
  • Un message vous demande de valider la copie s'affiche. Cliquer sur Copy ( vérifier que les chemins et nom de fichier sont correct )

Une fois la copie faites, vous devriez voir le fichier de configuration sur la partie droite.

L'un des avantages de WinSCP est d’intégrer un éditeur de fichier donc si vous devez effectuer des modifications :

  • Double cliquer sur le fichier de configuration
  • Faire les modifications 
  • Sauvegarder votre fichier avec Ctrl +S par exemple
  • Valider la sauvegarde.

 

Exécution automatique d'hypérion au démarrage du système

 

Une instance d’Hypérion est déjà configurer pour s’exécuter automatiquement au démarrage avec le fichier hyperion.config.json. Si vous exécuté la commande ps -ef | grep hyperiond, vous ne verrez pas d'instance hyperion en cours d’exécution. ( Ce qui est normal car le fichier n'est pas présent dans le dossier /etc/hyperion ).

 

Vu que nous avons utilisés des fichiers portant des noms différents, il va falloir :

  • Désactiver l'exécution automatique utilisant le fichier hyperion.config.json
  • Configurer un démarrage automatique avec le fichier hyperion.hue(like).json

Dans un premier temps, désactivons l’exécution d'hyperion au démarrage comme ceci :

  • Ouvrir une session SSH avec Putty vers le Raspberry
  • Exécuter la commande sudo -s ( vous le savez maintenant, pour passer en mode administrateur root )
  • Exécuter la commande systemctl stop hyperion.service ( pour stopper le service hyperion si il était en cours d’exécution )
  • Exécuter la commande systemctl disable hyperion.service ( pour désactiver son exécution futur au démarrage )

On voit bien la désactivation d'hyperion.service.

 

Passons à l’exécution automatique. Est ce que vous vous rappelez du fichier /etc/rc.local ?? Et bien c'est lui que nous allons utiliser pour insérer notre ligne d’exécution automatique au démarrage.

Vous vous rappelez surement de cette ligne :

  • sed -e '/^exit/ i\v4l2-ctl \--device \/dev/video0 \--set-fmt-video=width=720,height=576,pixelformat=UYVY' /etc/rc.local > rc.local_mod

Nous allons l'éditer pour insérer la ligne suivante :

  • hyperiond /etc/hyperion/hyperion.huelike.json > $HOME/hyperion.log 2>&1 & ou
  • hyperiond /etc/hyperion/hyperion.hue.json > $HOME/hyperion.log 2>&1 & selon votre fichier

Pour vous expliquer cette ligne :

  • Exécution de l'instance hyperiond utilisant le fichier hyperion.hue(like).json ( hyperiond /etc/hyperion/hyperion.huelike.json )
  • Ecriture des informations d’exécution dans le fichier hyperion.log se se trouvant dans le dossier /home/pi ( > $HOME/hyperion.log 2>&1 )
  • En Arrière plan (  ) 

Voici donc la ligne finale après édition, pour les 2 fichiers  :

  • sed -e '/^exit/ i\hyperiond \/etc/hyperion/hyperion.huelike.json \> \$HOME/hyperion.log \2>&1 \&' /etc/rc.local > rc.local_mod
  • sed -e '/^exit/ i\hyperiond \/etc/hyperion/hyperion.hue.json \> \$HOME/hyperion.log \2>&1 \&' /etc/rc.local > rc.local_mod

Pour finir, voici la procédure à suivre pour insérer cette ligne dans le fichier /etc/rc.local ( entre la ligne v4l2...UYVY et exit 0 ) :

  • sed -e '/^exit/ i\hyperiond \/etc/hyperion/hyperion.huelike.json \> \$HOME/hyperion.log \2>&1 \&' /etc/rc.local > rc.local_mod
  • Si hue sed -e '/^exit/ i\hyperiond \/etc/hyperion/hyperion.hue.json \> \$HOME/hyperion.log \2>&1 \&' /etc/rc.local > rc.local_mod
  • cat rc.local_mod > /etc/rc.local ( pour copier le contenu du fichier rc.local_mod dans le fichier /etc/rc.local )
  • rm rc.local_mod ( pour supprimer le fichier temporaire rc.local_mod )
  • exit ( pour sortir du mode root )

Sur la deuxième image, en faisant un cat /etc/rc.local on voit le contenu du fichier avec la présence de la ligne d’exécution de l'instance hyperiond.

 

Si vous voulez par exemple arrêter le processus, il vous faudra taper cette commande

  • sudo kill $(ps aux | grep 'hyperiond' | awk '{print $2}')

Pour vous expliquer la commande :

  • Exécution de la commande kill en utilisant le numéro de processus de l'instance hyperiond,
  • Obtention au préalable de ce numéro de processus avec la combinaison grep et awk

Voici le résultat avant et après exécution :

Si vous voulez relancer la commande manuellement, il faudra exécuter une des 2 commandes commençant par hyperiond /etc/hyperion/... ou plus simple un sudo reboot pour redémarrer le système. 

 

 

Nous voila arrivée au terme de notre long tuto. La mise en place d'une réaction des LEDs par caméra était plus un défi qu'autre chose, pour montrer qu'il était possible de passer celle-ci pour faire, il est vrai, pas de l'Ambilight mais possible tout de même avec difficulté, mais du Hue ou Hue Like.

 

Il me reste encore à peaufiner quelques réglages et à savoir ou placer exactement la camera mais ça reste quand même une solution alternative intéressante à la méthode traditionnelle utilisant un Videograbber.

 

J’espère que vous sortirez de ce tuto avec l'envie d'en faire autant de votre coté et vous dit encore une fois désolé pour la longueur de celui-ci. /;-(_)

 

Ça fait beaucoup à lire mais au moins vous avez toutes les infos nécessaires à une réalisation sans encombre.

 

Bon mod à tous !!!

Commentaires : 4 (Discussion fermée)
  • #1

    Anto (lundi, 10 juillet 2017 22:39)

    Je me suis rendu fou depuis des jours avec ce Hue et je tombe sur le tuto grace a ton mail,
    Il y a toutes les réponses que j'ai luté a trouver arrghhh.
    Encore une fois chapeau l'artiste !

  • #2

    YouS (lundi, 10 juillet 2017 22:52)

    Salut Anto,

    Et oui, tu risque de trouver toutes les infos que tu cherche tellement il y en a lol.

    Bon sinon tant mieux pour toi si tu as trouvé ce que tu cherche. J'attend toujours la vidéo de ton install avec impatience.
    ++

  • #3

    Philippe (jeudi, 13 juillet 2017 20:36)

    Salut YouS !

    Le tuto est très complet, ce week-end de trois jours sera très utile pour mettre en application tout ce que tu dis là :)

    Je te ferais une photo de l'installation d'ici (j'espère) dimanche ! :D

  • #4

    YouS (jeudi, 13 juillet 2017 20:52)

    Salut Philippe,

    Il est complet mais peut l’être encore plus, notamment la mise en place du Hue que je n'avais pas.

    Maintenant que je les ai reçu et testé avec la camera, je vais pouvoir mettre à jour mon tuto et aussi en créer peut être un nouveau montrant la procédure complète d'association de son installation Hue à hyperion et avec son Ambilight aussi donc il y aura Forward et modifs de fichier json.

    De quoi faire tourner la tête de certain lol

    Par contre la je prendrai mon temps, car il fait chaud dans le Sud. /;-)).