Sådan sender du talemeddelelser til Sonos-højttalere

I dag vil jeg vise dig, hvordan du opretter stemme notifikationer på dit Sonos system, ved hjælp af IFTTT opskrifter, OpenHAB integrationer og meget mere.

I dag vil jeg vise dig, hvordan du opretter stemme notifikationer på dit Sonos system, ved hjælp af IFTTT opskrifter, OpenHAB integrationer og meget mere.
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 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 få hende til at annoncere en vigtig besked.

Du kan dog gøre dette med et Sonos-system og en smule DIY Raspberry Pi magic. I dag vil jeg vise dig, hvordan du opretter stemme notifikationer på dit Sonos system, introducerer et par nyttige IFTTT opskrifter, OpenHAB integrationer og meget mere for at gøre brug af notifikationsfunktionen.

Bemærk, at der findes en indbygget Sonos-binding til OpenHAB, men det er kendt for at forårsage hukommelsesproblemer på grund af et defekt uPnP-bibliotek. Jeg vil foreslå at springe over det for nu, og bruge metoden i denne vejledning i stedet.

En Raspberry Pi kører Raspian Linux er ideel til denne vejledning, men den skal også fungere på enhver Linux-baseret hjemmeserver, du har kørende. I dette tilfælde bruger jeg den samme Raspberry Pi, der kører OpenHAB, open source hjemmeautomatiseringssystemet Kom godt i gang med OpenHAB Home Automation på Raspberry Pi Kom i gang med OpenHAB Home Automation på Raspberry Pi OpenHAB er en moden, open source home automation platform der kører på en række hardware og er protokol agnostisk, hvilket betyder, at den kan forbinde til næsten alle hjemmeautomatiseringshardware på markedet i dag. Læs mere . Resten af ​​denne vejledning forudsætter at du også kører dette på en Raspberry Pi og enten har et lokalt terminalvindue åbent på skrivebordet eller er logget på eksternt ved hjælp af SSH Opsætning af din Raspberry Pi til hovedløs brug med SSH Opsætning af din Hindbær 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 ... Læs mere.

Du skal bruge

  • Hindbær 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 vejledning til Sonos)
  • Gratis konto på VoiceRSS.org. Registrer derefter, find din API-nøgle, som vi senere skal bruge til at generere talemeddelelserne.

Installer Node Seneste

Kontroller hvilken version af Node du har ved at skrive:

node -v 

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

Hvis du ikke har v5, eller hvis du ikke får en fejl, skal du følge disse instruktioner for at installere Node. Følgende kommando antager en Raspberry Pi 2; For ældre modeller skal du bruge 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:

 node -v 

Og du skal se v5.12 (eller hvad det seneste var, at du downloadede).

Dernæst har vi nogle Node-moduler til at installere. Vi vil også have Node Package Manager.

 sudo apt-get install npm sudo npm install -g npm sudo npm install -g node-gyp 

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

Sonos HTTP API

Sonos HTTP API opretter en webserver på det lokale netværk, som giver os mulighed for at pinge en webadresse med en besked om at annoncere på en Sonos (og for at styre den eksternt, hvis du vil, selvom denne vejledning kun fokuserer på stemmeanmeldelsesaspektet).

 git clone https://github.com/jishi/node-sonos-http-api.git sonos cd sonos npm install --production npm start 

Hvis du ser en besked om et sådant modul ikke fundet, skal du blot gøre en anden npm-installation og modulnavnet, og prøv derefter at starte npm igen. Hvis du oplever fejl relateret til "kræver en C ++ 11 compiler", skal du rette 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 

Til sidst skal du se noget som dette:

sonos-http-api arbejder

Serveren kører nu sammen med Sonos. Formatet af denne API er nemt:

 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 kommandoen "say", 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 burde allerede have gjort dette, så skriv ud følgende og indsæt i din API-nøgle som appropirate:

 nano settings.json 

{

 "voicerss":"YOURAPIKEY" } 

(Hit CTRL-X, Y, for at gemme filen)

Genstart serveren og ping webadressen igen. Efter et par sekunder skal du høre en dejlig engelsk stemme (selvom du ændrer slutningen af ​​webadressen til en-us, hvis du hellere vil). For at få Sonos HTTP API-serveren til at starte igen, når Pi genstartes:

 sudo nano /etc/rc.local 

Tilføj en linje før exit 0 :

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

Du har nu evnen til at oprette en stemmebesked 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 kæmper for ideer, så læs videre for nogle nyttige nyttige meddelelser, jeg har fået oprettet.

OpenHAB Notifikationer om begivenheder

Lad os først tage et simpelt eksempel: bevægelsesdetektering. Dette er en almindelig brugstilstand til aktivering af lys, men du vil måske også have en stemmebesked, hvis det er en bevægelsesføler i et område med lav trafik, eller måske som en advarsel om, at nogen kommer op i stien.

 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 stemme notifikationer 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 har vi Sonos annonceret en daglig vejrrapport på din foretrukne tid.

Du skal bruge My.OpenHAB-bindingen, da det skaber en sikker forbindelse mellem din interne OpenHAB-server og den eksterne IFTTT-tjeneste. Indstil det, hvis du ikke allerede har det - du kan henvise til del 1 i vores OpenHAB guide Kom godt i gang med OpenHAB Home Automation på Raspberry Pi Kom i gang med OpenHAB Home Automation på Raspberry Pi OpenHAB er en moden, open source home automation platform, der kører på en række hardware og er protokol agnostic, hvilket betyder, at den kan forbinde til næsten enhver hjemmeautomatisering hardware på markedet i dag. Læs mere for at få fulde instruktioner, ellers antager du, at du allerede har fået det setup med vedholdenhed aktiveret for alle varer.

Opret derefter et nyt String-element i din OpenHAB-installation, som gemmer den daglige vejrrapport. Før dette er synligt i My.OpenHAB-kanalen, skal vi initialisere det med en standardværdi. Ping følgende URL (skift raspberrypi.local til din OpenHAB server, eller brug bare det er IP-adresse, og Todays_Weather til hvad du hedder Strengen):

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

Log ind på My.OpenHAB, og kontroller listen Elementer for at sikre, at variablen nu er blevet eksporteret.

mit openhab-element eksportcheck

Tilbage på IFTTT, lav en ny opskrift, og brug vejrkanalen som udløseren på dit foretrukne tidspunkt på dagen. Du skal først indstille din placering, hvis du aldrig har brugt det før.

Vælg My.OpenHAB som handling, og vælg Todays_Weather som variablen for at opdatere.

ifttt vejrrapport

For nu skal du bare vælge den næste halv time slot til testning - du kan opdatere opskriften senere, når du ved, at den virker.

Sikkert nok, på testtiden (faktisk lidt før), fik jeg dagens prognose opdateret med succes.

 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. 

Næste op, vi har brug for en OpenHAB regel for at sende denne variabel til Sonos "say" URL. Det følgende skal gø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 simpelt nok: Når variablen Todays_Weather opdateres (som den bliver automatisk, kl. 8 hver dag), ping webadressen. Vi bruger encode ("UTF-8") String funktion til at gøre sætningen fra IFTTT egnet til brug i en URL. Hvis du vil teste denne del af systemet manuelt, skal du blot bruge OpenHAB HTTP API igen:

 http://raspberrypi.local:8080/CMD?Todays_Weather=Cloudy, with a chance of meatballs. 

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

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

Start med at oprette en af ​​de mange gratis dynamiske DNS-tjenester. 5 Bedste dynamiske DNS-udbydere, du kan søge efter i dag. 5 Bedste dynamiske DNS-udbydere, du kan søge efter i dag. DynDNS var altid en vigtig omtale, når gratis dynamiske DNS'er blev opdraget. Men nu er det væk, er der gode alternativer? Der er sikkert. Læs mere derude - Jeg anbefaler DuckDNS, specielt fordi det giver et enkelt sæt instruktioner til Raspberry Pi, der gør det muligt at opdatere din IP adddress automatisk. Følg med, og husk din URL for de næste trin. Din router kan også have en dynamisk DNS-funktion indbygget, så tjek den først. I mit tilfælde kan jeg få en * .mynetgear.com URL gratis, så jeg har brugt det.

Find derefter din router's port forwarding Hvad er port videresending, og hvordan kan det hjælpe mig? [MakeUseOf Forklarer] Hvad er port videresending & Hvordan kan det hjælpe mig? [MakeUseOf Forklarer] græder du lidt inde, når nogen fortæller dig, at der er et port forwarding problem, og derfor vil din skinnende nye app ikke virke? Din Xbox vil ikke lade dig spille spil, dine torrent downloads nægter ... Læs mere konfigurationsside; Det her skal vi fortælle hvad vi skal gøre med indgående forespørgsler. Videresend alle HTTP-anmodninger (port 80) til port 1337 på din Raspberry Pi-server. Jeg antager, at du har en IP-adresse, der allerede er reserveret til din Raspberry Pi - hvis du ikke har det, skal du kontrollere din router's konfigurationsside for reserverede IP'er, mens du er derinde, som du ikke ændrer næste uge og for at serveren pludselig skal stoppe med at arbejde.

router config port videresendelse

Nu for at installere den sidste bit af server software.

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

Du skal se følgende.

hvis dette da knude standardværdier fejl

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

hvis dette så kodeserveren kører

Store. Test din maskine er tilgængelig fra omverdenen ved at indtaste dit dynamiske DNS-værtsnavn og tilføje / ifttn / til slutningen af ​​webadressen. Hvis alting virker, vil meddelelsen "IFTTN - if-this-then-node Version 2.0.1 køre!" Vises i din browser. For at gøre dette script kørende ved opstart skal du redigere filen /etc/rc.local og tilføje:

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

Hvis-dette-da-node fungerer via plugins - der er et par standardleverancer, men det er ikke af interesse for os. I stedet skal du downloade dette brugerdefinerede 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 forespørgselsmodulet .

 npm install request 

Start derefter serveren igen. Plugin er ganske simpelt, men lidt anderledes end den webadresse, vi har brugt hidtil. I dette tilfælde har jeg brugt den særlige "sayall" handling, som sender beskeden til hver Sonos enhed.

 request('http://localhost:5005/sayall/'+params.message+'/en-gb', function (error, response, body) 

Hvis du hellere vil målrette mod bestemte enheder, skal du erstatte den pågældende linje med:

 request('http://localhost:5005/'+params.device+'/say/'+params.message+'/en-gb', function (error, response, body) 

Tilføj en anden linjeparameter kaldet enhed til JSON-anmodningen herunder, for at angive Sonos-enhedsnavn.

For at teste dette ud bruger jeg IFTTT "Do" -knappen app. Opret en ny opskrift, bliv til kanaler, og vælg Maker- kanalen.

gør knappen

Opret en ny opskrift. Indtast i 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 POST- anmodning, applikation / json indhold og meddelelsens krop som følger, og erstatte alle variabler efter behov med dem, du tidligere har konfigureret:

 { "action":"sonos", "user":"YOURUSER", "pw":"YOURPASSWORD", "message":"Incoming message for everyone: Dinner is ready! Repeat. Dinner is ready. Get your asses upstairs now." } 

Nu har jeg en let tilgængelig knap, der annoncerer meddelelsen på hver Sonos-enhed i huset. Du kan selvfølgelig forbinde dette med enhver IFTTT-kanal, du vil lave en brugerdefineret besked ved hjælp af variabler fra den pågældende kanal. Du bør endda kunne replikere vejrudsigten ovenfra uden at bruge OpenHAB nu, selv om det tog den ekstra indsats at installere en anden server.

Bemærk: hackere scanner automatisk dig . Dette sker hele tiden, men hvis du ser logger, kan det virke alarmerende. Nedenfor kan du se nogen systematisk forsøgt at undersøge, om nogen af ​​de standard PHPMyAdmin-grænseflader var tilgængelige. Som de ikke var Vær ikke foruroliget, hvis du ser noget lignende. Det er internettet, der svarer til koldt kaldt tilfældige telefonnumre for at se, om nogen er der.

webserver hack forsøg

Hvad vil du meddele?

Du skal nu have værktøjer og kwowledge til hele tiden at bade hele dit hus i stemme notifikationer om alt, hvad du måske kunne tænke på. Hvem har brug for musik? Din eneste begrænsning er 350 daglige anmodninger fra VoiceRSS.org - men det handler om et hvert fjerde minut, så du skal være okay.

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

In this article