Jak wysyłać powiadomienia głosowe do głośników Sonos

  • Harry James
  • 0
  • 4587
  • 297
Reklama

Marzeniem każdego entuzjasty inteligentnego domu jest dom, z którym można rozmawiać, ale rzeczywistość jest daleka od tego.

Na przykład Amazon Echo umożliwia korzystanie z dowolnej liczby funkcji sterowanych głosem, ale okno dialogowe musi zostać zainicjowane przez użytkownika pytaniem - nie można po prostu ogłosić ważnej wiadomości.

ty mogą zrób to jednak za pomocą systemu Sonos i odrobiny magii DIY Raspberry Pi. Dzisiaj pokażę Ci, jak skonfigurować powiadomienia głosowe w systemie Sonos, wprowadzając kilka przydatnych przepisów IFTTT, integracje OpenHAB i wiele innych, aby korzystać z funkcji powiadomień.

Zauważ, że dostępne jest natywne wiązanie Sonos dla OpenHAB, ale wiadomo, że powoduje problemy z pamięcią z powodu wadliwej biblioteki uPnP. Sugeruję na razie pominięcie tego i użycie metody z tego samouczka.

Raspberry Pi z systemem Linux Raspian jest idealny do tego samouczka, ale powinien również działać na każdym serwerze domowym z systemem Linux, na którym pracujesz. W tym przypadku używam tego samego Raspberry Pi, który obsługuje OpenHAB, system automatyki domowej Open Source Pierwsze kroki z OpenHAB Home Automation na Raspberry Pi Pierwsze kroki z OpenHAB Home Automation na Raspberry Pi OpenHAB to dojrzała platforma automatyki domowej open source który działa na różnych urządzeniach i jest niezależny od protokołu, co oznacza, że ​​można go podłączyć do prawie każdego sprzętu automatyki domowej na rynku. . Pozostała część tego samouczka zakłada, że ​​korzystasz z tego również na Raspberry Pi i albo masz otwarte okno terminala lokalnego na pulpicie, albo jesteś zalogowany zdalnie za pomocą SSH Konfigurowanie Raspberry Pi do bezgłowego używania z SSH Konfigurowanie Twojego Raspberry Pi do bezgłowego korzystania z SSH Raspberry Pi może akceptować polecenia SSH po podłączeniu do sieci lokalnej (przez Ethernet lub Wi-Fi), umożliwiając łatwą konfigurację. Korzyści płynące z SSH wykraczają poza zakłócanie codziennych badań… .

Będziesz potrzebował

  • Raspberry Pi 2 (starsze modele powinny działać, ale sprawdź konkretne zmiany w instrukcjach)
  • Co najmniej jeden głośnik Sonos (inne systemy audio nie są obsługiwane, jest to samouczek tylko dla Sonos)
  • Darmowe konto na VoiceRSS.org [No Longer Available]. Zarejestruj się, a następnie znajdź swój klucz API, który będzie nam potrzebny później do wygenerowania wiadomości głosowych.

Zainstaluj węzeł Najnowsze

Sprawdź, którą wersję węzła posiadasz, wpisując:

węzeł -v 

Pamiętaj, że wersja 6 nie jest obsługiwana. Jeśli masz Węzeł 6, najpierw go usuniesz, a następnie postępuj zgodnie z instrukcjami poniżej, aby zainstalować wersję 5.5.

Jeśli nie masz wersji 5 lub pojawi się błąd, który nie został znaleziony, postępuj zgodnie z tymi instrukcjami, aby zainstalować Węzeł. Następujące polecenie zakłada Raspberry Pi 2; w przypadku starszych modeli użyj armv6l zamiast 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 węzeł cd -v5.12.0-linux-armv7l sudo cp -R * / usr / local 

Potwierdź ponownie, wpisując:

węzeł -v

I powinieneś zobaczyć v5.12 (lub cokolwiek najnowszego był pobrany).

Następnie mamy kilka modułów Node do zainstalowania. Chcemy również menedżera pakietów węzłów.

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

To są wymagania wstępne, teraz na zabawne rzeczy.

Sonos HTTP API

Sonos HTTP API tworzy serwer sieciowy w sieci lokalnej, który pozwala nam pingować adres URL z komunikatem do ogłoszenia na Sonos (i kontrolować go zdalnie, jeśli chcesz, chociaż ten samouczek koncentruje się tylko na aspekcie powiadomień głosowych).

git clone https://github.com/jishi/node-sonos-http-api.git sonos cd sonos npm instalacja - rozpoczęcie produkcji npm 

Jeśli zobaczysz komunikat o braku takiego modułu, po prostu zrób inny instalacja npm i nazwę modułu, a następnie spróbuj npm start jeszcze raz. Jeśli wystąpią błędy związane z “wymaga kompilatora C ++ 11”, napraw za pomocą następujących poleceń:

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 

W końcu powinieneś zobaczyć coś takiego:

Serwer jest teraz uruchomiony i współpracuje z Sonosem. Format tego interfejsu API jest łatwy:

http: // [SERWER IP]: 5005 / [NAZWA POKOJU] / [DZIAŁANIE]

Lub jako konkretny przykład:

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

Interesująca nas akcja to “mówić” polecenie, używane w następujący sposób:

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

Usłyszysz komunikat o błędzie dotyczący konieczności rejestracji na klucz API na VoiceRSS.org. Powinieneś już to zrobić, więc wpisz następujące polecenie i wklej jako klucz API jako odpowiedni:

nano settings.json
 „voicerss”: „YOURAPIKEY”

(Naciśnij CTRL-X, Y, aby zapisać plik)

Uruchom ponownie serwer i ponownie pinguj adres URL. Po kilku sekundach powinieneś usłyszeć wspaniały angielski głos (choć zmienisz koniec adresu URL na en-us jeśli wolisz). Aby ponownie uruchomić serwer Sonos HTTP API po ponownym uruchomieniu Pi:

sudo nano /etc/rc.local

Dodaj linię przed wyjście 0:

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

Teraz możesz utworzyć wiadomość głosową z dowolnego miejsca w sieci lokalnej, po prostu pingując adres URL, więc w tym momencie możliwości są szeroko otwarte. Jeśli walczysz o pomysły, przeczytaj kilka przydatnych powiadomień, które przygotowałem.

Powiadomienia OpenHAB o zdarzeniach

Weźmy najpierw prosty przykład: wykrywanie ruchu. Jest to częsty przypadek użycia do włączania świateł, ale możesz również chcieć powiadomienia głosowego, jeśli jest to czujnik ruchu w obszarze o małym natężeniu ruchu, lub może jako ostrzeżenie przed siebie, że ktoś idzie ścieżką ogrodową.

reguła „Wykryto ruch w ogrodzie” po zmianie pozycji Garden_Motion, a następnie var Ciąg wiadomość = „Masz gościa” sendHttpGetRequest („http: // localhost: 5005 / kitchen / say /” + message.encode („UTF-8”) + ” / en-gb ") end 

Powinieneś zobaczyć, jak zintegrować te proste powiadomienia głosowe z dowolnymi regułami, ale spróbujmy czegoś nieco bardziej złożonego.

Codzienny raport pogodowy od IFTTT do OpenHAB do Sonos

W tym przepisie Sonos ogłosi codzienny raport pogodowy w wybranym przez Ciebie czasie.

Konieczne będzie włączenie powiązania My.OpenHAB, ponieważ tworzy to bezpieczne połączenie między wewnętrznym serwerem OpenHAB a zewnętrzną usługą IFTTT. Skonfiguruj, jeśli jeszcze tego nie zrobiłeś - możesz zapoznać się z częścią 1 naszego przewodnika OpenHAB Rozpoczęcie pracy z OpenHAB Home Automation na Raspberry Pi Rozpoczęcie pracy z OpenHAB Home Automation na Raspberry Pi OpenHAB to dojrzała platforma automatyki domowej z otwartym oprogramowaniem na różnych urządzeniach i jest niezależny od protokołu, co oznacza, że ​​można go podłączyć do prawie każdego sprzętu automatyki domowej na rynku. aby uzyskać pełne instrukcje, w przeciwnym razie założę, że masz już skonfigurowany z włączoną trwałością dla wszystkich elementów.

Następnie utwórz nowy element String w instalacji OpenHAB, który będzie przechowywać codzienny raport pogodowy. Zanim będzie to widoczne w kanale My.OpenHAB, będziemy musieli zainicjować go za pomocą domyślnej zmiennej. Pinguj następujący adres URL (zmień raspberrypi.local do serwera OpenHAB lub użyj jego adresu IP i Dzisiejsza pogoda na cokolwiek nazwałeś String):

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

Zaloguj się do My.OpenHAB i sprawdź Przedmiotów listę, aby upewnić się, że zmienna została teraz wyeksportowana.

Wróć do IFTTT, utwórz nowy przepis i użyj kanału pogodowego jako wyzwalacza o wybranej porze dnia. Musisz najpierw ustawić swoją lokalizację, jeśli nigdy wcześniej jej nie używałeś.

Wybierz My.OpenHAB jako akcję i wybierz Todays_Weather jako zmienną do aktualizacji.

Na razie wybierz kolejny półgodzinny automat do testowania - możesz zaktualizować przepis później, gdy będziesz wiedział, że działa.

Rzeczywiście, w czasie testu (a właściwie trochę wcześniej) udało mi się pomyślnie zaktualizować dzisiejszą prognozę.

2016-02-27 10: 28: 01.689 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - Otrzymano dzisiaj polecenie głównie pochmurno! Z wysoką 7C i niską 1C. Powtarzać. Warunki będą dzisiaj pochmurno, z wysokimi 7 ° C i niskimi 1 ° C. dla przedmiotu Todays_Weather 27.02.2016 10: 28: 01.697 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - sklep (Todays_Weather), stan = dziś głównie pochmurno! Z wysoką 7C i niską 1C. Powtarzać. Warunki będą dzisiaj pochmurno, z wysokimi 7 ° C i niskimi 1 ° C. 

Następnie potrzebujemy reguły OpenHAB, aby wysłać tę zmienną do Sonos “mówić” URL. Powinny to zrobić:

reguła „Ogłaszaj dzienny raport pogodowy”, gdy pozycja Todays_Weather otrzymała aktualizację, a następnie wyślij HttpGetRequest („http: // localhost: 5005 / kitchen / say /” + Todays_Weather.state.toString.encode („UTF-8”) + „/ en-gb ") koniec 

Jest to dość proste: za każdym razem, gdy zmienna Todays_Weather jest aktualizowana (która będzie automatycznie o 8 rano każdego dnia), pinguj adres URL. Używamy kodować(“UTF-8”) Funkcja ciągu znaków, dzięki której zdanie z IFTTT nadaje się do użycia w adresie URL. Aby ręcznie przetestować tę część systemu, wystarczy ponownie użyć interfejsu API OpenHAB HTTP:

http: //raspberrypi.local: 8080 / CMD? Todays_Weather = Pochmurno, z szansą na klopsiki. 

Połącz się z IFTTT bez OpenHAB, używając If-This-Then-Node

Na koniec przyjrzyjmy się, jak połączyć się z dowolnym przepisem IFTTT bez pośrednika OpenHAB. Zamiast tego zainstalujemy inny serwer WWW i udostępnimy go w otwartym Internecie. Nie jest to pozbawione ryzyka: każdy rodzaj otwartego serwera stanowi zagrożenie bezpieczeństwa, ale łagodzimy to, nie uruchamiając pełnego stosu serwerów, tylko niewielką określoną usługę, która akceptuje tylko niektóre polecenia w bezpiecznym formacie pakietu danych JSON (więc nie Możliwe będą iniekcje SQL lub ataki uwierzytelniające). Po zakończeniu otrzymasz publiczny adres URL, na który możesz wysyłać wiadomości z kanału Maker IFTTT.

Zacznij od skonfigurowania jednej z wielu bezpłatnych usług dynamicznego DNS 5 najlepszych dostawców dynamicznego DNS, których możesz użyć za darmo dzisiaj 5 najlepszych dostawców dynamicznego DNS, których możesz użyć za darmo już dziś Po odejściu DynDNS, oto najlepsi dostawcy, usługi i usługi dynamicznego DNS za darmo Alternatywy DDNS, aby go zastąpić. tam - polecam DuckDNS, szczególnie dlatego, że daje prosty zestaw instrukcji dla Raspberry Pi, umożliwiając mu automatyczną aktualizację adresu IP. Postępuj zgodnie z nimi i zapamiętaj swój adres URL do kolejnych kroków. Router może mieć także wbudowaną funkcję dynamicznego DNS, więc sprawdź najpierw. W moim przypadku mogę dostać * .mynetgear.com URL za darmo, więc go użyłem.

Następnie znajdź przekierowanie portów routera Co to jest przekierowanie portów i jak może mi pomóc? [MakeUseOf wyjaśnia] Co to jest przekierowanie portów i jak może mi pomóc? [MakeUseOf wyjaśnia] Czy płaczesz trochę w środku, gdy ktoś mówi ci, że jest problem z przekierowaniem portów i dlatego Twoja nowa, błyszcząca aplikacja nie działa? Twoja Xbox nie pozwala ci grać w gry, twoje pobieranie torrentów odmawia… strony konfiguracji; w tym miejscu powiemy, co zrobić z przychodzącymi żądaniami. Przekaż wszystkie żądania HTTP (port 80) do portu 1337 na serwerze Raspberry Pi. Zakładam, że masz już zarezerwowany adres IP dla swojego Raspberry Pi - jeśli nie, sprawdź stronę konfiguracji routera pod kątem zarezerwowanych adresów IP, gdy tam jesteś, ponieważ nie zmienisz go w przyszłym tygodniu i aby serwer nagle przestał działać.

Teraz, aby zainstalować ostatni bit oprogramowania serwera.

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

Powinieneś zobaczyć następujące.

W porządku, to tylko oznacza, że ​​musimy zaktualizować nasze dane. Otworzyć config.js w Nano i edytuj te szczegóły na czymkolwiek innym niż domyślny, a następnie zapisz. Po ponownym uruchomieniu serwera powinieneś zobaczyć:

Świetny. Sprawdź, czy Twój komputer jest dostępny ze świata zewnętrznego, wpisując dynamiczną nazwę hosta DNS i dołączając /ifttn / na końcu adresu URL. Jeśli wszystko działa, komunikat “IFTTN - jeśli-to-to-to-węzeł Wersja 2.0.1 jest już uruchomiona!” zostanie wyświetlony w przeglądarce. Ponownie, aby skrypt działał przy uruchamianiu, edytuj /etc/rc.local zarchiwizuj i dodaj:

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

If-This-Then-Node działa poprzez wtyczki - dostarczonych jest kilka domyślnych, ale nas nie interesują. Zamiast tego pobierz tę niestandardową wtyczkę, którą dla Ciebie napisałem, za pomocą następujących poleceń.

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

Będziesz także musiał zainstalować żądanie moduł.

żądanie instalacji npm 

Następnie uruchom ponownie serwer. Wtyczka jest dość prosta, ale nieco inna niż dotychczas używany adres URL. W tym przypadku skorzystałem ze specjalnego “sayall” akcja, która wysyła wiadomość do każdego urządzenia Sonos.

żądanie ('http: // localhost: 5005 / sayall /' + params.message + '/ en-gb', funkcja (błąd, odpowiedź, treść) 

Jeśli wolisz kierować reklamy na określone urządzenia, zamień ten wiersz na:

żądanie ('http: // localhost: 5005 /' + params.device + '/ say /' + params.message + '/ en-gb', funkcja (błąd, odpowiedź, treść) 

Dodaj kolejny parametr linii o nazwie urządzenie na poniższe żądanie JSON, w którym należy podać nazwę urządzenia Sonos.

Aby to sprawdzić, używam IFTTT “Zrobić” aplikacja przycisku. Utwórz nowy przepis, przejdź do kanałów i wybierz Producent kanał.

Utwórz nowy przepis. Wprowadź adres URL skonfigurowany wcześniej od bezpłatnego dostawcy dynamicznego DNS (w tym / ifttn / na końcu adresu URL. Nie zapomnij o tych ukośnikach). Wybierz SŁUPEK żądanie, application / json treść i treść wiadomości w następujący sposób, zastępując w razie potrzeby wszystkie zmienne tymi, które wcześniej skonfigurowałeś:

„action”: „sonos”, „user”: „YOURUSER”, „pw”: „YOURPASSWORD”, „message”: „Wiadomość przychodząca dla wszystkich: Kolacja jest gotowa! Powtórz. Kolacja jest gotowa. Zabierz swoje osły na górę teraz . ”  

Teraz mam łatwo dostępny przycisk, który ogłosi komunikat na każdym urządzeniu Sonos w domu. Możesz oczywiście sparować to z dowolnym kanałem IFTTT, w którym chcesz utworzyć niestandardową wiadomość, używając zmiennych z tego kanału. Powinieneś być nawet w stanie zreplikować raport pogodowy z góry bez korzystania z OpenHAB teraz, choć wymagało to dodatkowego wysiłku, aby zainstalować inny serwer.

Uwaga: hakerzy automatycznie cię skanują. Dzieje się tak przez cały czas, ale jeśli przeglądasz logi, może to wydawać się niepokojące. Poniżej widać, jak ktoś systematycznie próbował ustalić, czy którykolwiek ze standardowych interfejsów PHPMyAdmin jest dostępny. Które nie były. Nie przejmuj się, jeśli zobaczysz coś podobnego. To internetowy odpowiednik losowych numerów na zimno, aby sprawdzić, czy ktoś tam jest.

Co ogłosisz?

Powinieneś teraz mieć narzędzia i wiedzę, aby stale kąpać cały dom w powiadomieniach głosowych o wszystkim, co możesz wymyślić. Kto potrzebuje muzyki? Twój jedyny limit to 350 codziennych próśb z VoiceRSS.org - ale to około 1 na 4 minuty, więc powinieneś być w porządku.

Co więc z tym zrobisz? Podziel się swoimi pomysłami lub przepisem IFTTT w komentarzach!

Kredyty graficzne: kawa i kobieta autorstwa S_Photo za pośrednictwem Shutterstock




Jeszcze bez komentarzy

O nowoczesnej technologii, prostej i niedrogiej.
Twój przewodnik w świecie nowoczesnych technologii. Dowiedz się, jak korzystać z technologii i gadżetów, które nas otaczają każdego dnia i dowiedz się, jak odkrywać ciekawe rzeczy w Internecie.