Publicité
La gamme de lampes Philips Hue n'est certainement pas bon marché (il existe des alternatives Alternatives Philips Hue qui en valent vraiment la peineLe système Philips Hue est en tête en matière d'éclairage intelligent, mais il existe des alternatives dignes. Nous en avons sélectionné trois qui offrent tous le même ensemble de fonctionnalités de base et la même capacité de piratage. Lire la suite ), mais une chose que j'apprécie vraiment est le bien documenté API Que sont les API et comment les API ouvertes modifient-elles InternetVous êtes-vous déjà demandé comment les programmes de votre ordinateur et les sites Web que vous visitez se parlent? Lire la suite pour créer vos propres applications Hue. Aujourd'hui, je vais vous montrer comment contrôler vos lumières Hue à partir d'un Arduino - puis ajouter un simple capteur de mouvement.
Pourquoi fait-on ça? Parce que les systèmes domotiques peuvent être assez rigides et coûteux. En apprenant à contrôler la teinte d'Arduino, vous ouvrez les portes à une variété de projets domotiques sur mesure qui ne peuvent tout simplement pas être battus par des composants standard. Si pirater des choses ensemble n'est pas votre truc, essayez ces
8 fabuleuses applications Hue Les 7 meilleures applications Philips Hue pour Android et iPhoneVous recherchez les meilleures applications Philips Hue à utiliser avec vos lumières intelligentes? Voici plusieurs excellentes applications pour iPhone et Android. Lire la suite au lieu.Le système Hue
Soyons techniques un peu afin de connaître les systèmes sous-jacents avec lesquels vous travaillez. Les lumières de teinte créent un réseau maillé Réseaux maillés: l'avenir de la communicationLes réseaux maillés sont presque invulnérables. Dans un réseau maillé, il n'y a pas de points d'étranglement par lesquels passe tout le trafic. Au lieu de cela, les informations sont transmises d'un appareil à l'autre jusqu'à ce qu'elles atteignent leur destination. Lire la suite , en utilisant un protocole sans fil à courte portée appelé ZigBee - en particulier, ils sont ZigBee Light Link certifié, ce qui signifie que d'autres produits ZLL devraient également fonctionner aux côtés de la teinte (en théorie).
Bien que techniquement courte portée, la fonction de mise en réseau maillée de ZigBee signifie que chaque nouvelle ampoule étend le réseau, relayant les messages aux autres ampoules. Cela signifie que si vous avez du mal à contrôler une 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 est assez différent du Wi-Fi ou d'un réseau informatique filaire, nous avons donc besoin du pont Philips Hue pour les réunir. Le pont Hue exécute un micrologiciel Linux open source modifié, qui diffuse un serveur Web de base.

C’est en interagissant avec ce serveur Web local que vous pouvez connaître l’état actuel des lumières et les contrôler.
C'est un système magnifiquement simple et mûr pour les projets de bricolage. Félicitations à Philips pour avoir rendu cette chose si piratable.
Commençant
Avant de pouvoir accéder à la documentation de l'API, vous devez s'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 être en mesure de travailler avec la teinte: toutes les données sont transmises et reçues en tant que Paquets JSON Qu'est-ce que JSON? Présentation de A Layman'sQue vous envisagiez d'être développeur Web ou non, c'est une bonne idée de savoir au moins ce qu'est JSON, pourquoi il est important et pourquoi il est utilisé partout sur le Web. Lire la suite .
Pour voir cela en action, vous devez connaître l'adresse IP de votre pont Hue. Il y a quelques façons de le faire:
- Regardez le tableau d'attribution d'adresse DHCP dans l'interface d'administration de votre routeur
- Exécutez un programme de mappage réseau comme Accueil Scanner IP
- Essaie le Outil de courtage UPnP Philips
- Ping "philips-hue.home"

Lorsque vous avez terminé, allez-y et saisissez-le dans la barre d'adresse de votre navigateur avec debug / clip.html ajouté à l'URL. Dans mon cas, c'était:
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 les paquets JSON via une interface Web simple. La première étape consiste à activer le profil de développeur sur le pont Hue lui-même - qui est désactivé par défaut pour des raisons de sécurité. Collez ce qui suit dans le champ CORPS, laissez l'URL /api/et envoyez une demande POST en cliquant sur le bouton bouton de publication:
{"devicetype": "test user", "username": "newdeveloper"}
La première fois que vous effectuez cette opération, vous verrez un «bouton de lien non enfoncé» quelque part dans la réponse. Il s'agit d'une fonction de sécurité qui nécessite que chaque nouvelle application que vous utilisez soit physiquement autorisée. Allez chercher votre Bridge, appuyez sur le bouton et envoyez à nouveau la même demande dans les 30 secondes. Cette fois, vous obtiendrez une réponse différente et l'utilisateur sera autorisé. Si vous souhaitez utiliser un nom d'utilisateur différent, lisez les documents de l'API sur création d'utilisateurs. Pour l'instant, cela suffira.
Une fois votre utilisateur configuré, l'URL de base avec laquelle vous devez interagir devient /api/newdeveloper/. Vous pouvez envoyer une demande GET pour découvrir tout ce que votre Bridge connaît actuellement sur les lumières connectées, les alarmes, les scènes et un court journal des applications qui ont été utilisées. Voici un échantillon de certaines informations d'état contenues pour une seule ampoule.
"state": {"on": true, "bri": 254, "hue": 14910, "sat": 144, "effect": "none", "xy": [0.4596, 0.4105], "ct": 369, "alert": "none", "colormode": "ct", "accessible": false}, "type": "Extended color light", "name": "Bedroom 1", "modelid": "LCT001",
Notez que le «On»: vrai l'état ne vous montre pas réellement si l'ampoule est allumée ou non; seulement que selon les paramètres du pont, il devrait être sur. «Accessible»: faux peut indiquer à la fois une ampoule trop éloignée ou simplement éteinte au niveau de l'interrupteur d'alimentation.
Un dernier exemple avant d'intégrer cela dans l'Arduino: assurez-vous que l'une de vos lumières est visible et allumée, et que vous savez de quel numéro il s'agit. Remplacez l'URL par /api/newdevelopers/lights/1/state (en changeant le numéro à votre lumière), et envoyez une demande PUT avec les données suivantes:
{"teinte": 50100, "sat": 255, "bri": 255}
Vous devriez voir votre lumière réagir comme ceci:

Ce que vous avez fait, c'est de pousser un nouvel état vers l'ampoule. Vous pouvez également ajouter "transitiontime", qui est une méthode d'animation primitive indiquant combien de secondes vous souhaitez que le changement d'état prenne.
La couleur peut être définie dans un certain nombre de façons différentes, mais malheureusement, il n'y a pas de moyen simple d'envoyer une valeur RVB. Dans l'exemple ci-dessus, nous avons envoyé teinte, Samuration, et brightness. Essayez de modifier la valeur de teinte et d'envoyer à nouveau la demande PUT.
Travailler depuis Arduino
Il existe une bibliothèque Hue / Arduino existante appelée ArduinoHue auquel Philips se connecte dans la documentation de l'API, mais le problème avec cette bibliothèque est qu'elle communique via la connexion USB à votre PC, qui doit également exécuter une application Python constamment. Eugh. Vous pouvez aussi bien laisser votre ordinateur exécuter l'intégralité de la chose à ce stade, et couper complètement l'Arduino.
Au lieu de cela, je vais vous montrer comment contrôler la teinte de l'Arduino à l'aide d'un blindage Ethernet. Votre Arduino n'a pas besoin d'être connecté à un ordinateur, il peut donc fonctionner indépendamment n'importe où vous pouvez mettre un câble Ethernet. En fait, il devrait également fonctionner avec un bouclier Wi-Fi, mais je n'en ai pas pour jouer avec.

Si vous souhaitez passer à l'étape suivante, l'exemple de code complet est intégré ci-dessous, ou disponible ici. Je l'ai adapté d'un exemple publié par Gilson Oguime. Si vous n'avez jamais joué avec votre bouclier Ethernet auparavant, vous voudrez peut-être parcourir rapidement le tutoriel client web - J'assumerai un certain niveau de familiarité avec cela, et je ne couvrirai pas le code utilisé pour établir une IP de réseau, etc. Nous vous avons également montré comment créer un mini serveur web avec le bouclier Ethernet Donnez à votre projet Arduino son propre mini-serveur Web, avec un blindage EthernetIl y a quelque temps, je vous ai montré comment configurer un système de contrôle Internet pour votre Arduino - mais il devait rester connecté à un ordinateur via USB afin de maintenir la connexion Internet ... Lire la suite .
Création de changements d'état
La création d'un nouvel état pour pousser vers les ampoules est un cas simple de création d'un nouveau Chaîne variable, et échappant à tous les guillemets doubles. J'ai ajouté un Aléatoire() fonctionner là aussi pour créer une animation quelque peu dynamique. Essayez également de rendre la variable de teinte aléatoire pour différentes couleurs.
String command = "{\" on ": true, \" hue \ ": 50100, \" sat \ ": 255, \" bri \ ": 255, \" transitiontime \ ":" + String (random (15, 25)) + "}";
Envoi de la commande
Pour envoyer réellement la commande, vous avez une fonction d'assistance appelée setHue () qui prend le nombre léger et la chaîne de commande comme argument, comme ceci:
setHue (1, commande);
Tout ce qu'il fait alors, c'est qu'il se connecte au pont, crache la commande en tant que demande PUT, avec toutes les autres absurdités qu'implique la création d'une demande HTTP.
client.print ("PUT / api /"); client.print (hueUsername); client.print ("/ lights /"); client.print (lightNum); client.println ("/ state HTTP / 1.1"); client.println ("garder en vie"); client.print ("Hôte:"); client.println (hueHubIP); client.print ("Content-Length:"); client.println (command.length ()); client.println ("Content-Type: text / plain; charset = UTF-8 "); client.println (); // ligne vide avant le corps. client.println (commande); // Commande Hue.
Ajout d'un capteur de mouvement
Enfin, j'ai câblé 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 2 ampoules afin de créer une animation lente et dynamique. Lorsque le détecteur de mouvement se désactive, une seule commande d'arrêt est envoyée aux deux. Idéalement, ils devraient revenir à l'état dans lequel ils se trouvaient avant que le mouvement ne soit détecté, mais la logique n'est pas si intelligente - nous allons simplement les allumer et les éteindre.
Limites
Bien que le code soit certes non 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 à partir d'un Mac, en utilisant la même connexion Ethernet, et elle était capable de dix à vingt fois cette vitesse (voici l'AppleScript au cas où vous souhaiteriez tester). Par conséquent, toute sorte d'animation rapide (j'essayais de créer un effet de bougie vacillante) n'est tout simplement pas possible à partir d'un Arduino. Cela ne devrait pas être un problème pour la plupart des projets, juste pour les animations d'éclairage à grande vitesse, mais il est bon d'être conscient de la limitation.
Il est également difficile d'analyser complètement toute réponse JSON que vous récupérez du pont; il n'y a tout simplement pas assez de RAM sur l'Arduino pour stocker toutes les données brutes. Pour cette raison, vous voudrez peut-être surtout vous limiter à l'envoi.
Hack the Hue
Maintenant que vous êtes armé des connaissances nécessaires pour contrôler Hue de manière totalement indépendante, il ouvre un monde de hacks domotiques Hue. La vraie question est: que ferez-vous?
James est titulaire d'un BSc en intelligence artificielle et est certifié CompTIA A + et Network +. Il est le développeur principal de MakeUseOf et passe son temps libre à jouer au paintball VR et aux jeux de société. Il construit des PC depuis qu'il est enfant.