Publicité
HomeKit est enfin sorti dans la nature, permettant la commande vocale via Siri pour une poignée d'appareils domestiques intelligents grand public.
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étroconçu et un émulateur open source pour l'API HomeKit est disponible: ou dans en anglais simple, vous pouvez maintenant créer de "faux" appareils HomeKit, et Siri les contrôlera comme n'importe quel autre HomeKit officiel accessoire.
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:
- Tarte aux framboises (J'ai utilisé un RPi2, il y a une petite différence dans les versions de nœuds à 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 "Installer Mosquitto sur votre Pi" dans mon Guide OpenHAB partie 2 Guide du débutant OpenHAB Partie 2: ZWave, MQTT, règles et graphiquesOpenHAB, le logiciel domotique open source, dépasse de loin les capacités des autres systèmes domotiques du marché - mais ce n'est pas facile à configurer. 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)
- LED Neopixel (je recommande 4 pixels pour les tests, vous pouvez ensuite 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 au Raspberry Pi: cela formera un pont entre les requêtes HomeKit et les appareils 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 cela sur mon serveur domestique existant exécutant OpenHAB - j'espère connecter les deux ensemble à un date ultérieure, mais pour l'instant, sachez qu'ils peuvent coexister sur le même Raspberry Pi. Si vous faites de même, juste en Cas, faire une copie de sauvegarde de votre carte SD Pi actuelle Clonez facilement votre carte SD pour un calcul Raspberry Pi sans problèmeQue vous ayez une carte SD ou plusieurs, une chose dont vous aurez besoin est la possibilité de sauvegarder vos cartes pour éviter les problèmes qui surviennent lorsque votre Raspberry Pi ne démarre pas. Lire la suite . Si tout va mal, vous pouvez y restaurer.
Commencez par effectuer une mise à niveau complète à partir du terminal ou d'un Session SSH Configuration de votre Raspberry Pi pour une utilisation sans tête avec SSHLe Raspberry Pi peut accepter les commandes SSH lorsqu'il est connecté à un réseau local (via Ethernet ou Wi-Fi), ce qui vous permet de le configurer facilement. Les avantages de la SSH vont au-delà du bouleversement du dépistage quotidien ... Lire la suite .
mise à jour sudo apt-get. mise à niveau sudo apt-get.
Vous devrez peut-être les faire deux fois si cela fait un moment.
Maintenant, installez quelques packages de base 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 non - cette version est vraiment ancienne maintenant et ne fonctionnera pas. Au lieu de cela, visitez nodejs.org, accédez au télécharger / release / latest-v5.x.0 / et vérifiez le lien vers 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é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 node-v5.5.0-linux-armv7l. sudo cp -R * / usr / local.
Confirmez en tapant
version du nœud.
Et vous devriez voir la v5.5 (ou la dernière version que vous avez téléchargée).
Ensuite, nous avons quelques modules Node à installer.
sudo npm install -g npm. sudo npm install -g node-gyp.
Dans cette première commande, nous utilisons en fait le 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 reconstruire. sudo npm install node-persist. 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. 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 install srp. sudo npm install mdns --unsafe-perm. sudo npm install debug. sudo npm install ed25519 --unsafe-perm. sudo npm install 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 simplement le sudo npm install à nouveau et apposez le nom du module manquant. En supposant que tout va bien, vous devriez voir quelques avertissements et votre pont HomeKit fonctionnera. 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 comme point de départ pour notre propre éclairage Wi-Fi plus tard, mais nous les utiliserons pour le moment. Vous pouvez également voir plus d'informations de débogage si vous démarrez le serveur avec:
DEBUG = * node Core.js
Passez maintenant à un appareil Apple capable d'exécuter Siri. Apple ne propose curieusement aucune application HomeKit en stock, sauf aux développeurs enregistrés, alors téléchargez gratuitement 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 lancerez l'application, vous devrez nommer votre maison, allez-y et parcourez-la. Sélectionnez ensuite «Ajouter un accessoire». Ignorez le message d'être proche de lui!
Il vous dira ensuite de rechercher un «code de configuration HomeKit» unique. Ignorez cela et cliquez sur «Ajouter à [nom de votre domicile]».
Il vous indiquera également que l'appareil n'est pas certifié. Ce n'est pas le cas. Allez-y quand même. Lorsque vous arrivez à l'écran pour demander un code accessoire…
Choisissez d'entrer le code manuellement et saisissez ce qui suit:
031-45-154
Cela peut être trouvé / modifié dans le Light_accessory.js fichier, mais plus à ce sujet plus tard. Ajoutez cet accessoire à votre pièce par défaut, appelez-le Fake Lightet 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 "Sommes-nous allumés?" - c'est l'application Elgato qui interroge l'état de la lumière. Ouvrez Siri et dites-lui «d'allumer la fausse lumière», puis essayez de l'éteindre à nouveau. J'espère que 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 à 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 néopixels, 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 l'avons définie dans le logiciel, donc le reste ne s'allumera pas.
Connectez le câble d'alimentation rouge d'un brin Neopixel à la broche VIN, la terre 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 enverrez une surtension à travers votre carte et la détruirez 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: ESP8266Et si je vous disais qu'il y a une carte de développement compatible Arduino avec Wi-Fi intégré pour moins de 10 $? Eh bien, il y en a. Lire la suite guide 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 Aditya Tannu, utilisateur de Github - J'ai supprimé la fonctionnalité de mise à jour en direct inutile, ajouté à certaines fonctions HSV qui manquaient et facilité la création de plus de lumières en ne modifiant qu'une seule variable. Si vous ne voyez pas le code intégré ci-dessous, vous le trouverez sur 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"; Serveur IPAddress MQTT (192, 168, 1, 99);
L'adresse IP de ce luminaire est obtenue automatiquement via DHCP - peu importe si elle change, car nous nous connectons à chaque fois au même serveur MQTT.
Pour l'instant, nous n'utilisons que 4 néopixels, 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 d'hôte dans les instructions suivantes si vous l'avez changé).
- Vous pouvez envoyer sur à la racine officelight pour l'activer. Envoyez toute autre valeur à cette chaîne pour la désactiver.
- Vous pouvez envoyer un nombre de 0 à 360 à la lumière / teinte d'officier pour changer la couleur. Nous utilisons le Espace colorimétrique HSV, donc 0 et 360 sont rouges, 120 sont verts et 240 sont bleus.
- Vous envoyez un pourcentage de luminosité (0-100, n'incluez pas le symbole%).
- Idem pour la saturation. Une valeur de 100 sera entièrement saturée (c'est-à-dire une couleur unie) et zéro sera d'un blanc pur, quelle que soit la teinte spécifiée.
Une fois que vous avez confirmé que votre appareil d'éclairage MQTT fonctionne, continuez.
Configuration d'un nouvel accessoire HomeKit
Revenez au Raspberry Pi et fermez l'application HAP-NodeJS si vous ne l'avez pas déjà fait. Accédez au /accessories annuaire. Pour vous faciliter la tâche, vous pouvez télécharger directement le code qui a déjà été associé au luminaire «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 d'éclairage par défaut, avec certains noms de variables modifiés (encore une fois, adaptés du travail d'Adysan, simplifiés pour une facilité d'utilisation). Voici ce que vous devez savoir pour créer vos propres accessoires personnalisés sur cette base.
- Tous les accessoires doivent être nommés *_accessory.js
- Modifiez 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"Avec votre nom unique de luminaire. Vous pouvez faire une recherche / remplacement dans Nano en appuyant sur CTRL et \, en tapant le terme à rechercher, le terme à remplacer, puis appuyez sur UNE (signifiant toutes les instances). Parcourez chacun d'eux 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 modifiez pas le code PIN. Il suit un format spécifique et à moins que vous sachiez ce que vous faites, il ne pourra pas être associé. 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 les ajoutez à l'application Elgato Eve, et les modifier à tout moment afin de ne pas vous retrouver 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 appareils, 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 consister en 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 l'application HomeKit de votre choix.
Enfin, nous voulons exécuter notre application HAP-NodeJS à chaque redémarrage du Pi. Ajoutez ce qui suit à votre etc / rc.local fichier, juste avant le sortie 0.
noeud 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 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 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, cela est bogué et entraînera une panne du serveur après un certain temps.
Que contrôlerez-vous 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 vous allez vous amuser beaucoup. Faites-moi savoir dans les commentaires ce que vous proposez!
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.