Loïc Doubinine | Zed

Développeur, Architecte, DevOps et Site Reliability Engineer

Avatar
  • Articles
  • Réseaux sociaux
  • Tags
  • Carrière et formation
  • Qui suis-je ?
  • Webcam on = Lumière allumé (Philips Hue)

    5 minutes read 937 mots Linux - Philips-Hue - Tech - Bash - Corrigé par un LLM

    Sur mon bureau, chez moi, quand je télétravaille et que je fais une visio, j’allume ma webcam. Je trouve que c’est plus sympa pour les autres de pouvoir me voir. J’apprécie également lorsque les autres font de même, mais chacun a ses préférences à ce sujet.

    Afin que mon image soit nette et propre, j’ai installé une lampe qui m’envoie beaucoup de lumens à la figure. De cette façon, je suis sûr que l’on me voit bien ! J’oubliais souvent d’allumer ou pire, de l’éteindre. J’ai donc automatisé le processus.

    La lampe que j’utilise est une Philips Hue Play, qui peut être contrôlée via l’ensemble de l’écosystème Philips Hue.

    J’ai également une tablette sur mon bureau avec des gros boutons pour allumer et éteindre la lampe. C’est pratique, mais cela nécessite tout de même un geste de trop.

    API pour allumer la lampe

    Les lampes Philips Hue peuvent être contrôlées via le bridge qui dispose d’une API REST assez simple.

    Après quelques recherches sur internet, j’ai construit un bout de script pour allumer ou éteindre la lampe :

    #!/bin/bash
    HUE_BRIDGE_IP="10.20.0.4"
    HUE_USER_NAME="secretCodeYouGetByPressingTheBridgeButton"
    
    echo "Turning off the light"
    curl --insecure -X PUT -d '{"on": false}'  "https://${HUE_BRIDGE_IP}/api/${HUE_USER_NAME}/lights/4/state"
    
    
    echo "Turning on the light"
    curl --insecure -X PUT -d '{"on": true}'  "https://${HUE_BRIDGE_IP}/api/${HUE_USER_NAME}/lights/4/state"
    

    Pour accéder a l’API qui est sur le Bridge lui-même, cette page décris les étapes à suivre. https://developers.meethue.com/develop/get-started-2/

    Il ya notamment la procédure pour obtenir le “username” qui sert de code secret.
    Pour la faire courte, il faut envoyer la requette suivante :

    curl -X POST -d '{"devicetype":"nom_de_votre_script"}'
    

    Vite courir pour appuyer sur le bouton du bridge et recommencer à nouveau. Le code est alors donné, je le note, notamment dans la variable HUE_USER_NAME. Ce code doit ensuite être inséré dans l’URL entre /api/ et le chemin des “resources”.

    Ensuite, il m’a fallu comprendre comment fonctionne l’API. En résumé :

    Je ne suis pas allé plus loin. Il y a sûrement des subtilités pour les scènes dynamiques ou certaines fonctionnalités. Après tâtonnement, j’ai découvert que le numéro de ma lampe est 4.

    Detection de l’utilisation de la Webcam

    J’ai fait quelques recherches sur Internet, je ne sais plus trop où j’ai trouvé la réponse. Pour détecter si ma webcam est utilisée, il suffit de faire un lsmod et de “regarder” le statut devant uvcvideo. Ça donne ça :

    IS_CAM_IN_USE=$(lsmod | grep uvcvideo|head -n 1|awk '{print $3}')
    

    Sort un 0 ou un 1. Il est fort probable que s’il y a plus d’une webcam, il faille adapter un peu la méthode.

    Réglage de la webcam

    Avec la lumière allumée, plus besoin de laisser la webcam se régler automatiquement. Je peux définir les valeurs d’exposition et de balance des blancs comme je le souhaite.
    Je n’aurai plus l’impression d’être malade une fois sur deux.

    v4l2-ctl --set-ctrl exposure_auto=1
    v4l2-ctl --set-ctrl exposure_auto_priority=0
    v4l2-ctl --set-ctrl exposure_absolute=120
    v4l2-ctl --set-ctrl white_balance_temperature_auto=0
    v4l2-ctl --set-ctrl white_balance_temperature=3500
    v4l2-ctl --set-ctrl brightness=200
    v4l2-ctl --set-ctrl contrast=110
    v4l2-ctl --set-ctrl gain=170
    v4l2-ctl --set-ctrl power_line_frequency=1
    v4l2-ctl --set-ctrl zoom_absolute=100
    

    Ces réglages sont les miens, ils s’adaptent en fonction de votre matériel ou de vos préférences.

    Assemblage final

    Plus qu’à regrouper tout ça dans un script.

    ~/bin/auto-cam.sh
    #!/bin/bash
    HUE_BRIDGE_IP="10.20.0.4"
    HUE_DEVICE_TYPE="linuxauto"
    HUE_USER_NAME="AH1gq0t6MlKDi4cVYQuxaD-35vgq-ves2W57Tz4G"
    
    IS_CAM_IN_USE=$(lsmod | grep uvcvideo|head -n 1|awk '{print $3}')
    STATE_FILE="/tmp/hue_state"
    HUE_STATE=$(cat ${STATE_FILE})
    
    if [ "${IS_CAM_IN_USE}" == "0" ]; then
    	echo CAM NOT IN USE;
    	if [ "${HUE_STATE}" != "0" ]; then 
    		echo "Turning off the light"
     		curl --insecure -X PUT -d '{"on": false}'  "https://${HUE_BRIDGE_IP}/api/${HUE_USER_NAME}/lights/4/state"
    		echo "0" > ${STATE_FILE}
    	fi
    
    else
    	echo CAM IN USE;
    	if [ "${HUE_STATE}" != "1" ]; then
    		echo "Turning on the light"
    		curl --insecure -X PUT -d '{"on": true}'  "https://${HUE_BRIDGE_IP}/api/${HUE_USER_NAME}/lights/4/state"
    		echo "1" > ${STATE_FILE}
    		v4l2-ctl --set-ctrl exposure_auto=1
    		v4l2-ctl --set-ctrl exposure_auto_priority=0
    		v4l2-ctl --set-ctrl exposure_absolute=120
    		v4l2-ctl --set-ctrl white_balance_temperature_auto=0
    		v4l2-ctl --set-ctrl white_balance_temperature=3500
    		v4l2-ctl --set-ctrl brightness=200
    		v4l2-ctl --set-ctrl contrast=110
    		v4l2-ctl --set-ctrl gain=170
    		v4l2-ctl --set-ctrl power_line_frequency=1
    		v4l2-ctl --set-ctrl zoom_absolute=100
    	fi
    fi
    echo "END" 
    

    J’ai ajouté un fichier d’état pour mémoriser si la lampe est allumée ou pas. Ce n’est pas obligatoire, mais ça m’évite de faire un appel à l’API toutes les secondes. En effet, au démarrage de mon ordinateur, je lance le script suivant, qui va simplement lancer le précédent toutes les secondes.

    ~/bin/cam-watcher.sh
    #!/bin/bash
    while true; do
    	~/bin/auto-cam.sh
    	sleep 1
    done
    

    Et voilà ! Quand j’utilise ma webcam, la lumière s’allume toute seule. Elle reprend le dernier réglage que j’ai mis. Je peux donc toujours modifier sa puissance avec la tablette (car parfois c’est trop violent pour mes petits yeux du matin).

    À propos de Philips Hue

    Je suis tombé dans le piège Philips Hue il y a quelques années, mais j’en suis satisfait - syndrome de Stockholm sans doute. Je n’ai pas testé d’autres marques, notamment Elgato pour mon éclairage de webcam. Je ne sais donc pas s’il est facile de les piloter sans installer de mouchard sur son téléphone. Concernant Philips Hue, tout se fait en local et les API sont relativement simples d’accès. Il est ainsi facile pour la communauté de construire autour d’elle. J’ai été agréablement surpris du peu de temps qu’il m’a fallu pour faire ce script. Écrire cet article a sûrement été plus long.

    Merci infiniment de m’avoir lu,
    Bisoux 😗

    Bien qu'il ne soit pas possible de commenter sur ce blog, vous pouvez me joindre sur les réseaux sociaux via l'une des publications suivantes de cet article :

    Mastodon logo Mastodon Twitter logo Twitter