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

In questa guida, imparerai come creare una luce controllabile Wi-Fi e controllarla con Siri.

In questa guida, imparerai come creare una luce controllabile Wi-Fi e controllarla con Siri.
Annuncio pubblicitario

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 semplice inglese, ora puoi creare dispositivi HomeKit "falsi" e Siri li controllerà 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 per principianti OpenHAB Parte 2: ZWave, MQTT, Regole e grafici OpenHAB Guida per principianti Parte 2: ZWave, MQTT, regole e grafici OpenHAB, il software di automazione domestica 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 è molto vecchia ora e non funzionerà. Visita invece nodejs.org, vai alla directory download / release / latest-v5.x.0 / e verifica quale sia il link 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 qualunque sia l'ultima versione 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 del nodo / 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, usa di nuovo il comando sudo npm install e apponi il nome di qualsiasi modulo mancante. Supponendo che tutto vada bene, dovresti vedere alcuni avvertimenti e il tuo bridge HomeKit sarà in esecuzione. Ecco come appare il successo:

hap-nodejs installato

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'app 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 senza 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!

elgato eve 1

Ti dirà di cercare un "Codice di installazione HomeKit" univoco in seguito. Ignoralo e premi "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 ...

elgato eve 2

Scegliere di inserire il codice manualmente e digitare quanto segue:

 031-45-154 

Questo può essere trovato / modificato nel file Light_accessory.js, ma ne riparleremo più avanti. Aggiungi questo accessorio alla tua stanza predefinita, chiamalo Luce Falsa 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à visualizzato un messaggio che dice "Ci stiamo?": Questa è l'app Elgato che esegue il polling dello stato di illuminazione. Apri Siri e dille di "Accendi la luce falsa", 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. Fai molta attenzione alla polarità: se mischi il terreno e VIN, invierai un'ondata di potenza attraverso la tua tavola e distruggerla durante il processo.

Se il tuo ambiente Arduino non è ancora configurato per funzionare con ESP8266, vai avanti e segui la guida del mio ESP8266: Arduino Killer Incontra l'Arduino Killer: ESP8266 Incontra l'Arduino Killer: ESP8266 E se ti dicessi che c'è uno sviluppatore 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 (regola il nome dell'host nelle seguenti istruzioni se lo hai cambiato) .

  • Puoi inviare al canale ufficiale di root 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 pieno) 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. Passare alla directory / accessories . Per semplificare, 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 

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 denominati * _accessory.js
  • Modificare l'indirizzo IP nella variabile opzioni in alto sul server MQTT
  • Se hai un nome di dispositivo diverso, cerca / sostituisci tutte le occorrenze di " officelight " con il tuo nome univoco. È possibile eseguire una ricerca / sostituzione in Nano premendo CTRL e \, digitando il termine da trovare, il termine da sostituire, quindi premere A (ovvero tutte le istanze). Passare attraverso ciascuno di questi per imparare 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 accoppiare. Non c'è alcun problema nel mantenerli uguali tra le luci.
  • Puoi dare al tuo dispositivo un diverso "nome Siri" quando li aggiungi all'app Elgato Eve e modificarli in qualsiasi momento in modo da non rimanere 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 quanto segue al tuo file etc / rc.local, subito prima dell'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.

rclocal run node 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: accedi alla directory degli accessori ed elimina 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!

In this article