Une décoration de Noël contrôlée avec un Tweet

Une décoration de Noël contrôlée avec un Tweet

Les fêtes de fin d'année approchent et il est plus que temps de sortir les décorations de Noël. En fouillant dans le grenier, nous sommes tombés sur une vieille décoration en forme de bonhomme de neige. On s'est dit qu'il y avait forcément un moyen de rendre cette décoration basique en quelque chose de bien plus intéressant. Et si VOUS pouviez contrôler notre décoration de Noël avec un Tweet? Voyons comment réaliser cette idée...


Nous allons remplacer l'ampoule par deux Yocto-PowerColor fixés à un support imprimé (avec une Makerbot). En plus de consommer moins électricité, cela va nous permettre de changer la couleur de la décoration. Pour contrôler les deux Yocto-PowerColor, on va utiliser un YoctoHub-Ethernet. Comme il nous reste un port de libre sur le YoctoHub-Ethernet, on va aussi brancher un Yocto-Light qui nous permettra d'éteindre les LEDs s'il fait jour.

Le bonhomme de neige une fois remonté
Le bonhomme de neige une fois remonté



L’intérêt d'utiliser un YoctoHub est double: Premièrement, en utilisant la librairie PHP en mode callback, cela nous évite d'avoir une machine supplémentaire dédiée au contrôle des LEDs. Il suffit de placer notre script PHP sur notre serveur web et le Hub contactera notre script toutes les 10 secondes pour récupérer la couleur des deux LEDs.

les deux leds montées sur le support
les deux leds montées sur le support



Deuxièmement, la plupart des gens pensent qu'utiliser du Wifi pour connecter un appareil qui se situe dans le jardin est plus simple. Mais cela implique que l'on aie une source de courant électrique à portée or, à l’endroit où nous voulons placer ce bonhomme de neige, il n'y a pas de prise électrique. En utilisant un switch Ethernet PoE (Power over Ethernet), on n'a besoin de tirer qu'un seul câble Ethernet Catégorie 5 dans le jardin. Un câble Ethernet peut faire jusqu’à 100 mètres et est plus facile à poser qu'une rallonge électrique.

Comme nos modules sont suffisamment compacts, il est très facile de fixer tout ce matériel dans le bonhomme. Afin de faciliter le montage, nous avons détaché les deux LEDs et le capteur de lumière de leur board et utilisé du câble plat pour les connecter. Cela nous permet de regrouper tous les modules dans un petit bloc très compact. Il faut cependant faire attention à fixer les boards à la verticale pour que les éventuelles gouttes d'eau déposées par la rosée puissent couler et ne restent pas sur le board.

Il est important de fixer les modules Yoctopuce à la verticale pour éviter l'accumulation de gouttes d'eau
Il est important de fixer les modules Yoctopuce à la verticale pour éviter l'accumulation de gouttes d'eau



Le YoctoHub-Ethernet doit être configuré pour appeler notre script toutes les 10 secondes. Pour rappel il faut se connecter à l'interface Web du YoctoHub-Ethernet et rentrer l'url de votre script dans la fenêtre de configuration du callback. Attention Twitter limite le nombre de requête à 180 par quart d'heure. Par exemple, si vous appelez votre script toutes les secondes votre script ne marchera que 3 minutes avant de se faire bloquer pendant 12 minutes.

Il faut configurer le YoctoHub-Ethernet pour appeler notre script toutes les 10 secondes
Il faut configurer le YoctoHub-Ethernet pour appeler notre script toutes les 10 secondes



Il faut commencer ce script par un appel à yRegisterHub avec le mot clef 'callback' pour que l'api fonctionne en mode Yocto-API callback.

    ...
    $errmsg = "";
    if(yRegisterHub('callback', $errmsg) != YAPI_SUCCESS) {
        print("Unable to start the API in callback mode ($errmsg)");
        die();
    }

    $top_led = yFindColorLed('TopLed');
    $bottom_led = yFindColorLed('BottomLed');
    ...




Pour récupérer une liste des Tweets qui contiennent un hashtag particulier, c'est un peu plus compliqué. Depuis la version 1.1 de l'API, il faut être authentifié pour utiliser l'API REST. Nous utilisons la "mini" librairie twitter-api-php qui nous évite d'avoir à gérer l'authentification. Il faut aussi créer un compte développeur Twitter pour récupérer les clefs d'authentification. La procédure est bien documentée dans ce post.

En lisant la documentation, on trouve que la requête à effectuer pour récupérer les derniers tweets avec @yoctoswnoman est une requête HTTP GET à https://api.twitter.com/1.1/search/tweets.json en passant le paramètre q=@yoctosnowman. On peut du reste la tester avec https://twitter.com/search?src=typd&q=%40yoctosnowman.

Au final, le code PHP pour récupérer la liste des Tweets qui contiennent @yotosnowman est le suivant.


    ...
    /** Set access tokens here - see: https://dev.twitter.com/apps/ **/
    $settings = array(
        'oauth_access_token' => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        'oauth_access_token_secret' => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        'consumer_key' => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        'consumer_secret' => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    );
    $url = 'https://api.twitter.com/1.1/search/tweets.json';
    $getfield = '?q=@yoctosnowman';
    $requestMethod = 'GET';
    $twitter = new TwitterAPIExchange($settings);
    $json = $twitter->setGetfield($getfield)
            ->buildOauth($url, $requestMethod)
            ->performRequest();
    $result = json_decode($json);
    ...



Bien sûr, il faut remplacer les XXX par vos propres clefs. Une fois que l'on a la liste des Tweets, il ne reste plus à mettre à jour les deux LEDs en fonction du texte du dernier Tweet.


    ...
    foreach ($result->statuses as $tweet) {
        $tweet_msg = utf8_decode($tweet->text);
        ...
        //parse message to find color
        ...
        if ($colorFound) {
            // set color for two Yocto-PowerColor
            $top_led->set_rgbColor($colors[0]);
            $bottom_led->set_rgbColor($colors[1]);
            break;
        }
    }
    ...



Comme d'habitude, vous pouvez retrouver le projet complet sur GitHub.

Pour notre Yocto bonhomme de neige, nous détectons les couleurs standard HTML écrites en anglais. S'il n'y a qu'une seule couleur, la couleur sera utilisée pour la tête et le corps du bonhomme, si vous mettez deux couleurs la première sera utilisée pour la tête et la deuxième pour le corps.

Quelques exemples de Tweet et leur résultat:



Voilà, libre à vous de mettre un peu de couleur dans le jardin pendant les fêtes...

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.