Cum să trimiteți notificări vocale la difuzoare Sonos

Cum să trimiteți notificări vocale la difuzoare Sonos / Smart Home

Visul oricarui pasionat de casa inteligenta este o casa cu care puteti vorbi, dar realitatea este departe de aceasta.

Amazon Echo, de exemplu, vă permite să utilizați orice număr de funcții controlate prin voce, dar dialogul trebuie inițiat de dvs. cu o întrebare - nu puteți să-i anunțați un mesaj important.

Tu poate sa face acest lucru cu un sistem Sonos deși, și un pic de DIY Raspberry Pi magie. Astăzi vă vom arăta cum să configurați notificări vocale pe sistemul dvs. Sonos, introducând câteva rețete IFTTT utile, integrații OpenHAB și multe altele, pentru a utiliza funcția de notificare.

Rețineți că există o legare nativă Sonos disponibilă pentru OpenHAB, dar se știe că provoacă probleme de memorie din cauza unei biblioteci uPnP defectuoasă. Aș sugera să sărind peste asta pentru moment și să folosesc metoda din acest tutorial.

O Raspberry Pi care ruleaza Raspian linux este ideala pentru acest tutorial, dar ar trebui sa lucreze si pe orice server de acasa bazat pe Linux pe care l-ai rulat. În acest caz, folosesc același Raspberry Pi care rulează OpenHAB, sistemul open source pentru automatizarea casei Noțiuni de bază cu OpenHAB Home Automation pe Raspberry Pi Noțiuni de bază cu OpenHAB Home Automation pe Raspberry Pi OpenHAB este o platformă matură, care rulează pe o varietate de hardware și este protocol agnostic, adică se poate conecta la aproape orice hardware de automatizare de acasă de pe piață astăzi. Citeste mai mult . Restul acestui tutorial presupune că rulați acest lucru și pe un Raspberry Pi și aveți fie o fereastră locală terminală deschisă pe desktop, fie sunteți conectat la distanță folosind SSH Setarea Raspberry Pi Pentru utilizare fără șofer cu SSH Configurarea dvs. Zmeura Pi pentru utilizare fără șurub cu SSH Raspberry Pi poate accepta comenzi SSH atunci când este conectat la o rețea locală (fie prin Ethernet sau Wi-Fi), permițându-vă să o configurați cu ușurință. Beneficiile SSH merg dincolo de suprimarea screening-ului zilnic ... Read More .

O să ai nevoie

  • Zmeura Pi 2 (modelele mai vechi ar trebui să funcționeze, dar verificați pentru modificări specifice în instrucțiuni)
  • Cel puțin un difuzor Sonos (alte sisteme audio nu sunt acceptate, acesta este un tutorial numai pentru Sonos)
  • Cont gratuit la VoiceRSS.org. Înregistrați-vă apoi găsiți cheia dvs. API, de care vom avea nevoie mai târziu pentru a genera mesaje vocale.

Instalați ultimul nod

Verificați ce versiune de Nod aveți prin introducerea:

nod -v 

Rețineți că versiunea 6 nu este acceptată. Dacă aveți Nodul 6, îl veți elimina mai întâi, apoi urmați instrucțiunile de mai jos pentru a instala v5.5.

Dacă nu aveți v5 sau dacă obțineți o eroare nu a fost găsită, urmați aceste instrucțiuni pentru a instala Nod. Următoarea comandă presupune o zmeură Pi 2; pentru modelele mai vechi, utilizați armv6l in loc de armv7l.

wget https://nodejs.org/download/release/latest-v5.x/node-v5.12.0-linux-armv7l.tar.gz nod de tip tar -xvf node-v5.12.0-linux-armv7l.tar.gz nod -v5.12.0-linux-armv7l sudo cp -R * / usr / local 

Confirmați din nou tastând:

nod -v

Și ar trebui să vedeți v5.12 (sau oricare ar fi ultima versiune pe care ați descărcat-o).

Apoi, avem câteva module de nod pentru a le instala. De asemenea, dorim Node Package Manager.

sudo apt-get instalare npm sudo npm instalare -g npm sudo npm instalare -g nod-gip 

Acestea sunt premisele din cale, acum pe chestiile distractive.

Sonos HTTP API

API-ul Sonos HTTP creează un server web în rețeaua locală, ceea ce ne permite să pingem o adresă URL cu un mesaj care să anunțe un Sonos (și să-l controleze de la distanță dacă doriți, deși acest tutorial se concentrează doar pe aspectul de notificare vocală).

git clone https://github.com/jishi/node-sonos-http-api.git sonos cd sonos npm instalare - producție npm start 

Dacă vedeți un mesaj despre un astfel de modul și nu a fost găsit, faceți altul npm install și numele modulului, apoi încercați npm start din nou. Dacă întâmpinați erori legate de “necesită un compilator C ++ 11”, fixați cu următoarele comenzi:

sudo apt-get instalare 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 / 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 / 4.8 50 

În cele din urmă ar trebui să vedeți ceva de genul:

Serverul rulează acum, interfațând cu Sonos. Formatul acestui API este ușor:

http: // [IP SERVER]: 5005 / [NUME CAMERE] / [ACȚIUNE]

Sau, ca exemplu specific:

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

Acțiunea noastră este interesată “Spune” comandă, utilizată după cum urmează:

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

Veți auzi un mesaj de eroare despre înregistrarea la o cheie API la VoiceRSS.org. Ar fi trebuit deja să faceți acest lucru, prin urmare tastați următoarele și inserați în cheia dvs. API ca fiind adecvate:

nano settings.json
 "voicers": "YOURAPIKEY"

(Apăsați CTRL-X, Y, pentru a salva fișierul)

Reporniți serverul și reintroduceți din nou adresa URL. După câteva secunde, ar trebui să auziți o voce încântătoare engleză (deși schimbați sfârșitul adresei URL en-ne dacă preferați). Pentru a face din nou serverul Sonos HTTP API să pornească din nou când Pi este repornit:

sudo nano /etc/rc.local

Adăugați o linie înainte de ieșire 0:

sudo nod /home/pi/sonos/server.js < /dev/null &

Aveți acum posibilitatea de a crea un mesaj vocal de oriunde din rețeaua locală pur și simplu pingând o adresă URL, astfel că posibilitățile sunt deschise în acest moment. Dacă vă confruntați cu idei, citiți-vă pentru câteva notificări utile pe care le-am înființat.

Comunicări OpenHAB privind evenimentele

Să luăm mai întâi un exemplu simplu: detectarea mișcării. Acesta este un caz de utilizare obișnuită pentru activarea luminilor, însă este posibil să doriți și o notificare vocală dacă este vorba de un senzor de mișcare într-o zonă cu trafic redus sau poate ca un avertisment înainte că cineva vine pe calea grădinii.

regula "mișcarea grădinii a fost detectată" când elementul Garden_Motion a fost modificat apoi var String message = "Aveți un vizitator" sendHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + message.encode ("UTF-8" / en-gb ") 

Ar trebui să vedeți cum puteți integra aceste notificări vocale simple în oricare dintre regulile dvs., dar să încercăm ceva mai complex.

Raportul zilnic de la IFTTT la OpenHAB către Sonos

În această rețetă, compania Sonos va anunța un raport de vreme zilnic la ora preferată.

Veți avea nevoie de legarea My.OpenHAB activată, deoarece aceasta creează o conexiune securizată între serverul dvs. intern OpenHAB și serviciul extern IFTTT. Setați acest lucru dacă nu ați făcut-o deja - puteți face referire la partea 1 a ghidului OpenHAB Noțiuni de bază despre OpenHAB Home Automation pe Raspberry Pi Început cu OpenHAB Home Automation pe Raspberry Pi OpenHAB este o platformă matură, open source, pe o varietate de hardware și este protocol agnostic, adică se poate conecta la aproape orice hardware de automatizare de acasă de pe piață astăzi. Citește mai multe pentru instrucțiuni complete, altfel am să presupun că deja l-ai configurat cu persistența activată pentru toate articolele.

Apoi, creați un element String nou în instalarea OpenHAB, care va stoca raportul de vreme zilnică. Înainte ca acest lucru să fie vizibil în canalul My.OpenHAB, va trebui să îl inițializăm cu o anumită variabilă implicită. Pinge următoarea adresă URL (modificați raspberrypi.local la serverul OpenHAB sau pur și simplu utilizați adresa IP a acestuia și Vremea de azi la ceea ce ați numit Stringul):

http: //raspberrypi.local: 8080 / CMD Todays_Weather = Sunny 

Conectați-vă la My.OpenHAB și verificați Articole pentru a asigura că variabila a fost exportată acum.

Înapoi pe IFTTT, creați o nouă rețetă și utilizați canalul Meteo ca declanșator la ora preferată a zilei. Va trebui să vă stabiliți mai întâi locația dacă nu ați mai utilizat-o înainte.

Selectați My.OpenHAB ca acțiune și alegeți Todays_Weather ca variabilă de actualizat.

Deocamdată, alegeți doar intervalul de testare pentru o jumătate de oră - puteți actualiza reteta mai târziu după ce știți că funcționează.

Destul de sigur, în timpul testului (de fapt, puțin înainte), am actualizat prognoza de astăzi cu succes.

2016-02-27 10: 28: 01.689 [DEBUG] [o.o.i.m.iMyOpenHABServiceImpl] - Comandă primită În mare parte, astăzi! Cu un nivel ridicat de 7C și un nivel scăzut de 1C. Repeta. Condițiile vor fi În mare parte Înnourat astăzi, cu un nivel ridicat de 7C și un nivel scăzut de 1C. pentru postul Todays_Weather 2016-02-27 10: 28: 01.697 [DEBUG] [o.o.i.m.iMyOpenHABServiceImpl] - magazin (Todays_Weather), state = Parțial înnorat astăzi! Cu un nivel ridicat de 7C și un nivel scăzut de 1C. Repeta. Condițiile vor fi În mare parte Înnourat astăzi, cu un nivel ridicat de 7C și un nivel scăzut de 1C. 

În continuare, avem nevoie de o regulă OpenHAB pentru a trimite această variabilă la Sonos “Spune” URL-ul. Următoarele ar trebui să o facă:

regulă "Anunță raportul zilnic de vreme" când elementul Todays_Weather a primit actualizare, apoi trimiteHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + Todays_Weather.state.toString.encode ("UTF-8") + ") Sfârșit 

Acest lucru este destul de simplu: ori de câte ori este actualizată variabila Todays_Weather (care va fi, automat, la 8am în fiecare zi), ping URL-ul. Folosim codifica(“UTF-8”) String funcția pentru a face propoziția din IFTTT adecvate pentru a fi utilizate într-o adresă URL. Pentru a testa manual această parte a sistemului, folosiți din nou API-ul OpenHAB HTTP:

http: //raspberrypi.local: 8080 / CMD? Todays_Weather = Înnorat, cu o șansă de chifteluțe. 

Conectați-vă la IFTTT Fără OpenHAB, folosind If-This-Then-Node

În cele din urmă, să ne uităm la modul de conectare de la orice rețetă IFTTT fără intermediarul OpenHAB. În schimb, vom instala un alt server web și vom expune acest lucru la Internetul deschis. Acest lucru nu este lipsit de risc: orice tip de server deschis este un risc de securitate, dar ne atenuăm acest lucru prin faptul că nu rulează un stack complet de server, doar un mic serviciu specific care acceptă anumite comenzi numai într-un format de pachete de date JSON sigur Injecțiile SQL sau atacurile de autentificare vor fi posibile). Odată ce terminăm, veți avea o adresă URL publică la care puteți trimite mesaje din canalul IFTTT Maker.

Începeți prin configurarea uneia dintre numeroasele servicii DNS dinamice gratuite 5 dintre cei mai buni furnizori DNS dinamic puteți căuta gratuit astăzi 5 dintre cei mai buni furnizori DNS dinamici pe care le puteți căuta gratuit astăzi DynDNS a fost întotdeauna o mențiune de top când DNS-urile dinamice libere au fost dezvoltate. Dar acum că nu mai există, există vreo alternativă bună? Sunt sigur. Citiți mai multe acolo - Vă recomandăm DuckDNS, mai ales pentru că oferă un set simplu de instrucțiuni pentru Raspberry Pi, permițându-i să vă actualizeze automat adresa IP. Urmați împreună cu acestea și amintiți-vă adresa URL pentru pașii următori. Router-ul dvs. poate avea, de asemenea, o funcție DNS dinamică încorporată, deci verificați mai întâi. În cazul meu, pot obține o * .mynetgear.com URL gratuit, așa că am folosit asta.

Apoi, găsiți redirecționarea portului routerului dvs. Ce este portul de expediere și cum mă poate ajuta? [Explicarea MakeUseOf] Ce este portul de expediere și cum mă poate ajuta? [MakeUseOf explică] Plângeți puțin înăuntru când cineva vă spune că există o problemă de expediere a portului și de aceea noua dvs. aplicație strălucitoare nu va funcționa? Xbox-ul dvs. nu vă va permite să jucați jocuri, descărcările de torrent refuză ... Citește mai mult pagina de configurare; acesta este locul unde îi vom spune ce să facă cu cererile primite. Redirecționați toate cererile HTTP (portul 80) la portul 1337 pe serverul dvs. Raspberry Pi. Presupun că aveți o adresă IP rezervată deja pentru Raspberry Pi - dacă nu ați făcut-o, verificați pagina de configurări a ruterului pentru adrese IP rezervate în timp ce sunteți acolo, pe măsură ce nu doriți să schimbați săptămâna viitoare și pentru ca serverul să nu mai funcționeze brusc.

Acum, pentru a instala ultimul bit de software de tip server.

https://github.com/sebauer/if-this-then-node.git cd dacă acesta-apoi-nod / npm install node server.js 

Ar trebui să vedeți următoarele.

Asta e ok, asta înseamnă că trebuie să ne actualizăm detaliile. Deschide config.js în Nano și editați aceste detalii la orice altceva decât implicit, apoi salvați. Când rulați din nou serverul, ar trebui să vedeți acest lucru:

Grozav. Testați-vă că mașina dvs. este accesibilă din lumea exterioară introducând numele gazdă DNS dinamic și adăugați /ifttn / la sfârșitul adresei URL. Dacă totul funcționează, mesajul “IFTTN - if-this-then-node Versiunea 2.0.1 este în funcțiune!” va fi afișat în browserul dvs. Din nou, pentru a face acest script să ruleze la pornire, editați /etc/rc.local fișier și adăugați:

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

If-This-Then-Node funcționează prin pluginuri - există câteva seturi prestabilite, dar nu ne interesează. În schimb, descărcați acest plugin personalizat pe care l-am scris pentru dvs. cu următoarele comenzi.

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

Va trebui, de asemenea, să instalați cerere modul.

Cerere de instalare npm 

Apoi reporniți serverul. Pluginul este destul de simplu, dar puțin diferit de adresa URL folosită până acum. În acest caz, am folosit specialul “sayall” acțiune, care trimite mesajul la fiecare dispozitiv Sonos.

('http: // localhost: 5005 / sayall /' + params.message + '/ en-gb', funcția (eroare, răspuns, 

Dacă preferați să vizați anumite dispozitive, înlocuiți linia respectivă cu:

cerere ('http: // localhost: 5005 /' + params.device + '/ say /' + params.message + '/ en-gb' 

Adăugați un alt parametru de linie numit dispozitiv la cererea JSON de mai jos, în care să specificați numele dispozitivului Sonos.

Pentru a testa acest lucru, folosesc IFTTT “Do” buton app. Creați o nouă rețetă, căutați în canale și selectați creator canal.

Creați o nouă rețetă. Introduceți adresa URL pe care ați configurat-o mai devreme de la un furnizor DNS dinamic gratuit (inclusiv / Ifttn / la sfârșitul adresei URL. Nu uitați acele tăieturi). Selectați POST cerere, application / json conținutul și corpul mesajului, după cum urmează, înlocuind toate variabilele după cum este necesar cu cele pe care le-ați configurat anterior:

"acțiune": "sonos", "user": "YOURUSER", "pw": "PAGINĂ DE PAGINĂ", "mesaj": "Mesajul primit pentru toată lumea: Cina este gata! .“  

Acum am un buton ușor accesibil care va anunța mesajul pe fiecare dispozitiv Sonos din casă. Puteți, desigur, să împerecheați acest canal cu orice canal IFTTT pe care doriți să faceți un mesaj personalizat utilizând variabilele din acel canal. Ar trebui chiar să puteți reproduce raportul meteo de sus, fără a utiliza OpenHAB acum, deși a făcut efortul suplimentar de a instala un alt server.

Notă: hackerii vă vor scana automat. Acest lucru se întâmplă tot timpul, dar dacă vizionați jurnalele, poate părea alarmant. Mai jos puteți vedea pe cineva care a încercat sistematic să afle dacă au fost accesibile oricare dintre interfețele standard PHPMyAdmin. Ce nu erau. Nu fi alarmat dacă vedeți ceva similar. Este echivalentul internet al numerelor de telefon la întâmplare la rece pentru a vedea dacă cineva e acolo.

Ce veți anunța?

Acum ar trebui să aveți instrumentele și să vă bucurați în permanență întreaga dvs. casă prin notificări vocale despre tot ce vă puteți gândi. Cine are nevoie de muzică? Singura dvs. limită este 350 de solicitări zilnice de la VoiceRSS.org - dar asta e cam la fiecare 4 minute, deci ar trebui să fii în regulă.

Și ce vei face cu asta? Împărtășește-ți ideile sau rețeta IFTTT în comentarii!

Credite de imagine: cafea și femeie de S_Photo prin Shutterstock

Explorați mai multe despre: Home Automation, Sonos.