Publicitate
Visul oricărui pasionat de casă inteligent este o casă cu care poți vorbi, dar realitatea este departe de asta.
Amazon Echo, de exemplu, vă permite să utilizați orice număr de funcții controlate vocal, dar dialogul trebuie inițiat de dvs. cu o întrebare - nu puteți doar să anunțați un mesaj important.
Tu poate sa faceți acest lucru cu un sistem Sonos și cu un pic de bricolaj magic Raspberry Pi. Astăzi vă voi arăta cum puteți configura notificări vocale pe sistemul dvs. Sonos, introducând câteva rețete IFTTT utile, integrări OpenHAB și multe altele, pentru a utiliza funcția de notificare.
Rețineți că există o legătură Sonos nativă pentru OpenHAB disponibilă, dar se știe că cauzează probleme de memorie din cauza unei biblioteci uPnP defecte. V-aș sugera să ignorați deocamdată și să utilizați metoda din acest tutorial.
Un raspberry Pi care rulează linux Raspian este ideal pentru acest tutorial, dar ar trebui să funcționeze și pe orice server de origine bazat pe linux pe care îl rulează. În acest caz, folosesc același Raspberry Pi care rulează
OpenHAB, sistemul de automatizare casă open source Noțiuni introductive cu OpenHAB Home Automation pe Raspberry PiOpenHAB este o platformă de automatizare casă matură, open source, care rulează pe o varietate de hardware și este protocol agnostic, ceea ce înseamnă că se poate conecta la aproape orice hardware de automatizare de pe piață astăzi. Citeste mai mult . Restul acestui tutorial presupune că îl executați și pe un Raspberry Pi și fie aveți o fereastră de terminal locală deschisă pe desktop, fie conectat de la distanță folosind SSH Configurarea zmeurului Pi pentru utilizare fără cap cu SSHRaspberry Pi poate accepta comenzi SSH atunci când este conectat la o rețea locală (fie prin Ethernet, fie prin Wi-Fi), permițându-vă să o configurați cu ușurință. Avantajele SSH depășesc ecranizarea zilnică ... Citeste mai mult .O să ai nevoie
- Zmeura Pi 2 (modelele mai vechi ar trebui să funcționeze, dar verificați dacă există modificări specifice în instrucțiuni)
- Cel puțin unul Difuzor Sonos (alte sisteme audio nu sunt acceptate, acesta este un tutorial doar pentru Sonos)
- Cont gratuit pe VoiceRSS.org [Nu mai este disponibil]. Înregistrează-te atunci găsiți cheia API, de care vom avea nevoie mai târziu pentru a genera mesaje vocale.
Instalați Nodul cel mai recent
Verificați ce versiune de nod aveți tastând:
nod -v.
Rețineți că versiunea 6 nu este acceptată. Dacă aveți Node 6, trebuie să îl eliminați mai întâi, apoi urmați instrucțiunile de mai jos pentru a instala v5.5.
Dacă nu aveți v5 sau dacă primiți o eroare care nu a fost găsită, urmați aceste instrucțiuni pentru a instala Node. Următoarea comandă presupune un Raspberry Pi 2; pentru modele 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. tar -xvf nod-v5.12.0-linux-armv7l.tar.gz. cd 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 orice a fost cel mai recent pe care l-ați descărcat).
În continuare, avem câteva module Node de instalat. De asemenea, dorim Node Package Manager.
sudo apt-get instalare npm. sudo npm instalare -g npm. sudo npm install -g nod-gyp.
Acestea sunt condițiile prealabile, acum pe chestii distractive.
API Sonos HTTP
API Sonos HTTP creează un server web în rețeaua locală, care ne permite să pingem o adresă URL cu un mesaj de anunțat pe un Sonos (și să îl controlați de la distanță dacă doriți, deși acest tutorial se concentrează doar pe notificarea vocală aspect).
clonă de git https://github.com/jishi/node-sonos-http-api.git SONOS. cd sonos. instalare npm - producție. npm începe.
Dacă nu găsiți un mesaj despre un astfel de modul și un astfel de modul, faceți altul instalare npm și numele modulului, apoi încercați npm începe din nou. Dacă aveți erori legate de „Necesită un compilator C ++ 11”, reparați cu următoarele comenzi:
sudo apt-get install gcc-4.8 g ++ - 4.8. sudo update-alternatives - instalare / 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 actualizare-alternative - instalare / usr / bin / g ++ g ++ /usr/bin/g++-4.8 50.
În cele din urmă, ar trebui să vezi așa ceva:
Serverul rulează acum, interfațând cu Sonos. Formatul acestei API este ușor:
http://[SERVER IP]: 5005 / [NUMELE CAMEREI] / [ACȚIUNE]
Sau ca exemplu specific:
http://192.168.1.99:5005/kitchen/playlist/chillout
Acțiunea care ne interesează este comanda „spune”, folosită 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 necesitatea înregistrării pe o cheie API pe VoiceRSS.org. Ar fi trebuit să faceți acest lucru, așadar, introduceți următoarele și inserați-le în cheia API ca adecvat:
nano settings.json
{
"Voicerss": "YOURAPIKEY" }
(Apăsați CTRL-X, Y, pentru a salva fișierul)
Reporniți serverul și faceți din nou ping-ul URL. După câteva secunde, ar trebui să auziți o voce engleză încântătoare (deși schimbați sfârșitul adresei URL în en-ne dacă ești mai degrabă). Pentru a face serverul API Sonos HTTP să pornească din nou când Pi-ul este repornit:
sudo nano /etc/rc.local
Adăugați o linie înainte de iesirea 0:
nod sudo /home/pi/sonos/server.js dev / null &
Acum aveți capacitatea de a crea un mesaj vocal de oriunde pe rețeaua locală pur și simplu pingând o adresă URL, astfel încât posibilitățile sunt larg deschise în acest moment. Dacă totuși luptați pentru idei, citiți pentru câteva notificări utile pe care le-am configurat.
Notificări OpenHAB la evenimente
Să luăm mai întâi un exemplu simplu: detectarea mișcării. Acesta este un caz de utilizare obișnuit pentru activarea luminilor, dar poate doriți și o notificare vocală dacă este o senzor de mișcare într-o zonă cu trafic redus sau poate ca un avertisment înainte că cineva vine în grădină cale.
regula „Mișcarea grădinii detectată” când Item Garden_Motion s-a schimbat apoi var String message = "Aveți un vizitator" sendHttpGetRequest (" http://localhost: 5005 / bucătărie / say / "+ message.encode (" UTF-8 ") +" / en-gb ") Sfârșit.
Ar trebui să vedeți cum puteți integra aceste notificări vocale simple în oricare dintre regulile dvs., dar să încercăm ceva ceva mai complex.
Raport zilnic meteo de la IFTTT la OpenHAB către Sonos
În această rețetă, vom anunța că Sonos anunță un raport meteo zilnic la ora dvs. preferată.
Veți avea nevoie de My. Legarea OpenHAB este activată, deoarece aceasta creează o conexiune sigură între serverul dvs. OpenHAB intern și serviciul IFTTT extern. Setați asta dacă nu ați făcut-o deja - vă puteți referi partea 1 a ghidului nostru OpenHAB Noțiuni introductive cu OpenHAB Home Automation pe Raspberry PiOpenHAB este o platformă de automatizare casă matură, open source, care rulează pe o varietate de hardware și este protocol agnostic, ceea ce înseamnă că se poate conecta la aproape orice hardware de automatizare de pe piață astăzi. Citeste mai mult pentru instrucțiuni complete, în caz contrar, presupun că l-ați configurat deja cu persistența activată pentru toate articolele.
Apoi, creează un nou element String în instalarea OpenHAB, care va stoca raportul meteo zilnic. Înainte de aceasta este vizibil în My. Canal OpenHAB, va trebui să-l inițializăm cu o anumită variabilă implicită. Faceți clic pe următoarea adresă URL (schimbare) raspberrypi.local la serverul dvs. OpenHAB sau pur și simplu folosiți adresa IP și Vremea de azi la orice ai numit șirul):
http://raspberrypi.local: 8080 / CMD? Todays_Weather = Sunny
Conectați-vă la My. Deschideți OpenHAB [URL ruptă eliminată] și verificați Articole listă pentru a se asigura că variabila a fost exportată acum.
Înapoi la IFTTT, creează o rețetă nouă și folosește Canalul de vreme ca declanșator la ora preferată a zilei. Va trebui să vă setați mai întâi locația dacă nu ați mai folosit-o niciodată.
Selectați My. OpenHAB ca acțiune și alegeți Todays_Weather ca variabilă de actualizat.
Deocamdată, alege doar următoarea jumătate de oră pentru testare - poți actualiza rețeta mai târziu după ce știi că funcționează.
Destul de sigur, la momentul testului (de fapt, cu puțin înainte), am primit prognoza de astăzi actualizată cu succes.
2016-02-27 10: 28: 01.689 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - Comanda primită Aproape noros azi! Cu un maxim de 7C și un nivel scăzut de 1C. Repeta. Condițiile vor fi în cea mai mare parte înnorate astăzi, cu o maximă de 7C și un nivel scăzut de 1C. pentru articolul Todays_Weather. 2016-02-27 10: 28: 01.697 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - magazin (Todays_Weather), stare = În mare parte azi! Cu un maxim de 7C și un nivel scăzut de 1C. Repeta. Condițiile vor fi în cea mai mare parte înnorate astăzi, cu o maximă de 7C și un nivel scăzut de 1C.
În continuare, avem nevoie de o regulă OpenHAB pentru a trimite această variabilă pe URL-ul Sonos „spune”. Ar trebui să o facă:
regula „Anunțați raportul meteo zilnic” când articolul Todays_Weather a primit actualizarea. apoi trimiteHttpGetRequest (" http://localhost: 5005 / bucătărie / say / "+ Todays_Weather.state.toString.encode (" UTF-8 ") +" / en-gb ") Sfârșit.
Acest lucru este destul de simplu: de fiecare dată când variabila Todays_Weather este actualizată (care va fi automat, la 8:00 în fiecare zi), ping URL-ul. Folosim encode ( „UTF-8“) Funcție șir pentru a face propoziția de la IFTTT potrivită pentru utilizare într-o adresă URL. Pentru a testa manual această parte a sistemului, trebuie doar să folosiți din nou API-ul OpenHAB HTTP:
http://raspberrypi.local: 8080 / CMD? Todays_Weather = Noros, cu șanse de chiftele.
Conectați-vă la IFTTT fără OpenHAB, folosind nodul If-This-then-then
Î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 îl vom expune la Internet deschis. Acest lucru nu este lipsit de risc: orice tip de server deschis este un risc pentru securitate, dar îl atenuăm prin a nu executa o stivă completă de server, doar un mic serviciu specific care acceptă doar anumite comenzi într-un format de pachete de date JSON sigur (deci nu se vor face atacuri de injecție sau autentificare SQL posibil). După ce am terminat, veți avea o adresă publică către care puteți trimite mesaje de pe canalul IFTTT Maker.
Începeți prin a configura unul dintre numeroasele servicii DNS gratuite dinamice Cele mai bune 5 furnizori DNS gratuite dinamiciUn serviciu DDNS vă poate ajuta să vă conectați la computerul de acasă în timp ce sunteți în mișcare. Iată care sunt cei mai buni furnizori de DNS-uri dinamice gratuite pe care trebuie să le ia în considerare. Citeste mai mult acolo - recomand DuckDNS, mai ales că oferă un set simplu de instrucțiuni pentru Zmeura Pi, permițându-i să își actualizeze automat adrese IP. Urmați împreună cu acestea și rețineți-vă adresa URL pentru următorii pași. Routerul dvs. poate avea și o funcție DNS dinamică încorporată, așa că verificați mai întâi acolo. În cazul meu, pot primi un * .mynetgear.com URL gratuit, așa că am folosit asta.
Apoi, găsiți routerul dvs. port forwarding Ce este Port Forwarding și cum mă poate ajuta? [FaceUseOf Explică]Plângi puțin înăuntru când cineva îți spune că există o problemă de redirecționare a porturilor și de aceea aplicația ta nouă și strălucitoare nu va funcționa? Xbox-ul dvs. nu vă va permite să jucați jocuri, descărcările de torrent refuză ... Citeste mai mult pagina de configurare; aici vom spune ce să facem cu cererile primite. Transmite toate cererile HTTP (port 80) către portul 1337 pe serverul dvs. Raspberry Pi. Presupun că aveți o adresă IP rezervată deja pentru zmeura dvs. Pi - dacă nu o faceți, verificați configurarea routerului dvs. pagina pentru IP-urile rezervate în timp ce sunteți acolo, deoarece nu se va schimba săptămâna viitoare și pentru ca serverul să se oprească brusc lucru.
Acum pentru a instala ultimul bit software-ul serverului.
https://github.com/sebauer/if-this-then-node.git. cd dacă-acest-apoi-nod / instalare npm. nodul server.js.
Ar trebui să vedeți următoarele.
E în regulă, înseamnă că trebuie să ne actualizăm detaliile. Deschide config.js în Nano și modificați aceste detalii în orice altceva decât cel implicit, apoi salvați. Când rulați din nou serverul, ar trebui să vedeți acest lucru:
Grozav. Testați aparatul dvs. este accesibil din lumea exterioară tastând numele dvs. de gazdă dinamic DNS și adăugați /ifttn / până la sfârșitul adresei URL. Dacă totul funcționează, mesajul "IFTTN - dacă-acest-apoi-nodul versiunea 2.0.1 este în funcțiune!" va fi afișat în browserul dvs. Din nou, pentru a face ca acest script să fie difuzat la pornire, editați /etc/rc.local fișier și adăugați:
nod sudo /home/pi/if-this-then-node/server.js dev / null &
Dacă-Acest-Atunci-Nod funcționează prin pluginuri - sunt furnizate câteva implicite, dar nu ne interesează. În schimb, descărcați acest plugin personalizat pe care vi l-am scris cu următoarele comenzi.
plugin-uri CD. wget https://gist.githubusercontent.com/jamesabruce/4af8db24ba3452b94877/raw/d11c1cff3aa44dbb6a738eeb15202f3db461de75/sonos.js
Va trebui, de asemenea, să instalați cerere modul.
npm cerere de instalare.
Apoi reporniți serverul. Pluginul este destul de simplu, dar puțin diferit de adresa URL pe care am folosit-o până acum. În acest caz, am folosit acțiunea specială „sayall”, care trimite mesajul fiecărui dispozitiv Sonos.
cerere(' http://localhost: 5005 / sayall / '+ params.message +' / en-gb ', funcție (eroare, răspuns, corp)
Dacă mai degrabă puteți direcționa anumite dispozitive, înlocuiți această linie cu:
cerere(' http://localhost: 5005 / '+ params.device +' / say / '+ params.message +' / en-gb ', funcție (eroare, răspuns, corp)
Adăugați un alt parametru de linie numit dispozitiv la solicitarea JSON de mai jos pentru a specifica numele dispozitivului Sonos.
Pentru a testa acest lucru, folosesc aplicația IFTTT „Do”. Creați o rețetă nouă, răsfoiți la canale și selectați creator canal.
Creați o rețetă nouă. Introduceți adresa URL configurată anterior de la un furnizor de DNS dinamic gratuit (inclusiv /ifttn/ la sfârșitul adresei URL. Nu uitați de aceste 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:
{"action": "sonos", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Mesaj de intrare pentru toți: Cina este gata! Repeta. Cina e gata. Aduceți fundul la etaj acum. "}
Acum am un buton accesibil care va anunța mesajul pe fiecare dispozitiv Sonos din casă. Desigur, puteți asocia acest lucru cu orice canal IFTTT pe care doriți să-l creați un mesaj personalizat folosind variabile din acel canal. Ar trebui chiar să poți reproduce raportul meteo de mai sus fără să folosești OpenHAB acum, deși a depus efortul suplimentar de instalare a altui server.
Notă: hackerii vă vor scana automat. Acest lucru se întâmplă tot timpul, dar dacă vizualizați jurnalele, acesta poate părea alarmant. Mai jos puteți vedea pe cineva care a încercat sistematic să stabilească dacă oricare dintre interfețele PHPMyAdmin standard erau accesibile. Ceea ce nu erau. Nu vă alarmați dacă vedeți ceva similar. Este echivalentul pe internet al numerelor de telefon aleatoare care apelează la rece pentru a vedea dacă există cineva.
Ce veți anunța?
Acum ar trebui să aveți instrumente și kwowledge pentru a vă îmbăia în mod constant întreaga casă în notificări vocale despre tot ce vă puteți gândi. Cine are nevoie de muzică? Singura ta limită este de 350 de solicitări zilnice de la VoiceRSS.org - dar aceasta este aproximativ una la 4 minute, deci ar trebui să fiți bine.
Deci, ce vei face cu asta? Partajați ideile sau rețeta IFTTT în comentarii!
Credite imagine:cafea și femeie de S_Photo prin Shutterstock
James are licență în inteligență artificială și este certificat CompTIA A + și Network +. Este dezvoltatorul principal al MakeUseOf și își petrece timpul liber jucând VR paintball și boardgames. Construiește calculatoare de când era mic.