Annuncio pubblicitario

Il sogno di ogni appassionato di casa intelligente è una casa con cui puoi parlare, ma la realtà è molto lontana da quella.

Amazon Echo, ad esempio, ti consente di utilizzare un numero qualsiasi di funzioni a controllo vocale, ma il dialogo deve essere avviato da te con una domanda: non puoi semplicemente farle annunciare un messaggio importante.

tu può fallo 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, presentando un paio di utili ricette IFTTT, integrazioni OpenHAB e altro ancora, per utilizzare la funzione di notifica.

Tieni presente che è disponibile un binding Sonos nativo per OpenHAB, ma è noto che causa problemi di memoria a causa di una libreria uPnP difettosa. Suggerirei di saltarlo per ora e di utilizzare invece il metodo in questo tutorial.

Un Raspberry Pi che esegue Raspian linux è l'ideale per questo tutorial, ma dovrebbe funzionare anche su qualsiasi server home basato su Linux che hai in esecuzione. In questo caso, sto usando lo stesso Raspberry Pi che funziona

instagram viewer
OpenHAB, il sistema domotico open source Introduzione a OpenHAB Home Automation su Raspberry PiOpenHAB è una piattaforma di automazione domestica open source matura che funziona su una varietà di hardware ed è protocollo agnostico, nel senso 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 lo stia eseguendo anche su un Raspberry Pi e che abbia una finestra del terminale locale aperta sul desktop oppure accesso remoto tramite 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ù .

Avrai bisogno

  • Raspberry Pi 2 (i modelli precedenti dovrebbero funzionare, ma verificare la presenza di modifiche specifiche nelle istruzioni)
  • Almeno uno Altoparlante Sonos (altri sistemi audio non sono supportati, questo tutorial è solo per Sonos)
  • Account gratuito su VoiceRSS.org [non più disponibile]. Registrati quindi trova la tua chiave API, di cui avremo bisogno in seguito per generare i messaggi vocali.

Installa nodo più recente

Controlla quale versione di Node hai digitando:

nodo -v. 

Si noti che la versione 6 non è supportata. Se hai il nodo 6, devi prima rimuoverlo, quindi segui le istruzioni seguenti per installare la v5.5.

Se non hai la v5 o se ricevi un errore non trovato, segui queste istruzioni per installare Node. Il seguente comando presuppone un Raspberry Pi 2; per i modelli più vecchi, utilizzare 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. 

Conferma nuovamente digitando:

nodo -v

E dovresti vedere v5.12 (o qualsiasi altra cosa tu abbia scaricato).

Successivamente, abbiamo alcuni moduli Node da installare. Vogliamo anche Node Package Manager.

sudo apt-get install npm. sudo npm installa -g npm. sudo npm installa -g node-gyp. 

Questi sono i prerequisiti fuori mano, ora sulle cose divertenti.

API HTTP Sonos

Il API HTTP Sonos crea un server Web sulla rete locale, che ci consente di eseguire il ping di un URL con un messaggio da annunciare su a Sonos (e per controllarlo da remoto se vuoi, anche se questo tutorial si concentra solo sulla notifica vocale aspetto).

clone git https://github.com/jishi/node-sonos-http-api.git Sonos. cd sonos. npm install --produzione. inizio npm. 

Se vedi un messaggio su tale modulo non trovato, fai un altro npm install e il nome del modulo, quindi provare inizio npm ancora. Se si verificano errori relativi a "Richiede un compilatore C ++ 11", correggi 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 del genere:

sonos-http-api funzionante

Il server è ora in esecuzione, si interfaccia con Sonos. Il formato di questa API è semplice:

http://[SERVER IP]: 5005 / [NOME CAMERA] / [AZIONE]

O come esempio specifico:

http://192.168.1.99:5005/kitchen/playlist/chillout

L'azione che ci interessa è il comando "dire", utilizzato come segue:

http://192.168.1.99:5005/kitchen/say/make%20use%20of%20is%20awesome/en-gb

Sentirai un messaggio di errore sulla necessità di registrarti a una chiave API su VoiceRSS.org. Dovresti averlo già fatto, quindi digita quanto segue e incolla la tua 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 alcuni secondi, dovresti sentire una deliziosa voce in inglese (sebbene cambi la fine dell'URL in it-it se preferisci). Per riavviare il server API HTTP Sonos al riavvio del Pi:

sudo nano /etc/rc.local

Aggiungi una riga prima di uscita 0:

nodo sudo /home/pi/sonos/server.js  dev / null &

Ora hai la possibilità di creare un messaggio vocale da qualsiasi punto della rete locale semplicemente eseguendo il ping di un URL, quindi le possibilità sono spalancate a questo punto. Se sei alla ricerca di idee, continua a leggere per alcune utili notifiche che ho creato.

Notifiche OpenHAB sugli eventi

Facciamo prima un semplice esempio: rilevazione del movimento. Questo è un caso d'uso comune per l'attivazione delle luci, ma potresti volere anche una notifica vocale se è a sensore di movimento in una zona a basso traffico, o forse come avvertimento in avanti che qualcuno sta arrivando nel giardino sentiero.

regola "Rilevato movimento del giardino" quando Item Garden_Motion è cambiato, allora var String message = "Hai un visitatore" sendHttpGetRequest (" http://localhost: 5005 / cucina / dire / "+ message.encode (" UTF-8 ") +" / it-IT ") fine.

Dovresti vedere come puoi integrare queste semplici notifiche vocali in una qualsiasi delle tue regole, ma proviamo qualcosa di un po 'più complesso.

Bollettino meteorologico giornaliero da IFTTT a OpenHAB a Sonos

In questa ricetta, Sonos annuncerà un bollettino meteorologico giornaliero all'orario che preferisci.

Avrai bisogno del Mio. Associazione OpenHAB abilitata, poiché crea una connessione sicura tra il server OpenHAB interno e il servizio IFTTT esterno. Configuralo se non l'hai già fatto - puoi fare riferimento a parte 1 della nostra guida OpenHAB Introduzione a OpenHAB Home Automation su Raspberry PiOpenHAB è una piattaforma di automazione domestica open source matura che funziona su una varietà di hardware ed è protocollo agnostico, nel senso che può connettersi a quasi tutti gli hardware di automazione domestica sul mercato oggi. Leggi di più per le istruzioni complete, altrimenti suppongo che tu abbia già impostato la configurazione con la persistenza abilitata per tutti gli elementi.

Successivamente, crea un nuovo oggetto String nell'installazione di OpenHAB, che memorizzerà il bollettino meteorologico giornaliero. Prima questo è visibile nel Mio. Canale OpenHAB, dovremo inizializzarlo con alcune variabili predefinite. Esegui 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 tu abbia chiamato la stringa):

http://raspberrypi.local: 8080 / CMD? Todays_Weather = Soleggiato 

Accedi a My. OpenHAB [URL rotto rimosso] e controllare il Elementi elenco per assicurarsi che la variabile sia stata ora esportata.

il mio controllo di esportazione dell'oggetto openhab

Torna su IFTTT, crea una nuova ricetta e usa il Canale meteo come trigger all'ora del giorno preferita. Dovrai impostare prima la tua posizione se non l'hai mai utilizzata prima.

Seleziona il mio. OpenHAB come azione e scegli Todays_Weather come variabile da aggiornare.

bollettino meteorologico ifttt

Per ora, scegli la prossima mezz'ora per il test: puoi aggiornare la ricetta in seguito una volta che sai che funziona.

Abbastanza sicuro, al momento del test (in effetti, un po 'prima), ho aggiornato le previsioni di oggi con successo.

27/02/2016 10: 28: 01.689 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - Comando ricevuto Prevalentemente nuvoloso oggi! Con un massimo di 7 ° C e un minimo di 1 ° C. Ripetere. Oggi le condizioni saranno prevalentemente nuvolose, con un massimo di 7 ° C e un minimo di 1 ° C. per l'articolo Todays_Weather. 27/02/2016 10: 28: 01.697 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - store (Todays_Weather), state = Oggi prevalentemente nuvoloso! Con un massimo di 7 ° C e un minimo di 1 ° C. Ripetere. Oggi le condizioni saranno prevalentemente nuvolose, con un massimo di 7 ° C e un minimo di 1 ° C. 

Successivamente, abbiamo bisogno di una regola OpenHAB per inviare questa variabile all'URL "dire" di Sonos. Quanto segue dovrebbe farlo:

regola "Annuncio meteo giornaliero" quando Item Todays_Weather ha ricevuto l'aggiornamento. quindi sendHttpGetRequest (" http://localhost: 5005 / cucina / dire / "+ Todays_Weather.state.toString.encode (" UTF-8 ") +" / it-IT ") fine.

Questo è abbastanza semplice: ogni volta che la variabile Todays_Weather viene aggiornata (che sarà, automaticamente, ogni giorno alle 8:00), esegui il ping dell'URL. Noi usiamo encode ( “UTF-8”) Funzione stringa per rendere la frase di IFTTT adatta all'uso in un URL. Per testare manualmente questa parte del sistema, utilizzare nuovamente l'API HTTP OpenHAB:

http://raspberrypi.local: 8080 / CMD? Todays_Weather = Nuvoloso, con possibilità di polpette. 

Connettiti a IFTTT senza OpenHAB, usando 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 esporremo su Internet aperto. Questo non è senza rischi: qualsiasi tipo di server aperto è un rischio per la sicurezza, ma lo stiamo mitigando non eseguendo uno stack completo di server, solo un piccolo servizio specifico che accetta solo determinati comandi in un formato di pacchetto di dati JSON sicuro (quindi non saranno applicati attacchi SQL injection o di autenticazione possibile). Una volta terminato, avrai un URL pubblico al quale puoi inviare messaggi dal canale IFTTT Maker.

Inizia impostando uno dei tanti servizi DNS dinamici gratuiti I 5 migliori provider DNS dinamici gratuitiUn servizio DDNS può aiutarti a connetterti al tuo PC di casa mentre sei in movimento. Ecco i migliori provider DNS dinamici gratuiti da considerare. Leggi di più là fuori - consiglio DuckDNS, in particolare perché offre un semplice set di istruzioni per Raspberry Pi, consentendogli di aggiornare automaticamente il tuo indirizzo IP. Segui questi e ricorda il tuo URL per i passaggi successivi. Il tuo router potrebbe anche avere una funzione DNS dinamica integrata, quindi controlla prima lì. Nel mio caso, posso ottenere un * .mynetgear.com URL gratis, quindi l'ho usato.

Quindi, trova il tuo router Port forwarding 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 brillante app non funzionerà? La tua Xbox non ti consente di giocare, i tuoi download torrent si rifiutano ... Leggi di più pagina di configurazione; qui è dove gli 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 - in caso contrario, controlla la configurazione del tuo router pagina per gli IP riservati mentre ci sei, perché non è necessario che cambi la prossima settimana e che il server si arresti improvvisamente Lavorando.

port forwarding della configurazione del router

Ora per installare l'ultimo bit del software server.

https://github.com/sebauer/if-this-then-node.git. cd if-this-then-node / npm install. nodo server.js.

Dovresti vedere quanto segue.

se questo quindi l'errore di valori predefiniti del nodo

Va bene, significa solo che dobbiamo aggiornare i nostri dettagli. Aprire config.js in Nano e modifica quei dettagli in modo diverso da quello predefinito, quindi salva. Quando esegui nuovamente il server, dovresti vedere questo:

se questo quindi il nodo server è in esecuzione

Grande. Verifica che la tua macchina sia accessibile dal mondo esterno digitando il nome host DNS dinamico e aggiungi /ifttn / alla fine dell'URL. Se tutto funziona, il messaggio "IFTTN - if-this-then-node La versione 2.0.1 è attiva e funzionante!" verrà visualizzato nel tuo browser. Ancora una volta, per eseguire questo script all'avvio, modificare il /etc/rc.local file e aggiungi:

nodo sudo /home/pi/if-this-then-node/server.js  dev / null &

Se-Questo-Then-Node funziona tramite plug-in: ce ne sono alcuni predefiniti, ma non ci interessano. Invece, scarica questo plugin personalizzato che ho scritto per te con i seguenti comandi.

plugin cd. wget https://gist.githubusercontent.com/jamesabruce/4af8db24ba3452b94877/raw/d11c1cff3aa44dbb6a738eeb15202f3db461de75/sonos.js 

Dovrai anche installare il richiesta modulo.

richiesta di installazione npm. 

Quindi riavviare il server. Il plugin è abbastanza semplice, ma un po 'diverso dall'URL che abbiamo usato finora. In questo caso, ho usato la speciale azione "sayall", 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 scegliere come target dispositivi specifici, sostituisci quella 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 provarlo, sto usando l'app del pulsante "Do" di IFTTT. Crea una nuova ricetta, cerca i canali e seleziona il creatore canale.

pulsante do

Crea una nuova ricetta. Immettere l'URL configurato in precedenza da un provider DNS dinamico gratuito (incluso /ifttn/ alla fine dell'URL. Non dimenticare quelle barre). Selezionare INVIARE richiesta, application / json contenuto e il corpo del messaggio come segue, sostituendo tutte le variabili necessarie con quelle precedentemente configurate:

{"action": "sonos", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Messaggio in arrivo per tutti: la cena è pronta! Ripetere. La cena è pronta. Porta i tuoi culo di sopra adesso. "}

Ora ho un pulsante facilmente accessibile che annuncerà il messaggio su ogni dispositivo Sonos in casa. Ovviamente puoi associarlo a qualsiasi canale IFTTT che desideri creare un messaggio personalizzato utilizzando 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 lo sforzo aggiuntivo di installare un altro server.

Nota: gli hacker ti scansioneranno automaticamente. Questo succede sempre, ma se stai visualizzando i log, può sembrare allarmante. Di seguito puoi vedere qualcuno che ha sistematicamente provato ad accertare se una qualsiasi delle interfacce PHPMyAdmin standard fosse accessibile. Che non lo erano. Non allarmarti se vedi qualcosa di simile. È l'equivalente di Internet della chiamata a freddo di numeri di telefono casuali per vedere se c'è qualcuno.

tentativi di hacking del web server

Cosa annuncerai?

Ora dovresti avere gli strumenti e la conoscenza per bagnare costantemente tutta la casa in notifiche vocali su tutto ciò che potresti pensare. Chi ha bisogno di musica? Il tuo unico limite è di 350 richieste giornaliere da VoiceRSS.org, ma è circa una ogni 4 minuti, quindi dovresti andare bene.

Quindi cosa farai con questo? Condividi le tue idee o la ricetta IFTTT nei commenti!

Crediti immagine:caffè e donna di S_Photo tramite Shutterstock

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.