Come creare una luce Wi-Fi controllata da un ricevitore Siri

Come creare una luce Wi-Fi controllata da un ricevitore Siri / Fai da te

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

Tristemente, intendo una manciata letterale - tutto ciò che hai già comprato probabilmente non è compatibile. Tuttavia, il protocollo è già stato decodificato e un emulatore open source per l'API HomeKit è disponibile: o in inglese semplice, ora puoi creare “falso” I dispositivi HomeKit e Siri li controllano come qualsiasi altro accessorio HomeKit ufficiale.

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

Ecco di cosa avrai bisogno:

  • Raspberry Pi (Ho usato un RPi2, c'è una piccola differenza nelle versioni di Node da installare data l'architettura ARM aggiornata - vedi le note più tardi).
  • Un broker MQTT installato su Raspberry Pi. Vedi la sezione “Installa Mosquitto sul tuo Pi” nella mia guida OpenHAB parte 2 Guida introduttiva di OpenHAB Parte 2: ZWave, MQTT, regole e grafici OpenHAB Guida per principianti Parte 2: ZWave, MQTT, regole e grafici OpenHAB, il software di domotica open source, supera di gran lunga le capacità di altri sistemi di automazione domestica sul mercato - ma non è facile da installare. In effetti, può essere addirittura frustrante. Leggi di più . Non è necessario che sia installato in modo specifico sul Pi - puoi anche utilizzare un server MQTT basato su cloud, ma poiché abbiamo comunque bisogno di un Pi per questo tutorial, è conveniente.
  • NodeMCU v2 (compatibile Arduino)
  • LED Neopixel (raccomando 4 pixel per i test, quindi puoi aggiungere un alimentatore esterno e aggiungerne quanti ne vuoi)

Installazione di HomeKit Bridge

Installeremo l'applicazione NodeJS chiamata HAP-NodeJS al Raspberry Pi: questo costituirà un ponte tra le richieste di HomeKit e i dispositivi Wi-Fi. Configureremo questo ponte con un accessorio per ora, ma puoi aggiungerne quanti ne vuoi.

In realtà sto installando questo sul mio server di casa esistente con OpenHAB - spero di collegare i due insieme in un secondo momento, ma per ora, so che possono coesistere sullo stesso Raspberry Pi. Se stai facendo lo stesso, per ogni evenienza, crea un backup clone della tua scheda SD Pi più semplice Facilmente clona la tua scheda SD per un calcolo senza problemi di Raspberry Pi Facilmente clona la tua scheda SD per un calcolo senza problemi di Raspberry Pi Se ne hai uno Scheda SD o diversi, una cosa che ti servirà è la possibilità di eseguire il backup delle tue carte per evitare i problemi che si verificano quando il tuo Raspberry Pi non si avvia. Leggi di più . Se tutto va storto, puoi ripristinarlo.

Inizia facendo un aggiornamento completo dal terminale o una sessione SSH Configurazione del tuo Raspberry Pi per l'uso senza testa con SSH Configurazione del tuo Raspberry Pi per l'uso senza testa con SSH Il Raspberry Pi può accettare comandi SSH quando è connesso a una rete locale (tramite Ethernet o Wi-Fi), che consente di configurarlo facilmente. I vantaggi di SSH vanno oltre a sconvolgere lo screening quotidiano ... Per saperne 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 di base 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 è veramente vecchia ora e non funzionerà. Invece, visita nodejs.org, vai al download / stampa / ultima v5.x.0 / directory e controllare qual è il collegamento per la versione più recente. Stai cercando linux-armv7l per Raspberry Pi 2, o linuxarmv6l per i modelli RPi originali. Quindi, regolando gli URL e i nomi delle directory secondo necessità, 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 la v5.5 (o qualsiasi altra cosa che è stata scaricata).

Successivamente, abbiamo alcuni moduli Node da installare.

sudo npm install -g npm sudo npm install -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:

git clone https://github.com/KhaosT/HAP-NodeJS.git cd HAP-NodeJS npm ricostruzione sudo npm installazione nodo-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, installare 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 installa srp sudo npm installa mdns --unsafe-perm sudo npm installa debug sudo npm installa ed25519 --unsafe-perm sudo npm installa curve25519 --unsafe-perm 

Questo dovrebbe essere tutto. Prova a eseguire l'emulatore con:

nodo Core.js 

Se ricevi errori dicendo che non è possibile trovare tale e tale modulo, basta usare il sudo npm install comando di nuovo, e apponi il nome di qualunque modulo mancasse. Supponendo che tutto vada bene, dovresti vedere alcuni avvertimenti e il tuo bridge HomeKit sarà in esecuzione. Ecco come appare il successo:

Puoi vedere immediatamente che è già stato creato un set di 6 dispositivi contraffatti. Li utilizzeremo come punto di partenza per la nostra luce Wi-Fi in seguito, ma useremo quelli per ora da testare. Puoi anche vedere più informazioni di debug se avvii il server con:

DEBUG = * nodo Core.js

Ora passa a un dispositivo Apple in grado di eseguire Siri. Apple curiosamente non fornisce un'applicazione HomeKit di riserva ad eccezione degli sviluppatori registrati, quindi scarica l'app Elgato Eve, un'applicazione di gestione di HomeKit che ti consente di aggiungere (anche non Elgato) dispositivi alla tua rete HomeKit.

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

Ti dirà di cercare un unico “Codice di configurazione HomeKit” Il prossimo. Ignoralo e colpisci “Aggiungi a [nome della tua casa]”.

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

Scegliere di inserire il codice manualmente e digitare quanto segue:

031-45-154

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

Infine, torna alla sessione SSH in cui è in esecuzione HAP-NodeJS. Potresti aver già visto un messaggio che dice “Siamo su?” - questa è l'app Elgato che esegue il polling dello stato di illuminazione. Apri Siri e diglielo “Accendi la luce finta”, quindi prova a spegnerlo di nuovo. Si spera che vedrete 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 effettiva, prima di tornare a configurare nuovamente il ponte.

Costruire una luce Wi-Fi

Il lato hardware di questo passaggio è sorprendentemente semplice se iniziamo con solo quattro Neopixel, poiché 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 di Neopixel al pin VIN, da terra blu a GND e il cavo di segnale verde al pin contrassegnato con D2 sul NodeMCU. Stai molto attento alla polarità: se mischi il terreno e VIN, invierai un'ondata di potenza attraverso la tua tavola e distruggerla nel processo.

Se il tuo ambiente Arduino non è ancora configurato per funzionare con ESP8266, vai avanti e segui la guida nel mio ESP8266: Arduino Killer Incontra l'Arduino Killer: ESP8266 Incontra l'Arduino Killer: ESP8266 E se ti dicessi che c'è un dev compatibile con Arduino scheda con Wi-Fi integrato per meno di $ 10? Bene, c'è. Leggi la guida di più e torna dopo aver confermato che funziona. Installa queste librerie aggiuntive:

  • lmroy's PubSubClient
  • Adofruit's NeoPixels

Il codice che stiamo usando è una modifica dell'utente di Github Aditya Tannu - Ho rimosso la superflua funzionalità di aggiornamento over-the-air, aggiunta in alcune funzioni HSV che mancavano, e reso più facile creare più luci cambiando solo un variabile singola. Se non riesci a vedere il codice incorporato qui sotto, lo troverai in questo Gist.

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

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

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

Per ora utilizziamo solo 4 Neopixel, ma è possibile aumentare il numero in seguito se li si alimenta da una fonte esterna. Carica il codice e testiamolo: usa il tuo client MQTT preferito per inviare comandi (modifica il nome dell'host nelle seguenti istruzioni se lo hai cambiato).

  • Tu puoi mandare sopra alla radice officelight canale per accenderlo. Invia qualsiasi altro valore a quel canale per disattivarlo.
  • È possibile inviare un numero da 0-360 a officelight / hue per cambiare il colore. Stiamo utilizzando lo 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 per la saturazione. Un valore di 100 sarà completamente saturo (cioè un colore solido) e lo zero sarà bianco puro, indipendentemente dalla tonalità specificata.

Una volta confermato il funzionamento del dispositivo di illuminazione comandato da MQTT, andare avanti.

Configurazione di un nuovo accessorio HomeKit

Ritorna al Raspberry Pi e termina l'app HAP-NodeJS se non lo hai già fatto. Vai a /Accessori directory. Per semplificare, puoi scaricare direttamente il codice che è già stato abbinato a “officelight” apparecchio digitando quanto segue:

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

Essenzialmente, si tratta di un duplicato dell'accessorio di luci predefinito, con alcuni nomi di variabili modificati (ancora, adattati dal lavoro di Adysan, semplificati 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
  • Modificare l'indirizzo IP nella variabile opzioni in alto sul server MQTT
  • Se hai un nome diverso, cerca / sostituisci tutte le istanze di “officelight” con il tuo nome unico fisso. Puoi fare una ricerca / sostituzione in Nano premendo CTRL e \, digitando il termine per trovare, il termine da sostituire, quindi premere UN (significa tutte le istanze). Passare attraverso ciascuno di questi per imparare con precisione quali variabili vengono aggiornate.
  • Creare 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 accoppiare. Non c'è alcun problema nel mantenerli uguali tra le luci.
  • Puoi dare il tuo dispositivo diverso “Nome Siri” quando li aggiungi all'app Elgato Eve e li modifichi in qualsiasi momento in modo da non essere bloccato con la tua scelta iniziale. Non è necessario modificare i file di configurazione o riavviare il server.
  • Una volta che hai più proiettori, puoi utilizzare l'app Elgato Eve per raggrupparli per stanza o per creare scene specifiche composte da più azioni complesse. Le scene possono consistere in più azioni, come ad esempio: 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 di tua scelta HomeKit.

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

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

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

Se è la prima volta che usi rc.local, potrebbe essere necessario impostarlo come eseguibile:

sudo chmod 755 /etc/rc.local

Se per qualche motivo hai bisogno di eseguirlo nuovamente in modalità di debug, puoi uccidere l'app Node in esecuzione con:

killall node

Un ultimo passaggio: accedere alla directory degli accessori ed eliminare il file GarageDoorOpener_accessory.js. Al momento della stesura di questo, si tratta di un bug e il server si romperà dopo un po '.

Cosa controllerai con Siri?

Ora che hai le nozioni di base, non c'è davvero 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. Fatemi sapere nei commenti cosa vi viene in mente!

Scopri di più su: Siri, Smart Lighting.