So senden Sie Sprachbenachrichtigungen an Sonos-Lautsprecher

So senden Sie Sprachbenachrichtigungen an Sonos-Lautsprecher / Intelligentes Zuhause

Der Traum eines jeden Smart Home-Enthusiasten ist ein Zuhause, mit dem Sie sich unterhalten können, aber die Realität ist noch weit davon entfernt.

Mit Amazon Echo können Sie beispielsweise eine beliebige Anzahl sprachgesteuerter Funktionen verwenden. Der Dialog muss jedoch von Ihnen mit einer Frage initiiert werden. Sie kann nicht einfach von sich aus eine wichtige Nachricht ankündigen.

Sie können tun Sie dies jedoch mit einem Sonos-System und ein bisschen DIY-Raspberry Pi-Magie. Heute zeige ich Ihnen, wie Sie Sprachbenachrichtigungen auf Ihrem Sonos-System einrichten, ein paar nützliche IFTTT-Rezepte, OpenHAB-Integrationen und mehr vorstellen, um die Benachrichtigungsfunktion zu nutzen.

Beachten Sie, dass eine native Sonos-Bindung für OpenHAB verfügbar ist, die jedoch bekanntermaßen zu Speicherproblemen aufgrund einer fehlerhaften uPnP-Bibliothek führt. Ich würde vorschlagen, das zunächst zu überspringen und stattdessen die Methode in diesem Tutorial zu verwenden.

Ein Raspberry Pi, auf dem Raspian Linux ausgeführt wird, ist ideal für dieses Lernprogramm, es sollte jedoch auch auf jedem Linux-basierten Heimserver funktionieren, den Sie ausführen. In diesem Fall verwende ich dasselbe Raspberry Pi wie OpenHAB, das Open-Source-Hausautomationssystem. Erste Schritte mit OpenHAB Home Automation auf Raspberry Pi Erste Schritte mit OpenHAB Home Automation auf Raspberry Pi OpenHAB ist eine ausgereifte Open Source-Plattform für Heimautomation Das Gerät läuft auf einer Vielzahl von Hardware und ist protokollunabhängig. Das bedeutet, dass es mit nahezu jeder auf dem Markt erhältlichen Hausautomationshardware verbunden werden kann. Weiterlesen . Der Rest dieses Lernprogramms setzt voraus, dass Sie dies auch auf einem Raspberry Pi ausführen und entweder ein lokales Terminalfenster auf dem Desktop geöffnet haben oder mit SSH remote angemeldet sind. Einrichten des Raspberry Pi für die Verwendung ohne Heads mit SSH Raspberry Pi für die Verwendung ohne Heads mit SSH Das Raspberry Pi kann SSH-Befehle akzeptieren, wenn es mit einem lokalen Netzwerk (entweder über Ethernet oder WLAN) verbunden ist. So können Sie es problemlos einrichten. Die Vorteile von SSH gehen über das tägliche Screening hinaus ... Mehr lesen .

Du brauchst

  • Raspberry Pi 2 (ältere Modelle sollten funktionieren, sollten Sie jedoch nach bestimmten Änderungen in der Anleitung suchen)
  • Mindestens ein Sonos-Lautsprecher (andere Audiosysteme werden nicht unterstützt. Dies ist ein Tutorial nur für Sonos.)
  • Kostenloses Konto bei VoiceRSS.org. Registrieren Sie sich und suchen Sie dann Ihren API-Schlüssel, den wir später zum Generieren der Sprachnachrichten benötigen.

Installieren Sie den neuesten Knoten

Prüfen Sie, welche Version von Node Sie haben, indem Sie Folgendes eingeben:

Knoten -v 

Beachten Sie, dass Version 6 nicht unterstützt wird. Wenn Sie über Knoten 6 verfügen, müssen Sie ihn zuerst entfernen. Befolgen Sie anschließend die folgenden Anweisungen, um v5.5 zu installieren.

Wenn Sie nicht über Version 5 verfügen oder einen nicht gefundenen Fehler erhalten, befolgen Sie diese Anweisungen, um Node zu installieren. Der folgende Befehl setzt einen Himbeer-Pi 2 voraus; für ältere Modelle verwenden armv6l anstatt 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-Knoten -v5.12.0-linux-armv7l sudo cp -R * / usr / local 

Bestätigen Sie erneut, indem Sie Folgendes eingeben:

Knoten -v

Sie sollten v5.12 sehen (oder was immer Sie zuletzt heruntergeladen haben).

Als nächstes müssen wir einige Knotenmodule installieren. Wir möchten auch den Node Package Manager.

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

Das sind die Voraussetzungen für den Weg, jetzt zum Spaß.

Sonos-HTTP-API

Die Sonos-HTTP-API erstellt einen Webserver im lokalen Netzwerk, der es uns ermöglicht, eine URL mit einer auf einem Sonos anzukündigenden Nachricht zu pingen (und diese remote zu steuern, wenn Sie möchten, obwohl sich dieses Tutorial nur auf den Aspekt der Sprachbenachrichtigung konzentriert.).

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

Wenn eine Meldung angezeigt wird, dass ein solches Modul nicht gefunden wurde, führen Sie einfach eine andere aus npm installieren und den Modulnamen, dann versuchen Sie es npm starten nochmal. Wenn bei Ihnen Fehler auftreten “erfordert einen C ++ 11-Compiler”, Fix mit den folgenden Befehlen:

sudo apt-get install gcc-4.8 g ++ - 4.8 sudo-Update-Alternativen --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-Alternativen --install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20 sudo-Update-Alternativen --install / usr / bin / g ++ g ++ / usr / bin / g ++ - 4,8 50 

Irgendwann sollte man so etwas sehen:

Der Server läuft jetzt und stellt eine Verbindung zu Sonos her. Das Format dieser API ist einfach:

http: // [SERVER IP]: 5005 / [ZIMMERNAME] / [AKTION]

Oder als konkretes Beispiel:

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

Die Aktion, die uns interessiert, ist die “sagen” Befehl, wie folgt verwendet:

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

Sie erhalten eine Fehlermeldung, dass Sie sich bei VoiceRSS.org für einen API-Schlüssel registrieren müssen. Sie sollten dies bereits getan haben, geben Sie also Folgendes ein und fügen Sie Ihren API-Schlüssel entsprechend ein:

nano einstellungen.json
 "Stimmen": "YOURAPIKEY"

(Drücken Sie STRG-X, Y, um die Datei zu speichern.)

Starten Sie den Server neu und pingen Sie die URL erneut an. Nach einigen Sekunden sollten Sie eine reizvolle englische Stimme hören (obwohl Sie das Ende der URL in ändern en-uns wenn du lieber bist). So starten Sie den Sonos HTTP API-Server erneut, wenn das Pi neu gestartet wird:

sudo nano /etc/rc.local

Fügen Sie eine Zeile vor dem hinzu Ausfahrt 0:

Sudo-Knoten /home/pi/sonos/server.js < /dev/null &

Sie haben jetzt die Möglichkeit, eine Sprachnachricht von überall im lokalen Netzwerk zu erstellen, indem Sie einfach eine URL anpingen, sodass die Möglichkeiten an dieser Stelle weit offen sind. Wenn Sie jedoch um Ideen kämpfen, lesen Sie weiter, um ein paar nützliche Benachrichtigungen zu erhalten, die ich eingerichtet habe.

OpenHAB-Benachrichtigungen zu Ereignissen

Nehmen wir zunächst ein einfaches Beispiel: Bewegungserkennung. Dies ist ein häufiger Anwendungsfall für das Aktivieren von Lichtern. Möglicherweise möchten Sie jedoch auch eine Sprachbenachrichtigung, wenn es sich um einen Bewegungssensor in einem wenig befahrenen Bereich oder um eine Vorwärtswarnung handelt, dass jemand den Gartenpfad erreicht.

Regel "Gartenbewegung erkannt", wenn Element Garden_Motion geändert wurde, dann var String message = "Sie haben einen Besucher" sendHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + message.encode ("UTF-8") + " / en-gb ") ende 

Sie sollten sehen, wie Sie diese einfachen Sprachbenachrichtigungen in Ihre Regeln integrieren können, aber versuchen Sie es etwas komplexer.

Täglicher Wetterbericht von IFTTT an OpenHAB an Sonos

In diesem Rezept erhalten Sie von Sonos einen täglichen Wetterbericht zu Ihrem bevorzugten Zeitpunkt.

Sie benötigen die aktivierte My.OpenHAB-Bindung, da dadurch eine sichere Verbindung zwischen Ihrem internen OpenHAB-Server und dem externen IFTTT-Dienst hergestellt wird. Wenn Sie dies noch nicht getan haben, können Sie dies tun. Sie können sich auf Teil 1 unseres OpenHAB-Handbuchs beziehen. Erste Schritte mit OpenHAB Home Automation auf Raspberry Pi Erste Schritte mit OpenHAB Home Automation auf Raspberry Pi OpenHAB ist eine ausgereifte Open Source-Plattform für Heimautomation, die ausgeführt wird auf einer Vielzahl von Hardware und ist protokollunabhängig, was bedeutet, dass er mit fast jeder Hausautomationshardware auf dem heutigen Markt verbunden werden kann. Weitere Informationen finden Sie in der vollständigen Anleitung. Andernfalls gehe ich davon aus, dass Sie die Einstellung für alle Elemente bereits aktiviert haben.

Als Nächstes erstellen Sie ein neues String-Element in Ihrer OpenHAB-Installation, in dem der tägliche Wetterbericht gespeichert wird. Bevor dies im Kanal My.OpenHAB sichtbar ist, müssen wir es mit einer Standardvariable initialisieren. Pingen Sie die folgende URL (ändern Sie raspberrypi.local zu Ihrem OpenHAB-Server oder verwenden Sie einfach die IP-Adresse und Heute_Wetter zu was auch immer Sie den String benannt haben):

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

Melden Sie sich bei My.OpenHAB an und überprüfen Sie die Artikel Liste, um sicherzustellen, dass die Variable jetzt exportiert wurde.

Erstellen Sie auf IFTTT ein neues Rezept und verwenden Sie den Wetterkanal als Auslöser zu Ihrer bevorzugten Tageszeit. Sie müssen zuerst Ihren Standort festlegen, wenn Sie ihn noch nie verwendet haben.

Wählen Sie als Aktion My.OpenHAB und als zu aktualisierende Variable Todays_Weather aus.

Für den Moment wählen Sie einfach die nächste halbe Stunde zum Testen aus - Sie können das Rezept später aktualisieren, sobald Sie wissen, dass es funktioniert.

Sicher genug, zu der Testzeit (tatsächlich etwas früher), habe ich die heutige Prognose erfolgreich aktualisiert.

2016-02-27 10: 28: 01.689 [DEBUG] [o.o.i.m.i.MyOpenHABServiceImpl] - Befehl erhalten Meist bewölkt heute! Mit einem Höchststand von 7 ° C und einem Tiefstand von 1 ° C. Wiederholen. Die Bedingungen werden heute überwiegend bewölkt sein, mit einem Höchststand von 7 ° C und einem Tiefstand von 1 ° C. für Artikel Todays_Weather 2016-02-27 10: 28: 01.697 [DEBUG] [o.o.i.m.i.MyOpenHABServiceImpl] - store (Todays_Weather), Bundesland = Meistens bewölkt heute! Mit einem Höchststand von 7 ° C und einem Tiefstand von 1 ° C. Wiederholen. Die Bedingungen werden heute überwiegend bewölkt sein, mit einem Höchststand von 7 ° C und einem Tiefstand von 1 ° C. 

Als nächstes benötigen wir eine OpenHAB-Regel, um diese Variable an Sonos zu senden “sagen” URL. Folgendes sollte es tun:

Regel "Täglicher Wetterbericht ankündigen", wenn das Element Todays_Weather das Update erhalten hat, dann sendHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + Todays_Weather.state.toString.encode ("UTF-8") + "/ de-gb ") Ende 

Dies ist einfach genug: Wenn die Todays_Weather-Variable aktualisiert wird (was täglich automatisch um 8 Uhr morgens erfolgt), pingen Sie die URL an. Wir gebrauchen kodieren(“UTF-8”) String-Funktion, um den Satz aus IFTTT für die Verwendung in einer URL geeignet zu machen. Um diesen Teil des Systems manuell zu testen, verwenden Sie einfach erneut die OpenHAB-HTTP-API:

http: //raspberrypi.local: 8080 / CMD? Todays_Weather = Bewölkt, mit einer Chance für Fleischbällchen. 

Stellen Sie eine Verbindung zu IFTTT ohne OpenHAB her und verwenden Sie den If-This-Then-Node

Lassen Sie uns abschließend betrachten, wie Sie von jedem IFTTT-Rezept ohne den OpenHAB-Vermittler eine Verbindung herstellen können. Stattdessen installieren wir einen anderen Webserver und machen diesen dem offenen Internet zugänglich. Dies ist nicht ohne Risiko: Jede Art von offenem Server ist ein Sicherheitsrisiko, aber wir reduzieren dies, indem wir keinen vollständigen Server-Stack ausführen, sondern nur einen kleinen spezifischen Dienst, der nur bestimmte Befehle in einem sicheren JSON-Datenpaketformat akzeptiert (also nein SQL-Injection- oder Authentifizierungsangriffe sind möglich). Sobald wir fertig sind, haben Sie eine öffentliche URL, an die Sie Nachrichten aus dem IFTTT Maker-Kanal senden können.

Beginnen Sie mit dem Einrichten eines der vielen kostenlosen dynamischen DNS-Dienste. 5 Beste dynamische DNS-Anbieter, die Sie heute kostenlos herunterladen können 5 Beste dynamische DNS-Anbieter, die Sie heute kostenlos herunterladen können DynDNS wurde immer als eine der Top-Erwähnungen erwähnt, wenn kostenlose dynamische DNSes aufgerufen wurden. Gibt es jetzt, wo es vorbei ist, gute Alternativen? Da sind es sicher. Lesen Sie dort weiter - ich empfehle DuckDNS, insbesondere, weil es eine einfache Anleitung für Raspberry Pi gibt, die es ermöglicht, Ihre IP-Adresse automatisch zu aktualisieren. Folgen Sie diesen Anweisungen und merken Sie sich Ihre URL für die nächsten Schritte. Ihr Router verfügt möglicherweise auch über eine integrierte integrierte DNS-Funktion. In meinem Fall bekomme ich eine * .mynetgear.com URL kostenlos, also habe ich das genutzt.

Finden Sie als Nächstes die Portweiterleitung Ihres Routers. Was ist Portweiterleitung und wie kann sie mir helfen? [MakeUseOf erklärt] Was ist Portweiterleitung und wie kann sie mir helfen? [MakeUseOf Explains] Weinen Sie ein wenig, wenn Ihnen jemand sagt, dass es ein Problem mit der Portweiterleitung gibt, und deshalb funktioniert Ihre glänzende neue App nicht? Ihre Xbox lässt Sie keine Spiele spielen, Ihre Torrent-Downloads verweigern die Konfigurationsseite. Hier erfahren Sie, was mit eingehenden Anfragen zu tun ist. Leiten Sie alle HTTP-Anforderungen (Port 80) an Port 1337 auf Ihrem Raspberry Pi-Server weiter. Ich gehe davon aus, dass Sie bereits eine IP-Adresse für Ihren Raspberry Pi reserviert haben. Wenn dies nicht der Fall ist, überprüfen Sie die Konfigurationsseite Ihres Routers auf reservierte IP-Adressen, während Sie dort sind, da Sie es nächste Woche nicht ändern müssen damit der Server plötzlich nicht mehr funktioniert.

Jetzt das letzte Stück Server-Software installieren.

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

Sie sollten Folgendes sehen.

Das ist in Ordnung, das bedeutet nur, dass wir unsere Details aktualisieren müssen. Aufmachen config.js in Nano und bearbeiten Sie diese Details auf eine andere als die Standardeinstellung, und speichern Sie dann. Wenn Sie den Server erneut ausführen, sollten Sie Folgendes sehen:

Großartig. Testen Sie, ob Ihr Computer von außen zugänglich ist, indem Sie Ihren dynamischen DNS-Hostnamen eingeben undifttn / bis zum Ende der URL. Wenn alles funktioniert, die Nachricht “IFTTN - Wenn-dann-dann-Knoten-Version 2.0.1 läuft!” wird in Ihrem Browser angezeigt. Damit dieses Skript beim Start ausgeführt wird, bearbeiten Sie das /etc/rc.local Datei und fügen Sie hinzu:

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

If-This-Then-Node funktioniert über Plugins - es gibt ein paar Standard-Plugins, die aber für uns nicht von Interesse sind. Laden Sie stattdessen dieses benutzerdefinierte Plugin mit den folgenden Befehlen herunter.

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

Sie müssen auch das installieren anfordern Modul.

npm Installationsanforderung 

Starten Sie dann den Server neu. Das Plugin ist recht einfach, unterscheidet sich jedoch ein wenig von der bisher verwendeten URL. In diesem Fall habe ich das Special verwendet “sayall” Aktion, die die Nachricht an jedes Sonos-Gerät sendet.

request ('http: // localhost: 5005 / sayall /' + params.message + '/ en-gb', Funktion (Fehler, Antwort, Rumpf) 

Wenn Sie bestimmte Geräte gezielt ansprechen möchten, ersetzen Sie diese Zeile durch:

request ('http: // localhost: 5005 /' + params.device + '/ say /' + params.message + '/ en-gb', Funktion (Fehler, Antwort, Text) 

Fügen Sie einen weiteren Zeilenparameter namens Gerät an die JSON-Anforderung weiter unten, in der der Sonos-Gerätename angegeben werden soll.

Um dies zu testen, verwende ich den IFTTT “Tun” Schaltfläche App. Erstellen Sie ein neues Rezept, navigieren Sie zu den Kanälen und wählen Sie die Option Hersteller Kanal.

Erstellen Sie ein neues Rezept. Geben Sie in die URL ein, die Sie zuvor von einem kostenlosen dynamischen DNS-Anbieter konfiguriert haben (einschließlich / ifttn / am Ende der URL. Vergiss nicht diese Schrägstriche. Wählen POST anfordern, Anwendung / Json Inhalt und Inhalt der Nachricht wie folgt, wobei alle erforderlichen Variablen durch die zuvor konfigurierten ersetzt werden:

"action": "sonos", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Eingehende Nachricht für alle: Das Abendessen ist fertig! Wiederholen. Das Abendessen ist fertig. Bringen Sie Ihre Ärsche jetzt nach oben . "  

Jetzt habe ich einen leicht zugänglichen Button, der die Nachricht auf jedem Sonos-Gerät im Haus ankündigt. Sie können dies natürlich mit jedem IFTTT-Kanal koppeln, den Sie mithilfe von Variablen dieses Kanals eine benutzerdefinierte Nachricht erstellen möchten. Sie sollten sogar in der Lage sein, den Wetterbericht von oben zu replizieren, ohne OpenHAB zu verwenden, obwohl der zusätzliche Aufwand für die Installation eines anderen Servers erforderlich war.

Hinweis: Hacker scannen Sie automatisch. Dies passiert ständig, aber wenn Sie Protokolle anzeigen, kann dies alarmierend erscheinen. Unten sehen Sie, dass jemand systematisch versucht hat festzustellen, ob eine der Standard-PHPMyAdmin-Schnittstellen verfügbar war. Was sie nicht waren Seien Sie nicht beunruhigt, wenn Sie etwas Ähnliches sehen. Es ist das Internet-Äquivalent zum Telefonieren von zufälligen Telefonnummern, um zu sehen, ob jemand da ist.

Was wirst du verkünden??

Sie sollten jetzt die Werkzeuge und Kenntnisse haben, um Ihr gesamtes Haus ständig in Sprachbenachrichtigungen über alles, was Sie sich vorstellen können, zu baden. Wer braucht musik Ihr einziges Limit sind 350 tägliche Anfragen von VoiceRSS.org - aber das ist etwa alle vier Minuten eine, also sollten Sie in Ordnung sein.

Was wirst du damit machen? Teilen Sie Ihre Ideen oder Ihr IFTTT-Rezept in den Kommentaren mit!

Bildnachweise: Kaffee und Frau von S_Photo via Shutterstock

Erfahren Sie mehr über: Home Automation, Sonos.