Drømmen om enhver smart hjemme-entusiast er et hjem du kan snakke med, men virkeligheten er langt unna det.
Amazon Echo, for eksempel, lar deg bruke et hvilket som helst antall stemmekontrollerte funksjoner, men dialog må initieres av deg med et spørsmål - du kan ikke bare få henne til å annonsere en viktig melding.
Du kan gjøre dette med et Sonos-system skjønt, og litt DIY Raspberry Pi magic. I dag vil jeg vise deg hvordan du setter opp talemeldinger på Sonos-systemet, og introduserer et par nyttige IFTTT-oppskrifter, OpenHAB-integrasjoner og mer for å benytte varslingsfunksjonen.
Merk at det finnes en innfødt Sonos-binding for OpenHAB, men det er kjent å forårsake minneproblemer på grunn av et feilaktig uPnP-bibliotek. Jeg foreslår at du hopper over det for nå, og bruker metoden i denne opplæringen i stedet.
En Raspberry Pi som kjører Raspian Linux er ideell for denne opplæringen, men den bør også fungere på alle Linux-baserte hjemmeservere du har kjørt. I dette tilfellet bruker jeg samme Raspberry Pi som kjører OpenHAB, åpen kildekode hjemmeautomatiseringssystem Komme i gang med OpenHAB Home Automation on Raspberry Pi Komme i gang med OpenHAB Home Automation on Raspberry Pi OpenHAB er en moden, åpen kildekode hjemmeautomatiseringsplattform som kjører på en rekke maskinvare og er protokoll agnostisk, noe som betyr at den kan koble til nesten hvilken som helst hjemmevirksomhets maskinvare på markedet i dag. Les mer . Resten av denne opplæringen antar at du også kjører dette på en Raspberry Pi, og enten har et lokalt terminalvindu åpent på skrivebordet, eller er logget på eksternt ved hjelp av SSH. Sette opp Raspberry Pi For Headless Bruk Med SSH Sette Opp Din Raspberry Pi For Headless Bruk Med SSH Raspberry Pi kan godta SSH-kommandoer når den er koblet til et lokalt nettverk (enten med Ethernet eller Wi-Fi), slik at du enkelt kan konfigurere det. Fordelene med SSH går utover å forstyrre den daglige screeningen ... Les mer.
Du vil trenge
- Raspberry Pi 2 (eldre modeller skal fungere, men sjekk for spesifikke endringer i instruksjonene)
- Minst en Sonos-høyttaler (andre lydsystemer støttes ikke, dette er bare en veiledning for Sonos)
- Gratis konto på VoiceRSS.org. Registrer deretter, finn API-nøkkelen din, som vi senere trenger for å generere talemeldingene.
Installer Node Siste
Sjekk hvilken versjon av Node du har ved å skrive:
node -v
Merk at versjon 6 ikke støttes. Hvis du har Node 6, skal du først fjerne det, og følg instruksjonene nedenfor for å installere v5.5.
Hvis du ikke har v5 eller hvis du ikke finner en feil, følg disse instruksjonene for å installere Node. Følgende kommando antar en Raspberry Pi 2; For eldre modeller, bruk armv6l i stedet for 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
Bekreft igjen ved å skrive:
node -v
Og du bør se v5.12 (eller hva det siste var det du lastet ned).
Deretter har vi noen Node-moduler å installere. Vi vil også ha Node Package Manager.
sudo apt-get install npm sudo npm install -g npm sudo npm install -g node-gyp
Det er forutsetningene ute av veien, nå på de morsomme tingene.
Sonos HTTP API
Sonos HTTP API oppretter en webserver på det lokale nettverket, noe som gjør at vi kan pinge en nettadresse med en melding om å annonsere på en Sonos (og å kontrollere den eksternt hvis du vil, selv om denne opplæringen bare fokuserer på stemmevarslingsaspektet).
git clone https://github.com/jishi/node-sonos-http-api.git sonos cd sonos npm install --production npm start
Hvis du ser en melding om en slik modul som ikke er funnet, gjør du bare en annen npm-installasjon og modulnavnet, og prøv deretter npm-start på nytt. Hvis du opplever feil relatert til "krever en C ++ 11 compiler", må du fikse følgende kommandoer:
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
Til slutt bør du se noe slikt:
Serveren kjører nå sammen med Sonos. Formatet til denne APIen er enkelt:
http: // [SERVER IP]: 5005 / [ROOM NAME] / [ACTION]
Eller som et spesielt eksempel:
http://192.168.1.99:5005/kitchen/playlist/chillout
Handlingen vi er interessert i, er "say" -kommandoen, brukt som følger:
http://192.168.1.99:5005/kitchen/say/make%20use%20of%20is%20awesome/en-gb
Du får høre en feilmelding om å måtte registrere til en API-nøkkel på VoiceRSS.org. Du burde allerede ha gjort dette, så skriv ut følgende og lim inn API-nøkkelen din som appropirate:
nano settings.json
{
"voicerss":"YOURAPIKEY" }
(Hit CTRL-X, Y, for å lagre filen)
Start serveren på nytt, og ping nettadressen igjen. Etter noen sekunder bør du høre en herlig engelsk stemme (selv om du endrer slutten av nettadressen til en-oss hvis du vil). For å gjøre Sonos HTTP API-serveren startet igjen når Pi startes på nytt:
sudo nano /etc/rc.local
Legg til en linje før utgangen 0 :
sudo node /home/pi/sonos/server.js< /dev/null &
Du har nå muligheten til å lage en talemelding fra hvor som helst på det lokale nettverket ved å pinge nettadressen, slik at mulighetene er åpne på dette punktet. Hvis du sliter med ideer, les videre for noen nyttige nyttige meldinger jeg har satt opp.
OpenHAB Notifications on Events
La oss ta et enkelt eksempel først: bevegelsesdeteksjon. Dette er en vanlig brukstilstand for å aktivere lys, men det kan hende du vil ha et talemelding også hvis det er en bevegelsessensor i et lite trafikkområde, eller kanskje som en advarsel om at noen kommer opp hagen.
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
Du bør se hvordan du kan integrere disse enkle stemmevarslene i noen av reglene dine, men la oss prøve noe litt mer komplisert.
Daglig værmelding fra IFTTT til OpenHAB til Sonos
I denne oppskriften, vil vi få Sonos kunngjør en daglig værrapport på din foretrukne tid.
Du må ha My.OpenHAB-bindingen aktivert, siden dette skaper en sikker forbindelse mellom din interne OpenHAB-server og den eksterne IFTTT-tjenesten. Sett opp det hvis du ikke allerede har det - du kan henvise til del 1 i vår OpenHAB-guide Komme i gang med OpenHAB Home Automation på Raspberry Pi Komme i gang med OpenHAB Hjem Automation på Raspberry Pi OpenHAB er en moden, åpen kildekode-hjemmevirksomhetsplattform som kjører på en rekke maskinvare og er protokoll agnostisk, noe som betyr at den kan koble til nesten hvilken som helst hjemmevirksomhets maskinvare på markedet i dag. Les mer for fullstendige instruksjoner, ellers antar du at du allerede har konfigurasjonen med utholdenhet aktivert for alle elementene.
Deretter lager du et nytt String-element i OpenHAB-installasjonen, som lagrer den daglige værmeldingen. Før dette er synlig i My.OpenHAB-kanalen, må vi initialisere den med noen standardvariabel. Ping følgende URL (endre raspberrypi.local til OpenHAB-serveren din, eller bruk bare IP-adressen og Todays_Weather til hva du kalt Strengen):
http://raspberrypi.local:8080/CMD?Todays_Weather=Sunny
Logg inn på Min.OpenHAB og sjekk listen Elementer for å sikre at variabelen nå er blitt eksportert.
Tilbake på IFTTT, opprett en ny oppskrift, og bruk værkanalen som utløseren på ønsket tidspunkt på dagen. Du må først angi plasseringen din hvis du aldri har brukt den før.
Velg My.OpenHAB som handlingen, og velg Todays_Weather som variabelen for å oppdatere.
For nå, velg den neste halvtime-sporet for testing - du kan oppdatere oppskriften senere når du vet at den fungerer.
Sikkert nok, på testtiden (faktisk litt før), fikk jeg dagens prognose oppdatert med hell.
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.
Deretter trenger vi en OpenHAB-regel for å sende denne variabelen til Sonos "say" -adresse. Følgende bør gjøre det:
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
Dette er enkelt nok: når varianten Todays_Weather er oppdatert (som den vil være, automatisk, klokka 8 hver dag), ping URL. Vi bruker koder ("UTF-8") String-funksjon for å gjøre setningen fra IFTTT egnet for bruk i en URL. For å teste denne delen av systemet manuelt, bruk bare OpenHAB HTTP API igjen:
http://raspberrypi.local:8080/CMD?Todays_Weather=Cloudy, with a chance of meatballs.
Koble til IFTTT uten OpenHAB, bruk If-This-Then-Node
Til slutt, la oss se på hvordan du kobler fra en hvilken som helst IFTTT oppskrift uten OpenHAB-mellompersonen. I stedet installerer vi en annen webserver, og avslører det til den åpne Internett. Dette er ikke uten risiko: noen form for åpen server er en sikkerhetsrisiko, men vi reduserer dette ved ikke å kjøre en komplett serverstabel, bare en liten spesifikk tjeneste som bare aksepterer bestemte kommandoer i et sikkert JSON datapakket format (så nei SQL-injeksjon eller autentiseringsangrep vil være mulig). Når vi er ferdige, har du en offentlig nettadresse som du kan sende meldinger fra IFTTT Maker-kanalen til.
Start med å sette opp en av de mange gratis dynamiske DNS-tjenestene. 5 Best Dynamic DNS-leverandører du kan se etter gratis i dag. 5 Beste Dynamiske DNS-leverandører du kan lete etter gratis i dag. DynDNS var alltid et toppnote når gratis dynamiske DNSer ble tatt opp. Men nå er det borte, er det noen gode alternativer? Det er sikkert. Les mer der ute - Jeg anbefaler DuckDNS, spesielt fordi det gir et enkelt sett med instruksjoner for Raspberry Pi, slik at den kan oppdatere din IP adddress automatisk. Følg med, og husk nettadressen din for de neste trinnene. Ruteren din kan også ha en dynamisk DNS-funksjon innebygd, så sjekk det først. I mitt tilfelle kan jeg få en * .mynetgear.com- URL gratis, så jeg har brukt det.
Deretter finner du ruterens port videresending Hva er port videresending og hvordan kan det hjelpe meg? [MakeUseOf Forklarer] Hva er port videresending og hvordan kan det hjelpe meg? [MakeUseOf Forklarer] Skriker du litt innvendig når noen forteller deg at det er et problem med portoverføring, og derfor vil din skinnende nye app ikke fungere? Din Xbox vil ikke la deg spille spill, dine torrentnedlastinger nekte ... Les mer konfigurasjonsside; Dette er hvor vi skal fortelle det hva du skal gjøre med innkommende forespørsler. Videresend alle HTTP-forespørsler (port 80) til port 1337 på Raspberry Pi-serveren din. Jeg antar at du har en IP-adresse som er reservert allerede for Raspberry Pi - hvis du ikke har det, må du sjekke rutens konfigurasjonsside for reserverte IP-adresser mens du er der, da du ikke skal endre neste uke og for serveren å plutselig slutte å jobbe.
Nå for å installere den siste delen av serverprogramvaren.
https://github.com/sebauer/if-this-then-node.git cd if-this-then-node/ npm install node server.js
Du bør se følgende.
Det er ok, det betyr bare at vi må oppdatere våre detaljer. Åpne konfigur.js i Nano og rediger disse detaljene til noe annet enn standard, og lagre deretter. Når du kjører serveren igjen, bør du se dette:
Flott. Test at maskinen din er tilgjengelig fra omverdenen ved å skrive inn ditt dynamiske DNS-vertsnavn, og legg til / ifttn / til slutten av nettadressen. Hvis alt fungerer, vil meldingen "IFTTN - hvis-dette-da-node Versjon 2.0.1 være oppe!" Vises i din nettleser. Igjen, for å gjøre dette skriptet kjørt på oppstart, rediger /etc/rc.local filen og legg til:
sudo node /home/pi/if-this-then-node/server.js< /dev/null &
Hvis-dette-da-node fungerer via plugins - det er noen standardleveranser som leveres, men det er ikke av interesse for oss. I stedet laster du ned dette tilpassede pluginet som jeg har skrevet for deg med følgende kommandoer.
cd plugins wget https://gist.githubusercontent.com/jamesabruce/4af8db24ba3452b94877/raw/d11c1cff3aa44dbb6a738eeb15202f3db461de75/sonos.js
Du må også installere forespørselsmodulen .
npm install request
Start deretter serveren på nytt. Pluggen er ganske enkel, men litt annerledes enn nettadressen vi har brukt hittil. I dette tilfellet har jeg brukt den spesielle "sayall" -handlingen, som sender meldingen til hver Sonos-enhet.
request('http://localhost:5005/sayall/'+params.message+'/en-gb', function (error, response, body)
Hvis du hellere vil kunne målrette mot bestemte enheter, erstatter du denne linjen med:
request('http://localhost:5005/'+params.device+'/say/'+params.message+'/en-gb', function (error, response, body)
Legg til en annen linjeparameter som kalles enhet til JSON-forespørselen nedenfor, for å angi navnet på Sonos-enheten.
For å teste dette ut, bruker jeg IFTTT-knappen "Do" -knappen. Opprett en ny oppskrift, bla til kanaler, og velg Maker- kanalen.
Lag en ny oppskrift. Skriv inn nettadressen du konfigurerte tidligere fra en ledig, dynamisk DNS-leverandør (inkludert / ifttn / ved slutten av nettadressen. Ikke glem disse snakkene). Velg POST- forespørsel, søknad / json- innhold og meldingslegemet som følger, og erstatt alle variabler etter behov med de som du tidligere har konfigurert:
{ "action":"sonos", "user":"YOURUSER", "pw":"YOURPASSWORD", "message":"Incoming message for everyone: Dinner is ready! Repeat. Dinner is ready. Get your asses upstairs now." }
Nå har jeg en lett tilgjengelig knapp som vil kunngjøre meldingen på hver Sonos-enhet i huset. Du kan selvfølgelig kombinere dette med en hvilken som helst IFTTT-kanal du vil lage en egendefinert melding ved hjelp av variabler fra den kanalen. Du bør selv kunne kopiere værmeldingen fra oven uten å bruke OpenHAB nå, selv om det tok ekstra forsøk på å installere en annen server.
Merk: hackere vil automatisk skanne deg . Dette skjer hele tiden, men hvis du ser på logger, kan det virke alarmerende. Nedenfor kan du se noen systematisk forsøkt å finne ut om noen av de standard PHPMyAdmin-grensesnittene var tilgjengelige. Som de ikke var. Ikke vær redd hvis du ser noe lignende. Det er internettekvivalent kaldt ringer tilfeldige telefonnumre for å se om noen er der.
Hva vil du kunngjøre?
Du bør nå ha verktøy og kwowledge til å bade hele huset i stemmevarsler om alt du muligens kan tenke på. Hvem trenger musikk? Din eneste grense er 350 daglige forespørsler fra VoiceRSS.org - men det handler om ett hvert 4. minutt, så du bør være i orden.
Så hva skal du gjøre med dette? Del dine ideer eller IFTTT oppskrift i kommentarene!
Image Credits: kaffe og kvinne av S_Photo via Shutterstock