Raspberry Pi ile Evinizi Sesli Yönetin


Henüz bir milyoner değilseniz ve cebinizde fazla para yoksa ses ile yönetilen bir eve sahip olamayabilirsiniz.  Çekmecenizde Raspberry Pi veya Banana Pi gibi bir ürün duruyorsa birazda el beceriniz var ise milyoner olmadan ses ile yönetilen bir eve sahip olabilirsiniz.
Daha önceden Amazon firmasının Alexa asistanı ile kurulan sistemler görmüşsünüzdür. Google da yerinde kalır mı tabi ki kalmaz. Geliştirici kitlesini kaçırmamak için Python Pip üzerinden Google Asistanın nasıl kurulabileceği hakkında bir rehber yayımladı.
Sistemin çalışması için Google üzerinden Google Asistan için bir api anahtarı oluşturmamız gerekiyor. Bu anahtar sayesinde geliştirici cihazımız Google hesabımız ile bağlanmış olacak.

Google Api Anahtarı Alma

  • İndirdiğiniz dosyanın ismini client.json olarak değiştirin ve geliştirici cihazınızın içine atın.

Google Asistan kurulumu

Raspberry pi yada geliştirici kitiniz de debian tabanlı bir dağıtım kullanıyorsanız ( Örnek Raspian ) aşağıdaki adımları takip ederek kurulumu yapabilirsiniz.
İlk olarak Google Asistan için gerekli olan Python kütüphanelerini kuruyoruz.

sudo apt-get update
sudo apt-get install python3-dev python3-venv
python3 -m venv env
env/bin/python -m pip install --upgrade pip setuptools

Ptyhon kütüphanemiz kurulduktan sonra Google Asistanı cihazımıza kurmaya başlıyoruz.

cd
source env/bin/activate
#Google Asistan
python -m pip install --upgrade google-assistant-library
#Google doğrulama aracı
python -m pip install --upgrade google-auth-oauthlib[tool]

Şuanda Google asistan sistemimiz de yüklü fakat hesabımıza bağlı durumda değil. Cihazı Google hesabımıza bağlamak için Google Auth kullanıyoruz.

google-oauthlib-tool --client-secrets $PWD/client.json --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless

Şuanda artık Google Asistan sistemimizde yüklü ve hazır durumda. google-assistant-demo kodunu girerek Google Asistanın çalışmasını sağlayabiliriz.

Kontrol yazılımı

Google asistanı çalıştırdığımızda OK Google dediğimizde bize cevap verdiğini göreceksiniz. Şimdi bu sonuçlar ile google kütüphanesinde bulunan araçlar ile bir sistem yazılabilir fakat ülkemizde verinin yurt dışına gitmesi gelmesi ve sistemde aktif olması biraz gecikmeye sebep oluyor. Gördüğümüz üzere Google bizim dediğimiz kelimeleri terminale çıktı olarak verebiliyor. Bizde bu çıktıdan yararlanarak bash tabanlı ufak bir if else yazılımı ile sistemde bulunan gpio pinlerini kontrol edebiliriz. Benim sistemimde 2 adet banana pi bulunuyor. Bunlardan 1. si yani ilk aldığım banana pi evdeki interneti kontrol ediyor ve gpio pinlerine röle bağlı durumda . Bu sistem kabloların rahat toplanabileceği bir yerde fakat sesimi algılayamayacak bir konumda.
Google asistanı 2. Bananapi üzerinde kurdum ve oda UTP kablosu ile yerel ağa bağlı durumda . Siz isterseniz kablosuz bir adaptör alarak sistemi sadece güç kaynağı kablosu ile çalışabilecek duruma getirebilirsiniz.
Banana piler arasında iletişim kurmak için netcat kullandım. Siz illa birden fazla geliştirici kiti kullanmak zorunda değilsiniz. Ben sistemin düzenli olması ve stabilite açısından böyle bir sistem kurdum.
Birden fazla banana pi var ise apt-get install netcat expect -y  komutu ile iki cihaza da netcat yazılımını ve buffer kapatmak amacıyla unbuffer sistemimize kuruyoruz.
2 Geliştirici kitli sistemde 1. cihaz üzerinde googlestart adlı bash sistemini oluşturalım.

# nano googlestart komutu ile googlestart dosyamızı düzenleyelim ve daha sonra aşağıdaki kodları sisteme ekleyeyim
nano googlestart
#!/bin/bash
cd
source env/bin/activate
google-assistant-demo | stdbuf -o0 grep text | stdbuf -o0 cut -d"'" -f4 | nc -l 2266 -k

googlestart komutunu çalıştırabilmek için chmod 755 googlestart ile gerekli izinleri ayarlayalım.
Şuanda 1. Geliştirici cihazımız yani GoogleAsistanın çalışacağı sistem hazır.  1. Sistemden oluşan çıktıları alacak olan ve bunları uygulamaya geçirecek olan sistemi hazırlamada.
İlk cihazdan gelen verileri alan ve bunu gpio kontrol yazılımımıza iletecek olan dinleme sistemi de yine oldukça basit. nano /usr/bin/googleiotstart komutu ile dosyamızın içine girelim ve aşağıdaki komutları yazalım.

#!/bin/bash
#NOT : burada ip adresi Google Asistanın çalıştığı cihazın ip adresini yazın.
ipadresi="10.0.0.149"
while :; do unbuffer nc $ipadresi 2266 | while read iot; do   googleiot $iot; done;  done

Programın çalışması için chmod 755 /usr/bin/googleiotstart komutu ile gerekli dosya iznini sağlayalım.
Şuanda 1. cihazdan Google Asistan çıktıları geliyor ve bunu 2. cihaza aktarıyoruz fakat 2. cihazımız hala bir tepki vericek durumda değil. Bunun sebebi gelen çıktıları yorumlayacak bir sistemin olmaması. Yine bash üzerinde if else ile kendimize göre bir sistem kuruyoruz.

GPİO Kontrol Yazılımı

Gpio yazılmını sisteme yazmak için nano /usr/bin/googleiot komutu ile yeni bir dosya oluşturuyoruz.  Daha sonrasında GPIO pinlerini açma kapa komutlarını ve google dan gelen cevaplara göre yapılacak tepkileri if else ile yazıyoruz. Aşağıdaki kendi kullandığım sisteme sizde birkaç düzenleme ile kendiniz yeni kontrol ekleyebilirsiniz.

#!/bin/bash
echo "Google aşağıdaki şekilde anladı"
echo "$1 $2 $3 $4"
########## Lamba Kontrolü
if [ $2 = light ] || [ $2 = lamp ] || [ $2 = Lamp ];
then
#### lamba seçimi Yatak
if [ $1 =  bed ] || [ $1 = one ] || [ $1 = beds ]; # lamba seçimi Yatak
then
if [ -z $3 ];
then
lamba-kontrol 0
fi
if [ $3 = on ];
then
gpio write 0 0
fi
if [ $3 = off ] || [ $3 = of ];
then
gpio write 0 1
fi
fi
#### lamba seçimi Yatak
#### lamba seçimi Masa
if [ $1 =  desk ] || [ $1 = best ] || [ $1 = test ]; # ışık masa fi2
then
if [ -z $3 ];
then
lamba-kontrol 2
fi
if [ $3 = on ];
then
gpio write 2 1
fi
if [ $3 = off ] || [ $3 = of ];
then
gpio write 2 0
fi
fi
#### lamba seçimi Masa
fi
########## Lamba Kontrolü
################## Tüm labaları kontrol et
if [ $1 = Light ] || [ $1 = light ] || [ $1 = Lights ] || [ $1 = lights ] ;
then
if [ $2 = on ] ;
then
gpio write 2 1  #lamba 2
gpio write 0 0  #lamba 1
fi
if [ $2 = off ] ;
then
gpio write 2 0  #lamba 2
gpio write 0 1  #lamba 1
fi
fi
##########################################
#monitor kontrolü
if [ $1 = Screen ] || [ $1 = screen ];
then
if [ $2 = on ] ;
then
gpio write 1 1  #Monitor 1
fi
if [ $2 = off ] ;
then
gpio write 1 0  #Monitor 1
fi
fi
##########################################
###### Çıkış
exit
######

Yine dosyaların çalışması için chmod 755 /usr/bin/googleiot komutunu kullanıyoruz.
Şuanda sistem çalışır durumda fakat iki farklı cihaz kullanmak istemeyebilirsiniz.  Bu durumda ikinci cihazda yazmış olduğumuz GPİO Kontrol Yazılmını birinci cihaz üzerinde yazıyoruz ve google asistanı başlatan uygulamada ufak bir değişiklik yapıyoruz.

#!/bin/bash
cd
source env/bin/activate
google-assistant-demo | stdbuf -o0 grep text | stdbuf -o0 cut -d"'" -f4 | while read iot; do   googleiot $iot; done;

Sistem şuanda çalışmaya hazır.
Sistemi çalıştırmadan önce mikrofon ses seviyesini en yükseğe çektiğinize emin olun.

Sistemin denemesi


Dijitaller'in Sunucu ve Ağ altyapısını kuran, düzenleyen. Genel olarak teknoloji ve bilim ile uğraşmayı severim . Detaylı bilgi için https://ahmetozer.org. Lütfen sorularınızı Dijitaller.com Yorumlar veya Twitter üzerinden iletin.

6 Yorum

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

  1. Bu komutlar ile kendi sesimizi kayıt edip farklı şeyler yapmasını sağlayabilir miyiz ? Bir robotun bizim komutlarımız ile karşılık vermesini yani robotla konuşmamızı sağlayabilir miyiz ?

  2. Merhaba, adımların hepsini gerçekleştirdim ve tek raspberry üzerinde işlemlerimi gerçekleştiriyorum fakat en sonda yazdığınız kodu girince syntax error veriyor bunun çözümü nedir yardımcı olur musunuz? Kod:

    google-assistant-demo | stdbuf -o0 grep text | stdbuf -o0 cut -d”‘” -f4 | while read iot; do googleiot $iot; done; done

    1. Sonda bir tane done fazla. silince sorun düzelmesi lazım. Birde google asistanın son versiyonunu test etmedim. Son versiyonu ile alakalı bir problem varsa deneyip düzeltmem lazım (2 temmuz dan sonra deneyebilirim)

    2. Cevabınız için çok teşekkür ederim. Sondaki “done” ifadesini silince “google şu şekilde anladı” şeklinde bir yazı gelmiyor ve gpio pinlerinin durumunu değiştirmiyor. Bu konuda ne önerirsiniz ?

    3. Merhaba.
      Google asistana güncelleme gelmiş olabilir. Çıkan veride bir değişiklik varsa sistem yorumlamada sıkıntı yaşıyor olabilir.
      Şuanda sınavlar ile uğraştığımdan maalesef bu konuda deneme şuan için yapamayacağım. Temmuzdan sonra denemelere başlayabilirim. Hem o zamana kadar Türkçe desteği (Google I/O 2018 de onaylandı diye biliyorum.) de gelirse onu da test etmiş olacağım.