Comment contrôler les lumières Philips Hue à partir d'un Arduino (et ajouter un capteur de mouvement)

Aujourd'hui, je vais vous montrer comment contrôler vos lumières Hue à partir d'un Arduino - puis ajouter un simple capteur de mouvement.

Aujourd'hui, je vais vous montrer comment contrôler vos lumières Hue à partir d'un Arduino - puis ajouter un simple capteur de mouvement.
Publicité

La gamme de lampes Philips Hue n'est certainement pas bon marché (il existe d'autres solutions de rechange Philips Hue qui en valent la peine. Alternatives Philips Hue qui en valent vraiment la peine Le système Philips Hue est le chef de file en matière d'éclairage intelligent, mais il existe Nous en avons choisi trois qui offrent tous le même ensemble de fonctionnalités de base et la possibilité de piratage.En savoir plus), mais une chose que j'apprécie vraiment, c'est l'API bien documentée Qu'est-ce que les API et comment les API sont-elles changeantes?, Et comment les API ouvertes changent-elles d'Internet Vous êtes-vous déjà demandé comment les programmes de votre ordinateur et les sites Web que vous visitez «se parlent»? En savoir plus 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 la porte à une variété de projets domotiques sur mesure qui ne peuvent tout simplement pas être vaincus par des composants disponibles sur le marché. Si le piratage n'est pas votre truc, essayez ces 8 applications Hue fabuleuses 8 applications fabuleuses pour Philips Hue Lights 8 applications fabuleuses pour Philips Hue Lights Le système Philips Hue a sa propre application, mais pourquoi se contenter de la configuration par défaut quand il y en a tellement options plus froides là-bas? Ces 8 applications vous offrent des options fabuleuses pour certains effets vraiment cool. Lire la suite à la place.

Le système Hue

Passons un peu à la technique pour que vous connaissiez les systèmes sous-jacents avec lesquels vous travaillez. Les lumières Hue créent un réseau maillé Réseaux maillés: l'avenir des réseaux maillés de communication: l'avenir de la communication Les réseaux maillés sont presque invulnérables. Dans un réseau maillé, il n'y a aucun point d'étranglement à travers lequel tout le trafic passe. Au lieu de cela, les informations sont transmises d'un périphérique à l'autre jusqu'à ce qu'il atteigne sa destination. Lire la suite, en utilisant un protocole sans fil à courte portée appelé ZigBee - spécifiquement, ils sont certifiés ZigBee Light Link, 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 réseau maillé de ZigBee signifie que chaque nouvelle ampoule étend le réseau, relayant les messages à d'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 protocole génial, 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 microprogramme linux open source modifié, qui diffuse un serveur Web de base.

C'est ce que vous verrez si vous tapez simplement l'adresse IP de votre pont Hue dans votre navigateur. Vous ne pouvez pas faire grand chose d'ici cependant.
C'est ce que vous verrez si vous tapez simplement l'adresse IP de votre pont Hue dans votre navigateur. Vous ne pouvez pas faire grand chose d'ici cependant.

C'est en interagissant avec ce serveur Web local que vous pourrez 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. Bravo à Philips pour avoir rendu cette chose si piratable.

Commençant

Avant de pouvoir 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 ceci maintenant.

Quiconque connaît les services Web standard ou Javascript devrait pouvoir travailler avec la Hue: toutes les données sont transmises et reçues en tant que paquets JSON Qu'est-ce que JSON? Présentation d'un profane Qu'est-ce que JSON? Si vous envisagez d'être un développeur Web ou non, c'est une bonne idée de savoir au moins ce qu'est JSON, pourquoi c'est important et pourquoi il est utilisé 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 la table d'attribution d'adresse DHCP dans l'interface d'administration de votre routeur
  • Exécuter un programme de cartographie réseau comme IP Scanner Home
  • Essayez l'outil de courtier Philips UPnP
  • Ping "philips-hue.home"

mappage réseau pour trouver le pont

Lorsque vous avez terminé, allez-y et tapez-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 

C'est 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 du développeur sur le pont Hue lui-même - qui est désactivé par défaut pour des raisons de sécurité. Collez le texte suivant dans le champ BODY, laissez l'URL sous / api /, et envoyez une demande POST en cliquant sur le bouton de publication :

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

La première fois que vous faites cela, vous verrez un "bouton de lien non enfoncé" quelque part dans la réponse. C'est une fonctionnalité de sécurité qui nécessite que toute nouvelle application que vous utilisez soit physiquement autorisée. Allez chercher votre pont, appuyez sur le bouton et renvoyez 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 autre nom d'utilisateur, lisez les documents de l'API sur la création d'utilisateurs. Pour l'instant, cela suffira.

Une fois votre utilisateur configuré, l'URL de base avec laquelle vous devriez interagir devient / api / newdeveloper / . Vous pouvez envoyer une requête GET pour découvrir tout ce que votre Bridge connaît actuellement des lumières, des alarmes, des scènes connectées et un petit 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", "reachable": false }, "type": "Extended color light", "name": "Bedroom 1", "modelid": "LCT001",  

Notez que l'état "on": true ne vous indique pas si l'ampoule est allumée ou non; seulement que selon les paramètres du pont, il devrait être allumé. "Joignable": faux peut indiquer à la fois une ampoule trop éloignée, ou simplement éteinte à l'interrupteur d'alimentation.

Un dernier exemple avant de l'intégrer dans l'Arduino: assurez-vous que l'une de vos lumières est visible et allumée, et que vous savez quel est le numéro. Changez l'URL en / api / newdevelopers / lights / 1 / state (en changeant le nombre à votre lumière), et envoyez une requête PUT avec les données suivantes:

 {"hue": 50100, "sat":255, "bri":255} 

Vous devriez voir votre lumière réagir comme ceci:

démo de teinte

Ce que vous avez fait est de pousser un nouvel état à 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 de différentes manières, mais malheureusement, il n'y a pas de moyen simple d'envoyer une valeur RVB. Dans l'exemple ci-dessus, nous avons envoyé la tonalité, la saturation et la brièveté. Essayez de modifier la valeur de teinte et d'envoyer à nouveau la demande PUT.

Travailler depuis Arduino

Il existe une bibliothèque Hue / Arduino appelée ArduinoHue avec laquelle Philips se connecte dans la documentation 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 en permanence. Eugh . Vous pouvez aussi laisser votre ordinateur exécuter tout le processus à ce stade, et découper l'Arduino entièrement.

Au lieu de cela, je vais vous montrer comment contrôler la teinte de l'Arduino en utilisant un bouclier Ethernet . Votre Arduino n'a pas besoin d'être connecté à un ordinateur, il peut donc fonctionner indépendamment partout où vous pouvez placer un câble Ethernet. En fait, il devrait également fonctionner avec un bouclier Wi-Fi, mais je n'en ai pas un pour jouer avec.

ehternet-sheild-box

Si vous souhaitez passer à l'étape suivante, l'exemple de code complet est inclus ci-dessous ou disponible ici. Je l'ai adapté à partir d'un exemple publié par Gilson Oguime. Si vous n'avez jamais joué avec votre bouclier Ethernet auparavant, vous pourriez avoir besoin de parcourir rapidement le tutoriel du client Web - je vais supposer un certain niveau de familiarité avec ceci, et ne couvrirai pas le code utilisé pour établir un réseau. IP etc. Nous vous avons également montré comment créer un mini-serveur Web avec le blindage Ethernet. Donnez à votre projet Arduino son propre mini-serveur Web, avec un blindage Ethernet. Donnez à votre projet Arduino son propre mini-serveur Web, avec un blindage Ethernet. il y a longtemps, je vous ai montré comment configurer un système de contrôle Internet pour votre Arduino - mais il a dû rester connecté à un ordinateur via USB afin de maintenir la connexion Internet .... Lire la suite.

Création de modifications d'état

La création d'un nouvel état pour pousser vers les ampoules est un cas simple de création d'une nouvelle variable String et d'échappement de toutes les guillemets doubles. J'ai ajouté une fonction random () pour créer une animation assez dynamique. Essayez de rendre aléatoire la variable hue aussi pour différentes couleurs.

 String command = "{\"on":true, \"hue\":50100, \"sat\":255, \"bri\":255, \"transitiontime\":"+String(random(15, 25))+"}"; 

Envoyer la commande

Pour réellement envoyer la commande, vous avez une fonction d'assistance appelée setHue () qui prend le numéro de la lumière et la chaîne de commande en argument, comme ceci:

 setHue(1, command); 

Tout ce qu'il fait est alors qu'il se connecte au pont, crache la commande comme une demande PUT, avec tous les autres non-sens que la création d'une requête HTTP implique.

 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("Host: "); client.println(hueHubIP); client.print("Content-Length: "); client.println(command.length()); client.println("Content-Type: text/plain;charset=UTF-8"); client.println(); // blank line before body client.println(command); // Hue command 

Ajouter un capteur de mouvement

Enfin, j'ai branché un simple capteur de mouvement HC-SR501 à la broche I / O 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 est désactivé, une seule commande d'arrêt est envoyée aux deux. Idéalement, ils seraient ramenés à 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 qu'il s'agisse d'un code non optimisé, il faut près d'une seconde à l'interface réseau de l'Arduino pour envoyer une seule requête de commande. J'ai testé la même commande à partir d'un Mac, en utilisant la même connexion Ethernet, et il était capable de dix à vingt fois cette vitesse (voici l'AppleScript au cas où vous voudriez tester). Par conséquent, tout type d'animation rapide (j'essayais de créer un effet de bougie scintillant) 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 de lumière haute 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 recevez 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 vous limiter à l'envoi.

Hack the Hue

Maintenant que vous êtes armé avec la connaissance de la façon de contrôler Hue complètement indépendamment, cela ouvre un monde de hacks de domotique de Hue. La vraie question est: que ferez-vous?

In this article