Come inviare notifiche vocali a Sonos Speakers
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 funzioni controllate dalla voce, ma il dialogo deve essere avviato da te con una domanda: non puoi semplicemente farle annunciare un messaggio importante.
tu può fai questo 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 l'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:
nodo -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 più vecchi, usare armv6l invece di 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:
nodo -v
E dovresti vedere la v5.12 (o qualsiasi altra cosa che è 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 vedi un messaggio su tale e tale modulo non trovato, fallo un altro installazione di npm e il nome del modulo, quindi prova inizio di npm ancora. Se riscontri errori relativi a “richiede un compilatore C ++ 11”, risolvere 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 è la “dire” comando, 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 tua chiave API come appropirato:
nano settings.json
"voicers": "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 it-it se preferisci). Per far ripartire il server API HTTP Sonos al riavvio di Pi:
sudo nano /etc/rc.local
Aggiungi una linea prima del 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 potresti volere anche una notifica vocale 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.
regola "Rilevato movimento giardino" quando l'oggetto Garden_Motion è stato modificato, quindi var String message = "Hai un visitatore" sendHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + message.encode ("UTF-8") + " / en-gb ") fine
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 (modifica raspberrypi.local al tuo server OpenHAB, o semplicemente usa il suo indirizzo IP, e Il tempo di oggi a qualunque cosa abbiate chiamato String):
http: //raspberrypi.local: 8080 / CMD Todays_Weather = Soleggiato
Accedi a My.OpenHAB e controlla Elementi elenco per garantire 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.
27-02-2016 10: 28: 01.689 [DEBUG] [o.o.i.m.i.MyOpenHABServiceImpl] - Comando ricevuto Mostly Cloudy oggi! Con un massimo di 7C e un minimo di 1C. Ripetere. Le condizioni saranno prevalentemente Nuvoloso oggi, con un massimo di 7 gradi e un minimo di 1 ° C. per articolo Todays_Weather 2016-02-27 10: 28: 01.697 [DEBUG] [o.o.i.mi.MyOpenHABServiceImpl] - store (Todays_Weather), stato = Mostly Cloudy oggi! Con un massimo di 7C e un minimo di 1C. Ripetere. Le condizioni saranno prevalentemente Nuvoloso oggi, con un massimo di 7 gradi e un minimo di 1 ° C.
In seguito, abbiamo bisogno di una regola OpenHAB per inviare questa variabile a Sonos “dire” URL. Il seguente dovrebbe farlo:
regola "Annunciare il bollettino meteorologico giornaliero" quando Item Todays_Weather ha ricevuto l'aggiornamento, quindi inviaHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + Todays_Weather.state.toString.encode ("UTF-8") + "/ en-gb ") fine
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. Noi usiamo codificare(“UTF-8”) Funzione di stringa 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 = Nuvoloso, con possibilità di polpette.
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 un * .mynetgear.com URL gratuito, 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 Installa nodo server.js
Dovresti vedere quanto segue.
Va bene, questo significa che dobbiamo aggiornare i nostri dettagli. Aprire 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 file 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 richiesta modulo.
richiesta di installazione di npm
Quindi riavviare il server. Il plugin è abbastanza semplice, ma un po 'diverso dall'URL utilizzato fino ad ora. In questo caso, ho usato lo speciale “sayall” azione, che invia il messaggio a ogni dispositivo Sonos.
richiesta ('http: // localhost: 5005 / sayall /' + params.message + '/ en-gb', funzione (errore, risposta, corpo)
Se preferisci essere in grado di indirizzare dispositivi specifici, sostituisci la linea con:
richiesta ('http: // localhost: 5005 /' + params.device + '/ say /' + params.message + '/ en-gb', funzione (errore, risposta, corpo)
Aggiungi un altro parametro di linea chiamato dispositivo alla richiesta JSON di seguito in cui specificare il nome del dispositivo Sonos.
Per testare questo, sto usando l'IFTTT “Fare” pulsante Creare una nuova ricetta, navigare ai canali e selezionare il creatore canale.
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 quei tagli). Selezionare INVIARE richiesta, application / json contenuto e il corpo del messaggio come segue, sostituendo tutte le variabili secondo necessità con quelle precedentemente configurate:
"action": "sonos", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Messaggio in entrata per tutti: la cena è pronta! Ripeti, la cena è pronta. ".
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
Scopri di più su: Domotica, Sonos.