Slik sender du talemeldinger til Sonos-høyttalere

Slik sender du talemeldinger til Sonos-høyttalere / Smart Hjem

Drømmen om enhver smart hjemme-entusiast er et hjem du kan snakke med, men virkeligheten er langt unna det.

Amazon Echo lar deg for eksempel bruke et hvilket som helst antall talestyrte 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ør dette med et Sonos-system skjønt, og litt DIY Raspberry Pi magic. I dag vil jeg vise deg hvordan du konfigurerer talemeldinger på Sonos-systemet, og introduserer et par nyttige IFTTT-oppskrifter, OpenHAB-integrasjoner og mer for å gjøre bruk av 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 via 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 installere npm sudo npm installere -g npm sudo npm installere -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 for å kontrollere det eksternt hvis du vil, selv om denne opplæringen bare fokuserer på stemmevarslingsaspektet).

git klone https://github.com/jishi/node-sonos-http-api.git sonos cd sonos npm installere --produksjon 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 en gang til. Hvis du opplever feil relatert til “krever en C ++ 11 kompilator”, fikse med følgende kommandoer:

sudo apt-get install gcc-4.8 g ++ - 4,8 sudo oppdateringsalternativer - installer / usr / bin / gccgcc / usr / bin / gcc-4.6 20 sudo oppdateringsalternativer - installer / usr / bin / gcc gcc / usr / bin / gcc-4.8 50 sudo oppdateringsalternativer - installer / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20 sudo oppdateringsalternativer --installere / 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 “si” kommando, 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-us hvis du vil heller). 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 Avslutt 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.

regelen "Hagebevegelse oppdaget" når Item Garden_Motion endret da var String message = "Du har en besøkende" sendHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + message.encode ("UTF-8") + / en-gb ") slutt 

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 bare bruk den er IP-adresse, og Todays_Weather til det du har kalt Strengen):

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

Logg inn på Min.OpenHAB og sjekk elementer liste 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] [o.o.i..myOpenHABServiceImpl] - Mottatt kommando For det meste skyet i dag! Med en høyde på 7C og en lav på 1C. Gjenta. Forholdene vil bli skyet i dag, med en høyde på 7C og en lav på 1C. for gjenstand Todays_Weather 2016-02-27 10: 28: 01.697 [DEBUG] [o.o.i.i.MyOpenHABServiceImpl] - butikk (Todays_Weather), state = For det meste skyet i dag! Med en høyde på 7C og en lav på 1C. Gjenta. Forholdene vil bli skyet i dag, med en høyde på 7C og en lav på 1C. 

Deretter trenger vi en OpenHAB-regel for å sende denne variabelen til Sonos “si” URL. Følgende bør gjøre det:

regelen "Kunngjør daglig værrapport" når elementet Todays_Weather mottok oppdatering og send deretter SendHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + Todays_Weather.state.toString.encode ("UTF-8") + "/ no-gb ") slutt 

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 kode (“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 = Skyet, med sjanse for kjøttboller. 

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 reservert 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 hvis-dette-da-node / npm installeringsnode server.js 

Du bør se følgende.

Det er ok, det betyr bare at vi må oppdatere våre detaljer. Åpne opp config.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 legge til /ifttn / til slutten av nettadressen. Hvis alt fungerer, meldingen “IFTTN - hvis-dette-da-node Versjon 2.0.1 er oppe og går!” vil bli vist i din nettleser. Igjen, for å gjøre dette skriptet kjørt på oppstart, rediger du /etc/rc.local fil 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 be om modul.

npm installasjonsforespørsel 

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” handling, som sender meldingen til hver Sonos-enhet.

forespørsel ('http: // localhost: 5005 / sayall /' + params.message + '/ en-gb', funksjon (feil, svar, kropp) 

Hvis du hellere vil kunne målrette mot bestemte enheter, erstatter du denne linjen med:

forespørsel ('http: // localhost: 5005 /' + params.device + '/ say /' + params.message + '/ en-gb', funksjon (feil, svar, kropp) 

Legg til en annen linjeparameter som heter enhet til JSON-forespørselen nedenfor for å spesifisere Sonos-enhetens navn.

For å teste dette ut, bruker jeg IFTTT “Gjøre” knapp app. Opprett en ny oppskrift, bla til kanaler, og velg Maker kanal.

Lag en ny oppskrift. Skriv inn nettadressen du konfigurerte tidligere fra en gratis, dynamisk DNS-leverandør (inkludert / Ifttn / på slutten av nettadressen. Ikke glem de skråstreket). Å velge POST be om, application / json innhold og meldingslegemet som følger, erstatte alle variabler etter behov med de som du tidligere har konfigurert:

"action": "sonos", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Innkommende melding for alle: Middagen er klar! Gjenta. Middagen er klar. ."  

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

Utforsk mer om: Hjemmautomatisering, Sonos.