Comment contrôler les lumières Philips Hue à partir d’Arduino (et ajouter des capteurs de mouvement)
La gamme de lampes Philips Hue n’est certainement pas bon marché (il existe des alternatives), mais une chose que j’apprécie vraiment est l’API bien documentée pour créer vos propres applications Hue. Aujourd’hui, je vais vous montrer comment contrôler les lumières Hue à partir d’un Arduino – puis ajouter un simple capteur de mouvement.
Pourquoi faisons-nous cela? Parce que les systèmes domotiques peuvent être très rigides et coûteux. En apprenant à contrôler Hue à partir d’un Arduino, vous ouvrez la porte à une variété de projets de domotique personnalisés qui ne peuvent tout simplement pas être battus avec des composants prêts à l’emploi. Si vous n’aimez pas assembler les choses, essayez ces 8 excellentes applications Hue.
Système de teinte
Jetons un coup d’œil à la technologie afin que vous puissiez comprendre le système sous-jacent utilisé. Les lumières Hue créent un réseau maillé en utilisant un protocole sans fil à courte portée appelé ZigBee – en particulier, elles sont certifiées ZigBee Light Link, ce qui signifie que d’autres produits ZLL devraient également fonctionner avec Hue (en théorie).
Bien que les distances soient techniquement courtes, les capacités de réseau maillé de ZigBee signifient que chaque nouvelle ampoule peut étendre le réseau, relayant les messages à d’autres ampoules. Cela signifie que si vous ne pouvez pas contrôler la lumière de l’autre côté de la maison, essayez de placer une autre lumière entre les deux.
Zigbee est un excellent protocole, mais il n’a rien à voir avec le Wi-Fi ou le réseau informatique filaire, nous avons donc besoin d’un pont Philips Hue pour connecter les deux ensemble. Le pont Hue exécute un micrologiciel Linux open source modifié qui diffuse un serveur Web de base.
Faire une vidéo du jour
Vous le verrez si vous tapez simplement l’adresse IP du pont Hue dans votre navigateur. Vous ne pouvez pas faire grand-chose d’ici, cependant.
En interagissant avec ce serveur Web local, vous pouvez comprendre l’état actuel des lumières et les contrôler.
Il s’agit d’un système très simple adapté aux projets de bricolage. Merci à Philips d’avoir rendu cette chose si piratable.
Démarrer
Avant d’accéder à la documentation de l’API, vous devez vous inscrire en tant que développeur. C’est gratuit, mais vous devez accepter les termes et conditions. Faites-le maintenant.
Toute personne familiarisée avec les services Web standard ou Javascript devrait pouvoir utiliser Hue : toutes les données sont transmises et reçues sous forme de paquets JSON.
Pour voir cela en action, vous devez connaître l’adresse IP du pont Hue. Il y a plusieurs moyens de le faire:
- Afficher le tableau d’attribution des adresses DHCP dans l’interface de gestion du routeur
- Exécutez un mappeur de réseau tel que IP Scanner Home
- Essayez l’outil proxy Philips UPnP
- Ping « philips-hue.home »
Une fois cela fait, allez-y et tapez dans la barre d’adresse du navigateur debug/clip.html Ajouter à l’URL. Dans mon cas c’est :
http://192.168.1.216/debug/clip.html
Il s’agit d’un outil de débogage qui vous permet d’envoyer et de recevoir des paquets JSON via une interface Web simple. La première étape consiste à activer le profil de développeur sur Hue Bridge lui-même – qui est désactivé par défaut pour des raisons de sécurité.Collez ce qui suit dans le champ BODY, en laissant l’URL comme /api/et envoyez une requête POST en un clic bouton publier:
{« type d’appareil »: « utilisateur test », « nom d’utilisateur »: « nouveau développeur »}
La première fois que vous faites cela, vous verrez « Bouton de lien non enfoncé » quelque part dans la réponse. Il s’agit d’une fonctionnalité de sécurité qui nécessite que vous soyez physiquement autorisé pour chaque nouvelle application que vous utilisez.Allez trouver votre pont, appuyez sur le bouton et renvoyez la même demande dans les 30 secondesCette fois, vous obtiendrez une réponse différente et l’utilisateur sera autorisé. Si vous souhaitez utiliser un nom d’utilisateur différent, lisez la documentation de l’API sur la création d’utilisateurs. Pour l’instant, cela suffit.
Après avoir configuré l’utilisateur, l’URL de base avec laquelle vous devez interagir devient /api/nouveau-développeur/ Vous pouvez envoyer une requête GET pour découvrir tout ce que votre Bridge sait actuellement sur les lumières connectées, les alarmes, les scènes et un bref journal des applications que vous avez utilisées. Vous trouverez ci-dessous un exemple de certaines des informations d’état que contient une seule ampoule.
« état »: {
« Activé »: Oui,
« Bries »: 254,
« teinte »: 14910,
« Samedi »: 144,
« effet »: « Aucun »,
« xy »: [
0.4596,
0.4105
],
« ct »: 369,
‘alerte’ : ‘aucune’,
« mode-couleur »: « ct »,
« accessible »: faux
},
« type »: « Teinte étendue »,
« name »: « Chambre 1 »,
« id_modèle »: « LCT001 »,
mise en garde, « sur »: vrai l’état ne montre pas réellement si l’ampoule est allumée ; c’est juste que selon les paramètres du pont, il devrait Continuez. « accessible »: faux Indiquez que l’ampoule est trop éloignée ou éteignez-la simplement à l’aide de l’interrupteur d’alimentation.
Un dernier exemple avant de l’intégrer à l’Arduino : assurez-vous qu’une de vos lumières est visible et allumée, et que vous savez de quel numéro il s’agit.changer l’url en /api/newdevelopers/lights/1/état (modifiez le numéro de votre lumière) et envoyez une requête PUT avec les données suivantes :
{« hue »: 50100, « samedi »: 255, « bree »: 255}
Vous devriez voir votre lumière réagir comme ceci :
Ce que vous faites, c’est pousser le nouvel état vers l’ampoule. Vous pouvez également ajouter « transitiontime », une méthode d’animation primitive qui indique combien de secondes vous voulez que le changement d’état prenne.
Les couleurs peuvent être définies de différentes manières, mais malheureusement, il n’existe pas de moyen simple d’envoyer des valeurs RVB.Dans l’exemple ci-dessus, nous envoyons Ton, asseoirdurée, et Briejustesse. Essayez de modifier la valeur de teinte et renvoyez la requête PUT.
travailler à partir d’Arduino
Il existe une bibliothèque Hue/Arduino existante appelée ArduinoHue, à laquelle Philips se lie dans la documentation de l’API, mais le problème avec cette bibliothèque est qu’elle communique avec votre PC via une connexion USB, ce qui nécessite également que l’application Python soit constamment en cours d’exécution. OupsVous pouvez également demander à votre ordinateur de faire fonctionner le tout à ce stade et de couper complètement l’Arduino.
Au lieu de cela, je vais vous montrer comment contrôler Hue depuis un Arduino Utiliser un shield EthernetVotre Arduino n’a pas besoin d’être connecté à un ordinateur, il peut donc fonctionner indépendamment partout où un câble Ethernet peut être placé. En fait, cela devrait également fonctionner avec un bouclier Wi-Fi, mais je n’en ai pas pour jouer avec.
Si vous souhaitez passer à autre chose, l’exemple de code complet est intégré ci-dessous ou disponible ici. Je l’ai adapté de l’exemple posté par Gilson Oguime. Si vous n’avez jamais utilisé de bouclier Ethernet auparavant, vous voudrez peut-être jeter un coup d’œil au didacticiel du client Web – je suppose que vous avez un certain niveau de familiarité avec cela et que vous n’entrerez pas dans le code IP, etc. utilisé pour mettre en place un réseau. Nous vous avons également montré comment créer un mini serveur Web à l’aide d’un bouclier Ethernet.
Créer des changements d’état
La création d’un nouvel état à pousser vers l’ampoule est un cas simple de création d’un nouvel état chaîne de caractères variable et échapper à tous les guillemets doubles.j’ai ajouté un Aléatoire() Là, il est également possible de créer une animation quelque peu dynamique. Essayez de rendre la variable de teinte pour différentes couleurs également aléatoire.
Commande de chaîne = « {« on »:true, »hue »:50100, »sat »:255, »bri »:255, »transitiontime »: »+String(random(15 , 25))+ »} » ;
envoyer la commande
Pour envoyer réellement la commande, vous disposez d’une fonction d’assistance appelée setHue() qui prend le numéro de lumière et la chaîne de commande comme arguments, comme ceci :
setHue(1, commande);
Ensuite, tout ce qu’il fait est de se connecter au pont, de recracher la commande en tant que requête PUT et de toutes les autres bêtises impliquées dans la création de la requête HTTP.
client.print(« PUT /api/ »);
client.print(hueUsername);
client.print(« /lights/ »);
client.print(lightNum);
client.println(« /state HTTP/1.1 »);
client.println(« keep-alive »);
client.print(« Hôte : « );
client.println(hueHubIP);
client.print(« Longueur du contenu : « );
client.println(commande.longueur());
client.println(« Type de contenu : text/plain;charset=UTF-8 »);
client.println(); // ligne vide avant le texte
client.println(commande); // Commande Teinte
Ajouter un détecteur de mouvement
Enfin, j’ai connecté un simple capteur de mouvement HC-SR501 à la broche d’E/S numérique 2. Lorsqu’un mouvement est détecté, une série d’états sont poussés vers le pont pour que les 2 ampoules créent une animation dynamique lente. Lorsque le détecteur de mouvement est désactivé, une commande d’arrêt distincte est envoyée aux deux. Idéalement, ils reviendraient à l’état dans lequel ils se trouvaient avant la détection de mouvement, mais la logique n’est pas si intelligente – nous les allumons et les éteignons simplement.
limite
Bien que le code ne soit pas optimisé, il faut presque une seconde à l’interface réseau de l’Arduino pour envoyer une seule demande de commande. J’ai testé la même commande sur un Mac utilisant la même connexion Ethernet, et c’était 10 à 20 fois plus rapide (AppleScript ici, au cas où vous voudriez tester). Ainsi, tout type d’animation rapide (j’essaie de créer un effet de bougie scintillante) n’est pas possible avec Arduino. Pour la plupart des projets, cela ne devrait pas poser de problème, uniquement pour les animations lumineuses à grande vitesse, mais il est bon de connaître les limites.
Il est également difficile d’analyser complètement toute réponse JSON renvoyée par le pont ; il n’y a pas assez de RAM sur l’Arduino pour stocker toutes les données brutes. Pour cette raison, vous voudrez peut-être vous limiter principalement à l’envoi.
Teinte de fissure
Maintenant que vous savez comment contrôler Hue de manière totalement indépendante, cela ouvre un monde de pirates de la domotique Hue. La vraie question est : que ferez-vous?
A propos de l’auteur