Der Traum eines jeden Smart Home Enthusiasten ist ein Zuhause, mit dem man reden kann, aber die Realität ist weit davon entfernt.
Mit Amazon Echo können Sie beispielsweise eine beliebige Anzahl sprachgesteuerter Funktionen verwenden, aber der Dialog muss von Ihnen mit einer Frage eingeleitet werden - Sie können nicht einfach eine wichtige Nachricht ankündigen.
Sie können dies jedoch mit einem Sonos-System und ein bisschen DIY Raspberry Pi Magie tun. Heute zeige ich Ihnen, wie Sie Sprachbenachrichtigungen auf Ihrem Sonos-System einrichten, indem Sie einige nützliche IFTTT-Rezepte, OpenHAB-Integrationen und mehr einführen, um die Benachrichtigungsfunktion zu nutzen.
Beachten Sie, dass für OpenHAB eine native Sonos-Bindung verfügbar ist, die jedoch aufgrund einer fehlerhaften uPnP-Bibliothek zu Speicherproblemen führt. Ich würde vorschlagen, das jetzt zu überspringen und stattdessen die Methode in diesem Tutorial zu verwenden.
Ein Raspberry Pi, auf dem Raspian Linux läuft, ist ideal für dieses Tutorial, aber es sollte auch auf jedem Linux-basierten Home-Server funktionieren, den Sie gerade benutzen. In diesem Fall verwende ich den gleichen Raspberry Pi, der OpenHAB, das Open-Source-Hausautomationssystem, ausführt. Erste Schritte mit OpenHAB Home Automation auf Raspberry Pi Erste Schritte mit OpenHAB Home Automation auf Raspberry Pi OpenHAB ist eine ausgereifte Open-Source-Hausautomationsplattform Das Gerät läuft auf einer Vielzahl von Hardware und ist protokollunabhängig, was bedeutet, dass es sich mit fast jeder Hausautomations-Hardware verbinden kann, die derzeit auf dem Markt erhältlich ist. Weiterlesen . Der Rest dieses Tutorials geht davon aus, 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 Ihres Raspberry Pi für kopflose Verwendung mit SSH Einrichten Ihres Raspberry Pi zur kopflosen Verwendung mit SSH Der Raspberry Pi kann SSH-Befehle annehmen, wenn er an ein lokales Netzwerk (entweder über Ethernet oder WLAN) angeschlossen ist, so dass Sie ihn einfach einrichten können. Die Vorteile von SSH gehen über das tägliche Screening hinaus ... Read More.
Du brauchst
- Raspberry Pi 2 (ältere Modelle sollten funktionieren, aber auf bestimmte Änderungen in der Anleitung prüfen)
- Mindestens ein Sonos-Lautsprecher (andere Audiosysteme werden nicht unterstützt, dies ist nur ein Tutorial für Sonos)
- Kostenloses Konto bei VoiceRSS.org. Registrieren Sie sich dann und suchen Sie Ihren API-Schlüssel, den wir später zur Generierung der Sprachnachrichten benötigen.
Installieren Sie den Knoten zuletzt
Überprüfen Sie, welche Version von Node Sie haben, indem Sie Folgendes eingeben:
node -v
Beachten Sie, dass Version 6 nicht unterstützt wird. Wenn Sie Knoten 6 haben, entfernen Sie ihn zuerst und folgen dann den Anweisungen unten, um v5.5 zu installieren.
Wenn Sie v5 nicht haben oder wenn Sie einen nicht gefundenen Fehler erhalten, folgen Sie diesen Anweisungen, um Node zu installieren. Der folgende Befehl geht von einem Raspberry Pi 2 aus; Verwenden Sie für ältere Modelle armv6l anstelle von 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
Bestätigen Sie erneut, indem Sie Folgendes eingeben:
node -v
Und Sie sollten v5.12 sehen (oder was immer Sie heruntergeladen haben).
Als nächstes müssen wir einige Knotenmodule installieren. Wir wollen auch den Knoten-Paket-Manager.
sudo apt-get install npm sudo npm install -g npm sudo npm install -g node-gyp
Das sind die Voraussetzungen aus dem Weg, jetzt zu den lustigen Dingen.
Sonos HTTP API
Die Sonos HTTP-API erstellt einen Webserver im lokalen Netzwerk, der es uns ermöglicht, eine URL mit einer Nachricht zu pingen, um sie auf einem Sonos anzukündigen (und sie aus der Ferne zu steuern, obwohl dieses Tutorial nur den Aspekt der Sprachbenachrichtigung behandelt).
git clone https://github.com/jishi/node-sonos-http-api.git sonos cd sonos npm install --production npm start
Wenn Sie eine Nachricht über solch ein Modul nicht gefunden finden, tun Sie einfach eine andere npm Installation und den Modulnamen, dann versuchen Sie npm erneut zu starten . Wenn Sie Fehler in Bezug auf "erfordert einen C ++ 11 Compiler" feststellen, beheben Sie mit den folgenden Befehlen:
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
Irgendwann solltest du so etwas sehen:
Der Server läuft jetzt und kann mit Sonos verbunden werden. Das Format dieser API ist einfach:
http: // [SERVER IP]: 5005 / [RAUMNAME] / [AKTION]
Oder als ein konkretes Beispiel:
http://192.168.1.99:5005/kitchen/playlist/chillout
Die Aktion, an der wir interessiert sind, ist der Befehl "say", der wie folgt verwendet wird:
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 als geeignet ein:
nano settings.json
{
"voicerss":"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 ein paar Sekunden sollten Sie eine entzückende englische Stimme hören (obwohl Sie das Ende der URL zu en-us ändern , wenn Sie lieber möchten). So starten Sie den Sonos-HTTP-API-Server beim Neustart des Pi erneut:
sudo nano /etc/rc.local
Fügen Sie vor dem Exit 0 eine Zeile hinzu:
sudo node /home/pi/sonos/server.js< /dev/null &
Sie haben nun die Möglichkeit, eine Sprachnachricht von jedem beliebigen Ort im lokalen Netzwerk zu erstellen, indem Sie einfach eine URL anpingen, sodass die Möglichkeiten an dieser Stelle weit offen sind. Wenn Sie jedoch für Ideen kämpfen, lesen Sie weiter für ein paar nützliche Benachrichtigungen, die ich eingerichtet habe.
OpenHAB Benachrichtigungen zu Ereignissen
Nehmen wir ein einfaches Beispiel: Bewegungserkennung. Dies ist ein häufiger Anwendungsfall für das Aktivieren von Lichtern, aber Sie möchten vielleicht auch eine Sprachbenachrichtigung, wenn es sich um einen Bewegungssensor in einem verkehrsarmen Bereich handelt, oder vielleicht als Vorwarnung, dass jemand den Gartenpfad erreicht.
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
Sie sollten sehen, wie Sie diese einfachen Sprachbenachrichtigungen in jede Ihrer Regeln integrieren können, aber lassen Sie uns etwas etwas Komplexeres versuchen.
Täglicher Wetterbericht von IFTTT zu OpenHAB zu Sonos
In diesem Rezept wird Sonos zu Ihrer bevorzugten Zeit einen täglichen Wetterbericht ankündigen.
Sie müssen die My.OpenHAB-Bindung aktivieren, da dies eine sichere Verbindung zwischen Ihrem internen OpenHAB-Server und dem externen IFTTT-Dienst herstellt. Richten Sie das ein, wenn Sie es noch nicht getan haben - Sie können Teil 1 unseres OpenHAB-Handbuchs lesen. 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 Hausautomation auf einer Vielzahl von Hardware und ist Protokoll agnostisch, was bedeutet, dass es mit fast jeder Hausautomatisierung Hardware auf dem heutigen Markt verbinden kann. Lesen Sie mehr für die vollständigen Anweisungen, ansonsten nehme ich an, Sie haben es bereits eingerichtet mit Persistenz für alle Elemente aktiviert.
Erstellen Sie als Nächstes ein neues String-Objekt in Ihrer OpenHAB-Installation, in dem der tägliche Wetterbericht gespeichert wird. Bevor dies im My.OpenHAB-Kanal sichtbar ist, müssen wir es mit einer Standardvariablen initialisieren. Pingen Sie die folgende URL an (ändern Sie raspberrypi.local zu Ihrem OpenHAB-Server, oder verwenden Sie einfach die IP-Adresse und Todays_Weather zu dem, was Sie String genannt haben):
http://raspberrypi.local:8080/CMD?Todays_Weather=Sunny
Melden Sie sich bei My.OpenHAB an und überprüfen Sie die Liste der Elemente, um sicherzustellen, dass die Variable jetzt exportiert wurde.
Zurück auf IFTTT, erstellen Sie ein neues Rezept und verwenden Sie den Wetterkanal als Trigger zu Ihrer bevorzugten Tageszeit. Sie müssen Ihren Standort zuerst festlegen, wenn Sie ihn noch nie zuvor verwendet haben.
Wählen Sie My.OpenHAB als die Aktion aus, und wählen Sie das Todays_Weather als die Variable, die aktualisiert werden soll.
Für jetzt, wählen Sie einfach die nächste halbe Stunde Slot zum Testen - Sie können das Rezept später aktualisieren, sobald Sie wissen, dass es funktioniert.
Sicherlich, in der Testphase (kurz vorher) habe ich die heutige Vorhersage erfolgreich aktualisiert.
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.
Als Nächstes benötigen wir eine OpenHAB-Regel, um diese Variable an die Sonos-URL "say" zu senden. Folgendes sollte es tun:
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
Das ist einfach genug: Wenn die Todays_Weather-Variable aktualisiert wird (was automatisch jeden Tag um 8.00 Uhr geschehen wird), pingen Sie die URL an. Wir verwenden die encode ("UTF-8") String-Funktion, um den Satz von 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=Cloudy, with a chance of meatballs.
Stellen Sie eine Verbindung zu IFTTT ohne OpenHAB her und verwenden Sie If-This-Then-Node
Schauen wir uns nun an, wie man sich von jedem IFTTT-Rezept ohne den OpenHAB-Vermittler verbinden kann. Stattdessen installieren wir einen anderen Webserver und stellen ihn dem offenen Internet zur Verfügung. Dies ist nicht ohne Risiko: Jede Art von offenem Server ist ein Sicherheitsrisiko, aber wir mindern dies, indem wir keinen kompletten Server-Stack ausführen, sondern nur einen kleinen spezifischen Service, der nur bestimmte Befehle in einem sicheren JSON-Datenpaket akzeptiert (also nein SQL-Injection- oder Authentifizierungsangriffe sind möglich). Sobald wir fertig sind, haben Sie eine öffentliche URL, an die Sie Nachrichten vom IFTTT Maker-Kanal senden können.
Beginnen Sie mit der Einrichtung eines der vielen kostenlosen dynamischen DNS-Dienste. 5 Beste dynamische DNS-Anbieter, die Sie heute kostenlos suchen können 5 beste dynamische DNS-Anbieter, die Sie heute kostenlos suchen können DynDNS war immer eine Top-Erwähnung, wenn freie dynamische DNS angesprochen wurden. Aber jetzt, da es weg ist, gibt es irgendwelche guten Alternativen? Da sind sie sicher. Lesen Sie mehr da draußen - 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 dynamische DNS-Funktion, überprüfen Sie daher zuerst. In meinem Fall kann ich eine * .mynetgear.com- URL kostenlos bekommen, also habe ich diese verwendet.
Als nächstes finden Sie die Portweiterleitung Ihres Routers. Was ist Port Forwarding? Wie kann es mir helfen? [MakeUseOf erklärt] Was ist Port Forwarding & Wie kann es mir helfen? [MakeUseOf Explains] Weinst du innerlich etwas, wenn dir jemand sagt, dass es ein Port-Forwarding-Problem gibt und deshalb deine neue App nicht funktioniert? Ihre Xbox lässt Sie Spiele nicht spielen, Ihre Torrent-Downloads verweigern ... Lesen Sie mehr Konfigurationsseite; Hier erfahren Sie, was mit eingehenden Anfragen geschehen soll. Leiten Sie alle HTTP-Anfragen (Port 80) an Port 1337 auf Ihrem Raspberry Pi-Server weiter. Ich nehme an, Sie haben eine IP-Adresse bereits für Ihren Raspberry Pi reserviert - wenn Sie nicht haben, überprüfen Sie die Konfigurationsseite Ihres Routers für reservierte IP-Adressen, während Sie dort sind, wie Sie es nicht nächste Woche ändern und dass der Server plötzlich nicht mehr funktioniert.
Jetzt installieren Sie das letzte Bit der Server-Software.
https://github.com/sebauer/if-this-then-node.git cd if-this-then-node/ npm install node server.js
Sie sollten Folgendes sehen.
Das ist in Ordnung, das bedeutet nur, dass wir unsere Daten aktualisieren müssen. Öffnen Sie config.js in Nano und bearbeiten Sie diese Details in einem anderen als dem Standard und speichern Sie sie. Wenn Sie den Server erneut ausführen, sollten Sie Folgendes sehen:
Groß. Testen Sie, ob Ihr Computer von außen erreichbar ist, indem Sie Ihren dynamischen DNS-Hostnamen eingeben und / ifttn / an das Ende der URL anhängen. Wenn alles funktioniert, wird die Meldung "IFTTN - Wenn-dieser-dann-Knoten Version 2.0.1 läuft!" In Ihrem Browser angezeigt. Um dieses Skript beim Start auszuführen, bearbeiten Sie die Datei /etc/rc.local erneut und fügen Sie Folgendes hinzu:
sudo node /home/pi/if-this-then-node/server.js< /dev/null &
Wenn der This-Then-Node über Plugins funktioniert, gibt es ein paar Standard-Plugins, die uns aber nicht interessieren. Lade stattdessen dieses benutzerdefinierte Plugin, das ich für dich geschrieben habe, mit den folgenden Befehlen herunter.
cd plugins wget https://gist.githubusercontent.com/jamesabruce/4af8db24ba3452b94877/raw/d11c1cff3aa44dbb6a738eeb15202f3db461de75/sonos.js
Sie müssen auch das Anfragemodul installieren.
npm install request
Dann starte den Server neu. Das Plugin ist ziemlich einfach, unterscheidet sich aber ein wenig von der URL, die wir bisher verwendet haben. In diesem Fall habe ich die spezielle Aktion "sayall" verwendet, die die Nachricht an jedes Sonos-Gerät sendet.
request('http://localhost:5005/sayall/'+params.message+'/en-gb', function (error, response, body)
Wenn Sie lieber auf bestimmte Geräte abzielen möchten, ersetzen Sie diese Zeile durch:
request('http://localhost:5005/'+params.device+'/say/'+params.message+'/en-gb', function (error, response, body)
Fügen Sie der folgenden JSON-Anforderung einen weiteren Zeilenparameter namens Gerät hinzu, in dem der Name des Sonos-Geräts angegeben wird.
Um dies zu testen, verwende ich die IFTTT "Do" -Button-App. Erstellen Sie ein neues Rezept, navigieren Sie zu Kanälen und wählen Sie den Maker- Kanal.
Erstelle ein neues Rezept. Geben Sie die von Ihnen zuvor konfigurierte URL von einem freien dynamischen DNS-Anbieter ein (einschließlich / ifttn / am Ende der URL. Vergessen Sie nicht diese Schrägstriche). Wählen Sie die POST- Anforderung, den Anwendungs / JSON- Inhalt und den Nachrichtentext wie folgt aus und ersetzen Sie alle Variablen nach Bedarf durch die zuvor konfigurierten Variablen:
{ "action":"sonos", "user":"YOURUSER", "pw":"YOURPASSWORD", "message":"Incoming message for everyone: Dinner is ready! Repeat. Dinner is ready. Get your asses upstairs now." }
Jetzt habe ich eine leicht zugängliche Taste, die die Nachricht auf jedem Sonos-Gerät im Haus ankündigt. Sie können dies natürlich mit jedem IFTTT-Kanal verbinden, für den Sie eine benutzerdefinierte Nachricht mit Variablen aus diesem Kanal erstellen möchten. Sie sollten sogar in der Lage sein, den Wetterbericht von oben zu replizieren, ohne OpenHAB jetzt zu verwenden, obwohl es den zusätzlichen Aufwand erforderte, einen anderen Server zu installieren.
Hinweis: Hacker scannen dich automatisch . Dies passiert die ganze Zeit, aber wenn Sie Protokolle anzeigen, kann es alarmierend erscheinen. Im Folgenden sehen Sie, wie jemand systematisch nachprüfte, ob eine der standardmäßigen PHPMyAdmin-Schnittstellen verfügbar war. Was sie nicht waren. Sei nicht beunruhigt, wenn du etwas Ähnliches siehst. Es ist das Internet-Äquivalent von kalt angerufenen zufälligen Telefonnummern, um zu sehen, ob jemand da ist.
Was werden Sie ankündigen?
Sie sollten jetzt die Werkzeuge und das Know-how haben, um Ihr gesamtes Haus ständig in Sprachnachrichten über alles, was Sie sich vorstellen können, zu baden. Wer braucht Musik? Deine einzige Begrenzung sind 350 tägliche Anfragen von VoiceRSS.org - aber das ist ungefähr eins alle 4 Minuten, also solltest du in Ordnung sein.
Was wirst du damit machen? Teilen Sie Ihre Ideen oder IFTTT Rezept in den Kommentaren!
Bildnachweis: Kaffee und Frau von S_Photo über Shutterstock