Otwieranie bramy przez Android Auto i dużo więcej

Nie jest tajemnicą, że otwieranie bramy pilotem jest bardzo wygodne. Są natomiast sytuacje, kiedy możliwość sterowania z poziomu Android Auto lub Asystenta Google jest bardzo pomocna. A skoro jest taka możliwość, to może warto o niej napisać. Tym bardziej, że po drodze można się trochę nauczyć o MQTT, Node Red czy innych technologiach.

Otwieranie bramy przez Android Auto

Ekosystem Google

Od pewnego czasu używam głośników i ekranu z ekosystemu Google Home. Mimo, że uważam Asystenta Google za produkt dalece niedoskonały, to urządzenia świetnie sprawdzają się jako tanie odbiorniki radia internetowego z wieloma dodatkowymi możliwościami. Można powiedzieć, że stosunek ceny do jakości jest rewelacyjny. Oczywiście nie mówimy tu o audiofilskiej jakości dźwięku, raczej o radiu grającym w kuchni. Ekran Google Hub sprawdza się z kolei świetnie jako ramka do cyfrowych zdjęć. Możliwość dodawania zdjęć bezpośrednio z Google Photos, pokazania podglądu z kamery gdy ktoś dzwoni do domofonu czy choćby odtworzenia jakiegoś filmu z YouTube to naprawdę świetne opcje za nieco ponad 200 zł (w promocji). W samochodzie używam natomiast Android Auto, które doskonale uzupełnia funkcje radia samochodowego i nawigacji.

Ponieważ jednak w automatyce domowej unikam rozwiązań bazujących na różnych rozwiązaniach chmurowych, a nawet popularnego Home Assistanta, zawsze brakowało mi punktu integracji z Android Auto czy Asystentem Google. No dobrze, nie zawsze, bo wcześniej nawet nieźle sprawdzał się serwis IFTTT, który traktowałem jako bramę z chmury do mojego wewnętrznego systemu. Ponieważ jednak serwis postanowił zarabiać na modelu subskrypcyjnym – zrezygnowałem z niego. Po prostu nie podoba mi się świat, w którym płacimy za każdą najdrobniejszą usługę, często niewspółmiernie dużo do oferowanej wartości. Staram się więc ograniczać abonamenty, przy usługach, które nie są mi bardzo potrzebne. Tym bardziej, że wiele rzeczy jestem w stanie zrobić równie dobrze bez kosztów.

Na wstępie chciałbym także uprzedzić, że nie będzie to poradnik „krok po kroku”, a raczej opis konkretnego przypadku. Wpis ten może być traktowany jako wskazówka dla osób chcących się zagłębić w temacie i samodzielnie doczytać z innych źródeł, jak działają pewne mechanizmy. Warto jednak zaznaczyć, że zakres będzie dość szeroki, bo poza serwerem MQTT, nie miałem wcześniej przygotowanej integracji. Przygotowanie całości zajęło mi jedno popołudnie, więc nie jest to temat specjalnie skomplikowany.

Moja automatyka domowa

Stali czytelnicy bloga na pewno wiedzą, że do obsługi automatyki używam własnych skryptów, które dają mi największą elastyczność i przy okazji niezależność od zewnętrznych aktualizacji. Oczywiście, jest to podejście bardzo nietypowe, nie pozbawione wad, ale w moim przypadku bardzo dobrze się sprawdza.

Warto może powiedzieć także, że mój system umożliwia wymianę informacji przez protokół MQTT, który jest wygodnym standardem w automatyce domowej. Dlatego zwykle dążę, żeby integracje odbywały się z jego pomocą. I tak będzie także w tym wypadku, opis rozwiązania opiszę do poziomu, na którym odpowiedni komunikat pojawi się na lokalnym serwerze MQTT, zainstalowanym na Raspberry Pi.

Punkt startowy – integracja Node Red z Asystentem Google

Od razu muszę zaznaczyć, że nie jest to do końca punkt startowy, ponieważ ja do tej pory nigdy nie używałem Node Red, chociaż zawsze chciałem mu się przyjrzeć. Po prostu nie przepadam, za narzędziami wizualnymi, które dublują to co robię w skryptach. Jednak Node Red wydaje się być naprawdę ciekawym produktem i szeroko stosowanym. Ja użyję go wyłącznie do integracji z Google i na razie nie będę wychodził poza to zastosowanie.

Dlaczego piszę więc o tym jako o punkcie startowym? Od jakiegoś czasu zastanawiałem się, gdzie powinien być punkt styku mojej automatyki domowej z Google. Początkowo planowałem napisać wszystko od podstaw korzystając z Google Actions i własnych skryptów w Node.js lub php. To co mnie jednak najbardziej zniechęcało, to zmienność chmury Google. To co bardzo cenię w mojej automatyce to niezawodność i niezależność od przeróżnych zmian wersji API czy usług zewnętrznych. Obawiałem się, że będę musiał dość często dostosowywać skrypty do zmian w środowisku Google. Użycie gotowego produktu powinno przynajmniej częściowo zminimalizować ten problem.

Zacząłem więc czytać o usłudze Smart Nora, która wydawała się świetnie dostosowana do moich potrzeb. Zakładam konto, instaluję Node Red, które potem łączę ze Smart Norą, przygotowuję prostą konfigurację po stronie Google Actions i Node Red, a potem tylko dodaję integrację w aplikacji Google Home i już mam możliwość definiowania”wirtualnych urządzeń” w Node Red, które są widoczne dla mojego Asystenta Google. Dość proste i przejrzyste. Niestety, jak to bywa z zewnętrznymi usługami – po wejściu na stronę okazało się, że integracja przez Smart Norę kosztuje 2 Euro miesięcznie. Nie dla abonamentów, choć doceniam wkład autora.

Wtedy moją uwagę zwrócił dodatek to Node Red – node-red-contrib-google-smarthome. Tak, potrzeba przy tym nieco więcej pracy, ale właściwie jest w stanie mi zaoferować dokładnie to samo co Smart Nora. Więc tak, to był mój punkt startowy rozważań, nawet jak konfiguracja zaczęła się gdzie indziej.

Wymagania wstępne – dostęp przez SSL z Internetu

Chyba najważniejsze wymaganie, które musimy spełnić, przychodzi od Google – musimy dysponować punktem w Internecie, do którego Google Actions może się odwołać przez https, żeby przekazać o co poprosiliśmy głosowo (lub w inny sposób) asystenta. Co więcej nasz serwer musi posiadać ważny certyfikat, akceptowany powszechnie.

Jeżeli chodzi o certyfikat, to z pomocą przychodzi Let’s Encrypt, który oferuje bezpłatne certyfikaty dla stron www. Są one powszechnie uznawane, więc także Google je akceptuje. Co więcej, dzięki Certbotowi, można bardzo łatwo zautomatyzować proces ich odnawiania.

Certyfikat to jednak nie wszystko, ponieważ trzeba mieć jeszcze serwer, choćby na Raspberry Pi. Nie jestem zwolennikiem wystawiania żadnych usług z sieci domowej do Internetu. Używam natomiast serwera VPS od OVH, który ma stały adres IP i serwuje różne strony z użyciem serwera Nginx. Z serwera mogę się bezpiecznie dostać do sieci domowej, dzięki regułom firewalla na domowym routerze. W moim przypadku najwygodniej było więc włączyć rodzaj reverse proxy, na istniejącym już serwerze z zaufanym certyfikatem, przez dyrektywę konfiguracyjną:

location /google123/
{
  proxy_pass https://moja.domena.domowa.pl:3001/;
}

Dzięki temu zapytania przychodzące do mojego serwera, odwołujące się do URLi zaczynających się od /google123/ są przekierowywane do mojego serwera domowego, na port 3001, bo tam będzie nasłuchiwał dodatek do Node Red. Oczywiście port 3001 musi być otwarty na domowym firewallu i przekierowany przez dst-nat do Raspberry Pi.

Oczywiście nie jest to jedyna możliwość. Zamiast tego można albo wystawić usługę bezpośrednio na zewnątrz albo na przykład użyć bezpiecznego tunelu od CloudFlare. Jak jednak mówiłem, nie jest to poradnik krok po kroku, bo ciężko byłoby opisać wszystkie możliwości ze szczegółami w pojedynczym wpisie.

Instalacja Node Red

Instalacja Node Red na Raspberry Pi jest banalnie prosta:

sudo apt-get install nodered

Oczywiście ja mam już zainstalowane Node.js oraz serwer MQTT – Mosquitto, więc jest trochę prościej.

Aby włączyć usługę oraz aktywować jest start po każdym uruchomieniu Raspberry, wystarczą dwie dodatkowe komendy:

sudo systemctl enable nodered.service
sudo systemctl start nodered.service

Node Red powinno się od tej porty zgłaszać przez http na porcie 1880 (http://<adres_RPI>:1880):

Node Red

Trzeba przyznać, że interfejs jest bardzo przyjazny, przejrzysty i prosty w obsłudze. Kolejnym krokiem, który musimy zrobić, jest doinstalowanie naszego dodatku, umożliwiającego integrację z Google Home. W tym celu wybieramy z menu (hamburger menu) w prawym głównym rogu opcję „Manage palette”, a następnie zakładkę „Install”. Potem wystarczy wyszukać dodatek node-red-contrib-google-smarthome i zainstalować. Banalnie proste.

Połączenie z Google – konsola Actions i Home

Mamy już mniej więcej przygotowaną infrastrukturę po naszej stronie, pora poinformować Google o naszym projekcie. Proces wymaga przejścia kilku kroków, jednak jest świetnie opisany w dokumentacji dodatku do Node Red.

W skrócie całość sprowadza się do:

  1. Zdefiniowania nowego projektu typu „Smart Home” a konsoli Google Actions. Podajemy tam główny URL, pod którym dostępny jest nasz dodatek do Node Red oraz określamy dane do autoryzacji OAuth. Te same zostaną potem wpisane do konfiguracji komponentu node-red-contrib-google-smarthome.
  2. Włączenia Graph API, utworzenia konta serwisowego i wygenerowaniu do niego klucza w formacie JSON. Klucz ten trzeba zapisać na naszym Raspberry Pi, a ścieżkę do niego podać w konfiguracji dodatku do Node Red.
  3. Konfiguracji modułu node-red-contrib-google-smarthome, gdzie wykorzystamy dane wprowadzone do konsoli Actions. Ostatnim krokiem tego punktu jest test, czy połączenie pomiędzy Google a naszym serwisem działa.
  4. Połączenia projektu utworzonego w Google Actions z naszym domem stworzonym w aplikacji Google Home.

Po przejściu tych kroków powinniśmy mieć w Node Red jeden element typu „Management” wiążący naszą konfigurację z projektem w Google. Jeżeli wszystko działa poprawnie, to każde z urządzeń, które zdefiniujemy w Node Red powinno pojawiać się domownikom w ich aplikacjach Google Home.

Definiowanie urządzeń

Urządzenia Google w Node Red

Definiowanie urządzeń jest bardzo proste. Po przeciągnięciu ikony na główny ekran możemy zdefiniować podstawowe parametry, jak przynależność do właściwego domu, kanał MQTT, gdzie będą raportowane zmiany, pokój w którym znajduje się urządzenie, czy jego rodzaj.

Definiowanie bramy dla Asystenta Google

Pozostaje jeszcze połączyć nasze urządzenie z kafelkiem „mqtt out”, aby przepływ był kompletnie zdefiniowany, wpisać parametry połączenia z serwerem MQTT i to wszystko.

Łączenie urządzenia z mqtt

Teraz gdy powiemy asystentowi „Open Home Gate” albo „Otwórz bramę wjazdową” powinien odpowiedzieć „Opening home gate” i wysłać komunikat do zdefiniowanego kanału MQTT.

Aplikacja Google Home

Oczywiście, nasze urządzenia są także widoczne w aplikacji Google Home, skąd również możemy nimi sterować.

Urządzenia w Google Home

Android Auto

Tekst miał być jednak o sterowaniu bramą z samochodu. Tak, te wszystkie kroki doprowadziły nas do momentu, gdzie możemy sterować naszymi urządzeniami domowymi zarówno głosowo, jak i z aplikacji oraz używać ich w rutynach. Możemy więc po prostu nacisnąć przycisk na kierownicy i powiedzieć „otwórz bramę wjazdową”, jednak wiem, że wiele osób nadal preferuje używanie przycisków. W tym momencie możemy wykorzystać funkcję Android Auto pozwalającą przypisywać w menu polecenia wydawane asystentowi. Wyszukujemy więc w telefonie ustawienia Android Auto i wybieramy opcję „Dostosuj aplikacje w menu”.

Po jej wybraniu pojawią się ikony, które widzimy codziennie w naszym radiu samochodowym.

Wybierając „Dodaj skrót do programu uruchamiającego” a następnie „Działanie Asystenta”, przechodzimy do definiowania funkcji. Wpisujemy polecenie, które chcemy wywołać bez mówienia i nazwę dla nowej ikony.

I ostatecznie mamy przycisk do otwierania bramy w naszym Android Auto.

Podsumowanie

Przyznaję, że jest to dość karkołomny sposób na uzyskanie tak banalnej funkcjonalności, jak przycisk do otwierania bramy w samochodzie. Mi zdefiniowanie wszystkiego od podstaw zajęło całe popołudnie. Natomiast niejako przy okazji zyskałem integrację automatyki domowej z ekosystemem Google Home, co także jest nie bez znaczenia.

Jeszcze raz zaznaczę, że nie jest to poradnik krok po kroku, raczej opis tego co można zrobić i gdzie znaleźć punkty zaczepienia, bo zdaję sobie sprawę, że każdy przypadek może być nieco inny, a mój na pewno jest nietypowy. Mam jednak nadzieję, że komuś przyda się w części lub w całości. Mi na pewno, żeby przypomnieć sobie, jak to było skonfigurowane, gdy przyjdzie taka potrzeba.

Ten wpis został opublikowany w kategorii Android, Inteligentny Dom, Motoryzacja, Programowanie, Raspberry Pi i oznaczony tagami , , , , , , , , , . Dodaj zakładkę do bezpośredniego odnośnika.

2 odpowiedzi na Otwieranie bramy przez Android Auto i dużo więcej

  1. SpeX pisze:

    To już trzeba było iść na całość i zrobić skrypt automatyki, który sam będzie ci otwierał bramę jak wracasz z pracy.

    A z innej beczki, ile trwa ponowne połączenia radia z siecią MQTT? W sensie jak wracasz z miasta, to nie masz problemów z tym iż auto jeszcze nie jest w zasięgu lub jeszcze się nie połączyło?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *