Comment faire une lumière Wi-Fi contrôlée Siri DIY
HomeKit est enfin dans la nature, permettant le contrôle de la voix via Siri pour une poignée d'appareils grand public intelligents.
Malheureusement, je veux dire une poignée littérale - tout ce que vous avez déjà acheté n'est probablement pas compatible. Toutefois, le protocole a déjà fait l’objet d’une ingénierie inverse et un émulateur open source pour l’API HomeKit est disponible: ou bien, vous pouvez maintenant créer “faux” Les appareils HomeKit, et Siri les contrôlera comme n'importe quel accessoire officiel 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 nœud à installer compte tenu de l'architecture ARM mise à niveau - voir les notes plus loin).
- Un courtier MQTT installé sur le Raspberry Pi. Voir la section “Installez Mosquitto sur votre Pi” dans mon guide OpenHAB, partie 2 Guide du débutant pour OpenHAB, partie 2: ZWave, MQTT, Règles et graphiques Guide du débutant pour OpenHAB, partie 2: ZWave, MQTT, Règles et graphiques OpenHAB, le logiciel de 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 franchement frustrant. Lire la suite . Il n'est pas nécessaire de l'installer 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, c'est pratique.
- NodeMCU v2 (compatible Arduino)
- LED Neopixel (je recommande 4 pixels pour le test, vous pouvez ensuite ajouter une alimentation externe et en ajouter autant que vous le souhaitez)
Installation du HomeKit Bridge
Nous allons installer une application NodeJS appelée HAP-NodeJS sur le Raspberry Pi: cela formera un pont entre les demandes de 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..
En fait, je l’installe sur mon serveur domestique existant exécutant OpenHAB. J'espère pouvoir connecter les deux ensemble ultérieurement, mais pour le moment, sachez qu’ils peuvent coexister sur le même Raspberry Pi. Si vous faites la même chose, au cas où, faites une copie de sauvegarde de votre carte SD Pi actuelle Clonez facilement votre carte SD pour un calcul Raspberry Pi facile et sans problème Clonez facilement votre carte SD pour un calcul Raspberry Pi sans problème, que vous en ayez un Carte SD ou plusieurs cartes, vous aurez besoin de 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 à partir du terminal ou d’une session SSH. Configuration de votre Raspberry Pi pour une utilisation sans tête avec SSH Configuration de votre Raspberry Pi pour une utilisation sans tête avec 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… En savoir plus .
sudo apt-get update sudo apt-get upgrade
Vous devrez peut-être faire deux fois si ça fait longtemps.
Maintenant, installez quelques paquets dont nous aurons besoin:
sudo apt-get install 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 ne le faites pas - cette version est vraiment ancienne maintenant et ne fonctionnera pas. Visitez plutôt nodejs.org, accédez à la téléchargement / release / latest-v5.x.0 / répertoire, et vérifiez quel est le lien pour la dernière version. Vous cherchez linux-armv7l pour Raspberry Pi 2, ou linuxarmv6l pour les modèles originaux de RPi. Puis, en ajustant les URL et les noms de répertoire selon vos besoins, téléchargez et installez à l'aide des commandes suivantes.
wget https://nodejs.org/download/release/latest-v5.x.0/node-v5.5.0-linux-armv7l.tar.gz tar -xvf node-v5.5.0-linux-armv7l.tar.gz cd noeud-v5.5.0-linux-armv7l sudo cp -R * / usr / local
Confirmez en tapant
version du noeud
Et vous devriez voir la v5.5 (ou la dernière que vous avez téléchargée).
Ensuite, nous avons quelques modules de nœuds à installer.
sudo npm installer -g npm sudo npm installer -g node-gyp
Dans cette première commande, nous utilisons actuellement Node Package Manager (npm) pour installer une version plus récente 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 reconstruction sudo npm installation noeuds-persistant sudo npm install srp
À ce stade, j'ai exécuté cette erreur: “#error Cette version de node / 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 install gcc-4,8 g ++ - 4,8 solutions sudo update-alternatives --installez / usr / bin / gccgcc / usr / bin / gcc-4.6 21 autres options sudo update-alternatives --installez / usr / bin / gcc gcc / usr / bin / gcc-4.8 50 alternatives de sudo update --install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20 alternatives de sudo update -install --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 à 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:
noeud Core.js
Si vous obtenez des erreurs disant qu'il ne peut pas trouver tel ou tel module, utilisez simplement le sudo npm install à nouveau, puis apposez le nom du module manquant. En supposant que tout va bien, vous devriez voir quelques avertissements et votre pont HomeKit sera lancé. Voici à quoi ressemble le succès:
Vous pouvez voir immédiatement qu’il a déjà créé un ensemble de 6 faux appareils. Nous les utiliserons plus tard comme point de départ pour notre propre éclairage Wi-Fi, mais nous ne les utiliserons que pour l'instant pour les tester. Vous pouvez également voir plus d'informations de débogage si vous démarrez le serveur avec:
DEBUG = * noeud Core.js
Passez maintenant à un appareil Apple capable d’exécuter Siri. Apple ne fournit curieusement aucune application HomeKit en stock, sauf aux développeurs enregistrés. Téléchargez donc l'application gratuite 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 lancerez l'application, vous devrez nommer votre maison, allez-y et parcourez-la. Puis sélectionnez “Ajouter un accessoire”. Ignorer le message sur la proximité!
Ça vous dira de chercher un unique “Code d'installation de HomeKit” suivant. Ignore ça et frappe “Ajouter à [nom de votre maison]”.
Cela vous indiquera également que l'appareil n'est pas certifié. En effet ce n'est pas. Allez-y quand même. Quand vous arrivez à l'écran pour demander un code accessoire…
Choisissez d'entrer le code manuellement et tapez ce qui suit:
031-45-154
Ceci peut être trouvé / changé dans le Light_accessory.js fichier, mais plus sur cela plus tard. Ajoutez cet accessoire à votre pièce par défaut, appelez-le Fausse lumière, et continuez à parcourir les boîtes de dialogue pour choisir l'icône, etc..
Enfin, revenez à la session SSH où vous avez exécuté HAP-NodeJS. Vous avez peut-être déjà vu un message disant “Sommes-nous sur?” - c'est l'application Elgato qui interroge le statut de la lumière. Ouvrez Siri et dites-lui de “Allumer la fausse lumière”, puis essayez de l'éteindre à nouveau. Espérons que vous verrez quelques 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, il nous faut une lumière réelle, avant de revenir pour configurer à nouveau le pont.
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, le reste ne s'allume donc 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 NIV, vous allez envoyer une surpuissance à travers votre tableau et le détruire en même temps..
Si votre environnement Arduino n'est pas encore configuré pour fonctionner avec l'ESP8266, suivez le guide dans mon ESP8266: Arduino Killer Faites connaissance avec le tueur Arduino: ESP8266 Faites connaissance avec le tueur Arduino: ESP8266 Et si je vous disais qu'il existe un outil compatible Arduino conseil d'administration 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:
- lmroy's PubSubClient
- NeoPixels d'Adafruit
Le code que nous utilisons est une modification de l'utilisateur Aditha Tannu de Github. J'ai supprimé la fonctionnalité inutile de mise à jour par liaison radio, ajoutée à certaines fonctions HSV manquantes, et il était plus facile de créer plus de lumières en modifiant uniquement variable unique. Si vous ne voyez pas le code incorporé 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 * password = "…"; const char * host = "officelight"; IPAddress MQTTserver (192, 168, 1, 99);
L'adresse IP de ce projecteur est automatiquement obtenue via DHCP - peu importe si cela change, car nous nous connectons au même serveur MQTT à chaque fois..
Pour l'instant, nous n'utilisons que 4 Neopixels, mais vous pourrez augmenter ce nombre ultérieurement 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 d'hôte dans les instructions suivantes si vous l'avez modifié).
- Vous pouvez envoyer sur à la racine officelight canal pour l'allumer. Envoyez toute autre valeur à ce canal pour le désactiver.
- Vous pouvez envoyer un numéro compris entre 0 et 360 à l’officelight / hue pour modifier la couleur. Nous utilisons l'espace colorimétrique HSV, donc 0 et 360 sont en rouge, 120 en vert et 240 en bleu.
- Vous envoyez une valeur en pourcentage pour la luminosité (0-100, n'incluez pas le symbole%).
- Même chose pour la saturation. Une valeur de 100 sera complètement saturée (c.-à-d. Une couleur unie) et zéro sera blanc pur, quelle que soit la teinte spécifiée..
Une fois que vous avez vérifié 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 ce n'est déjà fait. Accédez au /accessoires annuaire. Pour simplifier les choses, vous pouvez télécharger directement le code déjà associé au “officelight” luminaire en tapant ce qui suit:
wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js
Il s'agit essentiellement d'un duplicata de l'accessoire d'éclairage par défaut, avec quelques noms de variables modifiés (à nouveau, adapté du travail d'Adysan, simplifié pour une utilisation plus simple). Voici ce que vous devez savoir pour créer vos propres accessoires personnalisés à partir de ceci.
- 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 de fixture différent, recherchez / remplacez toutes les instances de “officelight” avec votre nom d'appareil unique. Vous pouvez faire une recherche / remplacement dans Nano en appuyant sur CTRL et \, en tapant le terme à trouver, le terme à remplacer, puis appuyez sur UNE (signifiant toutes les instances). Parcourez chacune d'elles 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 ne sachiez ce que vous faites, il ne pourra pas être couplé. Il n'y a pas de problème à les garder les mêmes entre les lumières.
- Vous pouvez donner à votre appareil un autre “Nom Siri” lorsque vous les ajoutez à l’application Elgato Eve et modifiez-les à tout moment pour ne pas que votre choix initial soit bloqué. Il n'y a pas besoin 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 comprenant plusieurs actions complexes. Les scènes peuvent comporter plusieurs actions, telles que: allumer la lumière du bureau, l'atténuer à 25%, la rendre rouge et activer la machine à café.
Vous devrez à nouveau ajouter votre nouvel accessoire via l'application de votre choix, HomeKit..
Enfin, nous voulons exécuter notre application HAP-NodeJS chaque fois que le Pi est redémarré. Ajoutez ce qui suit à votre etc / rc.local fichier, 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.
Si vous utilisez rc.local pour la première fois, 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 tuer l'application Node en cours d'exécution avec:
nœud killall
Une dernière étape: accédez au répertoire des accessoires et supprimez le GarageDoorOpener_accessory.js. Au moment de l'écriture, ceci est un buggy, et le serveur sera en panne après un certain temps.
Que contrôlerez-vous avec Siri?
Maintenant que vous avez maîtrisé les bases, vous n’avez plus aucune limite à ce que vous pouvez contrôler. Si vous pouvez le coder en Javascript, vous pouvez créer votre propre fichier d’accessoires. Il y a tellement de potentiel ici, je pense que vous allez avoir beaucoup de plaisir. Faites-moi savoir dans les commentaires ce que vous venez avec!
En savoir plus sur: Siri, Smart Lighting.