Werbung

Der Traum eines jeden Smart-Home-Enthusiasten ist ein Zuhause, mit dem man sprechen kann, aber die Realität ist 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 eingeleitet werden. Sie können nicht einfach eine wichtige Nachricht von ihr ankündigen lassen.

Du kann 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 und einige nützliche IFTTT-Rezepte, OpenHAB-Integrationen und mehr vorstellen, 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 Speicherprobleme verursacht. Ich würde vorschlagen, dies vorerst zu überspringen und stattdessen die Methode in diesem Tutorial zu verwenden.

Ein Raspberry Pi mit Raspian Linux ist ideal für dieses Tutorial, sollte aber auch auf jedem Linux-basierten Heimserver funktionieren, den Sie ausführen. In diesem Fall verwende ich denselben Raspberry Pi, der ausgeführt wird

instagram viewer
OpenHAB, das Open Source Hausautomationssystem Erste Schritte mit OpenHAB Home Automation auf Raspberry PiOpenHAB ist eine ausgereifte Open-Source-Plattform für die Hausautomation, die auf einer Vielzahl von Hardware ausgeführt wird Protokollunabhängig, dh es kann eine Verbindung zu nahezu jeder Hausautomationshardware auf dem Markt hergestellt werden heute. Weiterlesen . Im Rest dieses Tutorials wird davon ausgegangen, dass Sie dies auch auf einem Raspberry Pi ausführen und entweder ein lokales Terminalfenster auf dem Desktop geöffnet haben oder es sind Remote-Login mit SSH Einrichten Ihres Raspberry Pi für die kopflose Verwendung mit SSHDer Raspberry Pi kann SSH-Befehle akzeptieren, wenn er mit einem lokalen Netzwerk verbunden ist (entweder über Ethernet oder Wi-Fi), sodass Sie es einfach einrichten können. Die Vorteile von SSH gehen über das tägliche Screening hinaus ... Weiterlesen .

Du brauchst

  • Himbeer Pi 2 (Ältere Modelle sollten funktionieren, aber überprüfen Sie die Anweisungen auf bestimmte Änderungen.)
  • Mindestens ein Sonos Lautsprecher (Andere Audiosysteme werden nicht unterstützt. Dies ist ein Tutorial nur für Sonos.)
  • Kostenloses Konto bei VoiceRSS.org [Nicht mehr verfügbar]. Dann registrieren Finden Sie Ihren API-Schlüssel, die wir später benötigen, um die Sprachnachrichten zu generieren.

Installieren Sie den neuesten Knoten

Überprü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 und anschließend die folgenden Anweisungen befolgen, um Version 5.5 zu installieren.

Wenn Sie v5 nicht haben oder wenn ein nicht gefundener Fehler angezeigt wird, befolgen Sie diese Anweisungen, um Node zu installieren. Der folgende Befehl setzt einen Raspberry 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 node-v5.12.0-linux-armv7l. sudo cp -R * / usr / local. 

Bestätigen Sie erneut, indem Sie Folgendes eingeben:

Knoten -v

Und Sie sollten v5.12 sehen (oder was auch immer das neueste war, das Sie heruntergeladen haben).

Als nächstes müssen einige Knotenmodule installiert werden. Wir wollen auch den Node Package Manager.

sudo apt-get install npm. sudo npm install -g npm. sudo npm install -g node-gyp. 

Das sind die Voraussetzungen, um aus dem Weg zu gehen, jetzt zu den lustigen Sachen.

Sonos HTTP API

Das Sonos HTTP API Erstellt einen Webserver im lokalen Netzwerk, über den wir eine URL mit einer Nachricht anpingen können, die auf einem angekündigt werden soll Sonos (und zur Fernsteuerung, wenn Sie möchten, obwohl sich dieses Tutorial nur auf die Sprachbenachrichtigung konzentriert Aspekt).

Git-Klon https://github.com/jishi/node-sonos-http-api.git Sonos. cd sonos. npm install --production. npm starten. 

Wenn Sie eine Meldung sehen, dass das eine oder andere Modul nicht gefunden wurde, führen Sie einfach ein anderes aus npm installieren und den Modulnamen, dann versuchen Sie es npm starten nochmal. Wenn Sie Fehler im Zusammenhang mit feststellen "Benötigt einen C ++ 11 Compiler", 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. 

Schließlich sollten Sie so etwas sehen:

sonos-http-api arbeiten

Der Server läuft jetzt und ist mit Sonos verbunden. Das Format dieser API ist einfach:

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

Oder als konkretes Beispiel:

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

Die Aktion, die uns interessiert, ist der Befehl "Sagen", 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 bei einem API-Schlüssel registrieren müssen. Sie sollten dies bereits getan haben. Geben Sie daher 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. Nach einigen Sekunden sollten Sie eine entzückende englische Stimme hören (obwohl Sie das Ende der URL in ändern en-us 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 eine Zeile vor dem Ausfahrt 0:

sudo node /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. Die Möglichkeiten sind an dieser Stelle also weit offen. Wenn Sie jedoch nach Ideen suchen, lesen Sie weiter, um einige 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 die Aktivierung von Lichtern. Möglicherweise möchten Sie jedoch auch eine Sprachbenachrichtigung, wenn dies der Fall ist Bewegungssensor in einem verkehrsarmen Bereich oder vielleicht als Vorwarnung, dass jemand den Garten heraufkommt Pfad.

Regel "Gartenbewegung erkannt" Wenn sich Item Garden_Motion geändert hat, 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 eine Ihrer Regeln integrieren können. Versuchen wir jedoch etwas Komplexeres.

Täglicher Wetterbericht von IFTTT zu OpenHAB zu Sonos

In diesem Rezept wird Sonos einen täglichen Wetterbericht zu Ihrer bevorzugten Zeit veröffentlichen.

Du brauchst das Meine. OpenHAB-Bindung aktiviert, da dadurch eine sichere Verbindung zwischen Ihrem internen OpenHAB-Server und dem externen IFTTT-Dienst hergestellt wird. Richten Sie dies ein, wenn Sie es noch nicht getan haben - Sie können sich darauf beziehen Teil 1 unseres OpenHAB-Leitfadens Erste Schritte mit OpenHAB Home Automation auf Raspberry PiOpenHAB ist eine ausgereifte Open-Source-Plattform für die Hausautomation, die auf einer Vielzahl von Hardware ausgeführt wird Protokollunabhängig, dh es kann eine Verbindung zu nahezu jeder Hausautomationshardware auf dem Markt hergestellt werden heute. Weiterlesen Für eine vollständige Anleitung gehe ich davon aus, dass Sie das Setup bereits mit aktivierter Persistenz für alle Elemente eingerichtet haben.

Erstellen Sie als Nächstes ein neues String-Element in Ihrer OpenHAB-Installation, in dem der tägliche Wetterbericht gespeichert wird. Vorher ist dies im My sichtbar. OpenHAB-Kanal, wir müssen ihn mit einer Standardvariablen initialisieren. Pingen Sie die folgende URL an (ändern raspberrypi.local auf Ihren OpenHAB-Server oder verwenden Sie einfach dessen IP-Adresse und Heutiges_Wetter zu was auch immer Sie den String genannt haben):

http://raspberrypi.local: 8080 / CMD? Heutiges_Wetter = Sonnig 

Melden Sie sich bei Mein an. OpenHAB [Broken URL Removed] und überprüfen Sie die Artikel Liste, um sicherzustellen, dass die Variable jetzt exportiert wurde.

Mein Openhab Item Export Check

Zurück auf IFTTT, erstellen Sie ein neues Rezept und verwenden Sie das Wetter Kanal als Auslöser zu Ihrer bevorzugten Tageszeit. Sie müssen zuerst Ihren Standort festlegen, wenn Sie ihn noch nie zuvor verwendet haben.

Wählen Sie Meine. Öffnen Sie HAB als Aktion und wählen Sie Todays_Weather als zu aktualisierende Variable.

ifttt Wetterbericht

Wählen Sie zunächst einfach den nächsten halbstündigen Slot zum Testen aus. Sie können das Rezept später aktualisieren, sobald Sie wissen, dass es funktioniert.

Sicher genug, zum Testzeitpunkt (tatsächlich kurz zuvor) wurde die heutige Prognose erfolgreich aktualisiert.

2016-02-27 10: 28: 01.689 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - Befehl erhalten Heute meist bewölkt! Mit einem Hoch von 7C und einem Tief von 1C. Wiederholen. Die Bedingungen sind heute meist bewölkt mit einem Höchstwert von 7 ° C und einem Tiefstwert 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), state = Heute meist bewölkt! Mit einem Hoch von 7C und einem Tief von 1C. Wiederholen. Die Bedingungen sind heute meist bewölkt mit einem Höchstwert von 7 ° C und einem Tiefstwert von 1 ° C. 

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

Regel "Täglichen Wetterbericht ankündigen" wenn Item Todays_Weather aktualisiert wurde. dann sendHttpGetRequest (" http://localhost: 5005 / kitchen / say / "+ Todays_Weather.state.toString.encode (" UTF-8 ") +" / en-gb ") Ende.

Dies ist einfach genug: Immer wenn die Variable Todays_Weather aktualisiert wird (automatisch jeden Tag um 8 Uhr morgens), pingen Sie die URL an. Wir gebrauchen codieren ("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 die OpenHAB-HTTP-API erneut:

http://raspberrypi.local: 8080 / CMD? Heutiges_Wetter = Bewölkt, mit einer Chance auf Fleischbällchen. 

Stellen Sie mit IfT-This-Then-Node eine Verbindung zu IFTTT ohne OpenHAB her

Schauen wir uns abschließend an, wie Sie eine Verbindung von einem beliebigen IFTTT-Rezept ohne den OpenHAB-Vermittler herstellen können. Stattdessen installieren wir einen anderen Webserver und setzen diesen dem offenen Internet aus. Dies ist nicht ohne Risiko: Jede Art von offenem Server stellt ein Sicherheitsrisiko dar. Wir verringern dies jedoch, indem wir keinen vollständigen Serverstapel ausführen, sondern nur einen kleinen Spezifischer Dienst, der nur bestimmte Befehle in einem sicheren JSON-Datenpaketformat akzeptiert (daher werden keine SQL-Injection- oder Authentifizierungsangriffe ausgeführt 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 einer der vielen kostenlose dynamische DNS-Dienste Die 5 besten kostenlosen dynamischen DNS-AnbieterEin DDNS-Dienst kann Ihnen helfen, unterwegs eine Verbindung zu Ihrem Heim-PC herzustellen. Hier sind die besten kostenlosen dynamischen DNS-Anbieter. Weiterlesen da draußen - ich empfehle DuckDNS, speziell weil es einen einfachen Satz von gibt Anleitung für Raspberry PiDadurch wird es möglich, Ihre IP-Adresse automatisch zu aktualisieren. Befolgen Sie diese Anweisungen und merken Sie sich Ihre URL für die nächsten Schritte. In Ihrem Router ist möglicherweise auch eine dynamische DNS-Funktion integriert. Überprüfen Sie dies zuerst. In meinem Fall kann ich eine bekommen * .mynetgear.com URL kostenlos, also habe ich sie verwendet.

Suchen Sie als Nächstes Ihren Router Port-Weiterleitung Was ist Port Forwarding und wie kann es mir helfen? [MakeUseOf erklärt]Weinen Sie innerlich ein wenig, wenn Ihnen jemand sagt, dass ein Problem mit der Portweiterleitung vorliegt und Ihre glänzende neue App deshalb nicht funktioniert? Auf deiner Xbox kannst du keine Spiele spielen, deine Torrent-Downloads lehnen ab ... Weiterlesen 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 Sie dies nicht tun, überprüfen Sie die Konfiguration Ihres Routers Seite für reservierte IPs, während Sie dort sind, da Sie diese nächste Woche nicht ändern müssen und der Server plötzlich stoppt Arbeiten.

Weiterleitung des Router-Konfigurationsports

Installieren Sie nun das letzte Bit der Serversoftware.

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

Sie sollten Folgendes sehen.

Wenn dies der Fall ist, werden die Standardwerte des Knotens angezeigt

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 etwas anderes als die Standardeinstellung, und speichern Sie sie dann. Wenn Sie den Server erneut ausführen, sollte Folgendes angezeigt werden:

Wenn dies der Fall ist, wird der Knotenserver ausgeführt

Groß. Testen Sie, ob Ihr Computer von außen zugänglich ist, indem Sie Ihren dynamischen DNS-Hostnamen eingeben und / anhängenifttn / bis zum Ende der URL. Wenn alles funktioniert, die Nachricht "IFTTN - if-this-then-node Version 2.0.1 ist betriebsbereit!" wird in Ihrem Browser angezeigt. Bearbeiten Sie das Skript erneut, damit dieses Skript beim Start ausgeführt wird /etc/rc.local Datei und hinzufügen:

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

If-This-Then-Node funktioniert über Plugins - es werden einige Standard-Plugins bereitgestellt, die uns jedoch nicht interessieren. Laden Sie stattdessen dieses benutzerdefinierte Plugin herunter, das ich mit den folgenden Befehlen für Sie geschrieben habe.

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

Sie müssen auch das installieren Anfrage Modul.

npm Installationsanforderung. 

Starten Sie dann den Server neu. Das Plugin ist recht einfach, unterscheidet sich jedoch geringfügig von der bisher verwendeten URL. In diesem Fall habe ich die spezielle Aktion "sayall" verwendet, mit der die Nachricht an jedes Sonos-Gerät gesendet wird.

Anfrage(' http://localhost: 5005 / sayall / '+ params.message +' / de-gb ', Funktion (Fehler, Antwort, Text)

Wenn Sie lieber auf bestimmte Geräte abzielen möchten, ersetzen Sie diese Zeile durch:

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

Fügen Sie einen weiteren Zeilenparameter mit dem Namen hinzu Gerät auf die unten stehende JSON-Anforderung, in der der Sonos-Gerätename angegeben werden soll.

Um dies zu testen, verwende ich die IFTTT-App "Do". Erstellen Sie ein neues Rezept, navigieren Sie zu den Kanälen und wählen Sie die aus Hersteller Kanal.

Do-Taste

Erstellen Sie ein neues Rezept. Geben Sie die zuvor von einem kostenlosen dynamischen DNS-Anbieter konfigurierte URL ein (einschließlich /ifttn/ am Ende der URL. Vergessen Sie diese Schrägstriche nicht. Wählen POST Anfrage, Anwendung / json Inhalt und der Nachrichtentext wie folgt: Ersetzen Sie alle Variablen nach Bedarf durch die zuvor konfigurierten:

{"action": "sonos", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Eingehende Nachricht für alle: Das Abendessen ist fertig! Wiederholen. Essen ist fertig. Bring deine Ärsche jetzt nach oben. "}

Jetzt habe ich eine leicht zugängliche Schaltfläche, die die Nachricht auf jedem Sonos-Gerät im Haus ankündigt. Sie können dies natürlich mit jedem IFTTT-Kanal koppeln, für den Sie eine benutzerdefinierte Nachricht erstellen möchten, indem Sie Variablen aus diesem Kanal verwenden. Sie sollten sogar in der Lage sein, den Wetterbericht von oben zu replizieren, ohne jetzt OpenHAB zu verwenden, obwohl die Installation eines anderen Servers zusätzliche Anstrengungen erfordert hat.

Hinweis: Hacker scannen Sie automatisch. Dies passiert ständig, aber wenn Sie Protokolle anzeigen, kann dies alarmierend wirken. Unten sehen Sie jemanden, der systematisch versucht hat, festzustellen, ob auf eine der Standard-PHPMyAdmin-Schnittstellen zugegriffen werden konnte. Was sie nicht waren. Seien Sie nicht beunruhigt, wenn Sie etwas Ähnliches sehen. Es ist das Internet-Äquivalent zum Kaltanruf von zufälligen Telefonnummern, um festzustellen, ob jemand da ist.

Webserver-Hack-Versuche

Was wirst du ankündigen?

Sie sollten jetzt über die Werkzeuge und das Wissen verfügen, um Ihr gesamtes Haus ständig in Sprachbenachrichtigungen über alles zu baden, was Sie sich vorstellen können. Wer braucht Musik? Ihr einziges Limit sind 350 tägliche Anfragen von VoiceRSS.org - aber das ist ungefähr alle 4 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!

Bildnachweis:Kaffee und Frau von S_Photo über Shutterstock

James hat einen BSc in künstlicher Intelligenz und ist CompTIA A + und Network + zertifiziert. Er ist der Hauptentwickler von MakeUseOf und verbringt seine Freizeit mit VR-Paintball und Brettspielen. Er baut seit seiner Kindheit PCs.