Spraakmeldingen verzenden naar Sonos-luidsprekers
De droom van een slimme thuisliefhebber is een huis waar je mee kunt praten, maar de realiteit is er nog lang niet van af.
Met Amazon Echo kun je bijvoorbeeld een aantal stemgestuurde functies gebruiken, maar je moet het dialoogvenster met een vraag openen - je kunt niet zomaar een belangrijk bericht aankondigen.
U kan doe dit met een Sonos-systeem en een beetje DIY Raspberry Pi-magie. Vandaag laat ik je zien hoe je stemmeldingen instelt op je Sonos-systeem, een paar nuttige 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 deze geheugenproblemen veroorzaakt door een defecte uPnP-bibliotheek. Ik zou willen voorstellen dit voor nu over te slaan en in plaats daarvan de methode in deze tutorial te gebruiken.
Een Raspberry Pi met Raspian Linux is ideaal voor deze zelfstudie, maar hij zou ook moeten werken op elke linux gebaseerde basisserver die je hebt. In dit geval gebruik ik dezelfde Raspberry Pi die OpenHAB, het open source domoticasysteem, gebruikt. Aan de slag met OpenHAB Home Automation op Raspberry Pi Aan de slag met OpenHAB Home Automation op Raspberry Pi OpenHAB is een volwassen, open source domoticaplatform dat op verschillende hardware draait en protocolonafhankelijk is, wat betekent dat het verbinding kan maken met bijna elke huisautomatiseringshardware die tegenwoordig op de markt is. Lees verder . De rest van deze tutorial gaat ervan uit dat je dit ook op een Raspberry Pi uitvoert en dat er een lokaal terminalvenster open is op het bureaublad of dat je op afstand bent ingelogd met SSH. Je Raspberry Pi instellen voor gebruik zonder hoofd met SSH Je Raspberry Pi voor gebruik zonder hoofd met SSH De Raspberry Pi kan SSH-opdrachten accepteren wanneer deze is aangesloten op 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 meer .
Je hebt nodig
- Raspberry Pi 2 (oudere modellen zouden moeten werken, maar controleer op specifieke wijzigingen in de instructies)
- Ten minste één Sonos-luidspreker (andere audiosystemen worden niet ondersteund, dit is een tutorial voor alleen Sonos)
- Gratis account op VoiceRSS.org. Registreer en vind dan uw API-sleutel, die we later nodig zullen 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 u knooppunt 6 heeft, moet u het eerst verwijderen en vervolgens de onderstaande instructies volgen om v5.5 te installeren.
Als u geen v5 hebt of als u een niet gevonden foutmelding krijgt, volgt u deze instructies om Node te installeren. Het volgende commando gaat uit van een Raspberry Pi 2; voor oudere modellen, gebruik armv6l in plaats van 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
Bevestig nogmaals door te typen:
knooppunt -v
En je zou v5.12 moeten zien (of wat de laatste is die je hebt gedownload).
Vervolgens hebben we enkele Node-modules om te installeren. We willen ook de Node Package Manager.
sudo apt-get install npm sudo npm install -g npm sudo npm install -g node-gyp
Dat zijn de eerste vereisten uit de weg, nu op de leuke dingen.
Sonos HTTP API
De Sonos HTTP API maakt een webserver op het lokale netwerk waarmee we een URL kunnen pingen met een bericht dat op een Sonos kan worden aangekondigd (en om het op afstand te besturen als u dat wilt, hoewel deze zelfstudie zich alleen richt op het aspect van stemmeldingen).
git clone https://github.com/jishi/node-sonos-http-api.git sonos cd sonos npm install - productie npm start
Als je een bericht over zo'n-en-die module niet ziet, doe gewoon een andere npm installeren en de modulenaam, probeer 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 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
Uiteindelijk zou u zoiets als dit moeten zien:
De server is nu actief en heeft een interface met Sonos. Het formaat van deze API is eenvoudig:
http: // [SERVER IP]: 5005 / [RUIMTE NAAM] / [ACTIE]
Of als een specifiek voorbeeld:
http://192.168.1.99:5005/kitchen/playlist/chillout
De actie die we interesseren is de “zeggen” commando, gebruikt als volgt:
http://192.168.1.99:5005/kitchen/say/make%20use%20of%20is%20awesome/en-gb
U hoort een foutmelding over het moeten registreren bij een API-sleutel op VoiceRSS.org. U had dit al moeten doen, dus typ het volgende en plak in uw API-sleutel zoals vereist:
nano settings.json
"voicers": "YOURAPIKEY"
(Druk op CTRL-X, Y, om het bestand op te slaan)
Start de server opnieuw en ping de URL opnieuw. Na een paar seconden hoort u een heerlijke Engelse stem (hoewel u het einde van de URL hebt gewijzigd in nl-nl als je dat 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 vóór de exit 0:
sudo node /home/pi/sonos/server.js < /dev/null &
Je hebt nu de mogelijkheid om een spraakbericht te maken vanaf elke plek in het lokale netwerk door simpelweg een URL te pingen, dus de mogelijkheden zijn op dit moment wijd open. Als je echter worstelt om ideeën, lees dan verder voor een paar nuttige meldingen die ik heb opgesteld.
OpenHAB-meldingen over evenementen
Laten we eerst een eenvoudig voorbeeld nemen: bewegingsdetectie. Dit is een standaard voor het activeren van verlichting, maar misschien wilt u ook een gesproken melding als het een bewegingssensor in een zone met weinig verkeer is, of misschien als een waarschuwing dat er iemand op het tuinpad komt.
regel "Tuinbeweging gedetecteerd" toen Item Garden_Motion veranderde en 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 stemmeldingen kunt integreren in een van je regels, maar laten we iets ingewikkelder proberen.
Dagelijks weerbericht van IFTTT naar OpenHAB naar Sonos
In dit recept laten we Sonos een dagelijks weerbericht aankondigen op de door u gewenste tijd.
U moet de binding My.OpenHAB hebben 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 hebt gedaan - u kunt deel 1 van onze OpenHAB-gids raadplegen Aan de slag met OpenHAB Home Automation op Raspberry Pi Aan de slag met OpenHAB Home Automation op Raspberry Pi OpenHAB is een volwassen, open source domoticaplatform dat wordt uitgevoerd op een verscheidenheid aan hardware en is protocol agnostisch, wat betekent dat het verbinding kan maken met bijna elke huisautomatiseringshardware die vandaag op de markt is. Lees Meer voor volledige instructies, anders ga ik ervan uit 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 het My.OpenHAB-kanaal, moeten we het initialiseren met een standaardvariabele. Ping de volgende URL (wijzigen raspberrypi.local naar uw OpenHAB-server, of gebruik gewoon het IP-adres, en Het weer van vandaag naar wat je de String noemde):
http: //raspberrypi.local:? 8080 / CMD Todays_Weather = Sunny
Meld u aan bij My.OpenHAB en vink het selectievakje aan items lijst om ervoor te zorgen dat de variabele nu is geëxporteerd.
Terug op IFTTT, maak een nieuw recept en gebruik het Weerkanaal als trigger op het moment van uw voorkeur. U moet uw locatie eerst instellen als u deze nog nooit eerder hebt gebruikt.
Selecteer My.OpenHAB als de actie en kies de Todays_Weather als de variabele die moet worden bijgewerkt.
Probeer nu het volgende halfuur om te testen - u kunt het recept later bijwerken zodra u weet dat het werkt.
Zeker, op de testtijd (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 commando Meestal bewolkt vandaag! Met een high van 7C en een low van 1C. Herhaling. De condities zijn vandaag meestal bewolkt, met een top 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 = Meestal bewolkt vandaag! Met een high van 7C en een low van 1C. Herhaling. De condities zijn vandaag meestal bewolkt, met een top van 7C en een minimum van 1C.
Vervolgens hebben we een OpenHAB-regel nodig om deze variabele naar de Sonos te verzenden “zeggen” URL. Het volgende zou het moeten doen:
regel "Kondig dagelijks weerbericht aan" wanneer Item Todays_Weather update ontvangt en verzend vervolgenshttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + Todays_Weather.state.toString.encode ("UTF-8") + "/ nl-nl ") einde
Dit is eenvoudig genoeg: wanneer de Todays_Weather-variabele wordt bijgewerkt (die het automatisch elke dag om 8 uur zal zijn), pingt u de URL. We gebruiken coderen(“UTF-8”) Stringfunctie om de zin van IFTTT geschikt te maken voor gebruik in een URL. Om dit deel van het systeem handmatig te testen, gebruikt u de OpenHAB HTTP API opnieuw:
http: //raspberrypi.local: 8080 / CMD? Todays_Weather = Bewolkt, met een kans op gehaktballen.
Maak verbinding met IFTTT zonder OpenHAB, met behulp van If-this-then-Node
Laten we ten slotte eens kijken hoe we vanuit een IFTTT-recept verbinding kunnen maken zonder de tussenpersoon van OpenHAB. In plaats daarvan zullen we een andere webserver installeren en blootstellen aan het 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 in een veilig JSON-datapakketformaat accepteert (dus nee SQL-injectie of authenticatie-aanvallen zijn mogelijk). Zodra we klaar zijn, hebt u een openbare URL waarnaar u berichten kunt verzenden vanaf het IFTTT Maker-kanaal.
Begin met het instellen van een van de vele gratis dynamische DNS-services 5 Beste dynamische DNS-providers waar je gratis naar op zoek kunt zijn vandaag 5 Beste dynamische DNS-providers waar je vandaag gratis naar kunt zoeken DynDNS was altijd een topvermelding als er gratis dynamische DNS's ter sprake kwamen. Maar nu het weg is, zijn er goede alternatieven? Dat is het zeker. Lees meer daar - ik raad DuckDNS aan, specifiek omdat het een eenvoudige set instructies geeft voor Raspberry Pi, waardoor het uw IP-adreslijst automatisch kan bijwerken. Volg deze en volg uw URL voor de volgende stappen. Uw router heeft mogelijk ook een ingebouwde dynamische DNS-functie, dus controleer deze eerst. In mijn geval kan ik een * .mynetgear.com URL gratis, dus ik heb dat gebruikt.
Zoek vervolgens naar de poort doorsturing van uw router Wat is poort doorsturen en hoe kan het mij helpen? [MakeUseOf Explains] Wat is Port Forwarding en hoe kan het mij helpen? [MakeUseOf Explains] Huil je een beetje naar binnen als iemand je vertelt dat er een probleem is met de poortdoorsturing en daarom zal je glanzende nieuwe app niet werken? Je Xbox laat je geen games spelen, je torrent downloads weigeren ... Lees Meer configuratiepagina; dit is waar we het zullen vertellen wat te doen met inkomende verzoeken. Stuur alle HTTP-aanvragen (poort 80) door naar poort 1337 op uw Raspberry Pi-server. Ik neem aan dat je een IP-adres hebt dat al is gereserveerd voor je Raspberry Pi - als je dat nog niet hebt gedaan, controleer dan de configuratiepagina van je router voor gereserveerde IP's terwijl je daar bent, omdat je het volgende week niet kunt veranderen en voor de server om plotseling te stoppen met werken.
Nu om het laatste stukje serversoftware te installeren.
https://github.com/sebauer/if-this-then-node.git cd if-this-then-node / npm install node server.js
Je zou het volgende moeten zien.
Dat is ok, dat betekent alleen dat we onze gegevens moeten bijwerken. Doe open Config.js in Nano en bewerk deze gegevens in iets anders dan de standaardinstelling en sla vervolgens op. Wanneer u de server opnieuw uitvoert, ziet u dit:
Super goed. Test of uw machine toegankelijk is vanaf de buitenwereld door uw dynamische DNS-hostnaam in te voeren en voeg toeifttn / aan het einde van de URL. Als alles werkt, het bericht “IFTTN - als-dit-dan-knooppunt Versie 2.0.1 is in gebruik!” wordt weergegeven in uw browser. Nogmaals, om het script te laten draaien bij het opstarten, bewerk de /etc/rc.local bestand en voeg toe:
sudo node /home/pi/if-this-then-node/server.js < /dev/null &
If-This-Then-Node werkt via plug-ins - er zijn een paar standaard-exemplaren meegeleverd, maar er zijn geen interesses voor ons. Download in plaats daarvan deze aangepaste plug-in die ik voor je heb geschreven met de volgende opdrachten.
cd plug-ins wget https://gist.githubusercontent.com/jamesabruce/4af8db24ba3452b94877/raw/d11c1cff3aa44dbb6a738eeb15202f3db461de75/sonos.js
U moet ook de verzoek module.
npm installatie verzoek
Start de server vervolgens 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 special gebruikt “sayall” actie, die het bericht naar elk Sonos-apparaat verzendt.
request ('http: // localhost: 5005 / sayall /' + params.message + '/ nl-gb', functie (fout, antwoord, lichaam)
Als u liever in staat bent om specifieke apparaten te targeten, vervangt u die regel door:
request ('http: // localhost: 5005 /' + params.device + '/ say /' + params.message + '/ nl-gb', functie (fout, antwoord, lichaam)
Voeg nog een lijnparameter toe met de naam 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.
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 deze schuine strepen niet). kiezen POST verzoek, application / json inhoud en de hoofdtekst van het bericht als volgt, waarbij alle variabelen worden vervangen door de variabelen die u eerder had geconfigureerd:
"actie": "sonos", "gebruiker": "YOURUSER", "pw": "YOURPASSWORD", "message": "Inkomend bericht voor iedereen: het diner is klaar! Herhaal. Het diner 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 met elk IFTTT-kanaal waarvoor je een aangepast bericht wilt maken met variabelen van dat kanaal. Je zou zelfs in staat moeten zijn om het weerbericht van bovenaf te repliceren zonder OpenHAB nu te gebruiken, hoewel het extra moeite kostte om een andere server te installeren.
Opmerking: hackers zullen u automatisch scannen. Dit gebeurt de hele tijd, maar als u logboeken bekijkt, kan dit alarmerend lijken. Hieronder kunt u zien dat iemand systematisch probeerde vast te stellen of een van de standaard PHPMyAdmin-interfaces toegankelijk was. Wat ze niet waren. Wees niet ongerust als je iets soortgelijks ziet. Het is het internet-equivalent van cold calling willekeurige telefoonnummers om te zien of er iemand is.
Wat zal je melden??
Je zou nu de tools en kweeksel moeten hebben om je hele huis constant te baden in stemmeldingen 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 4 minuten, dus je zou goed moeten zijn.
Dus wat ga je hiermee doen? Deel uw ideeën of IFTTT-recept in de opmerkingen!
Image Credits: koffie en vrouw door S_Photo via Shutterstock
Ontdek meer over: Home Automation, Sonos.