Comment faire une lumière wi-fi diy contrôlée siri-

HomeKit est enfin dans la nature, ce qui permet le contrôle de la voix par Siri pour une poignée d`appareils de la maison intelligente de consommation.

Video: Comment fabriquer une lunette de Vision Nocturne ?!

Malheureusement, je veux dire une poignée littérale - tout ce que vous avez déjà acheté est probablement pas compatible. Toutefois, le protocole a déjà été ingénierie inverse et un émulateur open source pour l`API HomeKit est availble: ou en anglais simple, vous pouvez maintenant créer des dispositifs de HomeKit « faux », et Siri va les contrôler comme tout autre accessoire officiel de HomeKit.

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

Video: Step by Step Guide to Build Your Own Speakers | DIY Speaker Building

Voici ce que vous aurez besoin:

  • Raspberry Pi (je l`ai utilisé un RPi2, il y a une petite différence dans les versions à nœud donné l`architecture install ARM mise à niveau - voir les notes plus tard).
  • Un courtier MQTT installé sur le Raspberry Pi. Voir la section « Installation mosquitto sur votre Pi » dans mon partie 2 Guide OpenHAB. Il n`a pas besoin d`être installé spécifiquement sur le Pi - vous pouvez même utiliser un serveur MQTT en nuage, mais depuis que nous avons besoin d`un Pi pour ce tutoriel de toute façon, il est pratique.
  • NodeMCU v2 (compatible Arduino)
  • LED Neopixel (je vous recommande 4 pixels pour le test, vous pouvez ajouter une alimentation externe et ajouter autant que vous le souhaitez)

Installation du pont HomeKit

Nous allons installer une application appelée NodeJS-PAH NodeJS au Raspberry Pi: cela formera un pont entre les demandes de 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.

J`installe effectivement ce sur mon OpenHAB serveur exécutant de la maison existante - J`espère relier les deux ensemble à une date ultérieure, mais pour l`instant, savent qu`ils peuvent coexister sur le même Raspberry Pi. Si vous faites la même chose, juste au cas où, faire une sauvegarde de clone de votre courant Pi carte SD. Si tout va mal, vous pouvez restaurer à cela.Facilement cloner votre carte SD sans problème Computing Raspberry PiFacilement cloner votre carte SD sans problème Computing Raspberry PiQue vous ayez une carte SD ou plusieurs, une chose que vous aurez besoin est la possibilité de sauvegarder vos cartes afin d`éviter les problèmes qui se produisent lorsque ne démarre pas votre Raspberry Pi.Lire la suite

Commencez par faire une mise à jour complète du terminal ou un session SSH.

sudo apt-get updatesudo apt-get upgrade

Vous devrez peut-être faire les deux fois si elle a été un certain temps.

Maintenant, installez quelques paquets de base que nous allons avoir besoin:

sudo apt-get install libnss-mdns git-core NPM 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 font pas - cette version est vraiment vieux maintenant et ne fonctionnera pas. Au lieu de cela, visitez nodejs.org, naviguez jusqu`au Téléchargement / release / dernière v5.x.0 / répertoire, et vérifier ce que le lien pour la dernière version est. Vous cherchez linux-armv7l pour Raspberry Pi 2, ou linuxarmv6l pour les modèles RPi originaux. Ensuite, régler les URL et les noms de répertoire au besoin, 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.gztar -xvf noeud noeud-v5.5.0-linux-armv7l.tar.gzcd -v5.5.0-linux-armv7lsudo cp R * / usr / local

Confirmez en tapant

version de noeud

Et vous devriez voir v5.5 (ou quel que soit le dernier en date, que vous avez téléchargé).

Ensuite, nous avons des modules de nœud à installer.

sudo NPM installer -g npmsudo NPM installer nœud-Gyp -g

Dans cette première commande, nous utilisons en fait le paquet Node Manager (NPM) pour installer une version plus récente d`elle-même. Intelligent!

Maintenant, pour télécharger l`émulateur HomeKit appelé PAH-NodeJS:

git clone https://github.com/KhaosT/HAP-NodeJS.gitcd-PAH NodeJSnpm rebuildsudo NPM installer nœud persistsudo NPM installer srp

À ce stade, j`ai couru cette erreur: «#error Cette version de noeud / NAN / v8 nécessite un compilateur C ++ 11« . Si cela vous arrive, installer une version plus récente compilateur C ++ avec les commandes:

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

Maintenant, vous ne devriez pas avoir un problème. Continuer d`exécuter ces commandes, un par un:

sudo NPM installer srpsudo NPM installer mdns --unsafe-permsudo NPM installer debugsudo NPM installer ed25519 --unsafe-permsudo NPM installer curve25519 --unsafe-perm

Cela devrait être tout. Essayez de lancer l`émulateur avec:

noeud Core.js

Si vous obtenez des erreurs disant qu`il ne peut pas trouver tel ou tel module, il suffit d`utiliser la sudo NPM installer commande à nouveau, et y apposer le nom de ce que le module qui manquait. En supposant que tout va bien, vous devriez voir quelques avertissements, et votre pont HomeKit sera en cours d`exécution. C`est ce qui ressemble le succès:

Hap-nodejs installé

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

DEBUG = * noeud Core.js

Maintenant, sauter par-dessus à un appareil Apple capable de fonctionner Siri. Apple ne fournit pas curieusement une application stock HomeKit sauf pour les développeurs enregistrés, afin de télécharger l`application gratuite Elgato Eve, une application de gestion de HomeKit qui vous permet d`ajouter des périphériques (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 marcher à travers cela. Ensuite, sélectionnez « Ajouter accessoire ». Ignorez le message d`être près de lui!

elgato veille 1

Il vous dira de chercher un unique « HomeKit code d`installation » à côté. Ignorer que, et cliquez sur « Ajouter à [nom de votre maison] ».

Il va également vous dire l`appareil est pas certifié. En effet, il n`est pas. Allez-y de toute façon. Lorsque vous arrivez à l`écran demandant un code accessoire ...

elgato veille 2

Choisissez d`entrer le code manuellement et tapez dans ce qui suit:

031-45-154

Cela peut être trouvé / changé dans la Light_accessory.js fichier, mais plus sur cela plus tard. Ajouter cet accessoire dans votre chambre par défaut, appelez Lumière faux, et continuer à marcher dans les boîtes de dialogue pour choisir l`icône, etc.

Enfin, revenir en arrière à la session SSH où vous avez PAH-NodeJS en cours d`exécution. Vous avez peut-être déjà vu un message disant: « Sommes-nous? » - c`est le vote d`application Elgato pour l`état de la lumière. Ouvrez Siri et lui dire de « Allumez la lumière faux », essayez de le désactiver à nouveau. Si tout va bien, vous verrez des messages de débogage de PAH-NodeJS pour montrer qu`il a reçu les commandes.

Sommes-nous? No.Turning la lumière! Tourner la lumière éteinte!

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, que nous pouvons alimenter ceux directement de la carte dev NodeMCU et sa connexion USB. Si vous avez une bande plus, ne vous inquiétez pas - nous avons défini ce logiciel, donc le reste juste ne s`allume pas.

Connecter le câble d`alimentation rouge à partir d`un brin d`Neopixel à la broche de VIN, fond bleu à la masse, et le câble de signal vert à la broche D2 marquée sur le NodeMCU. Soyez très attention à la polarité: si vous mélangez le sol et VIN, vous enverrez une montée subite de puissance par votre conseil d`administration, et la détruire dans le processus.

Si votre environnement Arduino est pas encore configuré pour travailler avec ESP8266, allez-y et suivez le guide dans mon ESP8266: Arduino Tueur guide puis revenez après avoir confirmé que cela fonctionne. Installez ces bibliothèques supplémentaires:Rencontrez le tueur Arduino: ESP8266Rencontrez le tueur Arduino: ESP8266Et si je vous ai dit il y a une carte Arduino dev compatible avec le Wi-Fi pour moins de 10 $? Eh bien, il y a.Lire la suite

  • PubSubClient de lmroy
  • Les NeoPixels de Adafruit

Le code que nous utilisons est une modification de l`utilisateur Github Aditya Tannu de - j`ai supprimé la fonctionnalité de mise à jour inutile over-the-air, ajouté dans certaines fonctions HSV qui ont été portés disparus, et il est plus facile de créer plus de lumières en changeant seulement une seule variable. Si vous ne pouvez pas voir le code intégré ci-dessous, vous trouverez à ce Gist.

#comprendre lt;ESP8266WiFi.hgt;
#comprendre lt;WiFiClient.hgt;
#comprendre lt;ESP8266mDNS.hgt;
#comprendre lt;WiFiUdp.hgt;
#comprendre lt;PubSubClient.hgt;
#comprendre lt;Adafruit_NeoPixel.hgt;
#définir ÉPINGLE 4
Adafruit_NeoPixel bande = Adafruit_NeoPixel (4, PIN, NEO_GRB + NEO_KHZ800) -
const carboniser* = Ssid "...."-
const carboniser* Mot de passe = "..."-
const carboniser* Host = "OfficeLight"- // le nom de votre appareil, et le canal de base pour écouter
Adresse IP MQTTserver(192, 168, 1, 99) -
/ * PAS BESOIN DE CHANGER CETTE LIGNE DESSOUS * /
int hue = 0-
flotte luminosité = 0,0-
flotte saturation = 0,0-
#définir buffer_size 100
WiFiClient wclient-
PubSubClient client(Wclient, MQTTserver) -
vide rappeler(const MQTT :: Publier& pub) {
uint16_t i, j-
currentValues() -
Chaîne myMessage = Chaîne(pub.payload_string()) -
// message poignée est arrivé
En série.impression(pub.sujet()) -
En série.impression(" = Gt; ") -
Chaîne MyTopic = Chaîne(pub.sujet()) -
si(MyTopic == hôte)
{
En série.println(pub.payload_string()) -
si(pub.payload_string() == "sur")
{
// utiliser pour réinitialiser les paramètres si vous voulez qu`ils viennent toujours sur blanc brillant.
//teinte = 0
luminosité = 1.0-
//saturation = 0.0-
pour(I =0- jenumPixels() - i ++) {
bande.setPixelColor(je, HSVColor(Teinte, saturation, luminosité)) -
}
bande.montrer() -
}
autre
{
//teinte = 0
luminosité = 0,0-
//saturation = 0.0-
pour(I =0- jenumPixels() - i ++) {
bande.setPixelColor(je, HSVColor(Teinte, saturation, luminosité)) -
}
bande.montrer() -
}
}
autre si(MyTopic == hôte + (String)"/luminosité")
{ // Luminosité jusqu`à 100
En série.println(pub.payload_string()) -
= luminosité (myMessage.flotter()) /100-
pour(I =0- jenumPixels() - i ++) {
bande.setPixelColor(je, HSVColor(Teinte, saturation, luminosité)) -
}
bande.montrer() -
}
autre si(MyTopic == hôte + (String)"/teinte")
{ // Hue valeur 0-360
En série.println(pub.payload_string()) -
teinte = myMessage.toInt() -
pour(I =0- jenumPixels() - i ++) {
bande.setPixelColor(je, HSVColor(Teinte, saturation, luminosité)) -
}
bande.montrer() -
}
autre si(MyTopic == hôte + (String)"/saturation")
{ // Valeur de saturation à 0-100
En série.println(pub.payload_string()) -
saturation = (myMessage.flotter()) /100-
pour(I =0- jenumPixels() - i ++) {
bande.setPixelColor(je, HSVColor(Teinte, saturation, luminosité)) -
}
bande.montrer() -
}
currentValues() -
}
vide installer() {
En série.commencer(115200) -
En série.println("Booting") -
Wifi.mode(WIFI_STA) -
Wifi.commencer(Ssid, mot de passe) -
tandis que (Wifi.waitForConnectResult()! = WL_CONNECTED) {
En série.println("La connexion a échoué! ... Redémarrage") -
retard(5000) -
ESP.redémarrer() -
}
En série.println("Prêt") -
En série.impression("Adresse IP: ") -
En série.println(Wifi.localIP()) -
// rappel MQTT
client.set_callback(rappeler)-
bande.commencer() -
bande.montrer() - // Initialiser tous les pixels à « off »
}
vide boucle() {
si (Wifi.statut() == WL_CONNECTED) {
si (!client.connecté()) {
si (client.relier("ESP8266: Fontaine")) {
client.publier("outTopic",(Chaîne)"Bonjour tout le monde, je suis "+hôte)-
client.souscrire(Hôte + (String)"/ #") -
}
}
si (client.connecté())
client.boucle() -
}
}
// Convertir Teinte / Saturation / valeurs de luminosité à 32 bits emballé RBG couleur.
// teinte doit être une valeur flottante entre 0 et 360
// saturation doit être une valeur flottante entre 0 et 1
// luminosité doit être une valeur flottante entre 0 et 1
uint32_t HSVColor(flotte h, flotte s, flotte v) {
h = contraindre(H, 0, 360) -
s = contraindre(S, 0, 1) -
v = contraindre(V, 0, 1) -
int i, b, p, q, t-
flotte F-
h / = 60,0- // secteur 0 à 5
i = sol(H) -
f = h - i- // partie factoriel h
b = v * 255-
p = v * ( 1 - s) * 255-
q = v * ( 1 - s * f) * 255-
t = v * ( 1 - s * ( 1 - F ) ) * 255-
commutateur( je ) {
Cas 0:
revenir bande.Couleur(B, t, p) -
Cas 1:
revenir bande.Couleur(Q, b, p) -
Cas 2:
revenir bande.Couleur(P, b, t) -
Cas 3:
revenir bande.Couleur(P, q, b) -
Cas 4:
revenir bande.Couleur(T, p, b) -
défaut:
revenir bande.Couleur(B, p, q) -
}
}
vide currentValues() {
En série.println("") -
En série.println("État actuel") -
En série.impression("Hue (0-360):") -
En série.println(teinte)-
En série.impression("Saturation (0-100 in, 0-1):") -
En série.println(saturation*100) -
En série.impression("Luminosité (0-100):") -
En série.println(luminosité*100) -
En série.println("") -
}
voir rawNodeMCU-MQTT-Siri-Wifi-Light.inohosted avec ❤ par GitHub

Mettre à jour les lignes suivantes avec vos propres informations sur le 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 cet appareil est automatiquement obtenue par DHCP - il n`a pas d`importance si elle change, puisque nous connecter à chaque fois que le même serveur MQTT.

Pour l`instant nous n`utilisons 4 Neopixels, mais vous pouvez augmenter le nombre plus tard si vous les alimenter à partir d`une source externe. Téléchargez le code et test de laissez - utiliser votre client MQTT favori pour envoyer des commandes (Régler le nom d`hôte dans les instructions suivantes si vous avez modifié).

  • Vous pouvez envoyer sur à la racine OfficeLight canal pour l`allumer. Envoyer une autre valeur à ce canal pour la désactiver.
  • Vous pouvez envoyer un numéro 0-360 à la OfficeLight / 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 de pourcentage pour la luminosité (0-100, ne comprennent pas le symbole%).
  • Idem pour la saturation. Une valeur de 100 sera entièrement saturé (par exemple, une couleur unie) et zéro sera blanc pur, quelle que soit la teinte spécifiée.

Une fois que vous avez confirmé votre appareil d`éclairage répondant aux besoins MQTT-fonctionne, passer.

Configuration d`un accessoire New HomeKit

Revenez à la Raspberry Pi et mettre fin à l`application PAH-NodeJS si vous avez pas déjà. Accédez à la /accessoires annuaire. Pour vous faciliter la tâche, vous pouvez directement télécharger le code qui a déjà été associé à la fixation de « OfficeLight » en tapant dans ce qui suit:

Video: How To Make A Cheap WiFi Radio

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

Essentiellement, il est un double de l`accessoire de lumière par défaut, avec quelques noms de variables ont changé (à nouveau, adapté du travail de Adysan, simplifiée pour la 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
  • Modifier l`adresse IP dans les options variables en haut à votre serveur MQTT
  • Si vous avez un nom différent de fixation, rechercher / remplacer toutes les occurrences 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 de remplacer, puis appuyez sur UNE (Ce qui signifie tous les cas). Etape par chacun d`entre eux d`apprendre avec précision quelles variables sont mises à jour.
  • Créer un nom d`utilisateur hexadécimal unique pour l`accessoire (light.username = « 1B: 2B: 3C: 5D: 6E: FF » -)
  • Ne pas modifier le code PIN. Il suit un format spécifique, et à moins que vous savez ce que vous faites, il ne sera pas en mesure de paire. Il n`y a pas problème avec les en gardant la même entre les lumières.
  • Vous pouvez donner à votre appareil un autre « nom Siri » quand les ajouter à l`application Eve Elgato, et modifier ceux à tout moment si vous n`êtes pas coincé avec votre choix initial. Il n`y a pas besoin de modifier les fichiers de configuration ou redémarrer le serveur.
  • Une fois que vous avez plusieurs appareils, vous pouvez utiliser l`application Eve Elgato pour les regrouper par chambre, ou pour créer des scènes spécifiques consistant en de multiples actions complexes. Les scènes peuvent consister en de multiples actions telles que: allumer la lumière de bureau, dim à 25%, la rendre rouge, et activer la machine à café.

Vous aurez besoin d`ajouter votre nouvel accessoire grâce à votre application HomeKit à nouveau de choix.

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

sudo noeud /home/pi/HAP-NodeJS/Core.js lt; / Dev / null &

Vous pouvez voir que j`ai combiné cela avec d`autres commandes que je l`ai déjà mis à lancer au démarrage.

noeud rclocal d`exécution au démarrage

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

Video: Schiit Audio Mini Rack From Scraps | Audio Build

755 /etc/rc.local sudo

Si pour une raison quelconque, vous devez l`exécuter à nouveau en mode débogage, vous pouvez tuer l`application en cours d`exécution avec nœud:

noeud killall

Une dernière étape: accédez au répertoire d`accessoires et de supprimer la GarageDoorOpener_accessory.js. Au moment de la rédaction de c`est buggé, et provoquera le serveur de rompre après un certain temps.

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

Maintenant que vous avez les bases vers le bas, il n`y a vraiment pas de limite à ce que vous pouvez contrôler - si vous pouvez le coder en javascript, vous pouvez faire votre propre fichier accessoire. 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!

Articles connexes