wtorek, 26 czerwca 2018

Google Home Mini i sterowanie urządzeniami w Domoticz

Ostatnim moim zakupem był zakup asystenta głosowego Google Home Mini.

Koszt zakupu obecnie nie jest zbyt wielki, za Google Home Mini zapłaciłem razem z przesyłką 190 zł.

Jest cena porównywalna, do tego gdybyśmy mieli sami budować Google Assitant na Raspberry Pi 3, trochę taniej wyszłaby cena na Pi Zero.

Urządzenie jest dosyć małych rozmiarów i dosyć porządnie wykonane.



Instalacja jest dosyć prosta, po zainstalowaniu aplikacji Google Home na telefonie lub tablecie, prowadzi nas krok po kroku po polsku.

Ciekawostką jest, to że po instalacji w urządzeniach widnieje mój wcześniej wykonany Google Assistant na Raspberry Pi 3.



Wykrywany jest jako Voice Kit i to co dodamy na Google Home jest tak samo dodawane na Voice Kit i obsługuje urządzenia dodane w Google Home.

Aby dodawać urządzenia z Domoticz do sterowania komendami z asystenta głosowego musimy posiadać stałe IP lub skonfigurować i dodać serwer DDNS.

Jednym z najpopularniejszych i darmowych serwerów DDNS jest no-ip.org -> Link

Zakładamy tam konto i logujemy się, w zakładce Dynamic DNS klikamy Create Host Name, wpisujemy nazwę i wybieramy Create Host Name.


Teraz instalujemy NOIP na Raspberry Pi, w terminalu wpisujemy:

wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz

Rozpakowujemy pakiet poleceniem:

tar vzxf noip-duc-linux.tar.gz && rm noip-duc-linux.tar.gz



Jak widać pliki wypakowało do folderu: noip-2.1.9-1

Folder ten może różnić zależnie od wersji programu.

Wchodzimy do folderu noip-2.1.9-1

cd noip-2.1.9-1

Teraz wpisujemy:

sudo make

następnie:

sudo make install

Wpisujemy login i hasło do serwisu NOIP , wpisujemy czas w sekundach, co ile ma się aktualizować adres ip, ja wpisałem 300 czyli 5 minut.

Uruchamiamy noip

sudo /usr/local/bin/noip2

Tworzymy plik konfiguracyjny noip:

sudo nano /etc/init.d/noip

Wklejamy tam zawartość:

#! /bin/sh
# /etc/init.d/noip

### BEGIN INIT INFO
# Provides: noip
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Simple script to start a program at boot
### END INIT INFO

# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting noip"
# run application you want to start
/usr/local/bin/noip2
;;
stop)
echo "Stopping noip"
# kill application you want to stop
killall noip2
;;
*)
echo "Usage: /etc/init.d/noip {start|stop}"
exit 1
;;
esac

exit 0

Wciskamy Ctrl+x i T aby zapisać plik.

Nadajemy uprawnienia:

sudo chmod 755 /etc/init.d/noip

i na końcu:

sudo update-rc.d noip defaults

Teraz Raspberry Pi będzie aktualizować nasz adres i będzie on dostępny pod adresem jaki założyliśmy w serwisie noip.

Teraz w routerze otwieramy porty 443 i 80, jest zależne od rodzaju routera.

W Domoticz musimy odczytać numer idx urządzenia które chcemy włączać i wyłączać komenda głosową.

Mój numer idx to 225 i jest to gniazdko sterowane poprzez RFLink.

Gniazdkami będziemy sterować komendami json np.:

włączenie:

https://Login:hasło@adresnoip:443/json.htm?type=command¶m=switchlight&idx=idx&switchcmd=On

wyłączenie:

https://Login:hasło@adresnoip:443/json.htm?type=command¶m=switchlight&idx=idx&switchcmd=Off

W adresie tym w miejsce Login - wpisujemy nasz login do Domoticz, hasło - hasło do Domoticz, a w miejsce idx wpisujemy numer idx urządzenia.

Czyli np.:

https://Edek:edkahaslo12@adresnoip:443/json.htm?type=command¶m=switchlight&idx=225&switchcmd=On

Po wpisaniu tych komend w przeglądarkę internetową urządzenie powinno się włączać i wyłączać.

Ważne, aby w domowym routerze był otwarty i przekierowany port 443 na lokalny adres Raspberry Pi.

Teraz zakładamy konto na IFTTT -> Link

Wchodzimy w My Applets i klikamy New Applet

Klikamy w +this



Wpisujemy google i wybieramy Google Assistant



Teraz klikamy


Teraz w pierwszym i przedostatnim okienku wpisujemy po angielsku, co będziemy mówić, a co odpowie asystent Google.



Klikamy Create Trigger.

Teraz klikamy +that.



Wpisujemy web i wybieramy Webhooks


Teraz


Teraz wpisujemy w URL naszą komendę json, w Conetent Type wybieramy text/plain i klikamy Create action.



Na końcu klikamy Finish.

Ja mam podłączone gniazdko do przelewowego expresu z kawą i po nalaniu wody i wsypaniu kawy włączam expres.

Zdefiniowałem sobie komendę "Make me coffee" o wtedy gniazdko się włącza.

Po wypowiedzeniu komendy "Stop make coffee", gniazdko się wyłącza

Tak możemy dodawać włączanie i wyłączanie dowolnych urządzeń w Domoticz.

Działanie widać na poniższym filmie.







poniedziałek, 18 czerwca 2018

Instalacja Google Assistant na Rasberry Pi 3 i Zero

Od moich ostatnich wpisów o Google Assistant na Rasberry Pi upłynęło już trochę czasu.

Dzisiaj opiszę jak zainstalować Google Assistant na Rasberry Pi Zero i Pi 3 na Raspbianie Stretch z dnia 18 kwietnia 2018.

Do budowy będą potrzebne:

1. Rasberry Pi Zero W lub Pi 3 z kartą micro SD
2. Karta dźwiękowa USB
3. Mikrofon z wtykiem mały jack
4. Układ wzmacniacza PAM8403 z małym głośnikiem
5. Wtyk mały jack stereo z przewodem
6. Zasilacz do Rasberry Pi
7. Przejściówka wtyk micro USB - gniazdo USB



Schemat podłączenia.


Wyjścia Rasberry Pi Zero.


Na czas konfiguracji będą jeszcze potrzebne klawiatura, myszka USB, przewód HDMI.

Obraz systemu pobieramy z tej strony -> Link

Po pobraniu rozpakowujemy go i będziemy mieć obraz systemu: 2018-04-18-raspbian-stretch.img

Wgrywamy go na kartę programem Win32 Disk Imager, który jest dostępny pod tym linkiem -> Link

Po uruchomieniu Win32 Disk Imager w Plik obrazu wybieramy pobrany obraz 2018-04-18-raspbian-stretch.img


Klikamy Zapisz.


Wybieramy Yes i rozpocznie się zapis obrazu na kartę SD.


Po zakończeniu zapisu powinien wyświetlić się Zapis pomyślny, klikamy OK i wkładamy kartę SD do Raspberry Pi.

Podłączamy Raspberry Pi do telewizora lub monitora przewodem HDMI, podłączamy myszkę i klawiaturę na USB, kartę dźwiękową USB i na końcu zasilanie.

Uruchomi się Raspbian Stretch.

Pierwszą rzeczą jaką zrobimy, to połączmy się po Wifi z domową siecią.

U góry po prawej stronie znajduje się ikonka połączeń sieciowych, klikamy Turn On Wi-Fi, aby włączyć Wifi w Raspberry Pi.

Powinno wykryć naszą domową sieć Wifi, wpisujemy hasło i powinniśmy mieć połączenie z Wifi.


Możemy ustawić ustawienia regionalne jak język, klawiatura itd... w Raspberry Pi Configuration


Dokonujemy aktualizację systemu, otwieramy terminal.


Wpisujemy:

sudo apt-get update

oraz

sudo apt-get upgrade

restartujemy Raspberry Pi poleceniem:

sudo reboot

Gdy mamy już zaktualizowany system, możemy przystąpić do instalacji Google Assistant.

Jest to opisane po angielsku na stronie -> Link

Najpierw kopiujemy pliki ze strony, która podałem wcześniej, w terminalu wpisujemy:

sudo apt-get install git
git clone https://github.com/shivasiddharth/GassistPi

Ustawiamy odpowiednia kartę dźwiękową, klikamy w ikonkę głośnika u góry po prawej prawym klawiszem myszy i zaznaczamy elementy sterujące dla odtwarzania i nagrywania.


Instalujemy obsługę karty dźwiękowej USB i robimy test:

sudo chmod +x /home/pi/GassistPi/audio-drivers/USB-DAC/scripts/install-usb-dac.sh
sudo /home/pi/GassistPi/audio-drivers/USB-DAC/scripts/install-usb-dac.sh
speaker-test

Jeżeli wszystko przebiegnie dobrze to będziemy słyszeć szum z głośnika.

Teraz otwieramy przeglądarkę internetową, wpisujemy adres www.google.pl i logujemy się do naszego konta google


Następnie wpisujemy adres w przeglądarce:

https://console.actions.google.com/?pli=1



Klikamy Add/import project

Zmieniamy kraj na Polskę, wpisujemy nazwę i klikamy Create project


Wybieramy Device registration


Teraz otwieramy stronę:

https://console.developers.google.com/apis/api/embeddedassistant.googleapis.com/overview

Klikamy Włącz


Teraz otwieramy stronę:

https://myaccount.google.com/activitycontrols

Włączamy wszystkie opcje


Teraz otwieramy:

https://console.actions.google.com/

Wybieramy nasz projekt, przechodzimy do Advanced Options i klikamy Device registration


Klikamy Register Model


Wpisujemy nazwę dowolną i wybieramy rodzaj dowolny.


Teraz klikamy Download.


Klikamy Next i dalej Skip.

Teraz otwieramy terminal i wpisujemy:

scp ~/Downloads/credentials.json pi@raspberry-pi-ip-address:/home/pi/

gdzie: raspberry-pi-ip-address jest adres ip raspberry pi

U mnie będzie to:

scp ~/Downloads/credentials.json pi@192.168.3.14:/home/pi/



Wpisujemy: yes


Następnie wpisujemy hasło do Raspberry Pi


Teraz w terminalu wpisujemy:

Dla Raspberry Pi 3:
sudo chmod +x /home/pi/GassistPi/scripts/gassist-installer-pi3.sh
sudo /home/pi/GassistPi/scripts/gassist-installer-pi3.sh

Dla Raspberry Pi Zero:
sudo chmod +x /home/pi/GassistPi/scripts/gassist-installer-pi-zero.sh
sudo /home/pi/GassistPi/scripts/gassist-installer-pi-zero.sh

Wpisujemy pełną nazwę pliku json i ścieżkę: /home/pi/credentials.json

Dalej nazwę naszego projektu i Id model, jest to widoczne po wybraniu naszego wcześniej utworzonego projektu na stronie:

https://console.actions.google.com/

Klikamy w nasz projekt i w menu po lewej Device registration


Po wybraniu projektu mamy nazwę i Id model


Jak widać u mnie nazwa to Voice i model id: voice-166811-voice-pws8rb


Instalacja trochę potrwa i na końcu instalacji wyświetli się adres strony internetowej https:// , kopiujemy do przegladarki

Wybieramy nasze konto Google i klikamy Zezwól, wyświetli się kod, kopiujemy go do terminala i wciskamy Enter.

Na końcu powinien uruchomić się asystent

U mnie pojawił się błąd i było wymagane skopiowanie danych z Spotify.

Możemy przeprowadzić test działania wpisując w terminalu:

/home/pi/env/bin/python -u /home/pi/GassistPi/src/main.py --device_model_id 'model id"

gdzie w miejsce 'model id' wpisujemy Id model

czyli u mnie to będzie:

/home/pi/env/bin/python -u /home/pi/GassistPi/src/main.py --device_model_id voice-166811-voice-pws8rb

Po pojawieniu się błędu logujemy się na stronie Spotify -> Link

Jeżeli nie mamy konta na Spotify, to zakładamy go.

Po zalogowaniu klikamy CREATE A CLIENT ID , wpisujemy nazwę i wybieramy np. Voice, wybieramy NO, zaznaczamy wszystkie ptaszki i klikamy SUBMIT.

Na stronie będą: Client ID i Client Secret, dane te oraz login kopiujemy do pliku config.yaml w katalogu /home/pi/GassistPi/src

Wpisujemy je w miejsce:

#Spotify credentials. Register for a spotify developer and get the credentials.
Spotify:
client_id: 'ENTER YOUR SPOTIFY CLIENT ID HERE'
client_secret: 'ENTER YOUR SPOTIFY CLIENT SECRET HERE'
username: 'ENTER YOUR SPOTIFY USERNAME HERE'

Po zapisaniu pliku test przebiegł pomyślnie.

Teraz konfigurujemy, aby Assistant uruchamiał się przy starcie.

W terminalu wpisujemy kolejno:

sudo chmod +x /home/pi/GassistPi/scripts/service-installer.sh
sudo /home/pi/GassistPi/scripts/service-installer.sh
sudo systemctl enable gassistpi-ok-google.service
sudo systemctl start gassistpi-ok-google.service

Po restarcie Google Assistant powinien uruchomić się automatycznie.

Działanie pokazano na filmie.



Można jeszcze dodać diody led na piny GPIO 5 i 6, informują one kiedy możemy mówić, a kiedy mówi Google Assistant, widać to na poniższym filmie.