Reklame

Drømmen om enhver smart hjemme-entusiast er et hjem, du kan tale med, men virkeligheden er langt væk fra det.

Amazon Echo, for eksempel, giver dig mulighed for at bruge et vilkårligt antal stemmestyrede funktioner, men en dialog skal indledes af dig med et spørgsmål - du kan ikke bare lade hende annoncere en vigtig meddelelse.

Du kan gør dette dog med et Sonos-system og lidt DIY Raspberry Pi-magi. I dag vil jeg vise dig, hvordan du konfigurerer stemmemeddelelser på dit Sonos-system, introducerer et par nyttige IFTTT-opskrifter, OpenHAB-integrationer og mere for at gøre brug af underretningsfunktionen.

Bemærk, at der er en indbygget Sonos-binding til OpenHAB tilgængelig, men det er kendt at forårsage hukommelsesproblemer på grund af et defekt uPnP-bibliotek. Jeg vil foreslå, at du springer over det i øjeblikket og bruger metoden i denne tutorial i stedet.

En Raspberry Pi, der kører Raspian linux, er ideel til denne tutorial, men den skal også fungere på enhver linux-baseret hjemmeserver, du har kørt. I dette tilfælde bruger jeg den samme Raspberry Pi, der kører

OpenHAB, open source-hjemmeautomatiseringssystemet Kom godt i gang med OpenHAB-hjemmeautomatisering på Raspberry PiOpenHAB er en moden, open source hjemmeautomatiseringsplatform, der kører på en række hardware og er protokol agnostic, hvilket betyder, at den kan oprette forbindelse til næsten enhver hjemmeautomatiseringshardware på markedet i dag. Læs mere . Resten af ​​denne tutorial antager, at du også kører dette på en Raspberry Pi, og enten har et lokalt terminalvindue åbent på skrivebordet, eller logget ind eksternt ved hjælp af SSH Opsætning af din hindbærpi til hovedløs brug sammen med SSHRaspberry Pi kan acceptere SSH-kommandoer, når de er tilsluttet et lokalt netværk (enten via Ethernet eller Wi-Fi), så du nemt kan konfigurere det. Fordelene ved SSH går ud over at forstyrre den daglige screening ... Læs mere .

Du har brug for det

  • Raspberry Pi 2 (ældre modeller skal fungere, men kontroller for specifikke ændringer i instruktionerne)
  • Mindst en Sonos-højttaler (andre lydsystemer understøttes ikke, dette er en tutorial til kun Sonos)
  • Gratis konto på VoiceRSS.org [Ikke længere tilgængelig]. Registrer dig derefter find din API-nøgle, som vi senere har brug for for at generere stemmemeddelelser.

Installer Node Seneste

Kontroller, hvilken version af noden du har ved at skrive:

knude -v. 

Bemærk, at version 6 ikke understøttes. Hvis du har kode 6, skal du først fjerne det, og følg derefter instruktionerne herunder for at installere v5.5.

Hvis du ikke har v5, eller hvis du ikke får en fejl, der ikke findes, skal du følge disse instruktioner for at installere Node. Følgende kommando antager en Raspberry Pi 2; Brug ældre modeller til ældre 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-knude-v5.12.0-linux-armv7l.tar.gz. cd-knude-v5.12.0-linux-armv7l. sudo cp -R * / usr / local. 

Bekræft igen ved at skrive:

knude -v

Og du skulle se v5.12 (eller hvad det seneste var, som du downloadede).

Dernæst har vi nogle nodemoduler, der skal installeres. Vi ønsker også Node Package Manager.

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

Det er forudsætningerne ud af vejen, nu på de sjove ting.

Sonos HTTP API

Det Sonos HTTP API opretter en webserver på det lokale netværk, som gør det muligt for os at pinge en URL med en meddelelse, der skal annonceres på en Sonos (og for at kontrollere det eksternt, hvis du vil, skønt denne tutorial kun fokuserer på stemmemeddelelsen aspekt).

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

Hvis du ser en meddelelse om sådan-og-sådan-modul ikke findes, skal du bare gøre en anden npm installation og modulnavnet, og prøv derefter npm start igen. Hvis du oplever fejl i forbindelse med “Kræver en C ++ 11-kompilator”, rettes 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-opdateringsalternativer - installer / usr / bin / g ++ g ++ /usr/bin/g++-4.8 50. 

Til sidst skulle du se noget lignende:

sonos-http-api arbejder

Serveren kører nu, grænseflade med Sonos. Formatet af denne API er let:

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

Eller som et specifikt eksempel:

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

Handlingen, vi er interesseret i, er “sige” -kommandoen, der bruges som følger:

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

Du hører en fejlmeddelelse om at skulle registrere til en API-nøgle på VoiceRSS.org. Du skulle allerede have gjort dette, så skriv følgende og indsæt din API-nøgle som appropirat:

nano-indstillinger.json

{

"Voicerss": "YOURAPIKEY" }

(Tryk på CTRL-X, Y for at gemme filen)

Genstart serveren, og vælg URL'en igen. Efter nogle få sekunder skal du høre en dejlig engelsk stemme (skønt du ændrer slutningen af ​​URL'en til en-os hvis du hellere vil). For at få Sonos HTTP API-server til at starte igen, når Pi genstartes:

sudo nano /etc/rc.local

Tilføj en linje før Afslut 0:

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

Du har nu muligheden for at oprette en stemmemeddelelse hvor som helst på det lokale netværk ved blot at pinge en URL, så mulighederne er vidt åbne på dette tidspunkt. Hvis du imidlertid kæmper for ideer, skal du læse videre for et par nyttige underretninger, som jeg har oprettet.

OpenHAB-underretninger om begivenheder

Lad os først tage et simpelt eksempel: bevægelsesdetektion. Dette er en almindelig brugssag til aktivering af lys, men du vil måske også have en stemmemeddelelse, hvis det er en bevægelsessensor i et område med lav trafik, eller måske som en advarsel om, at nogen kommer op i haven sti.

regel "Havebevægelse registreret" når Item Garden_Motion ændrede sig, var da String message = "Du har en besøgende" sendHttpGetRequest (" http://localhost: 5005 / køkken / sige / "+ message.encode (" UTF-8 ") +" / da-dk ") ende.

Du skal se, hvordan du kan integrere disse enkle stemmemeddelelser i nogen af ​​dine regler, men lad os prøve noget lidt mere komplekst.

Daglig vejrrapport fra IFTTT til OpenHAB til Sonos

I denne opskrift får vi Sonos til at annoncere en daglig vejrrapport på dit foretrukne tidspunkt.

Du har brug for My. OpenHAB-binding aktiveret, da dette skaber en sikker forbindelse mellem din interne OpenHAB-server og den eksterne IFTTT-service. Indstil det, hvis du ikke allerede har gjort det - du kan henvise til del 1 i vores OpenHAB-guide Kom godt i gang med OpenHAB-hjemmeautomatisering på Raspberry PiOpenHAB er en moden, open source hjemmeautomatiseringsplatform, der kører på en række hardware og er protokol agnostic, hvilket betyder, at den kan oprette forbindelse til næsten enhver hjemmeautomatiseringshardware på markedet i dag. Læs mere for fulde instruktioner, ellers antager jeg, at du allerede har konfigureret den med persistens aktiveret for alle elementer.

Opret derefter et nyt streng-element i din OpenHAB-installation, der gemmer den daglige vejrrapport. Før dette er synligt i My. OpenHAB-kanal, vi bliver nødt til at initialisere den med en eller anden standardvariabel. Ping følgende URL (ændring raspberrypi.local til din OpenHAB-server, eller bare brug dets IP-adresse, og Todays_Weather til hvad du navngav strengen):

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

Log ind på My. OpenHAB [Ødelagt URL fjernet] og kontroller Elementer liste for at sikre, at variablen nu er blevet eksporteret.

min openhab-eksportkontrol

Tilbage til IFTTT, opret en ny opskrift, og brug Vejret kanal som trigger på dit foretrukne tidspunkt på dagen. Du skal indstille din placering først, hvis du aldrig har brugt den før.

Vælg Min. OpenHAB som handling, og vælg Todays_Weather som den variabel, der skal opdateres.

ifttt vejrrapport

For nu skal du bare vælge den næste halvtimes slot til test - du kan opdatere opskriften senere, når du ved, at den fungerer.

Selvfølgelig, på testtidspunktet (faktisk lidt før) fik jeg dagens prognose opdateret med succes.

2016-02-27 10: 28: 01.689 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - Modtaget kommando Mest skyet i dag! Med et højt på 7C og et lavt på 1C. Gentage. Forholdene vil være mest skyet i dag med et højt niveau på 7C og et lavt niveau på 1C. til varen Todays_Weather. 2016-02-27 10: 28: 01.697 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - butik (Todays_Weather), tilstand = Mest skyet i dag! Med et højt på 7C og et lavt på 1C. Gentage. Forholdene vil være mest skyet i dag med et højt niveau på 7C og et lavt niveau på 1C. 

Dernæst har vi brug for en OpenHAB-regel for at sende denne variabel til Sonos “siger” URL. Følgende skal gøre det:

regel "Annoncer den daglige vejrrapport" da Element Todays_Weather modtog opdatering. send derefterHttpGetRequest (" http://localhost: 5005 / køkken / sige / "+ Todays_Weather.state.toString.encode (" UTF-8 ") +" / da-dk ") ende.

Dette er enkelt nok: Hver gang Todays_Weather-variablen opdateres (som den vil være, automatisk, kl. 8 hver dag), ping URL'en. Vi bruger koder ( ”UTF-8”) Strengfunktion til at gøre sætningen fra IFTTT egnet til brug i en URL. For manuelt at teste denne del af systemet skal du bare bruge OpenHAB HTTP API igen:

http://raspberrypi.local: 8080 / CMD? Todays_Weather = Overskyet, med en chance for kødboller. 

Opret forbindelse til IFTTT uden OpenHAB ved hjælp af If-This-Then-Node

Endelig, lad os se på, hvordan du opretter forbindelse fra enhver IFTTT-opskrift uden OpenHAB-formidleren. I stedet installerer vi en anden webserver og udsætter den for det åbne internet. Dette er ikke uden risiko: enhver form for åben server er en sikkerhedsrisiko, men vi afhjælper dette ved ikke at køre en komplet serverstack, bare en lille specifik tjeneste, der kun accepterer bestemte kommandoer i et sikkert JSON-datapakkeformat (så ingen SQL-injektion eller godkendelsesangreb vil være muligt). Når vi er færdige, har du en offentlig URL, som du kan sende meddelelser fra IFTTT Maker-kanalen.

Start med at opsætte en af ​​de mange gratis dynamiske DNS-tjenester De 5 bedste gratis dynamiske DNS-udbydereEn DDNS-service kan hjælpe dig med at oprette forbindelse til din hjemme-pc, mens du er på farten. Her er de bedste gratis dynamiske DNS-udbydere at overveje. Læs mere derude - Jeg anbefaler DuckDNS, specifikt fordi det giver et enkelt sæt instruktioner til Raspberry Pi, hvilket gør det muligt for den at opdatere din IP-adresse automatisk. Følg disse, og husk din URL til de næste trin. Din router har muligvis også en dynamisk DNS-funktion indbygget, så kontroller der først. I mit tilfælde kan jeg få en * .mynetgear.com URL gratis, så det har jeg brugt.

Find derefter din router portvideresendelse Hvad er portvideresendelse & hvordan kan det hjælpe mig? [MakeUseOf Explains]Græder du lidt indeni, når nogen fortæller dig, at der er et problem til portvideresendelse, og det er grunden til, at din skinnende nye app ikke fungerer? Din Xbox lader dig ikke spille spil, dine torrent-downloads nægter ... Læs mere konfigurationsside; det er her, vi fortæller det, hvad vi skal gøre med indgående anmodninger. Videresend alle HTTP-anmodninger (port 80) til port 1337 på din Raspberry Pi-server. Jeg antager, at du allerede har en IP-adresse reserveret til din Raspberry Pi - hvis du ikke har det, skal du tjekke din routers konfiguration side til reserverede IP'er, mens du er der, da du ikke ændrer den i næste uge, og at serveren pludselig stopper arbejder.

router config port videresendelse

Nu for at installere den sidste bit serversoftware.

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

Du skal se følgende.

Hvis dette er noden standardværdier fejl

Det er ok, det betyder bare, at vi er nødt til at opdatere vores detaljer. Åben op config.js i Nano og rediger disse detaljer til andet end standard, og gem derefter. Når du kører serveren igen, skal du se dette:

hvis dette så kører nodeserveren

Store. Test din maskine er tilgængelig fra omverdenen ved at indtaste dit dynamiske DNS-værtsnavn og tilføje /ifttn / til slutningen af ​​URL-adressen. Hvis alt fungerer, er beskeden "IFTTN - hvis-denne-da-node version 2.0.1 er i gang!" vises i din browser. For at gøre dette script kørt ved opstart skal du redigere igen /etc/rc.local arkiver og tilføj:

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

Hvis-Dette-Then-Node fungerer gennem plugins - der leveres et par standardkonti, men der er ikke noget for os. Download i stedet dette tilpassede plugin, som jeg har skrevet til dig med følgende kommandoer.

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

Du skal også installere anmodning modul.

npm anmodning om installation. 

Genstart derefter serveren. Plugin er ganske enkel, men lidt anderledes end den URL, vi hidtil har brugt. I dette tilfælde har jeg brugt den specielle “sayall” -handling, der sender meddelelsen til hver Sonos-enhed.

anmodning(' http://localhost: 5005 / sayall / '+ params.message +' / da-gb ', funktion (fejl, respons, krop)

Hvis du hellere vil være i stand til at målrette mod specifikke enheder, skal du udskifte den linje med:

anmodning(' http://localhost: 5005 / '+ params.device +' / say / '+ params.message +' / da-gb ', funktion (fejl, respons, krop)

Tilføj en anden linjeparameter kaldet apparat til JSON-anmodningen nedenfor, hvor Sonos-enhedsnavnet skal specificeres.

For at teste dette bruger jeg IFTTT “Do” -knapappen. Opret en ny opskrift, gennemsøg kanaler, og vælg Maker kanal.

do-knap

Opret en ny opskrift. Indtast den URL, du tidligere har konfigureret fra en gratis dynamisk DNS-udbyder (inklusive /ifttn/ i slutningen af ​​webadressen. Glem ikke disse skråstreger). Vælg STOLPE anmodning, application / json indhold og meddelelsens krop som følger, hvor alle variabler erstattes efter behov med dem, du tidligere har konfigureret:

{"action": "sonos", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Indgående meddelelse til alle: Middagen er klar! Gentage. Middagen er klar. Få dine æsler ovenpå nu. "}

Nu har jeg en let tilgængelig knap, der annoncerer beskeden på hver Sonos-enhed i huset. Du kan selvfølgelig parre dette med en hvilken som helst IFTTT-kanal, du vil oprette en brugerdefineret besked ved hjælp af variabler fra den kanal. Du skulle endda være i stand til at gentage vejrrapporten ovenfra uden at bruge OpenHAB nu, skønt det krævede den ekstra indsats at installere en anden server.

Bemærk: hackere scanner dig automatisk. Dette sker hele tiden, men hvis du ser logfiler, kan det virke alarmerende. Nedenfor kan du se nogen systematisk forsøgt at konstatere, om nogen af ​​de standard PHPMyAdmin-grænseflader var tilgængelige. Hvilke de ikke var. Bliv ikke skremt, hvis du ser noget lignende. Det er internetækvivalent med koldkaldte tilfældige telefonnumre for at se, om nogen er der.

webserver hackforsøg

Hvad vil du annoncere?

Du skal nu have værktøjer og kwowledge til konstant at bade hele dit hus i stemmemeddelelser om alt hvad du muligvis kunne tænke på. Hvem har brug for musik? Din eneste grænse er 350 daglige anmodninger fra VoiceRSS.org - men det er cirka et hvert 4. minut, så du skal være i orden.

Så hvad vil du gøre med dette? Del dine ideer eller IFTTT-opskrift i kommentarerne!

Billedkreditter:kaffe og kvinde af S_Photo via Shutterstock

James har en BSc i kunstig intelligens og er CompTIA A + og Network + certificeret. Han er hovedudvikler af MakeUseOf og bruger sin fritid på at spille VR paintball og brætspil. Han har bygget pc'er siden han var barn.