Annonse

Drømmen til enhver smarthusentusiast er et hjem du kan snakke med, men virkeligheten er langt unna.

Amazon Echo, for eksempel, lar deg bruke et hvilket som helst antall talestyrte funksjoner, men dialog må startes av deg med et spørsmål - du kan ikke bare la henne kunngjøre en viktig melding.

Du kan gjør dette med et Sonos-system, og litt DIY Raspberry Pi-magi. I dag skal jeg vise deg hvordan du konfigurerer stemmevarsler på Sonos-systemet ditt, og introduserer et par nyttige IFTTT-oppskrifter, OpenHAB-integrasjoner og mer for å gjøre bruk av varslingsfunksjonen.

Merk at det er en naturlig Sonos-binding for OpenHAB tilgjengelig, men det er kjent å forårsake hukommelsesproblemer på grunn av feil uPnP-bibliotek. Jeg vil foreslå 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 skal også fungere på hvilken som helst linux-basert hjemmeserver du har. I dette tilfellet bruker jeg den samme Raspberry Pi som kjører

OpenHAB, open source-hjemmeautomatiseringssystemet Komme i gang med OpenHAB Home Automation på Raspberry PiOpenHAB er en moden, åpen kildekode-hjemme-automatiseringsplattform som kjører på en rekke maskinvare og er protokoll agnostisk, noe som betyr at den kan koble seg til nesten all hjemmeautomatiseringsvare 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 pålogget eksternt ved hjelp av SSH Sette opp bringebærpien din for hodeløs bruk med SSHRaspberry Pi kan godta SSH-kommandoer når de er koblet til et lokalt nettverk (enten med Ethernet eller Wi-Fi), slik at du enkelt kan konfigurere den. Fordelene med SSH går ut over å forstyrre den daglige screeningen ... Les mer .

Du vil trenge

  • Bringebær 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 en tutorial for Sonos)
  • Gratis konto på VoiceRSS.org [Ikke lenger tilgjengelig]. Registrer deg da finn API-nøkkelen, 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, må du først fjerne det, og deretter følge instruksjonene nedenfor for å installere v5.5.

Hvis du ikke har v5, eller hvis du ikke får en feil som ikke ble funnet, følg disse instruksjonene for å installere Node. Følgende kommando antar en Raspberry Pi 2; bruk for eldre modeller 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 skulle se v5.12 (eller hva det siste var som du lastet ned).

Deretter har vi noen Node-moduler å installere. Vi vil også ha Node Package Manager.

sudo apt-get install npm. sudo npm installere -g npm. sudo npm installer -g node-gyp. 

Det er forutsetningene fra veien, nå til de morsomme tingene.

Sonos HTTP API

De Sonos HTTP API oppretter en webserver i det lokale nettverket, som lar oss pinge en URL med en melding vi kunngjør på en Sonos (og for å kontrollere det eksternt hvis du vil, selv om denne opplæringen bare fokuserer på talemeldingen aspektet).

git klon https://github.com/jishi/node-sonos-http-api.git Sonos. cd sonos. npm installasjon - produksjon. npm start. 

Hvis du ser en melding om en slik modul ikke funnet, bare gjør 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 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. 

Etter hvert skulle du se noe slikt:

sonos-http-api arbeider

Serveren kjører nå, grensesnitt mot Sonos. Formatet til denne APIen er enkelt:

http://[SERVER IP]: 5005 / [ROOM NAME] / [ACTION]

Eller som et spesifikt eksempel:

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

Handlingen vi er interessert er "si" -kommandoen, som brukes som følger:

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

Du hører en feilmelding om å måtte registrere deg til en API-nøkkel på VoiceRSS.org. Du burde allerede gjort dette, så skriv ut følgende og lim inn API-nøkkelen din som appropirat:

nano settings.json

{

"Voicerss": "YOURAPIKEY" }

(Trykk CTRL-X, Y for å lagre filen)

Start serveren på nytt, og ping URLen igjen. Etter noen sekunder skal du høre en herlig engelsk stemme (selv om du endrer slutten av URL til en-us hvis du heller vil). For å få Sonos HTTP API-server til å starte igjen når Pi startes på nytt:

sudo nano /etc/rc.local

Legg til en linje før avkjørsel 0:

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

Du har nå muligheten til å opprette en talemelding fra hvor som helst i det lokale nettverket bare ved å pinge en URL, så mulighetene er vidt åpne på dette tidspunktet. Hvis du selv sliter med ideer, kan du lese videre for noen nyttige varsler jeg har satt opp.

OpenHAB-varslinger om hendelser

La oss ta et enkelt eksempel først: bevegelsesdeteksjon. Dette er en vanlig brukssak for å aktivere lys, men du vil kanskje også ha et talemelding hvis det er en bevegelsessensor i et lite trafikkområde, eller kanskje som en advarsel om at noen kommer opp i hagen sti.

regel "Hage bevegelse oppdaget" når element Garden_Motion endret seg da var String message = "Du har en besøkende" sendHttpGetRequest (" http://localhost: 5005 / kjøkken / si / "+ message.encode (" UTF-8 ") +" / no ") 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 sammensatt.

Daglig værrapport fra IFTTT til OpenHAB til Sonos

I denne oppskriften vil vi få Sonos kunngjøre en daglig værrapport til ønsket tid.

Du trenger My. OpenHAB-binding er aktivert, siden dette skaper en sikker forbindelse mellom din interne OpenHAB-server og den eksterne IFTTT-tjenesten. Konfigurer det hvis du ikke allerede har gjort det - du kan henvise til det del 1 av OpenHAB-guiden vår Komme i gang med OpenHAB Home Automation på Raspberry PiOpenHAB er en moden, åpen kildekode-hjemme-automatiseringsplattform som kjører på en rekke maskinvare og er protokoll agnostisk, noe som betyr at den kan koble seg til nesten all hjemmeautomatiseringsvare på markedet i dag. Les mer for fullstendige instruksjoner, ellers antar jeg at du allerede har satt den opp med utholdenhet aktivert for alle elementene.

Deretter lager du et nytt strengelement i din OpenHAB-installasjon, som lagrer den daglige værrapporten. Før dette er synlig i My. OpenHAB-kanal, vi må initialisere den med en eller annen standardvariabel. Ping følgende URL (endring raspberrypi.local til OpenHAB-serveren din, eller bare bruk den IP-adressen, og Todays_Weather til hva du heter Stringen):

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

Logg inn på Min. OpenHAB [Broken URL Removed] og sjekk elementer liste for å sikre at variabelen nå er eksportert.

min eksport sjekk for openhab-varer

Tilbake til IFTTT, lag en ny oppskrift og bruk Værkanal som trigger på ditt foretrukne tidspunkt på døgnet. Du må angi posisjonen din først hvis du aldri har brukt den før.

Velg Min. OpenHAB som handling, og velg Todays_Weather som variabelen som skal oppdateres.

ifttt værmelding

Foreløpig er det bare å velge den neste halvtimes sporet for testing - du kan oppdatere oppskriften senere når du vet at den fungerer.

Selvfølgelig, på testtiden (faktisk litt før) fikk jeg dagens prognose oppdatert.

2016-02-27 10: 28: 01.689 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - Mottatt kommando Mest skyet i dag! Med et høyt på 7C og et lavt på 1C. Gjenta. Forholdene vil være mest skyet i dag, med en høyde på 7C og en lavhet på 1C. for varen Todays_Weather. 2016-02-27 10: 28: 01.697 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - store (Todays_Weather), state = Mest skyet i dag! Med et høyt på 7C og et lavt på 1C. Gjenta. Forholdene vil være mest skyet i dag, med en høyde på 7C og en lavhet på 1C. 

Neste gang, trenger vi en OpenHAB-regel for å sende denne variabelen til Sonos "si" URL. Følgende bør gjøre det:

regel "kunngjøre den daglige værmeldingen" da Element Todays_Weather mottok oppdatering. send deretterHttpGetRequest (" http://localhost: 5005 / kjøkken / si / "+ Todays_Weather.state.toString.encode (" UTF-8 ") +" / no ") slutt.

Dette er enkelt nok: Når Todays_Weather-variabelen blir oppdatert (som den vil være, automatisk, kl. 08.00 hver dag), pinger du URL-en. Vi bruker kode ( “UTF-8”) Strengfunksjon for å gjøre setningen fra IFTTT egnet for bruk i en URL. For å teste denne delen av systemet manuelt, bruker du bare OpenHAB HTTP API igjen:

http://raspberrypi.local: 8080 / CMD? Todays_Weather = Skyet, med sjanse for kjøttboller. 

Koble til IFTTT uten OpenHAB ved å bruke If-This-Then-Node

La oss til slutt se på hvordan du kobler til fra enhver IFTTT-oppskrift uten OpenHAB-formidleren. I stedet installerer vi en annen webserver og utsetter den for det åpne Internett. Dette er ikke uten risiko: noen form for åpen server er en sikkerhetsrisiko, men vi avbøter dette ved å ikke kjøre en komplett serverstack, bare en liten spesifikk tjeneste som bare godtar visse kommandoer i et trygt JSON-datapakkeformat (slik at ingen SQL-injeksjon eller autentiseringsangrep vil være mulig). Når vi er ferdig, har du en offentlig nettadresse som du kan sende meldinger fra IFTTT Maker-kanalen til.

Begynn med å sette opp en av de mange gratis dynamiske DNS-tjenester De 5 beste gratis dynamiske DNS-leverandøreneEn DDNS-tjeneste kan hjelpe deg med å koble til hjemme-PCen mens du er på farten. Her er de beste gratis dynamiske DNS-leverandørene å vurdere. Les mer der ute - Jeg anbefaler DuckDNS, spesielt fordi det gir et enkelt sett med instruksjoner for Raspberry Pi, slik at den kan oppdatere IP-tillegget ditt automatisk. Følg med på disse, og husk nettadressen din for de neste trinnene. Ruteren din kan også ha en dynamisk DNS-funksjon innebygd, så sjekk der først. I mitt tilfelle kan jeg få en * .mynetgear.com URL gratis, så jeg har brukt det.

Neste, finn ruteren din port forwarding Hva er portvideresending og hvordan kan det hjelpe meg? [MakeUseOf Explains]Gråter du litt inne når noen forteller deg at det er et portvideresendingsproblem, og det er grunnen til at den skinnende nye appen din ikke fungerer? Xbox-enheten din lar deg ikke spille spill, torrentnedlastningene dine nekter ... Les mer konfigurasjonsside; det er her vi skal fortelle det hva vi skal gjøre med innkommende forespørsler. Videresend alle HTTP-forespørsler (port 80) til port 1337 på Raspberry Pi-serveren. Jeg antar at du allerede har en IP-adresse reservert til Raspberry Pi - hvis du ikke har det, kan du sjekke ruteren siden for reservert IP-er mens du er der, for det gjør du ikke for å endre neste uke og for at serveren plutselig skal stoppe arbeider.

router config port videresending

Nå for å installere den siste biten av serverprogramvaren.

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

Du bør se følgende.

hvis dette, node standardverdiene feil

Det er ok, det betyr bare at vi må oppdatere detaljene våre. Å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, skal du se dette:

hvis dette så node server kjører

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, er meldingen “IFTTN - if-this-then-node versjon 2.0.1 er oppe og går!” vises i nettleseren din. For å gjøre dette skriptet kjørt ved oppstart, rediger du igjen /etc/rc.local fil og legg til:

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

If-Dette-Then-Node fungerer gjennom plugins - det leveres noen få standardinnstillinger, men det er ikke interessant for oss. Last ned i stedet denne tilpassede plugin som jeg har skrevet til 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 serveren på nytt. Plugin-en 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 alle Sonos-enheter.

be om(' http://localhost: 5005 / sayall / '+ params.message +' / en-gb ', funksjon (feil, respons, kropp)

Hvis du heller vil kunne målrette mot spesifikke enheter, bytter du ut linjen med:

be om(' http://localhost: 5005 / '+ params.device +' / say / '+ params.message +' / en-gb ', funksjon (feil, respons, kropp)

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

For å teste dette bruker jeg IFTTT “Do” -knappen. Lag en ny oppskrift, bla gjennom kanaler og velg Maker kanal.

gjør-knappen

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 disse skråstrekene). Å velge POST be om, application / json innhold, og meldingens hoveddel som følger, og erstatter alle variabler etter behov med de du tidligere har konfigurert:

{"action": "sonos", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Innkommende melding for alle: Middagen er klar! Gjenta. Middagen er klar. Få rumpene oppe nå. "}

Nå har jeg en lett tilgjengelig knapp som kunngjør meldingen på alle Sonos-enheter i huset. Du kan selvfølgelig parre dette med hvilken som helst IFTTT-kanal du vil lage en tilpasset melding ved å bruke variabler fra den kanalen. Du burde til og med kunne gjenskape værmeldingen ovenfra uten å bruke OpenHAB nå, selv om det tok den ekstra innsatsen å installere en annen server.

Merk: hackere skanner deg automatisk. Dette skjer hele tiden, men hvis du ser logger, kan det virke alarmerende. Nedenfor kan du se noen systematisk forsøkt å finne ut om noen av standard PHPMyAdmin-grensesnittene var tilgjengelige. Som de ikke var. Ikke bli skremt hvis du ser noe lignende. Det er internettekvivalentet av kalde ringer tilfeldige telefonnumre for å se om noen er der.

webserver hackforsøk

Hva vil du kunngjøre?

Du bør nå ha verktøy og kwowledge til å hele tiden bade hele huset ditt i stemmevarsler om alt du muligens kunne tenke deg. Hvem trenger musikk? Den eneste grensen din er 350 forespørsler daglig fra VoiceRSS.org - men det er omtrent ett hvert fjerde minutt, så du bør være i orden.

Så hva vil du gjøre med dette? Del ideene dine eller IFTTT-oppskriften i kommentarene!

Bildetillegg:kaffe og kvinne av S_Photo via Shutterstock

James har en BSc i kunstig intelligens, og er CompTIA A + og Network + sertifisert. Han er hovedutvikler av MakeUseOf, og bruker fritiden sin på å spille VR paintball og brettspill. Han har bygd pc-er siden han var liten.