Il sogno di ogni appassionato di casa intelligente è una casa con cui puoi parlare, ma la realtà è molto lontana da ciò.
Amazon Echo, ad esempio, ti consente di utilizzare qualsiasi numero di funzionalità controllate dalla voce, ma il dialogo deve essere avviato da te con una domanda: non puoi semplicemente farle annunciare un messaggio importante.
Puoi farlo con un sistema Sonos e un po 'di magia Raspberry Pi fai da te. Oggi ti mostrerò come impostare le notifiche vocali sul tuo sistema Sonos, introducendo un paio di utili ricette IFTTT, integrazioni OpenHAB e altro ancora, per utilizzare la funzione di notifica.
Si noti che esiste un binding nativo di Sonos per OpenHAB disponibile, ma è noto che causa problemi di memoria a causa di una libreria uPnP difettosa. Ti suggerirei di saltare questo per ora, e invece di usare il metodo in questo tutorial.
Un Raspberry Pi con Raspian linux è ideale per questo tutorial, ma dovrebbe funzionare anche su qualsiasi server domestico basato su linux in esecuzione. In questo caso, sto utilizzando lo stesso Raspberry Pi che esegue OpenHAB, il sistema di automazione domestica open source Guida introduttiva di OpenHAB Home Automation su Raspberry Pi Introduzione a OpenHAB Home Automation su Raspberry Pi OpenHAB è una piattaforma di automazione domestica matura e open source che funziona su una varietà di hardware ed è indipendente dal protocollo, il che significa che può connettersi a quasi tutti gli hardware di automazione domestica sul mercato oggi. Leggi di più . Il resto di questo tutorial presuppone che tu stia eseguendo anche questo su un Raspberry Pi, e che abbia una finestra terminale locale aperta sul desktop, o che sia loggato in remoto usando SSH Configurare il tuo Raspberry Pi per l'uso senza testa con SSH Configurare il tuo Raspberry Pi per uso senza testa con SSH Il Raspberry Pi può accettare comandi SSH quando è connesso a una rete locale (tramite Ethernet o Wi-Fi), consentendo di configurarlo facilmente. I vantaggi di SSH vanno oltre a sconvolgere lo screening quotidiano ... Per saperne di più.
Avrai bisogno
- Raspberry Pi 2 (i vecchi modelli dovrebbero funzionare, ma verificare le modifiche specifiche nelle istruzioni)
- Almeno un altoparlante Sonos (altri sistemi audio non sono supportati, questo è un tutorial solo per Sonos)
- Account gratuito su VoiceRSS.org. Registrati quindi trova la tua chiave API, di cui avremo bisogno in seguito per generare i messaggi vocali.
Installa il nodo più recente
Verifica quale versione del Nodo hai digitando:
node -v
Si noti che la versione 6 non è supportata. Se hai il Nodo 6, devi prima rimuoverlo, quindi seguire le istruzioni di seguito per installare v5.5.
Se non hai la v5 o se ricevi un errore non trovato, segui queste istruzioni per installare il nodo. Il seguente comando presuppone un Raspberry Pi 2; per i modelli precedenti, utilizzare armv6l anziché armv7l .
wget https://nodejs.org/download/release/latest-v5.x/node-v5.12.0-linux-armv7l.tar.gz tar -xvf node-v5.12.0-linux-armv7l.tar.gz cd node-v5.12.0-linux-armv7l sudo cp -R * /usr/local
Confermare nuovamente digitando:
node -v
E dovresti vedere la v5.12 (o qualunque altra cosa è stata scaricata).
Successivamente, abbiamo alcuni moduli Node da installare. Vogliamo anche il Node Package Manager.
sudo apt-get install npm sudo npm install -g npm sudo npm install -g node-gyp
Questo è il pre-requisito fuori strada, ora sulle cose divertenti.
API HTTP Sonos
L'API HTTP Sonos crea un server web sulla rete locale, che ci consente di eseguire il ping di un URL con un messaggio per annunciare su un Sonos (e controllarlo da remoto se lo desideri, sebbene questo tutorial si concentri solo sull'aspetto della notifica vocale).
git clone https://github.com/jishi/node-sonos-http-api.git sonos cd sonos npm install --production npm start
Se viene visualizzato un messaggio relativo a tale modulo non trovato, è sufficiente eseguire un'altra installazione di npm e il nome del modulo, quindi provare nuovamente npm . Se si verificano errori relativi a "richiede un compilatore C ++ 11", correggere con i seguenti 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
Alla fine dovresti vedere qualcosa di simile a questo:
Il server è ora in esecuzione, interfacciato con Sonos. Il formato di questa API è semplice:
http: // [SERVER IP]: 5005 / [ROOM NAME] / [ACTION]
O come esempio specifico:
http://192.168.1.99:5005/kitchen/playlist/chillout
L'azione che ci interessa è il comando "say", usato come segue:
http://192.168.1.99:5005/kitchen/say/make%20use%20of%20is%20awesome/en-gb
Sentirai un messaggio di errore su come registrarti a una chiave API su VoiceRSS.org. Avresti dovuto già farlo, quindi digita quanto segue e incolla la chiave API come appropirato:
nano settings.json
{
"voicerss":"YOURAPIKEY" }
(Premi CTRL-X, Y, per salvare il file)
Riavvia il server e esegui nuovamente il ping dell'URL. Dopo pochi secondi, dovresti sentire una deliziosa voce inglese (anche se cambi la fine dell'URL in en-us se preferisci). Per far ripartire il server API HTTP Sonos al riavvio di Pi:
sudo nano /etc/rc.local
Aggiungi una linea prima dell'uscita 0 :
sudo node /home/pi/sonos/server.js< /dev/null &
Ora hai la possibilità di creare un messaggio vocale da qualsiasi punto della rete locale semplicemente facendo il ping di un URL, quindi le possibilità sono aperte a questo punto. Se stai lottando per le idee, continua a leggere per alcune notifiche utili che ho impostato.
Notifiche OpenHAB su eventi
Facciamo un esempio semplice: rilevamento del movimento. Questo è un caso di uso comune per l'attivazione delle luci, ma si potrebbe desiderare una notifica vocale anche se si tratta di un sensore di movimento in un'area a basso traffico o, forse, di un avvertimento in avanti che qualcuno sta risalendo il percorso del giardino.
rule "Garden motion detected" when Item Garden_Motion changed then var String message = "You have a visitor" sendHttpGetRequest("http://localhost:5005/kitchen/say/"+message.encode("UTF-8")+"/en-gb") end
Dovresti vedere come puoi integrare queste semplici notifiche vocali in una delle tue regole, ma proviamo qualcosa di un po 'più complesso.
Report meteo giornaliero da IFTTT a OpenHAB a Sonos
In questa ricetta, avremo Sonos per annunciare un bollettino meteorologico giornaliero al tuo orario preferito.
È necessario il collegamento My.OpenHAB abilitato, poiché ciò crea una connessione sicura tra il server OpenHAB interno e il servizio IFTTT esterno. Se non lo hai già fatto, puoi fare riferimento alla parte 1 della nostra guida OpenHAB Introduzione a OpenHAB Home Automation su Raspberry Pi Introduzione a OpenHAB Home Automation su Raspberry Pi OpenHAB è una piattaforma di automazione domestica matura e open source che viene eseguita su una varietà di hardware ed è indipendente dal protocollo, il che significa che può connettersi a quasi tutti gli hardware di automazione domestica sul mercato oggi. Leggi di più per le istruzioni complete, altrimenti supporrò che tu abbia già configurato con la persistenza abilitata per tutti gli elementi.
Quindi, crea un nuovo oggetto String nell'installazione di OpenHAB, che memorizzerà il rapporto del tempo giornaliero. Prima che questo sia visibile nel canale My.OpenHAB, sarà necessario inizializzarlo con alcune variabili predefinite. Effettua il ping del seguente URL (cambia raspberrypi.local sul tuo server OpenHAB, o semplicemente usa il suo indirizzo IP, e Todays_Weather per qualsiasi cosa tu abbia chiamato String):
http://raspberrypi.local:8080/CMD?Todays_Weather=Sunny
Accedi a My.OpenHAB e controlla l'elenco degli articoli per assicurarti che la variabile sia stata esportata.
Torna su IFTTT, crea una nuova ricetta e usa il canale Meteo come innesco all'ora preferita del giorno. Dovrai prima impostare la tua posizione se non l'hai mai usata prima.
Seleziona My.OpenHAB come azione e scegli Todays_Weather come variabile da aggiornare.
Per ora, scegli il prossimo spazio di mezz'ora per i test: puoi aggiornare la ricetta più tardi, una volta che sai che funziona.
Abbastanza sicuro, al momento del test (in effetti, un po 'prima), ho ottenuto le previsioni di oggi aggiornate con successo.
2016-02-27 10:28:01.689 [DEBUG] [ooimiMyOpenHABServiceImpl] - Received command Mostly Cloudy today! With a high of 7C and a low of 1C. Repeat. Conditions will be Mostly Cloudy today, with a high of 7C and a low of 1C. for item Todays_Weather 2016-02-27 10:28:01.697 [DEBUG] [ooimiMyOpenHABServiceImpl] - store(Todays_Weather), state = Mostly Cloudy today! With a high of 7C and a low of 1C. Repeat. Conditions will be Mostly Cloudy today, with a high of 7C and a low of 1C.
In seguito, abbiamo bisogno di una regola OpenHAB per inviare questa variabile all'URL "say" di Sonos. Il seguente dovrebbe farlo:
rule "Announce daily weather report" when Item Todays_Weather received update then sendHttpGetRequest("http://localhost:5005/kitchen/say/"+Todays_Weather.state.toString.encode("UTF-8")+"/en-gb") end
Questo è abbastanza semplice: ogni volta che la variabile Todays_Weather viene aggiornata (che sarà, automaticamente, alle 8 del mattino ogni giorno), eseguire il ping dell'URL. Usiamo la funzione di codifica encode ("UTF-8") per rendere la frase da IFTTT adatta per l'uso in un URL. Per testare manualmente questa parte del sistema, utilizzare nuovamente l'API HTTP di OpenHAB:
http://raspberrypi.local:8080/CMD?Todays_Weather=Cloudy, with a chance of meatballs.
Connetti a IFTTT senza OpenHAB, utilizzando If-This-Then-Node
Infine, diamo un'occhiata a come connettersi da qualsiasi ricetta IFTTT senza l'intermediario OpenHAB. Invece, installeremo un altro server web e lo pubblicheremo su Internet aperto. Questo non è esente da rischi: qualsiasi tipo di server aperto è un rischio per la sicurezza, ma stiamo mitigando questo non eseguendo uno stack completo del server, solo un piccolo servizio specifico che accetta solo determinati comandi in un formato di pacchetto dati JSON sicuro (quindi no Saranno possibili attacchi di SQL injection o di autenticazione). Una volta terminato, avrai un URL pubblico a cui puoi inviare messaggi dal canale IFTTT Maker.
Inizia impostando uno dei tanti servizi DNS dinamici gratuiti 5 I migliori provider DNS dinamici che puoi cercare gratuitamente Oggi 5 migliori provider DNS dinamici che puoi cercare gratuitamente Oggi DynDNS è sempre stato un punto di riferimento quando sono stati creati i DNS dinamici gratuiti. Ma ora che non c'è più, ci sono buone alternative? Ci sono sicuro. Leggi di più là fuori - Raccomando DuckDNS, in particolare perché fornisce una semplice serie di istruzioni per Raspberry Pi, che consente di aggiornare automaticamente il tuo indirizzo IP. Segui questi e ricorda il tuo URL per i prossimi passi. Il router potrebbe anche avere una funzione DNS dinamica integrata, quindi controlla prima lì. Nel mio caso, posso ottenere gratuitamente un URL * .mynetgear.com, quindi l'ho usato.
Successivamente, trova il port forwarding del router Che cos'è il port forwarding e come può aiutarmi? [MakeUseOf Explains] Che cos'è il port forwarding e come può aiutarmi? [MakeUseOf Explains] Piangi un po 'dentro quando qualcuno ti dice che c'è un problema di port forwarding ed è per questo che la tua nuova app non funzionerà? La tua Xbox non ti permetterà di giocare, i tuoi download torrent rifiutano ... Leggi di più la pagina di configurazione; qui è dove diremo cosa fare con le richieste in arrivo. Inoltra tutte le richieste HTTP (porta 80) alla porta 1337 sul tuo server Raspberry Pi. Suppongo che tu abbia già un indirizzo IP riservato per il tuo Raspberry Pi - se non lo hai, controlla la pagina di configurazione del tuo router per gli IP riservati mentre sei lì, perché non lo fai per cambiare la prossima settimana e perché il server smetta improvvisamente di funzionare.
Ora per installare l'ultimo bit del software del server.
https://github.com/sebauer/if-this-then-node.git cd if-this-then-node/ npm install node server.js
Dovresti vedere quanto segue.
Va bene, questo significa che dobbiamo aggiornare i nostri dettagli. Apri config.js in Nano e modifica quei dettagli in qualcosa di diverso da quello predefinito, quindi salva. Quando esegui di nuovo il server, dovresti vedere questo:
Grande. Verifica che la tua macchina sia accessibile dal mondo esterno digitando il tuo nome host DNS dinamico e aggiungi / ifttn / alla fine dell'URL. Se tutto funziona, il messaggio "IFTTN - if-this-then-node Versione 2.0.1 è attivo e funzionante!" Verrà visualizzato nel tuo browser. Ancora una volta, per eseguire questo script all'avvio, modifica il file /etc/rc.local e aggiungi:
sudo node /home/pi/if-this-then-node/server.js< /dev/null &
If-This-Then-Node funziona tramite plugin: ce ne sono alcuni di default forniti, ma non ci interessano. Invece, scarica questo plugin personalizzato che ho scritto per te con i seguenti comandi.
cd plugins wget https://gist.githubusercontent.com/jamesabruce/4af8db24ba3452b94877/raw/d11c1cff3aa44dbb6a738eeb15202f3db461de75/sonos.js
Dovrai anche installare il modulo di richiesta .
npm install request
Quindi riavviare il server. Il plugin è abbastanza semplice, ma un po 'diverso dall'URL utilizzato fino ad ora. In questo caso, ho utilizzato l'azione speciale "sayall", che invia il messaggio a ogni dispositivo Sonos.
request('http://localhost:5005/sayall/'+params.message+'/en-gb', function (error, response, body)
Se preferisci essere in grado di indirizzare dispositivi specifici, sostituisci la linea con:
request('http://localhost:5005/'+params.device+'/say/'+params.message+'/en-gb', function (error, response, body)
Aggiungi un altro parametro di linea chiamato dispositivo alla richiesta JSON di seguito in cui specificare il nome del dispositivo Sonos.
Per verificarlo, sto usando l'app IFTTT "Do". Crea una nuova ricetta, naviga fino ai canali e seleziona il canale Maker .
Crea una nuova ricetta. Inserisci l'URL che hai configurato in precedenza da un provider DNS dinamico gratuito (incluso / ifttn / alla fine dell'URL. Non dimenticare quelle barre). Selezionare la richiesta POST, il contenuto dell'applicazione / json e il corpo del messaggio come segue, sostituendo tutte le variabili secondo necessità con quelle precedentemente configurate:
{ "action":"sonos", "user":"YOURUSER", "pw":"YOURPASSWORD", "message":"Incoming message for everyone: Dinner is ready! Repeat. Dinner is ready. Get your asses upstairs now." }
Ora ho un pulsante prontamente accessibile che annuncerà il messaggio su ogni dispositivo Sonos nella casa. Ovviamente puoi associarlo a qualsiasi canale IFTTT che desideri creare un messaggio personalizzato usando le variabili di quel canale. Dovresti anche essere in grado di replicare il bollettino meteorologico dall'alto senza utilizzare OpenHAB ora, anche se ha richiesto uno sforzo extra per installare un altro server.
Nota: gli hacker effettueranno automaticamente la scansione . Succede sempre, ma se stai visualizzando i log, può sembrare allarmante. Qui sotto puoi vedere qualcuno che cerca sistematicamente di verificare se una qualsiasi delle interfacce PHPMyAdmin standard fosse accessibile. Quale non erano. Non allarmarti se vedi qualcosa di simile. È l'equivalente di internet di chiamare a caso numeri di telefono casuali per vedere se c'è qualcuno.
Cosa annuncerai?
Ora dovresti avere gli strumenti e il kwowledge per bagnare costantemente tutta la tua casa con notifiche vocali su tutto ciò che potresti eventualmente pensare. Chi ha bisogno della musica? Il tuo unico limite è di 350 richieste giornaliere da parte di VoiceRSS.org - ma è circa una ogni 4 minuti, quindi dovresti stare bene.
Quindi cosa farai con questo? Condividi le tue idee o la ricetta IFTTT nei commenti!
Crediti immagine: caffè e donna di S_Photo via Shutterstock