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żę, 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ń.

Pamiętaj, że natywne wiązanie Sonos dla OpenHAB jest dostępne, 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 opartym na systemie Linux. W tym przypadku używam tego samego Raspberry Pi, który działa

OpenHAB, system automatyki domowej typu open source Rozpoczęcie pracy z OpenHAB Home Automation na Raspberry PiOpenHAB to dojrzała platforma automatyki domowej o otwartym kodzie źródłowym, która 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 dzisiaj. Czytaj więcej . Reszta tego samouczka zakłada, że ​​uruchamiasz to również na Raspberry Pi i albo masz okno lokalnego terminalu otwarte na pulpicie, albo zalogowany zdalnie przy użyciu SSH Konfigurowanie Raspberry Pi do bezgłowego korzystania z SSHRaspberry 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ń ... Czytaj więcej .

Będziesz potrzebował

  • Raspberry Pi 2 (starsze modele powinny działać, ale sprawdź określone zmiany w instrukcjach)
  • Przynajmniej 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ę wtedy znajdź swój klucz API, które będą nam potrzebne 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 jeśli nie znaleziono błędu, 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. cd node-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 zabawę.

Sonos HTTP API

The Sonos HTTP API tworzy serwer sieciowy w sieci lokalnej, co pozwala nam pingować adres URL z komunikatem do ogłoszenia w Sonos (i sterowanie nim zdalnie, jeśli chcesz), chociaż ten samouczek koncentruje się tylko na powiadomieniach głosowych aspekt).

klon gita https://github.com/jishi/node-sonos-http-api.git sonos. sonos cd. instalacja npm --produkcja. npm start. 

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:

sonos-http-api działa

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

http://[SERVER IP]: 5005 / [ROOM NAME] / [ACTION]

Lub jako konkretny przykład:

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

Interesujące nas działanie to polecenie „powiedz”, użyte 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 (chociaż 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 aktywacji świateł, ale możesz też chcieć powiadomienia głosowego, jeśli jest to czujnik ruchu w strefie o małym natężeniu ruchu, a może jako ostrzeżenie do przodu, że ktoś idzie do ogrodu ścieżka.

reguła „Wykryto ruch w ogrodzie” gdy pozycja Garden_Motion uległa zmianie, wówczas var String message = "Masz gościa" sendHttpGetRequest (" http://localhost: 5005 / kitchen / say / "+ message.encode („ UTF-8 ”) +„ / en-gb ”) koniec.

Powinieneś zobaczyć, jak zintegrować te proste powiadomienia głosowe z dowolnymi regułami, ale wypróbujmy coś 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.

Będziesz potrzebował My. Włączono wiązanie 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 się do nich odwołać część 1 naszego przewodnika OpenHAB Rozpoczęcie pracy z OpenHAB Home Automation na Raspberry PiOpenHAB to dojrzała platforma automatyki domowej o otwartym kodzie źródłowym, która 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 dzisiaj. Czytaj więcej aby uzyskać pełne instrukcje, w przeciwnym razie założę, że masz już skonfigurowaną funkcję 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. Wcześniej jest to widoczne w My. Kanał OpenHAB, musimy go zainicjować 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 [Usunięto uszkodzony adres URL] i sprawdź Przedmiotów listę, aby upewnić się, że zmienna została teraz wyeksportowana.

kontrola eksportu mojego elementu openhab

Wróć do IFTTT, utwórz nowy przepis i użyj Kanał pogodowy jako wyzwalacz w preferowanej porze dnia. Musisz najpierw ustawić swoją lokalizację, jeśli nigdy wcześniej jej nie używałeś.

Wybierz My. OpenHAB jako działanie i wybierz Todays_Weather jako zmienną do aktualizacji.

raport pogodowy ifttt

Na razie wybierz kolejny półgodzinny przedział czasowy 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) zaktualizowałem dzisiejszą prognozę.

27.02.2016, 10: 28: 01.689 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - Otrzymano dzisiaj polecenie 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 adresu URL „powiedz” Sonos. Powinny to zrobić:

reguła „Ogłaszaj codzienną prognozę pogody” kiedy pozycja Todays_Weather otrzymała aktualizację. następnie sendHttpGetRequest („ 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 internetowy i udostępnimy go w otwartym Internecie. Nie jest to pozbawione ryzyka: każdy rodzaj otwartego serwera stanowi zagrożenie bezpieczeństwa, ale ograniczamy to, nie uruchamiając pełnego stosu serwerów, tylko niewielki konkretna usługa, która akceptuje tylko niektóre polecenia w bezpiecznym formacie pakietu danych JSON (więc nie będzie żadnych iniekcji SQL ani ataków uwierzytelniających możliwy). Po zakończeniu otrzymasz publiczny adres URL, na który możesz wysyłać wiadomości z kanału Maker IFTTT.

Zacznij od skonfigurowania jednego z wielu bezpłatne dynamiczne usługi DNS 5 najlepszych darmowych dostawców dynamicznego DNSUsługa DDNS może pomóc Ci połączyć się z domowym komputerem podczas podróży. Oto najlepsi dostawcy bezpłatnych dynamicznych DNS do rozważenia. Czytaj więcej tam - polecam DuckDNS, szczególnie dlatego, że daje prosty zestaw instrukcje 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ć również 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ź router przekierowanie portów 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 masz 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 ... Czytaj więcej strona 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ż adres IP zarezerwowany dla Raspberry Pi - jeśli nie, sprawdź konfigurację routera strona dla zarezerwowanych adresów IP, gdy tam jesteś, ponieważ nie możesz tego zmienić w przyszłym tygodniu, a serwer nagle się zatrzyma pracujący.

przekierowanie portu konfiguracji routera

Teraz, aby zainstalować ostatni bit oprogramowania serwera.

https://github.com/sebauer/if-this-then-node.git. cd if-this-then-node / instalacja npm. węzeł server.js.

Powinieneś zobaczyć następujące.

jeśli to oznacza błąd wartości domyślnych węzła

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

jeśli to, to serwer węzła działa

Wspaniały. 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-węzeł Wersja 2.0.1 już działa!” 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 &

Jeśli-to-wtedy-węzeł działa poprzez wtyczki - dostarczono kilka domyślnych, ale nas to nie interesuje. 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 

Musisz także zainstalować żądanie moduł.

żądanie instalacji npm. 

Następnie uruchom ponownie serwer. Wtyczka jest dość prosta, ale różni się nieco od używanego do tej pory adresu URL. W tym przypadku użyłem specjalnej akcji „sayall”, 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 aplikacji przycisku „Zrób” IFTTT. Utwórz nowy przepis, przejdź do kanałów i wybierz Producent kanał.

przycisk zrób

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 POCZTA żą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! Powtarzać. Obiad jest gotowy. Zabieraj teraz swoje osły na górę. "}

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, chociaż to wymagało dodatkowego wysiłku, aby zainstalować inny serwer.

Uwaga: hakerzy automatycznie cię skanują. Dzieje się tak przez cały czas, ale jeśli przeglądasz dzienniki, 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. Jest to internetowy odpowiednik losowych numerów telefonicznych na zimno, aby sprawdzić, czy ktoś tam jest.

próby włamania na serwer WWW

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 jeden raz 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 obrazkowe:kawa i kobieta autor: S_Photo przez Shutterstock

James ma licencjat z zakresu sztucznej inteligencji i jest certyfikowany przez CompTIA A + i Network +. Jest głównym programistą MakeUseOf i spędza wolny czas grając w paintball VR i gry planszowe. Buduje komputery od dziecka.