Advertentie

De droom van elke slimme huisliefhebber is een huis waar je mee kunt praten, maar de realiteit is nog lang niet zo ver.

Met Amazon Echo kunt u bijvoorbeeld een onbeperkt aantal spraakgestuurde functies gebruiken, maar de dialoog moet door u worden geïnitieerd met een vraag - u kunt niet alleen haar een belangrijke boodschap laten aankondigen.

U kan doe dit echter met een Sonos-systeem en een beetje DIY Raspberry Pi-magie. Vandaag laat ik je zien hoe je spraakmeldingen instelt op je Sonos-systeem, een paar handige IFTTT-recepten, OpenHAB-integraties en meer introduceert om gebruik te maken van de meldingsfunctie.

Merk op dat er een native Sonos-binding voor OpenHAB beschikbaar is, maar het is bekend dat het geheugenproblemen veroorzaakt als gevolg van een defecte uPnP-bibliotheek. Ik zou willen voorstellen om dat voorlopig over te slaan en in plaats daarvan de methode in deze tutorial te gebruiken.

Een Raspberry Pi met Raspian Linux is ideaal voor deze tutorial, maar het zou ook moeten werken op elke Linux-gebaseerde thuisserver die u gebruikt. In dit geval gebruik ik dezelfde Raspberry Pi die wordt uitgevoerd

instagram viewer
OpenHAB, het open source domoticasysteem Aan de slag met OpenHAB Home Automation op Raspberry PiOpenHAB is een volwassen, open source huisautomatiseringsplatform dat op verschillende hardware draait en dat is protocol agnostisch, wat betekent dat het kan worden aangesloten op bijna alle domotica-hardware op de markt vandaag. Lees verder . De rest van deze tutorial gaat ervan uit dat je dit ook op een Raspberry Pi uitvoert, en of een lokaal terminalvenster op het bureaublad geopend is, of op afstand ingelogd met SSH Uw Raspberry Pi instellen voor gebruik zonder hoofd met SSHDe Raspberry Pi kan SSH-opdrachten accepteren wanneer deze is verbonden met een lokaal netwerk (via Ethernet of Wi-Fi), zodat u deze eenvoudig kunt instellen. De voordelen van SSH gaan verder dan het verstoren van de dagelijkse screening ... Lees verder .

Je hebt nodig

  • Raspberry Pi 2 (oudere modellen zouden moeten werken, maar controleer op specifieke wijzigingen in de instructies)
  • Ten minste een Sonos-luidspreker (andere audiosystemen worden niet ondersteund, dit is alleen een tutorial voor Sonos)
  • Gratis account op VoiceRSS.org. Schrijf je dan in vind uw API-sleutel, die we later nodig hebben om de spraakberichten te genereren.

Installeer Node Latest

Controleer welke versie van Node je hebt door te typen:

knooppunt -v. 

Merk op dat versie 6 niet wordt ondersteund. Als je knooppunt 6 hebt, moet je het eerst verwijderen en daarna de onderstaande instructies volgen om v5.5 te installeren.

Als je geen v5 hebt of als je een niet gevonden fout krijgt, volg dan deze instructies om Node te installeren. Het volgende commando gaat uit van een Raspberry Pi 2; gebruik voor oudere modellen armv6l in plaats van armv7l.

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

Bevestig opnieuw door te typen:

knooppunt -v

En je zou v5.12 moeten zien (of wat de laatste was die je hebt gedownload).

Vervolgens moeten we enkele Node-modules installeren. We willen ook de Node Package Manager.

sudo apt-get installeer npm. sudo npm installeren -g npm. sudo npm installeer -g knooppunt-gyp. 

Dat zijn de eerste vereisten, nu op de leuke dingen.

Sonos HTTP API

De Sonos HTTP API maakt een webserver aan op het lokale netwerk, waarmee we een URL kunnen pingen met een bericht om op een website aan te kondigen Sonos (en om het op afstand te bedienen als je wilt, hoewel deze tutorial zich alleen richt op de gesproken melding aspect).

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

Als u een bericht ziet dat deze en die module niet is gevonden, doet u gewoon een andere npm installeren en de modulenaam, probeer het dan npm start nog een keer. Als u fouten ervaart met betrekking tot "Vereist een C ++ 11-compiler", repareer met de volgende opdrachten:

sudo apt-get installeer gcc-4.8 g ++ - 4.8. sudo update-alternatieven --install / usr / bin / gccgcc / usr / bin / gcc-4.6 20. sudo update-alternatieven --install / usr / bin / gcc gcc /usr/bin/gcc-4.8 50. sudo update-alternatieven --install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20. sudo update-alternatieven --install / usr / bin / g ++ g ++ /usr/bin/g++-4.8 50. 

Uiteindelijk zou je zoiets als dit moeten zien:

sonos-http-api werkt

De server draait nu en maakt verbinding met Sonos. Het formaat van deze API is eenvoudig:

http://[SERVER IP]: 5005 / [NAAM KAMER] / [ACTIE]

Of als specifiek voorbeeld:

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

De actie waarin we geïnteresseerd zijn, is de opdracht 'zeggen', die als volgt wordt gebruikt:

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

Op VoiceRSS.org hoort u een foutmelding dat u zich moet registreren bij een API-sleutel. U had dit al moeten doen, dus typ het volgende in en plak indien nodig uw API-sleutel:

nano settings.json

{

"voicerss": "YOURAPIKEY" }

(Druk op CTRL-X, Y om het bestand op te slaan)

Start de server opnieuw op en ping de URL opnieuw. Na een paar seconden zou u een heerlijke Engelse stem moeten horen (hoewel u het einde van de URL wijzigt in en-us als je liever hebt). Om de Sonos HTTP API-server opnieuw te laten starten wanneer de Pi opnieuw wordt opgestart:

sudo nano /etc/rc.local

Voeg een regel toe voor de uitgang 0:

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

Je hebt nu de mogelijkheid om overal op het lokale netwerk een spraakbericht te maken door simpelweg een URL te pingen, dus de mogelijkheden zijn op dit moment wijd open. Als je echter worstelt met ideeën, lees dan verder voor een paar nuttige meldingen die ik heb ingesteld.

OpenHAB-meldingen over evenementen

Laten we eerst een eenvoudig voorbeeld nemen: bewegingsdetectie. Dit is een veelvoorkomende toepassing voor het activeren van lichten, maar misschien wilt u ook een spraakmelding als het een is bewegingssensor in een autoluw gebied, of misschien als voorwaartse waarschuwing dat er iemand de tuin in komt pad.

regel "Tuinbeweging gedetecteerd" wanneer Item Garden_Motion veranderde dan var String message = "Je hebt een bezoeker" sendHttpGetRequest (" http://localhost: 5005 / kitchen / say / "+ message.encode (" UTF-8 ") +" / en-gb ") einde.

Je zou moeten zien hoe je deze eenvoudige spraakmeldingen in al je regels kunt integreren, maar laten we iets complexers proberen.

Dagelijks weerrapport van IFTTT naar OpenHAB naar Sonos

In dit recept laten we Sonos een dagelijks weerbericht aankondigen op het door u gewenste tijdstip.

Je hebt de My nodig. OpenHAB-binding ingeschakeld, omdat hierdoor een veilige verbinding tot stand wordt gebracht tussen uw interne OpenHAB-server en de externe IFTTT-service. Stel dat in als u dat nog niet heeft gedaan - u kunt verwijzen naar deel 1 van onze OpenHAB-gids Aan de slag met OpenHAB Home Automation op Raspberry PiOpenHAB is een volwassen, open source huisautomatiseringsplatform dat op verschillende hardware draait en dat is protocol agnostisch, wat betekent dat het kan worden aangesloten op bijna alle domotica-hardware op de markt vandaag. Lees verder voor volledige instructies, anders neem ik aan dat je het al hebt ingesteld met persistentie ingeschakeld voor alle items.

Maak vervolgens een nieuw String-item in uw OpenHAB-installatie, waarin het dagelijkse weerbericht wordt opgeslagen. Voordat dit zichtbaar is in de Mijn. OpenHAB-kanaal, we moeten het initialiseren met een standaardvariabele. Ping de volgende URL (wijzigen raspberrypi.local naar uw OpenHAB-server, of gebruik gewoon zijn IP-adres, en Het weer van vandaag naar wat je de String ook noemde):

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

Log in op Mijn. OpenHAB [Broken URL Removed] en controleer de Artikelen lijst om ervoor te zorgen dat de variabele nu is geëxporteerd.

mijn openhab item exportcontrole

Terug op IFTTT, maak een nieuw recept en gebruik de Weerkanaal als trigger op het door u gewenste tijdstip van de dag. Je moet eerst je locatie instellen als je deze nog nooit eerder hebt gebruikt.

Selecteer Mijn. OpenHAB als de actie en kies de Todays_Weather als de variabele om bij te werken.

ifttt weerbericht

Kies voor nu gewoon het volgende slot van een half uur om te testen - u kunt het recept later bijwerken zodra u weet dat het werkt.

En ja hoor, op het moment van de test (in feite een beetje eerder), kreeg ik de voorspelling van vandaag met succes bijgewerkt.

2016-02-27 10: 28: 01.689 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - Ontvangen opdracht Meestal bewolkt vandaag! Met een high van 7C en een low van 1C. Herhaling. De omstandigheden zijn vandaag overwegend bewolkt, met een maximum van 7C en een minimum van 1C. voor item Todays_Weather. 2016-02-27 10: 28: 01.697 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - store (Todays_Weather), state = Merendeels bewolkt vandaag! Met een high van 7C en een low van 1C. Herhaling. De omstandigheden zijn vandaag overwegend bewolkt, met een maximum van 7C en een minimum van 1C. 

Vervolgens hebben we een OpenHAB-regel nodig om deze variabele naar de Sonos "say" -URL te sturen. Het volgende zou het moeten doen:

regel "Kondig dagelijks weerbericht aan" wanneer Item Todays_Weather update heeft ontvangen. stuur dan sendHttpGetRequest (" http://localhost: 5005 / kitchen / say / "+ Todays_Weather.state.toString.encode (" UTF-8 ") +" / en-gb ") einde.

Dit is eenvoudig genoeg: ping de URL wanneer de Todays_Weather-variabele wordt bijgewerkt (wat automatisch elke dag om 8 uur 's ochtends zal zijn). We gebruiken coderen ("UTF-8") Tekenreeksfunctie om de zin uit IFTTT geschikt te maken voor gebruik in een URL. Om dit deel van het systeem handmatig te testen, gebruikt u gewoon opnieuw de OpenHAB HTTP API:

http://raspberrypi.local: 8080 / CMD? Todays_Weather = Bewolkt, met kans op gehaktballen. 

Maak verbinding met IFTTT zonder OpenHAB, met behulp van If-This-Then-Node

Laten we tot slot eens kijken hoe we verbinding kunnen maken vanuit elk IFTTT-recept zonder de OpenHAB-tussenpersoon. In plaats daarvan installeren we een andere webserver en stellen die bloot aan open internet. Dit is niet zonder risico: elke vorm van open server is een beveiligingsrisico, maar we beperken dit door geen volledige serverstack uit te voeren, slechts een kleine specifieke service die alleen bepaalde opdrachten accepteert in een veilig JSON-gegevenspakketformaat (dus geen SQL-injectie of authenticatie-aanvallen) mogelijk). Zodra we klaar zijn, heb je een openbare URL waarnaar je berichten kunt sturen vanaf het IFTTT Maker-kanaal.

Begin met het opzetten van een van de vele gratis dynamische DNS-services De 5 beste gratis dynamische DNS-providersEen DDNS-service kan u helpen om onderweg verbinding te maken met uw thuis-pc. Dit zijn de beste gratis dynamische DNS-providers die u kunt overwegen. Lees verder daarbuiten - ik raad DuckDNS aan, vooral omdat het een eenvoudige set geeft instructies voor Raspberry Pi, waardoor het uw IP-adres automatisch kan bijwerken. Volg deze op en onthoud uw URL voor de volgende stappen. Uw router heeft mogelijk ook een ingebouwde dynamische DNS-functie, dus controleer daar eerst. In mijn geval kan ik een * .mynetgear.com URL gratis, dus dat heb ik gebruikt.

Zoek vervolgens uw router's Port forwarding Wat is Port Forwarding en hoe kan het mij helpen? [MakeUseOf Explains]Huil je een beetje van binnen als iemand je vertelt dat er een probleem met het doorsturen van poorten is en dat daarom je glanzende nieuwe app niet werkt? Je Xbox laat je geen games spelen, je torrent-downloads weigeren ... Lees verder configuratiepagina; hier vertellen we wat het moet doen met inkomende verzoeken. Stuur alle HTTP-verzoeken (poort 80) door naar poort 1337 op uw Raspberry Pi-server. Ik neem aan dat je al een IP-adres hebt gereserveerd voor je Raspberry Pi - als je dat niet hebt gedaan, controleer dan de configuratie van je router pagina voor gereserveerde IP's terwijl je daar bent, aangezien je het niet verandert volgende week en dat de server plotseling stopt werken.

routerconfiguratiepoort doorsturen

Nu om het laatste stukje serversoftware te installeren.

https://github.com/sebauer/if-this-then-node.git. cd als-dit-dan-knooppunt / npm installeren. knooppunt server.js.

Je zou het volgende moeten zien.

als dit de fout met standaardwaarden van het knooppunt is

Dat is goed, dat betekent alleen dat we onze gegevens moeten bijwerken. Doe open config.js in Nano en bewerk die details naar iets anders dan de standaard en sla ze op. Wanneer u de server opnieuw uitvoert, zou u dit moeten zien:

als dit dan knooppuntserver actief is

Super goed. Test of uw machine van buitenaf toegankelijk is door uw dynamische DNS-hostnaam in te voeren en / toe te voegenifttn / aan het einde van de URL. Als alles werkt, is het bericht "IFTTN - if-this-then-node Version 2.0.1 is up and running!" wordt weergegeven in uw browser. Nogmaals, om dit script te laten draaien bij het opstarten, bewerk het /etc/rc.local bestand en voeg toe:

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

Als-dit-dan-knooppunt werkt via plug-ins - er zijn een paar standaard-plug-ins, maar dat interesseert ons niet. Download in plaats daarvan deze aangepaste plug-in die ik voor u heb geschreven met de volgende opdrachten.

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

Je moet ook de verzoek module.

npm installatieverzoek. 

Start vervolgens de server opnieuw op. De plug-in is vrij eenvoudig, maar een beetje anders dan de URL die we tot nu toe hebben gebruikt. In dit geval heb ik de speciale 'sayall'-actie gebruikt, die het bericht naar elk Sonos-apparaat stuurt.

verzoek(' http://localhost: 5005 / sayall / '+ params.message +' / en-gb ', functie (fout, reactie, body)

Als u liever specifieke apparaten kunt targeten, vervangt u die regel door:

verzoek(' http://localhost: 5005 / '+ params.device +' / say / '+ params.message +' / en-gb ', functie (fout, reactie, body)

Voeg nog een regelparameter toe genaamd apparaat naar het JSON-verzoek hieronder om de Sonos-apparaatnaam op te geven.

Om dit uit te testen, gebruik ik de IFTTT "Do" -knop-app. Maak een nieuw recept, blader naar kanalen en selecteer de Maker kanaal.

knop doen

Maak een nieuw recept. Voer de URL in die u eerder hebt geconfigureerd van een gratis dynamische DNS-provider (inclusief /ifttn/ aan het einde van de URL. Vergeet die schuine strepen niet). Selecteer POST verzoek, applicatie / json inhoud en de inhoud van het bericht als volgt, waarbij alle variabelen indien nodig worden vervangen door de variabelen die u eerder hebt geconfigureerd:

{"action": "sonos", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Inkomend bericht voor iedereen: het diner is klaar! Herhaling. Eten is klaar. Ga nu naar boven. "}

Nu heb ik een gemakkelijk toegankelijke knop die het bericht op elk Sonos-apparaat in huis zal aankondigen. Je kunt dit natuurlijk koppelen aan elk IFTTT-kanaal waarvan je een aangepast bericht wilt maken met variabelen van dat kanaal. Je zou zelfs het weerbericht van bovenaf moeten kunnen repliceren zonder OpenHAB nu te gebruiken, hoewel het de extra moeite kostte om een ​​andere server te installeren.

Let op: hackers scannen je automatisch. Dit gebeurt de hele tijd, maar als je logboeken bekijkt, kan het alarmerend lijken. Hieronder ziet u dat iemand systematisch heeft geprobeerd vast te stellen of een van de standaard PHPMyAdmin-interfaces toegankelijk was. Wat ze niet waren. Schrik niet als je iets soortgelijks ziet. Het is het internet-equivalent van het willekeurig bellen van willekeurige telefoonnummers om te zien of er iemand is.

webserver hack pogingen

Wat ga je aankondigen?

Je zou nu de tools en kennis moeten hebben om je hele huis constant te baden in spraakmeldingen over alles wat je maar kunt bedenken. Wie heeft muziek nodig? Je enige limiet is 350 dagelijkse verzoeken van VoiceRSS.org, maar dat is ongeveer elke vier minuten, dus het komt goed.

Dus wat ga je hiermee doen? Deel uw ideeën of IFTTT-recept in de comments!

Afbeeldingscredits:koffie en vrouw door S_Photo via Shutterstock

James heeft een BSc in Artificial Intelligence en is CompTIA A + en Network + gecertificeerd. Hij is de hoofdontwikkelaar van MakeUseOf en brengt zijn vrije tijd door met het spelen van VR paintball en bordspellen. Hij bouwt al pc's sinds hij een kind was.