
Michael Fisher
0
1962
392
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 hvilket som helst antal stemmestyrede funktioner, men 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 viser jeg dig, hvordan du konfigurerer stemmemeddelelser på dit Sonos-system, introducerer et par nyttige IFTTT-opskrifter, OpenHAB-integration 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 for nu, 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-hjemmeautomation på Raspberry Pi Kom godt i gang med OpenHAB-hjemmeautomation på Raspberry Pi OpenHAB er en moden open source-hjemmeautomatiseringsplatform der kører på en række hardware og er protokollagnostisk, hvilket betyder, at den kan oprette forbindelse til næsten enhver hjemmeautomatiseringshardware på markedet i dag. . 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 du er logget ind eksternt ved hjælp af SSH Opsætning af din Raspberry Pi til hovedløs brug med SSH Opsætning af din Raspberry Pi til hovedløs brug med SSH Raspberry 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 ... .
Du har brug for
- 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 kun en tutorial til Sonos)
- Gratis konto på VoiceRSS.org [Ikke længere tilgængelig]. Registrer, find derefter 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 Node 6, skal du først fjerne det og derefter følge 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 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 node-v5.12.0-linux-armv7l.tar.gz cd node -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 vil også have Node Package Manager.
sudo apt-get install npm sudo npm installere -g npm sudo npm installere -g node-gyp
Det er forudsætningerne ud af vejen, nu på de sjove ting.
Sonos HTTP API
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 kontrollere den eksternt, hvis du vil, skønt denne tutorial kun fokuserer på stemmemeddelelsesaspektet).
git klon https://github.com/jishi/node-sonos-http-api.git sonos cd sonos npm install - produktion npm start
Hvis du ser en meddelelse om et sådant 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”, fix 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-opdateringsalternativer - install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20 sudo-opdatering-alternativer - install / usr / bin / g ++ g ++ / usr / bin / g ++ - 4,8 50
Til sidst skulle du se noget lignende:
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” kommando, 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 et par 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 fra 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 meddelelser, 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 stien.
regel "Havebevægelse opdaget", når Element Garden_Motion ændrede sig derefter var String message = "Du har en besøgende" sendHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + message.encode ("UTF-8") + " / da-gb ") 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-hjemmeautomation på Raspberry Pi Kom godt i gang med OpenHAB-hjemmeautomation på Raspberry Pi OpenHAB er en moden, open source-hjemmeautomatiseringsplatform, der kører på en række hardware og er protokollagnostisk, hvilket betyder, at den kan oprette forbindelse til næsten enhver hjemmeautomatiseringshardware på markedet i dag. 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. Inden dette er synligt i My.OpenHAB-kanalen, bliver vi 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 dens IP-adresse, og Todays_Weather til hvad du navngav strengen):
http: //raspberrypi.local:? 8080 / CMD Todays_Weather = Sunny
Log ind på My.OpenHAB og tjek Elementer liste for at sikre, at variablen nu er blevet eksporteret.
Tilbage til IFTTT, opret en ny opskrift, og brug vejrkanalen 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 My.OpenHAB som handling, og vælg Todays_Weather som den variabel, der skal opdateres.
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 en højde på 7C og en lavhed 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 en højde på 7C og en lavhed på 1C.
Herefter har vi brug for en OpenHAB-regel for at sende denne variabel til Sonos “sige” URL. Følgende skal gøre det:
regel "Annoncer den daglige vejrrapport", når artikel Todays_Weather modtog opdatering, send derefterHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + Todays_Weather.state.toString.encode ("UTF-8") + "/ da-gb ") slut
Dette er simpelt nok: Hver gang Todays_Weather-variablen opdateres (som den vil være, automatisk, kl. 8 hver dag), ping URL'en. Vi bruger indkode (“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 man 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 visse kommandoer i et sikkert JSON-datapakkeformat (så ingen SQL-injektion eller godkendelsesangreb vil være mulig). 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 5 Bedste dynamiske DNS-udbydere, du kan bruge gratis i dag 5 Bedste dynamiske DNS-udbydere, du kan bruge gratis i dag Med DynDNS væk, her er de bedste gratis dynamiske DNS-udbydere, tjenester og DDNS-alternativer til at erstatte det. derude - Jeg anbefaler DuckDNS, specifikt fordi det giver et simpelt sæt instruktioner til Raspberry Pi, hvilket gør det muligt for det at opdatere din IP-adresse automatisk. Følg disse, og husk din URL til de næste trin. Din router kan muligvis også have en dynamisk DNS-funktion indbygget, så kontroller der først. I mit tilfælde kan jeg få en * .mynetgear.com URL gratis, så jeg har brugt det.
Herefter finder du din routers portvideresendelse Hvad er portvideresendelse og hvordan kan det hjælpe mig? [MakeUseOf Explains] Hvad er portvideresendelse og 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 af havn, og det er grunden til, at din skinnende nye app ikke fungerer? Din Xbox lader dig ikke spille spil, dine torrent-downloads nægter ... konfigurationsside; det er her, vi fortæller det, hvad de 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 konfigurationsside for reserverede IP'er, mens du er der, da du ikke ændrer den i næste uge og for serveren pludselig at stoppe med at arbejde.
Nu for at installere den sidste bit serversoftware.
https://github.com/sebauer/if-this-then-node.git cd if-this-then-node / npm installere node server.js
Du skal se følgende.
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:
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 - if-this-then-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 &
If-This-Then-Node fungerer via plugins - der leveres et par standardeksempler, men der er ingen interesse 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 specialen “sayall” handling, der sender meddelelsen til alle Sonos-enheder.
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 “gøre” knap app. Opret en ny opskrift, gennemsøg kanaler, og vælg Maker kanal.
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! Gentag. Middagen er klar. Få dine røv 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. Som de ikke var. Vær ikke bange, hvis du ser noget lignende. Det er internetækvivalent med kolde ringer til tilfældige telefonnumre for at se, om nogen er der.
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 en 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