Comment faire une lumière Wi-Fi Siri-contrôlée bricolage

Dans ce guide, vous allez apprendre à créer une lumière contrôlable par Wi-Fi et à la contrôler avec Siri.

Dans ce guide, vous allez apprendre à créer une lumière contrôlable par Wi-Fi et à la contrôler avec Siri.
Publicité

HomeKit est enfin sorti dans la nature, permettant à Siri de contrôler sa voix pour une poignée d'appareils domestiques intelligents.

Malheureusement, je veux dire une poignée littérale - tout ce que vous avez déjà acheté n'est probablement pas compatible. Cependant, le protocole a déjà été réorienté et un émulateur open source pour l'API HomeKit est disponible: ou en anglais, vous pouvez maintenant créer de «faux» appareils HomeKit, et Siri les contrôlera comme n'importe quel autre accessoire officiel de HomeKit.

Aujourd'hui, nous allons créer une lumière contrôlable Wi-Fi et la contrôler avec Siri. Voici une démo.

Voici ce dont vous aurez besoin:

  • Raspberry Pi (J'ai utilisé un RPi2, il y a une petite différence dans les versions de Node à installer étant donné l'architecture ARM améliorée - voir les notes plus tard).
  • Un courtier MQTT installé sur le Raspberry Pi. Voir la section "Installer Mosquitto sur votre Pi" dans mon Guide OpenHAB partie 2 OpenHAB Guide du débutant Partie 2: ZWave, MQTT, Règles et Graphiques OpenHAB Guide du débutant Partie 2: ZWave, MQTT, Règles et Graphiques OpenHAB, le logiciel domotique open source, dépasse de loin les capacités des autres systèmes domotiques sur le marché - mais ce n'est pas facile à mettre en place. En fait, cela peut être carrément frustrant. Lire la suite . Il n'a pas besoin d'être installé spécifiquement sur le Pi - vous pouvez même utiliser un serveur MQTT basé sur le cloud, mais comme nous avons besoin d'un Pi pour ce tutoriel de toute façon, c'est pratique.
  • NodeMCU v2 (compatible Arduino)
  • Voyants Neopixel (je recommande 4 pixels pour le test, vous pouvez alors ajouter une alimentation externe et en ajouter autant que vous le souhaitez)

Installation du pont HomeKit

Nous allons installer une application NodeJS appelée HAP-NodeJS sur le Raspberry Pi: cela formera un pont entre les requêtes HomeKit et les périphériques Wi-Fi. Nous allons configurer ce pont avec un accessoire pour l'instant, mais vous pouvez en ajouter autant que vous le souhaitez.

Je suis en train d'installer ceci sur mon serveur domestique existant exécutant OpenHAB - j'espère connecter les deux ensemble plus tard, mais pour l'instant, sachez qu'ils peuvent coexister sur le même Raspberry Pi. Si vous faites la même chose, juste au cas où, faites une copie de clonage de votre carte SD Pi actuelle. Clonez facilement votre carte SD pour Raspberry Pi Computing Clonez facilement votre carte SD pour Raspberry Pi Computing Si vous en avez un Carte SD ou plusieurs, une chose que vous aurez besoin est la possibilité de sauvegarder vos cartes pour éviter les problèmes qui se produisent lorsque votre Raspberry Pi ne démarre pas. Lire la suite . Si tout va mal, vous pouvez restaurer à cela.

Commencez par effectuer une mise à niveau complète depuis le terminal ou une session SSH Configuration de votre Raspberry Pi pour une utilisation sans tête avec SSH Configuration de votre Raspberry Pi pour SSH Le Raspberry Pi peut accepter les commandes SSH lorsqu'il est connecté à un réseau local (via Ethernet) ou Wi-Fi), vous permettant de le configurer facilement. Les avantages de SSH vont au-delà de perturber le dépistage quotidien ... Lire la suite.

 sudo apt-get mise à jour sudo apt-get mise à niveau 

Vous devrez peut-être faire deux fois si cela fait un moment.

Maintenant, installez quelques paquets de base dont nous aurons besoin:

 sudo apt-get installer npm git-core libnss-mdns libavahi-compat-libdnssd-dev 

Ensuite, nous allons installer la dernière version de NodeJS. Vous pourriez être tenté de le faire avec apt-get, mais pas - cette version est vraiment ancienne maintenant et ne fonctionnera pas. Au lieu de cela, visitez nodejs.org, accédez au répertoire download / release / latest-v5.x.0 / et vérifiez le lien de la dernière version. Vous cherchez linux-armv7l pour Raspberry Pi 2, ou linuxarmv6l pour les modèles RPi d'origine. Ensuite, en ajustant les URL et les noms de répertoires selon les besoins, téléchargez et installez en utilisant les commandes suivantes.

 wget https://nodejs.org/download/release/latest-v5.x.0/node-v5.5.0-linux-armv7l.tar.gz tar -xvf noeud-v5.5.0-linux-armv7l.tar.gz cd noeud-v5.5.0-linux-armv7l sudo cp -R * / usr / local 

Confirmez en tapant

 version de noeud 

Et vous devriez voir la version 5.5 (ou la dernière version que vous avez téléchargée).

Ensuite, nous avons quelques modules Node à installer.

 sudo npm installer -g npm sudo npm installer -g nœud-gyp 

Dans cette première commande, nous utilisons en fait le Node Package Manager (npm) pour installer une nouvelle version de lui-même. Intelligent!

Maintenant, pour télécharger l'émulateur HomeKit appelé HAP-NodeJS:

 git clone https://github.com/KhaosT/HAP-NodeJS.git cd HAP-NodeJS npm recréer sudo npm installer noeud-persister sudo npm installer srp 

À ce stade, j'ai lancé cette erreur: " #error Cette version du noeud / NAN / v8 nécessite un compilateur C ++ 11 ". Si cela vous arrive, installez un compilateur C ++ plus récent avec les commandes:

 sudo apt-get installer gcc-4.8 g ++ - 4.8 sudo update-alternatives --install /usr/bin/gccgcc/usr/bin/gcc- 4.6 20 sudo update-alternatives --install / usr / bin / gcc gcc / usr / bin / gcc-4.8 50 sudo update-alternatives --install /usr/bin/g ++ g ++ /usr/bin/g++-4.6 20 sudo update-alternatives --install /usr/bin/g ++ g ++ /usr/bin/g ++ - 4, 8 50 

Maintenant, vous ne devriez pas avoir de problème. Continuez à exécuter ces commandes, une par une:

 sudo npm installer srp sudo npm installer mdns --unsafe-perm sudo npm installer debug sudo npm installer ed25519 --unsafe-perm sudo npm installer curve25519 --unsafe-perm 

Cela devrait être tout. Essayez d'exécuter l'émulateur avec:

 nœud Core.js 

Si vous obtenez des erreurs indiquant qu'il ne peut pas trouver tel ou tel module, utilisez à nouveau la commande sudo npm install et affectez le nom du module manquant. En supposant que tout va bien, vous devriez voir quelques avertissements, et votre pont HomeKit sera en cours d'exécution. Voici à quoi ressemble le succès:

hap-nodejs installé

Vous pouvez voir immédiatement qu'il est déjà créé un ensemble de 6 faux appareils. Nous les utiliserons comme point de départ pour notre propre lumière Wi-Fi plus tard, mais nous allons simplement les utiliser pour tester. Vous pouvez également voir plus d'informations de débogage si vous démarrez le serveur avec:

 DEBUG = * noeud Core.js 

Maintenant, sautez sur un appareil Apple capable d'exécuter Siri. Apple ne fournit curieusement pas une application HomeKit en stock, sauf aux développeurs enregistrés, alors téléchargez gratuitement l'application Elgato Eve, une application de gestion HomeKit qui vous permet d'ajouter des appareils (même non-Elgato) à votre réseau HomeKit.

La première fois que vous lancez l'application, vous devrez nommer votre maison, allez-y et parcourez cela. Ensuite, sélectionnez "Ajouter un accessoire". Ignorer le message d'être proche de lui!

Elgato Eve 1

Il vous dira de rechercher un "code d'installation HomeKit" unique suivant. Ignorez cela, et cliquez sur "Ajouter à [nom de votre maison]".

Il vous dira également que l'appareil n'est pas certifié. En effet ce n'est pas. Allez-y quand même. Lorsque vous arrivez à l'écran pour demander un code accessoire ...

elgato eve 2

Choisissez d'entrer le code manuellement, et tapez ce qui suit:

 031-45-154 

Cela peut être trouvé / changé dans le fichier Light_accessory.js, mais plus sur cela plus tard. Ajoutez cet accessoire à votre pièce par défaut, appelez-la Faux Lumière, et continuez à parcourir les boîtes de dialogue pour choisir l'icône etc.

Enfin, revenez à la session SSH où HAP-NodeJS est en cours d'exécution. Vous avez peut-être déjà vu un message disant "Allons-nous?" - c'est l'application Elgato qui interroge l'état de la lumière. Ouvrez Siri et dites-lui d'allumer une fausse lumière, puis essayez de l'éteindre à nouveau. Heureusement, vous verrez des messages de débogage de HAP-NodeJS pour montrer qu'il a reçu les commandes.

 Sommes-nous sur? Non, allumer la lumière! Éteindre la lumière! 

Fantastique, c'est la première étape terminée. Maintenant, nous aurons besoin d'une lumière réelle, avant de revenir pour configurer le pont à nouveau.

Construire une lumière Wi-Fi

Le côté matériel de cette étape est étonnamment simple si nous commençons avec seulement quatre Neopixels, car nous pouvons les alimenter directement à partir de la carte de développement NodeMCU et de sa connexion USB. Si vous avez une bande plus longue, ne vous inquiétez pas - nous avons défini cela dans le logiciel, donc le reste ne s'allume pas.

Connectez le câble d'alimentation rouge d'un brin Neopixel à la broche VIN, la masse bleue à GND et le câble de signal vert à la broche marquée D2 sur le NodeMCU. Faites très attention à la polarité: si vous mélangez le sol et le VIN, vous enverrez un sursaut de puissance à travers votre plateau, et vous le détruisez dans le processus.

Si votre environnement Arduino n'est pas encore configuré pour fonctionner avec ESP8266, allez-y et suivez le guide dans mon ESP8266: Arduino Killer Rencontrez le tueur Arduino: ESP8266 Rencontrez le tueur Arduino: ESP8266 Et si je vous disais qu'il y a un dev Arduino-compatible carte avec Wi-Fi intégré pour moins de 10 $? Eh bien, il y a. Lisez le guide Plus puis revenez après avoir confirmé que cela fonctionne. Installez ces bibliothèques supplémentaires:

  • PubSubClient de lmroy
  • NeoPixels d'Adafruit

Le code que nous utilisons est une modification de l'utilisateur de Github, Aditya Tannu - J'ai supprimé la fonctionnalité inutile de mise à jour par voie hertzienne, ajouté certaines fonctions HSV manquantes, et facilité la création de plus de lumières en changeant seulement un variable unique. Si vous ne voyez pas le code ci-dessous, vous le trouverez dans ce Gist.

Mettez à jour les lignes suivantes avec vos propres informations réseau et un nom unique pour chaque appareil que vous créez (hôte).

 const char * ssid = "...."; const char * mot de passe = "..."; const char * hôte = "officelight"; Adresse IP MQTTserver (192, 168, 1, 99); 

L'adresse IP de ce projecteur est automatiquement obtenue via DHCP - peu importe si elle change, puisque nous nous connectons au même serveur MQTT à chaque fois.

Pour l'instant, nous utilisons seulement 4 Neopixels, mais vous pouvez augmenter le nombre plus tard si vous les alimentez à partir d'une source externe. Téléchargez le code, et testons - utilisez votre client MQTT préféré pour envoyer des commandes (ajustez le nom de l'hôte dans les instructions suivantes si vous l'avez modifié) .

  • Vous pouvez l'envoyer sur le canal racine d' officelight pour l'activer. Envoyer toute autre valeur à cette chaîne pour l'éteindre.
  • Vous pouvez envoyer un numéro de 0-360 à l'heure officielle / la teinte pour changer la couleur. Nous utilisons l'espace couleur HSV, donc 0 et 360 sont rouges, 120 est vert et 240 est bleu.
  • Vous envoyez une valeur en pourcentage pour la luminosité (0-100, n'incluez pas le symbole%).
  • Pareil pour la saturation. Une valeur de 100 sera entièrement saturée (c'est-à-dire une couleur unie) et zéro sera blanc pur, quelle que soit la teinte spécifiée.

Une fois que vous avez confirmé que votre luminaire MQTT fonctionne, passez à autre chose.

Configuration d'un nouvel accessoire HomeKit

Revenez au Raspberry Pi et terminez l'application HAP-NodeJS si vous ne l'avez pas déjà fait. Accédez au répertoire / accessories . Pour faciliter cela, vous pouvez directement télécharger le code qui a déjà été associé à l'appareil "officelight" en tapant ce qui suit:

 wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js 

Essentiellement, il s'agit d'un doublon de l'accessoire de lumière par défaut, avec quelques noms de variables changés (encore une fois, adapté du travail d'Adysan, simplifié pour la facilité d'utilisation). Voici ce que vous devez savoir pour créer vos propres accessoires personnalisés en fonction de cela.

  • Tous les accessoires doivent être nommés * _accessory.js
  • Changez l'adresse IP dans la variable d'options en haut de votre serveur MQTT
  • Si vous avez un nom d'appareil différent, recherchez / remplacez toutes les instances de " officelight " par votre nom d'appareil unique. Vous pouvez faire une recherche / remplacer dans Nano en appuyant sur CTRL et \, en tapant le terme à trouver, le terme à remplacer, puis appuyez sur A (ce qui signifie toutes les instances). Parcourez chacun de ces éléments pour savoir précisément quelles variables sont mises à jour.
  • Créez un nom d'utilisateur hexadécimal unique pour l'accessoire ( light.username = "1B: 2B: 3C: 5D: 6E: FF"; )
  • Ne changez pas le code PIN. Il suit un format spécifique, et à moins que vous sachiez ce que vous faites, il ne sera pas en mesure de jumeler. Il n'y a aucun problème à les garder identiques entre les lumières.
  • Vous pouvez donner à votre appareil un "nom Siri" différent lorsque vous l'ajoutez à l'application Elgato Eve, et les modifier à tout moment pour ne pas être bloqué avec votre choix initial. Il n'est pas nécessaire de modifier les fichiers de configuration ou de redémarrer le serveur.
  • Une fois que vous avez plusieurs projecteurs, vous pouvez utiliser l'application Elgato Eve pour les regrouper par pièce ou pour créer des scènes spécifiques composées de plusieurs actions complexes. Les scènes peuvent être composées de plusieurs actions, telles que: allumer la lumière du bureau, la réduire à 25%, la rendre rouge et activer la machine à café.

Vous devrez à nouveau ajouter votre nouvel accessoire via votre application HomeKit de votre choix.

Enfin, nous voulons lancer notre application HAP-NodeJS chaque fois que le Pi est redémarré. Ajoutez ce qui suit dans votre fichier etc / rc.local, juste avant la sortie 0 .

 nœud sudo /home/pi/HAP-NodeJS/Core.js </ dev / null & 

Vous pouvez voir que j'ai combiné cela avec d'autres commandes que j'ai déjà définies pour démarrer au démarrage.

Rclocal exécuter noeud au démarrage

Si c'est la première fois que vous utilisez rc.local, vous devrez peut-être le définir comme exécutable:

 sudo chmod 755 /etc/rc.local 

Si, pour une raison quelconque, vous devez l'exécuter à nouveau en mode débogage, vous pouvez arrêter l'application Node en cours avec:

 nœud killall 

Une dernière étape: accédez au répertoire des accessoires et supprimez GarageDoorOpener_accessory.js . Au moment de l'écriture, ceci est buggé, et le serveur va se casser après un moment.

Qu'est-ce que vous contrôlerez avec Siri?

Maintenant que vous avez les bases, il n'y a vraiment aucune limite à ce que vous pouvez contrôler - si vous pouvez le coder en Javascript, vous pouvez créer votre propre fichier accessoire. Il y a tellement de potentiel ici, je pense que tu vas t'amuser beaucoup. Faites-moi savoir dans les commentaires ce que vous venez avec!

In this article