Annons

Drömmen för alla smarta hementusiaster är ett hem du kan prata med, men verkligheten är långt borta från det.

Amazon Echo, till exempel, låter dig använda valfritt antal röststyrda funktioner, men dialog måste initieras av dig med en fråga - du kan inte bara låta henne meddela ett viktigt meddelande.

Du kan gör dock detta med ett Sonos-system och lite DIY Raspberry Pi-magi. Idag kommer jag att visa dig hur du ställer in röstmeddelanden i ditt Sonos-system, introducerar ett par användbara IFTTT-recept, OpenHAB-integrationer och mer för att använda meddelandefunktionen.

Observera att det finns en inbyggd Sonos-bindning för OpenHAB, men det är känt att orsaka minnesproblem på grund av ett felaktigt uPnP-bibliotek. Jag föreslår att man hoppar över det nu och använder metoden i den här handledningen istället.

En Raspberry Pi som kör Raspian linux är idealisk för den här tutorialen, men den borde också fungera på alla linuxbaserade hemserver som du har. I det här fallet använder jag samma Raspberry Pi som körs

instagram viewer
OpenHAB, hemmeautomationssystemet med öppen källkod Komma igång med OpenHAB Home Automation på Raspberry PiOpenHAB är en mogen, open source-hemmeautomationsplattform som körs på en mängd olika hårdvara och är protokoll agnostic, vilket innebär att den kan ansluta till nästan alla hemmautomationshårdvara på marknaden i dag. Läs mer . Resten av den här tutorialen antar att du också kör detta på en Raspberry Pi och antingen har ett lokalt terminalfönster öppet på skrivbordet, eller inloggad på distans med SSH Ställa in din hallonpi för huvudlös användning med SSHRaspberry Pi kan acceptera SSH-kommandon när de är anslutna till ett lokalt nätverk (antingen via Ethernet eller Wi-Fi), vilket gör att du enkelt kan konfigurera det. Fördelarna med SSH går utöver upprörande av den dagliga screeningen ... Läs mer .

Du kommer att behöva

  • Hallon Pi 2 (äldre modeller bör fungera, men se efter specifika ändringar i instruktionerna)
  • Åtminstone ett Sonos-högtalare (andra ljudsystem stöds inte, detta är en självstudie för Sonos)
  • Gratis konto på VoiceRSS.org [No Longer Available]. Registrera dig sedan hitta din API-nyckel, som vi senare kommer att behöva för att generera röstmeddelanden.

Installera nod senast

Kontrollera vilken version av noden du har genom att skriva:

nod -v. 

Observera att version 6 inte stöds. Om du har Node 6 måste du först ta bort den och följ instruktionerna nedan för att installera v5.5.

Om du inte har v5 eller om du inte får ett fel som inte hittats följer du dessa instruktioner för att installera Node. Följande kommando antar en Raspberry Pi 2; för äldre modeller, använd armv6l istället för armv7l.

wget https://nodejs.org/download/release/latest-v5.x/node-v5.12.0-linux-armv7l.tar.gz. tar -xvf-nod-v5.12.0-linux-armv7l.tar.gz. cd-nod-v5.12.0-linux-armv7l. sudo cp-R * / usr / local. 

Bekräfta igen genom att skriva:

nod -v

Och du bör se v5.12 (eller vad det senaste var som du laddade ner).

Därefter har vi några nodmoduler att installera. Vi vill också ha Node Package Manager.

sudo apt-get install npm. sudo npm installera -g npm. sudo npm installera -g nod-gyp. 

Det är förutsättningarna ur vägen, nu till de roliga grejerna.

Sonos HTTP API

De Sonos HTTP API skapar en webbserver i det lokala nätverket, vilket gör att vi kan pinga en URL med ett meddelande att meddela på en Sonos (och för att kontrollera det på distans om du vill, men denna handledning fokuserar bara på röstmeddelandet aspekt).

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

Om du ser ett meddelande om en sådan modul inte hittades, gör bara ett annat npm installation och modulnamnet, försök sedan npm start igen. Om du upplever fel relaterade till “Kräver en C ++ 11-kompilator”, fixa med följande kommandon:

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. 

Så småningom borde du se något liknande:

sonos-http-api fungerar

Servern körs nu, gränssnitt med Sonos. Formatet för detta API är enkelt:

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

Eller som ett specifikt exempel:

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

Åtgärden vi är intresserade är "säga" -kommandot, som används på följande sätt:

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

Du kommer att höra ett felmeddelande om att du måste registrera dig till en API-nyckel på VoiceRSS.org. Du borde redan ha gjort det, så skriv in följande och klistra in din API-nyckel som appropirat:

nano settings.json

{

"Voicerss": "YOURAPIKEY" }

(Tryck på CTRL-X, Y, för att spara filen)

Starta om servern och pinga URL: n igen. Efter några sekunder bör du höra en härlig engelsk röst (även om du ändrar slutet på URL till sv- om du hellre vill). För att få Sonos HTTP API-server att starta igen när Pi startas om:

sudo nano /etc/rc.local

Lägg till en rad före avsluta 0:

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

Du har nu möjligheten att skapa ett röstmeddelande från var som helst i det lokala nätverket genom att bara pinga en URL, så möjligheterna är vidöppna vid denna punkt. Om du kämpar för idéer kan du läsa om för några användbara meddelanden som jag har satt upp.

OpenHAB-aviseringar om evenemang

Låt oss ta ett enkelt exempel först: rörelsedetektering. Detta är ett vanligt fall för att aktivera lampor, men du kanske vill ha en röstmeddelande också om det är en rörelsessensor i ett område med låg trafik, eller kanske som en varning framåt om att någon kommer upp i trädgården väg.

regel "Trädgårdsrörelse upptäckt" när objekt Garden_Motion ändrades då var String message = "Du har en besökare" sendHttpGetRequest (" http://localhost: 5005 / kök / säg / "+ message.encode (" UTF-8 ") +" / en-gb ") slutet.

Du bör se hur du kan integrera dessa enkla röstmeddelanden i någon av dina regler, men låt oss prova något lite mer komplicerat.

Daglig väderrapport från IFTTT till OpenHAB till Sonos

I det här receptet får vi Sonos tillkännage en daglig väderrapport vid önskad tid.

Du behöver My. OpenHAB-bindning aktiverad, eftersom detta skapar en säker anslutning mellan din interna OpenHAB-server och den externa IFTTT-tjänsten. Ställ in det om du inte redan har gjort det - du kan hänvisa till det del 1 i vår OpenHAB-guide Komma igång med OpenHAB Home Automation på Raspberry PiOpenHAB är en mogen, open source-hemmeautomationsplattform som körs på en mängd olika hårdvara och är protokoll agnostic, vilket innebär att den kan ansluta till nästan alla hemmautomationshårdvara på marknaden i dag. Läs mer för fullständiga instruktioner, annars antar jag att du redan har installerat det med uthållighet aktiverat för alla objekt.

Skapa sedan ett nytt String-objekt i din OpenHAB-installation, som lagrar den dagliga väderrapporten. Innan detta syns i My. OpenHAB-kanal, vi måste initiera den med någon standardvariabel. Ping på följande URL (ändra raspberrypi.local till din OpenHAB-server, eller använd bara IP-adressen, och Dagens väder till vad du heter Strängen):

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

Logga in på My. OpenHAB [Broken URL Removed] och kontrollera artiklar lista för att se till att variabeln nu har exporterats.

min exponeringskontroll med öppet objekt

Tillbaka till IFTTT, skapa ett nytt recept och använda Väderkanal som avtryckaren vid önskad tid på dygnet. Du måste ställa in din plats först om du aldrig har använt den tidigare.

Välj Mitt. OpenHAB som åtgärd och välj Todays_Weather som den variabel som ska uppdateras.

ifttt väderrapport

För tillfället, välj bara nästa halvtimmesplats för testning - du kan uppdatera receptet senare när du vet att det fungerar.

Visst nog, vid testtiden (faktiskt lite förut) fick jag dagens prognos uppdaterad framgångsrikt.

2016-02-27 10: 28: 01.689 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - Mottaget kommando Mest molnigt idag! Med en hög på 7C och en låg på 1C. Upprepa. Förhållandena är mest molnigt idag, med en höjd av 7C och en låg på 1C. för artikeln Todays_Weather. 2016-02-27 10: 28: 01.697 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - store (Todays_Weather), state = Mest molnigt idag! Med en hög på 7C och en låg på 1C. Upprepa. Förhållandena är mest molnigt idag, med en höjd av 7C och en låg på 1C. 

Därefter behöver vi en OpenHAB-regel för att skicka den här variabeln till Sonos “säga” URL. Följande bör göra det:

regel "Meddela den dagliga väderrapporten" när artikel Todays_Weather fick uppdatering. skicka sedanHttpGetRequest (" http://localhost: 5005 / kök / säg / "+ Todays_Weather.state.toString.encode (" UTF-8 ") +" / en-gb ") slutet.

Detta är tillräckligt enkelt: när Todays_Weather-variabeln uppdateras (vilken den kommer att vara, automatiskt, klockan 8 varje dag), pingar URL: n. Vi använder koda ( ”UTF-8”) Strängfunktion för att göra meningen från IFTTT lämplig för användning i en URL. Om du vill testa den här delen av systemet manuellt använder du bara OpenHAB HTTP API igen:

http://raspberrypi.local: 8080 / CMD? Todays_Weather = Molnigt, med risk för köttbullar. 

Anslut till IFTTT utan OpenHAB med hjälp av If-This-Then-Node

Slutligen, låt oss titta på hur du ansluter från alla IFTTT-recept utan OpenHAB-mellanhand. Istället installerar vi en annan webbserver och utsätter den för det öppna Internet. Detta är inte utan risk: någon form av öppen server är en säkerhetsrisk, men vi mildrar detta genom att inte köra en komplett serverstack, bara en liten specifik tjänst som bara accepterar vissa kommandon i ett säkert JSON-datapaketformat (så inga SQL-injektioner eller autentiseringsattacker kommer att vara möjlig). När vi är klar har du en offentlig URL till vilken du kan skicka meddelanden från IFTTT Maker-kanalen.

Börja med att ställa in en av de många gratis dynamiska DNS-tjänster De 5 bästa gratis dynamiska DNS-leverantörernaEn DDNS-tjänst kan hjälpa dig att ansluta till din hemdator när du är på resande fot. Här är de bästa gratis dynamiska DNS-leverantörerna att tänka på. Läs mer där ute - Jag rekommenderar DuckDNS, specifikt för att det ger en enkel uppsättning instruktioner för Raspberry Pi, så att den kan uppdatera din IP-adress automatiskt. Följ med dessa och kom ihåg din URL för nästa steg. Din router kan också ha en inbyggd dynamisk DNS-funktion, så kontrollera det först. I mitt fall kan jag få en * .mynetgear.com URL gratis, så det har jag använt.

Nästa, hitta din router port vidarebefordran Vad är port vidarebefordran och hur kan det hjälpa mig? [MakeUseOf Explains]Gråter du lite inuti när någon säger att det finns ett problem för port vidarebefordran och det är därför din glänsande nya app inte fungerar? Din Xbox låter dig inte spela spel, dina torrentnedladdningar vägrar ... Läs mer konfigurationssida; det är här vi ska berätta vad det ska göra med inkommande förfrågningar. Vidarebefordra alla HTTP-förfrågningar (port 80) till port 1337 på din Raspberry Pi-server. Jag antar att du redan har en IP-adress reserverad för din Raspberry Pi - om du inte gör det, kontrollera routerns konfigurering sida för reserverade IP-adresser medan du är där, eftersom du inte gör det för att ändra nästa vecka och för att servern plötsligt ska stanna arbetssätt.

router config port vidarebefordran

Nu för att installera den sista biten av serverprogramvara.

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

Du bör se följande.

om detta då fel på standardvärden fel

Det är ok, det betyder bara att vi måste uppdatera våra detaljer. Öppna config.js i Nano och redigera dessa detaljer till något annat än standard, spara sedan. När du kör servern igen bör du se detta:

om den här nodeservern körs

Bra. Testa att din maskin är tillgänglig från omvärlden genom att skriva in ditt dynamiska DNS-värdnamn och bifoga /ifttn / till slutet av webbadressen. Om allt fungerar är meddelandet "IFTTN - if-this-then-node version 2.0.1 är igång!" kommer att visas i din webbläsare. Återigen, redigera för att göra detta skript kört vid uppstart /etc/rc.local arkivera och lägg till:

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

If-här-då-Node fungerar via plugins - det finns några standardinställningar som levereras, men det är inte intressant för oss. Ladda istället ned detta anpassade plugin som jag har skrivit för dig med följande kommandon.

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

Du måste också installera begäran modul.

npm installationsförfrågan. 

Starta sedan om servern. Plugin är ganska enkel, men lite annorlunda än den webbadress vi hittills har använt. I det här fallet har jag använt den speciella ”sayall” -handlingen som skickar meddelandet till alla Sonos-enheter.

begäran(' http://localhost: 5005 / sayall / '+ params.message +' / en-gb ', funktion (fel, svar, kropp)

Om du hellre vill kunna rikta in sig på specifika enheter, byt ut den raden med:

begäran(' http://localhost: 5005 / '+ params.device +' / say / '+ params.message +' / sv-gb ', funktion (fel, svar, kropp)

Lägg till en annan radparameter som heter enhet till JSON-begäran nedan för att ange Sonos enhetsnamn.

För att testa detta använder jag IFTTT-knappen "Gör" -knappen. Skapa ett nytt recept, bläddra till kanaler och välj Tillverkare kanal.

gör-knappen

Skapa ett nytt recept. Ange i webbadressen du konfigurerade tidigare från en gratis dynamisk DNS-leverantör (inklusive /ifttn/ i slutet av webbadressen. Glöm inte dessa snedstreck). Välj POSTA begäran, application / json innehåll och meddelandets huvuddel enligt följande, och ersätter alla variabler efter behov med de som du tidigare har konfigurerat:

{"action": "sonos", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Inkommande meddelande för alla: Middagen är klar! Upprepa. Middagen är klar. Få dina röv övervåningen nu. "}

Nu har jag en lättillgänglig knapp som kommer att meddela meddelandet på alla Sonos-enheter i huset. Du kan naturligtvis para detta med alla IFTTT-kanaler du vill göra ett anpassat meddelande med variabler från den kanalen. Du borde till och med kunna replikera väderrapporten ovanifrån utan att använda OpenHAB nu, men det krävde en extra ansträngning att installera en annan server.

Obs: hackare skannar automatiskt dig. Detta händer hela tiden, men om du tittar på loggar kan det verka alarmerande. Nedan kan du se någon som systematiskt försökte ta reda på om något av PHPMyAdmin-standardgränssnitten var tillgängliga. Vilken de inte var. Låt dig inte rädda om du ser något liknande. Det är internetekvivalentet med kalla samtal av slumpmässiga telefonnummer för att se om någon är där.

webbserver hackförsök

Vad kommer du att tillkännage?

Du bör nu ha verktyg och kwowledge för att ständigt bada hela huset i röstmeddelanden om allt du kan tänka på. Vem behöver musik? Din enda gräns är 350 dagliga förfrågningar från VoiceRSS.org - men det är ungefär en var fjärde minut, så du borde vara okej.

Så vad gör du med det här? Dela dina idéer eller IFTTT-recept i kommentarerna!

Bildkrediter:kaffe och kvinna av S_Photo via Shutterstock

James har en kandidatexamen i artificiell intelligens och är CompTIA A + och Network + certifierad. Han är ledande utvecklare av MakeUseOf och tillbringar sin fritid med att spela VR-paintball och brädspel. Han har byggt datorer sedan han var liten.