Quantcast
Channel: Code 4 Pi
Viewing all articles
Browse latest Browse all 25

Philipps Hue, XBMC/Kodi et Raspberry

$
0
0

Ampoule Philips Hue avec son bridge

 

J’ai reçu récemment en cadeau un kit de démarrage Philips Hue contenant 3 ampoules LED ainsi qu’un “pont de connexion”. Ces ampoules sont plus que des simples sources de lumières blanches LED. Elles sont capables de changer de couleur et d’intensité lumineuse selon les ordres qu’on leur envoie. Ces commandes sont transmises aux ampoules par l’intermédiaire du “pont de connexion” via le protocole ZigBee. Il est possible de les utiliser pour une multitude de chose, que ce soit des notifications domotique, simuler un lever de soleil pour un réveil en douceur ou encore adapter la lumière de la pièce au film que vous êtes en train de regarder devant votre écran de télévision. C’est ce dernier aspect que nous allons mettre en place avec XBMC sur Raspberry.

Mais tout d’abord qu’est-ce donc ce nom dans le titre accolé à XBMC : Kodi ? C’est tout simplement le nouveau nom de XBMC depuis le 22 décembre et la sortie de la version 14 finale. Kodi et XBMC, c’est la même chose, c’est un simple changement de nom. Pas de problème de compatibilité et de suivi de la communauté à prévoir.

Introduction

Pour réaliser ce tutoriel il vous faut :

  • Un kit d’ampoule Philips Hue (environ 200€ actuellement sur Amazon le kit de 3 ampoules + bridge)
  • Une distribution XBian fonctionnelle et à jour (
    sudo apt-get update && sudo apt-get upgrade
     )

Pour ma part, j’ai réalisé les manipulations suivantes sur ma distribution XBian (version : 20141231-2) mise à jour au 20 janvier 2015.

Il est également recommandé de faire une sauvegarde complète de votre carte SD, ce qui vous permettra de remettre tout en ordre en cas de mauvaise manipulation ou de bugs.

Installation de hyperion

Tout d’abord nous avons besoin d’un logiciel capable d’analyser en temps réel chaque image de notre flux vidéo afin d’envoyer les commandes de couleurs correspondantes à nos ampoules. C’est hyperion qui remplit ce rôle. Pourquoi hyperion et pas un autre clone “ambilight” tel que boblight ? Hyperion a été entièrement conçu pour un fonctionnement sur Raspberry Pi, ce qui lui assure des performances bien meilleures que ses concurrents. Les principales fonctionnalités de hyperion sont :

  • Faible charge CPU (Nos RPi apprécieront)
  • Détection de bords noirs
  • Reconnaissance de l’état de XBMC/Kodi qui permet de lancer ou non l’analyse des images
  • Un moteur d’effet via script
  • Interface Json (pour les développeurs bidouilleurs)

Pré-requis

Quelques paquets sont nécessaire pour le bon fonctionnement d’hyperion avant son installation :

sudo apt-get update
sudo apt-get install libqtcore4 libqtgui4 libqt4-network libusb-1.0-0 libprotobuf7 ca-certificates

Installation de hyperion

L’installation d’hyperion est entièrement scripté, ce qui lui permet de s’adapter automatiquement aux différents environnements disponible sur Raspberry Pi.

wget -N https://raw.github.com/tvdzwan/hyperion/master/bin/install_hyperion.sh
sudo sh ./install_hyperion.sh

Configuration de hyperion

Sauvegarde du fichier de configuration initial :

sudo cp /etc/hyperion.config.json /etc/hyperion.config.json_old

Edition du fichier de configuration :

sudo nano /etc/hyperion.config.json

Le fichier de configuration suivant permet de piloter une ampoule unique qui est celle référencé en premier sur votre pont Hue. Hyperion va donc analyser l’ensemble de l’écran pour générer une moyenne de couleur et commander l’ampoule. Il est également possible de configurer hyperion de manière à contrôler deux ampoules situées de chaque côté de la TV. Cependant le pont Hue est un point limitant, ce dernier ne pouvant traiter que de 10 à 30 requêtes par secondes, en ajoutant une seconde ampoule il est indispensable de réduire de moitié la fréquence du framegrabber.

// Exemple de configuration pour un pont Philipps Hue (IP : 192.168.0.5) et une ampoule Hue
// Made for Code4Pi - www.code4pi.fr

{
    /// Configuration du périphérique
    /// * 'name'       : Indication d'un nom pour le périphérique
    /// * 'type'       : Type de périphérique ou de LED ("philipshue")
    /// * 'output'     : La configuration output dépend du périphérique sélectionné ("adresse_ip_pont_hue") 

    /// * 'colorOrder' : L'ordre des couleur du périphérique ("rgb")
    /// * 'switchOffOnBlack' : Eteindre l'ampoule quand écran noir. Augmente le temps de réponse dû à l'animation de fondu du périphérique ("true" or "false")
    "device" :
    {
        "name"       : "MyPi",
        "type"       : "philipshue",
        "output"     : "192.168.0.5",
        "colorOrder" : "rgb",
        "switchOffOnBlack" : "false"
    },

    /// "transform"  : Configuration des couleurs en fonction du périphérique. Ne nécessite pas de configuration particulière
    ///
    /// "smoothing"  : L'effet Smoothing envoi trop de requête au pont Hue. A désactiver ("type" : "none")
    "color" :
    {
        "transform" :
        [
            {
                "id"   : "default",
                "leds" : "*",
                "hsv" :
                {
                    "saturationGain" : 1.0000,
                    "valueGain"      : 1.0000
                },
                "red" :
                {
                    "threshold"  : 0.0000,
                    "gamma"      : 1.0000,
                    "blacklevel" : 0.0000,
                    "whitelevel" : 1.0000
                },
                "green" :
                {
                    "threshold"  : 0.0000,
                    "gamma"      : 1.0000,
                    "blacklevel" : 0.0000,
                    "whitelevel" : 1.0000
                },
                "blue" :
                {
                    "threshold"  : 0.0000,
                    "gamma"      : 1.0000,
                    "blacklevel" : 0.0000,
                    "whitelevel" : 1.0000
                }
            }
        ],
        "smoothing" :
        {
            "type"            : "none",
            "time_ms"         : 200,
            "updateFrequency" : 20.0000
        }
    },

    ///  Configuration individuelle de chaque ampoule
    ///  
    ///  Chaque ampoule contient les différents champs :
    ///  * index: Index de l'ampoule. Le zero détermine la première ampoule
    ///  * hscan: Fraction de l'image horizontale utilisée pour la moyenne de couleur
    ///           (minimum et maximum inclusive)
    ///  * vscan: Fraction de l'image verticale utilisée pour la moyenne de couleur
    ///           (minimum et maximum inclusive)
    "leds" : 
    [
        {
            "index" : 0,
            "hscan" : { "minimum" : 0.0000, "maximum" : 1.0000 },
            "vscan" : { "minimum" : 0.0000, "maximum" : 1.0000 }
        }
    ],

    /// La configuration des bords noirs, contient les éléments suivants: 
    ///  * enable    : true si le détecteur doit être activé
    ///  * threshold : configuration du niveau (value between 0.0 and 1.0)
    "blackborderdetector" : 
    {
        "enable" : true,
        "threshold" : 0.01
    },

    /// Configuration du moteur d'effet, contient les éléments suivants: 
    ///  * paths        : chemin absolu vers le dossier contenant les effets 
    ///  * bootsequence : Effet joué lors de la séquence de boot
    "effects" : 
    {
        "paths" : 
        [
            "/opt/hyperion/effects"
        ]
    },

    "bootsequence" : 
    {
        "effect" : "Rainbow swirl fast",
        "duration_ms" : 3000
    },

    ///  Configuration du frame-grabber, contient les éléments suivants: 
    ///   * width        : Largeur des grabbed frames [pixels]
    ///   * height       : Hauteur des grabbed frames [pixels]
    ///   * frequency_Hz : Fréquence des frame grab [Hz]
    "framegrabber" : 
    {
        "width" : 64,
        "height" : 64,
        "frequency_Hz" : 10.0
    },

    /// Configuration de la connexion XBMC utilisée pour activer/désactiver le frame-grabber. Contient les éléments suivants: 
    ///  * xbmcAddress       : adresse IP du XBMC-host
    ///  * xbmcTcpPort       : Port TCP du XBMC-server
    ///  * grabVideo         : Frame-grabber actif durant lecture video
    ///  * grabPictures      : Frame-grabber actif durant lecture photo
    ///  * grabAudio         : Frame-grabber actif durant lecture audio
    ///  * grabMenu          : Frame-grabber actif durant le menu XBMC
    ///  * grabScreensaver   : Frame-grabber actif durant l'écran de veille
    ///  * enable3DDetection : Frame-grabber actif durant une video 3D
    "xbmcVideoChecker" : 
    {
        "xbmcAddress" : "127.0.0.1",
        "xbmcTcpPort" : 9090,
        "grabVideo" : true,
        "grabPictures" : true,
        "grabAudio" : false,
        "grabMenu" : false,
        "grabScreensaver" : false,
        "enable3DDetection" : true
    },

    /// Configuration du Json server qui active la interface de commande json
    ///  * port : Port du json server
    "jsonServer" : 
    {
        "port" : 19444
    },

    /// Configuration du Proto server qui active l'interface de commande protobuffer
    ///  * port : Port du protobuffer server
    "protoServer" : 
    {
        "port" : 19445
    },

    "endOfJson" : "endOfJson"
}

Redémarrage de hyperion pour prise en compte de la configuration :

sudo service hyperion restart

Configuration du pont Hue

Pour que hyperion puisse contrôler le pont Hue, il est nécessaire d’ajouter un nouvel utilisateur nommé “newdeveloper”.

Avec un navigateur web, il faut se rendre à l’adresse suivante :

http://ip_du_pont/debug/clip.html

Access to the bridge

On copie le texte suivant dans le champ “Message Body” :

{"devicetype":"test user","username":"newdeveloper"}

Avant d’envoyer la requête vers le pont Hue, il faut tout d’abord presser le bouton physique du pont afin d’autoriser l’ajout du nouvel utilisateur. L’envoi de l’a requête se fait via le bouton “POST”

La réponse devrait être :

"success" :  "username": "newdevelopper"

Success response

Pour vérifier que tout fonctionne correctement, on peut lancer une vidéo sur XBMC. L’ampoule doit alors changer de couleur en fonction des images affichés.

Vous êtes enfin prêt à regarder un film sur votre TV dans une immersion de lumière la plus totale !

Vous pouvez également configurer votre télécommande CEC pour activer/désactiver hyperion et ses effets via un seul bouton.

 

Ressources :

Installation · tvdzwan/hyperion Wiki · GitHub

Philips Hue Support · ntim/hyperion Wiki · GitHub

Getting started | Philips Hue API

How to: turn Hyperion on/off using your TV remote

The post Philipps Hue, XBMC/Kodi et Raspberry appeared first on Code 4 Pi.


Viewing all articles
Browse latest Browse all 25

Latest Images





Latest Images