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

Comment contrôler les lampes Philips Hue à partir d'un Arduino (et ajouter un capteur de mouvement) / DIY

La gamme de lampes Philips Hue n'est certainement pas bon marché (il existe des alternatives à Philips Hue qui en valent vraiment la peine. Les alternatives à Philips Hue qui valent en vaut la peine. Le système Philips Hue est à la pointe de la technologie en matière d'éclairage intelligent, mais certains Nous en avons sélectionné trois qui offrent toutes les mêmes fonctionnalités de base et la même capacité de piratage. En savoir plus, mais j’apprécie particulièrement l’API bien documentée What are APIs, et comment les API ouvertes modifient-elles Internet? Qu'est-ce qu'une API? Et comment les API ouvertes modifient-elles Internet? Vous êtes-vous déjà demandé comment les programmes de votre ordinateur et des sites Web que vous visitez se "parlent" les uns aux autres? Lisez-en 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 d'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 de domotique sur mesure qui ne peuvent tout simplement pas être vaincus par des composants standards. Si le piratage n'est pas votre affaire, essayez ces 8 fabuleuses applications Hue. 8 fabuleuses applications pour Philips Hue Lights. 8 fabuleuses applications pour Philips Hue Lights. Le système Philips Hue possède sa propre application, mais pourquoi se contenter de la valeur par défaut des options plus fraîches là-bas? Ces 8 applications vous offrent des options fabuleuses pour des effets vraiment géniaux. Lire plus à la place.

Le système de teinte

Passons à la technique un peu afin de connaître les systèmes sous-jacents avec lesquels vous travaillez. Hue Lights crée 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’existe aucun point d’étranglement par lequel passe tout le trafic. Au lieu de cela, les informations sont transmises d'un périphérique à l'autre jusqu'à ce qu'il atteigne sa destination. En savoir plus, utilisant un protocole sans fil à courte portée appelé ZigBee - spécifiquement, ils sont certifiés ZigBee Light Link, ce qui signifie que les autres produits ZLL devraient également fonctionner aux côtés de Hue (en théorie)..

Bien qu’elle soit techniquement courte, la fonction de réseau maillé de ZigBee signifie que chaque nouvelle ampoule étend le réseau en relayant les messages à d’autres ampoules. Cela signifie que si vous rencontrez des difficultés pour 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 câblé. Nous avons donc besoin du pont Philips Hue pour associer les deux. Le pont Hue exécute un micrologiciel Linux open source modifié, qui diffuse un serveur Web de base..

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

C’est en interagissant avec ce serveur Web local que vous pouvez connaître l’état actuel des voyants et les contrôler..

C'est un système simple et élégant, qui convient aux projets de bricolage. Félicitations à Philips pour avoir rendu cette chose si facile à pirater.

Commençant

Avant de pouvoir accéder à la documentation de l'API, vous devez vous enregistrer en tant que développeur. C'est gratuit, mais vous devez accepter les termes et conditions. Faire ceci maintenant.

Toute personne familiarisée avec les services Web standard ou Javascript devrait être capable de travailler avec Hue: toutes les données sont transmises et reçues sous forme de paquets JSON. Qu'est-ce que JSON? Présentation d'un profane Qu'est-ce que JSON? Présentation d'un profane Que vous envisagiez de devenir un développeur Web ou non, il est judicieux de savoir au moins ce qu'est le JSON, pourquoi c'est important et pourquoi il est utilisé partout sur le Web. Lire la suite .

Pour examiner cela en action, vous devez connaître l'adresse IP de votre pont Hue. Il y a quelques façons de le faire:

  • Examinez le tableau d'attribution d'adresses DHCP dans l'interface d'administration de votre routeur.
  • Exécuter un programme de mappage réseau tel que IP Scanner Home
  • Essayez l’outil de courtage Philips UPnP
  • Ping “philips-hue.home”

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 de 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 comme / api /, et envoyez une demande POST en cliquant sur le bouton bouton post:

"devicetype": "utilisateur test", "nom d'utilisateur": "newdeveloper"

La première fois que vous faites cela, vous verrez un “bouton de liaison non enfoncé” quelque part dans la réponse. Il s'agit d'une fonctionnalité de sécurité qui exige que chaque nouvelle application utilisée soit physiquement autorisée. Allez chercher votre pont, 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 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 demande GET pour découvrir tout ce que votre pont sait actuellement sur les lumières connectées, les alarmes, les scènes et un bref journal des applications utilisées. Voici un échantillon des informations d'état contenues dans une seule ampoule..

 "state": "on": true, "bri": 254, "teinte": 14910, "sat": 144, "effect": "none", "xy": [0.4596, 0.4105], "ct" : 369, "alert": "none", "colormode": "ct", "accessible": false, "type": "Lumière de couleur étendue", "nom": "Chambre 1", "modelid": " LCT001 ", 

Notez que le “sur”:vrai l'état ne vous indique pas 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 à l'aide de l'interrupteur d'alimentation.

Un dernier exemple avant d’intégrer cela dans l’Arduino: assurez-vous que l’un de vos voyants est visible et allumé et que vous savez de quel numéro il s’agit. Changer l'URL en / api / newdevelopers / lights / 1 / state (en changeant le numéro à votre lumière), et envoyez une demande PUT avec les données suivantes:

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

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

Qu'est-ce que vous avez fait est de pousser un nouvel état à l'ampoule. Vous pouvez aussi ajouter “temps de transition”, 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’existe pas de moyen simple d’envoyer une valeur RVB. Dans l'exemple ci-dessus, nous avons envoyé teinte, Samuration, et briGhtness. Essayez de changer la valeur de teinte et d'envoyer à nouveau la demande PUT.

Travailler à partir d'Arduino

Il existe une bibliothèque existante Hue / Arduino appelée ArduinoHue à laquelle Philips se connecte elle-même dans la documentation de l’API, mais le problème de cette bibliothèque est qu’elle communique via la connexion USB avec votre PC, qui doit également exécuter une application Python en permanence.. Eugh. Vous pouvez également laisser votre ordinateur fonctionner à ce moment-là et couper complètement l’Arduino..

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 n'importe où vous pouvez mettre un câble Ethernet. En fait, cela devrait également fonctionner avec un bouclier Wi-Fi, mais je n’en ai pas avec qui jouer..

Si vous souhaitez passer à l’avance, l’exemple de code complet est intégré ci-dessous ou disponible ici. Je l'ai adapté à partir d'un exemple posté par Gilson Oguime. Si vous n'avez jamais utilisé votre bouclier Ethernet auparavant, vous souhaiterez peut-être parcourir rapidement le didacticiel du client Web. Je suppose que vous en connaissez un certain degré et que le code utilisé pour établir un réseau ne sera pas abordé. IP, 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 bouclier Ethernet. Donnez à votre projet Arduino son propre mini-serveur Web, avec un bouclier Ethernet. Il 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… En savoir plus .

Création de changements d'état

Créer un nouvel état à pousser aux ampoules est un cas simple de créer un nouveau Chaîne variable, et en évitant toutes les guillemets doubles. J'ai ajouté un au hasard() fonctionne également pour créer une animation quelque peu dynamique. Essayez de rendre la teinte variable aléatoire aussi 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 la commande, vous avez une fonction d'assistance appelée setHue () qui prend en argument le numéro clair et la chaîne de commande, comme suit:

setHue (1, commande);

Tout ce qu’il fait, c’est qu’il se connecte au pont, crache la commande en tant que requête PUT, avec tous les autres bêtises 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 ("garder en vie"); client.print ("hôte:"); client.println (hueHubIP); client.print ("Content-Length:"); client.println (command.length ()); client.println ("Type de contenu: text / plain; charset = UTF-8"); client.println (); // ligne vide avant corps client.println (commande); // commande teinte 

Ajout d'un capteur de mouvement

Enfin, j'ai câblé un simple capteur de mouvement HC-SR501 à la broche 2 d'E / S numérique. Lorsqu'un mouvement est détecté, une série d'états est poussée sur le pont pour que 2 ampoules créent 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 activer et les désactiver.

Limites

Même s’il est vrai que le code n’est 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 à partir d'un Mac, en utilisant la même connexion Ethernet, et sa vitesse était dix à vingt fois plus rapide (voici le AppleScript au cas où vous voudriez le 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 avec un Arduino. Cela ne devrait pas poser de problème pour la plupart des projets, uniquement pour les animations de lumière à haute vitesse, mais il est bon de prendre conscience de la limitation.

Il est également difficile d'analyser complètement toute réponse JSON que vous recevez du pont. Il n’ya 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 à envoyer.

Pirater la teinte

Maintenant que vous savez comment contrôler Hue en toute indépendance, cela ouvre un monde de hacks domotiques de Hue. La vraie question est: que ferez-vous?

Explorer plus sur: Arduino, Philips Hue, Smart Lighting.