Annuncio pubblicitario

HomeKit è finalmente uscito allo stato brado, consentendo il controllo vocale tramite Siri per una manciata di dispositivi domestici intelligenti di consumo.

Purtroppo, intendo una manciata letterale: tutto ciò che hai già acquistato probabilmente non è compatibile. Tuttavia, il protocollo è già stato retroingegnerizzato ed è disponibile un emulatore open source per l'API HomeKit: o in inglese semplice, ora puoi creare dispositivi HomeKit "falsi" e Siri li controllerà come qualsiasi altro HomeKit ufficiale accessorio.

Oggi creeremo una luce controllabile Wi-Fi e la controlleremo con Siri. Ecco una demo.

Ecco cosa ti servirà:

  • Raspberry Pi (Ho usato un RPi2, c'è una piccola differenza nelle versioni di Node da installare data l'architettura ARM aggiornata - vedi note più avanti).
  • Un broker MQTT installato su Raspberry Pi. Vedi la sezione "Installa Mosquitto sul tuo Pi" nel mio Guida OpenHAB parte 2 Guida per principianti OpenHAB Parte 2: ZWave, MQTT, Regole e graficiOpenHAB, il software di automazione domestica open source, supera di gran lunga le capacità di altri sistemi di automazione domestica presenti sul mercato, ma non è facile da configurare. In effetti, può essere decisamente frustrante.
    instagram viewer
    Leggi di più
    . Non è necessario installarlo in modo specifico sul Pi: puoi persino utilizzare un server MQTT basato su cloud, ma poiché abbiamo comunque bisogno di un Pi per questo tutorial, è conveniente.
  • NodeMCU v2 (compatibile con Arduino)
  • LED Neopixel (consiglierei 4 pixel per i test, quindi puoi aggiungere un alimentatore esterno e aggiungerne quanti ne desideri)

Installazione di HomeKit Bridge

Installeremo un'applicazione NodeJS chiamata Hap-NodeJS al Raspberry Pi: questo formerà un ponte tra le richieste di HomeKit e i dispositivi Wi-Fi. Per ora configureremo questo bridge con un accessorio, ma puoi aggiungerne quanti ne desideri.

In realtà sto installando questo sul mio server principale esistente che esegue OpenHAB - spero di collegare i due insieme a data successiva, ma per ora, sanno che possono coesistere sullo stesso Raspberry Pi. Se stai facendo lo stesso, entra Astuccio, fare un backup clone della tua attuale scheda Pi SD Clona facilmente la tua scheda SD per un Raspberry Pi Computing senza problemiIndipendentemente dal fatto che si disponga di una o più schede SD, è necessario eseguire il backup delle schede per evitare i problemi che si verificano quando Raspberry Pi non si avvia. Leggi di più . Se tutto va storto, puoi ripristinarlo.

Inizia facendo un aggiornamento completo dal Terminale o da un Sessione SSH Configurazione di Raspberry Pi per l'uso senza testa con SSHRaspberry Pi può accettare comandi SSH quando è collegato a una rete locale (tramite Ethernet o Wi-Fi), consentendo di configurarlo facilmente. I benefici di SSH vanno oltre il turbare lo screening quotidiano ... Leggi di più .

sudo apt-get update. sudo apt-get upgrade. 

Potrebbe essere necessario farlo due volte se è passato un po 'di tempo.

Ora installa alcuni pacchetti principali di cui avremo bisogno:

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

Successivamente, installeremo l'ultima versione di NodeJS. Potresti essere tentato di farlo con apt-get, ma non farlo: quella versione è molto vecchia ora e non funzionerà. Invece, visita nodejs.org, vai al download / stampa / ultima v5.x.0 / directory e controlla qual è il link per l'ultima versione. Stai cercando linux-armv7l per Raspberry Pi 2 o linuxarmv6l per i modelli RPi originali. Quindi, regolando gli URL e i nomi delle directory in base alle esigenze, scaricare e installare utilizzando i seguenti comandi.

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. 

Conferma digitando

versione del nodo. 

E dovresti vedere v5.5 (o qualunque sia l'ultima versione scaricata).

Successivamente, abbiamo alcuni moduli Node da installare.

sudo npm installa -g npm. sudo npm installa -g node-gyp. 

In quel primo comando, stiamo effettivamente utilizzando Node Package Manager (npm) per installare una versione più recente di se stesso. Intelligente!

Ora, per scaricare l'emulatore HomeKit chiamato Hap-NodeJS:

clone git https://github.com/KhaosT/HAP-NodeJS.git. cd HAP-NodeJS. ricostruzione npm. sudo npm installa node-persist. sudo npm install srp. 

A questo punto, ho eseguito questo errore: “#error Questa versione di node / NAN / v8 richiede un compilatore C ++ 11“. Se ciò accade, installa un compilatore C ++ più recente con i comandi:

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. 

Ora non dovresti avere problemi. Continua a eseguire questi comandi, uno per uno:

sudo npm install srp. sudo npm install mdns --unsafe-perm. sudo npm installa debug. sudo npm install ed25519 --unsafe-perm. sudo npm install curve25519 --unsafe-perm. 

Dovrebbe essere tutto. Prova a eseguire l'emulatore con:

nodo Core.js. 

Se ricevi errori dicendo che non è possibile trovare tale e tale modulo, usa semplicemente il sudo npm install di nuovo il comando e apponi il nome di qualunque modulo mancasse. Supponendo che tutto vada bene, dovresti vedere alcuni avvisi e il tuo bridge HomeKit funzionerà. Ecco come si presenta il successo:

hap-nodejs installato

Puoi vedere immediatamente che ha già creato un set di 6 dispositivi falsi. Useremo quelli come punto di partenza per la nostra luce Wi-Fi in seguito, ma per ora li useremo solo per testare. Puoi anche visualizzare ulteriori informazioni di debug se avvii il server con:

DEBUG = * nodo Core.js

Passa ora a un dispositivo Apple in grado di eseguire Siri. Apple curiosamente non fornisce un'app HomeKit di serie se non agli sviluppatori registrati, quindi scarica gratuitamente Elgato Eve app, un'app di gestione di HomeKit che ti consente di aggiungere dispositivi (anche non Elgato) alla tua rete HomeKit.

La prima volta che avvii l'app, dovrai nominare la tua casa, andare avanti e percorrerla. Quindi selezionare "Aggiungi accessorio". Ignora il messaggio di essere vicino ad esso!

elgato eve 1

Ti dirà di cercare un unico "Codice di installazione di HomeKit" successivamente. Ignoralo e premi "Aggiungi a [nome della tua casa]".

Ti dirà anche che il dispositivo non è certificato. In effetti non lo è. Vai comunque. Quando si arriva allo schermo chiedendo un codice accessorio ...

elgato eve 2

Scegli di inserire il codice manualmente e digita quanto segue:

031-45-154

Questo può essere trovato / modificato in Light_accessory.js file, ma ne parleremo più avanti. Aggiungi questo accessorio alla tua stanza predefinita, chiamalo Luce fintae continua a camminare attraverso le finestre di dialogo per scegliere l'icona, ecc.

Infine, torna alla sessione SSH in cui hai HAP-NodeJS in esecuzione. Potresti aver già visto un messaggio che dice "Siamo su?" - questa è la votazione dell'app Elgato per lo stato della luce. Apri Siri e dille di "Accendi falso luce", quindi prova a spegnerlo di nuovo. Spero che vedrai alcuni messaggi di debug da HAP-NodeJS per mostrare che ha ricevuto i comandi.

Siamo su? No. Accendi la luce! Spegnere la luce!

Fantastico, questo è il primo passo. Ora avremo bisogno di una luce reale, prima di tornare per configurare nuovamente il bridge.

Costruire una luce Wi-Fi

Il lato hardware di questo passaggio è sorprendentemente semplice se iniziamo con solo quattro Neopixel, in quanto possiamo alimentare quelli direttamente dalla scheda di sviluppo NodeMCU e dalla sua connessione USB. Se hai una striscia più lunga, non ti preoccupare: l'abbiamo definita nel software, quindi il resto non si accenderà.

Collegare il cavo di alimentazione rosso da un filo Neopixel al pin VIN, terra blu a GND e il cavo di segnale verde al pin contrassegnato D2 su NodeMCU. Fai molta attenzione alla polarità: se mescoli il terreno e il VIN, invierai un aumento di potenza attraverso la tua scheda e la distruggerai nel processo.

Se il tuo ambiente Arduino non è ancora configurato per funzionare con ESP8266, vai avanti e segui la guida in my ESP8266: Arduino Killer Incontra Arduino Killer: ESP8266E se ti dicessi che esiste una scheda di sviluppo compatibile con Arduino con Wi-Fi integrato per meno di $ 10? Bene, c'è. Leggi di più guida quindi ritorna dopo aver confermato che funziona. Installa queste librerie aggiuntive:

  • PubSubClient di lmroy
  • NeoPixels di Adafruit

Il codice che stiamo utilizzando è una modifica di Utente di Github Aditya Tannu - Ho rimosso la funzionalità di aggiornamento over-the-air non necessaria, aggiunto in alcune funzioni HSV mancanti e reso più semplice la creazione di più luci cambiando solo una singola variabile. Se non riesci a vedere il codice incorporato di seguito, lo troverai in questo Gist.

Aggiorna le seguenti righe con le tue informazioni di rete e un nome univoco per ogni dispositivo che crei (host).

const char * ssid = "..."; const char * password = "..."; const char * host = "officelight"; IPAddress MQTTserver (192, 168, 1, 99);

L'indirizzo IP di questo dispositivo viene automaticamente ottenuto tramite DHCP: non importa se cambia, poiché ci colleghiamo ogni volta allo stesso server MQTT.

Per ora stiamo usando solo 4 Neopixel, ma puoi aumentare il numero in un secondo momento se li alimenti da una fonte esterna. Carica il codice e testiamo: usa il tuo client MQTT preferito per inviare comandi (modifica il nome host nelle seguenti istruzioni se lo hai modificato).

  • Tu puoi mandare sopra alla radice officelight canale per attivarlo. Invia qualsiasi altro valore a quel canale per disattivarlo.
  • È possibile inviare un numero da 0-360 alla luce / tonalità per cambiare il colore. Stiamo usando il Spazio colore HSV, quindi 0 e 360 ​​sono rossi, 120 è verde e 240 è blu.
  • Si invia un valore percentuale per la luminosità (0-100, non includere il simbolo%).
  • Lo stesso vale per la saturazione. Un valore di 100 sarà completamente saturo (ovvero, un colore solido) e zero sarà bianco puro, indipendentemente dalla tonalità specificata.

Dopo aver verificato che il tuo apparecchio di illuminazione guidato da MQTT funziona, vai avanti.

Configurazione di un nuovo accessorio HomeKit

Torna a Raspberry Pi e termina l'app HAP-NodeJS se non l'hai già fatto. Passare al /accessories directory. Per rendere tutto più semplice, puoi scaricare direttamente il codice che è già stato associato al dispositivo "officelight" digitando quanto segue:

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

In sostanza, si tratta di un duplicato dell'accessorio luce predefinito, con alcuni nomi di variabili modificati (di nuovo, adattato dal lavoro di Adysan, semplificato per facilità d'uso). Ecco cosa dovresti sapere per creare i tuoi accessori personalizzati basati su questo.

  • Tutti gli accessori devono essere nominati *_accessory.js
  • Cambia l'indirizzo IP nella variabile opzioni in alto sul tuo server MQTT
  • Se hai un nome di dispositivo diverso, cerca / sostituisci tutte le istanze di "officelight"Con il nome univoco del dispositivo. È possibile effettuare una ricerca / sostituzione in Nano premendo CTRL e \, digitando il termine da trovare, il termine da sostituire, quindi premere UN (intendendo tutte le istanze). Scorri ciascuno di questi per apprendere con precisione quali variabili vengono aggiornate.
  • Crea un nome utente esadecimale univoco per l'accessorio (light.username = "1B: 2B: 3C: 5D: 6E: FF";)
  • Non modificare il codice PIN. Segue un formato specifico e, a meno che tu non sappia cosa stai facendo, non sarà in grado di accoppiarlo. Non c'è problema a mantenerli uguali tra le luci.
  • Puoi aggiungere al tuo dispositivo un "nome Siri" diverso quando li aggiungi all'app Elgato Eve e modificarli in qualsiasi momento in modo da non rimanere bloccato nella scelta iniziale. Non è necessario modificare i file di configurazione o riavviare il server.
  • Dopo aver ottenuto più partite, puoi utilizzare l'app Elgato Eve per raggrupparle per stanza o per creare scene specifiche composte da più azioni complesse. Le scene possono consistere in più azioni, come: accendere la luce dell'ufficio, ridurla al 25%, renderla rossa e attivare la macchina da caffè.

Dovrai aggiungere di nuovo il tuo nuovo accessorio tramite l'app HomeKit di tua scelta.

Infine, vogliamo eseguire la nostra app HAP-NodeJS ogni volta che il Pi viene riavviato. Aggiungi quanto segue al tuo etc / rc.local file, proprio prima del uscita 0.

nodo sudo /home/pi/HAP-NodeJS/Core.js  dev / null &

Puoi vedere che l'ho combinato con alcuni altri comandi che ho già impostato per l'avvio all'avvio.

nodo run rclocal all'avvio

Se è la prima volta che usi rc.local, potresti doverlo impostare come eseguibile:

sudo chmod 755 /etc/rc.local

Se per qualche motivo è necessario eseguirlo nuovamente in modalità debug, è possibile interrompere l'app Node in esecuzione con:

nodo killall

Un ultimo passaggio: vai alla directory degli accessori ed elimina GarageDoorOpener_accessory.js. Al momento della stesura di questo documento è errato e causerà la rottura del server dopo un po '.

Cosa controllerai con Siri?

Ora che hai capito le nozioni di base, non c'è davvero alcun limite a ciò che puoi controllare: se puoi codificarlo in Javascript, puoi creare il tuo file accessorio. C'è così tanto potenziale qui, penso che ti divertirai molto. Fammi sapere nei commenti cosa ti viene in mente!

James ha una laurea in Intelligenza Artificiale ed è certificato CompTIA A + e Network +. È lo sviluppatore principale di MakeUseOf e trascorre il suo tempo libero giocando a paintball e giochi da tavolo VR. Costruisce PC da quando era un bambino.