Mündəricat:

Raspberry Pi Layihəsinə Xüsusi Alexa Nəzarəti əlavə edin: 5 addım
Raspberry Pi Layihəsinə Xüsusi Alexa Nəzarəti əlavə edin: 5 addım

Video: Raspberry Pi Layihəsinə Xüsusi Alexa Nəzarəti əlavə edin: 5 addım

Video: Raspberry Pi Layihəsinə Xüsusi Alexa Nəzarəti əlavə edin: 5 addım
Video: ESP32, WLED mikroproqramında ünvanlanan LED-lərə nəzarət edirik, Home Assistant-da istifadə edirik 2024, Iyul
Anonim
Xüsusi Alexa Nəzarətini Raspberry Pi Layihəsinə əlavə edin
Xüsusi Alexa Nəzarətini Raspberry Pi Layihəsinə əlavə edin

Bu layihə, mövcud Amazon Echo cihazları vasitəsilə səs nəzarəti əlavə etmək istəyən Python istifadə edən Raspberry Pi layihəsi olan hər kəs üçün nəzərdə tutulmuşdur. Təcrübəli bir proqramçı olmağınıza ehtiyac yoxdur, ancaq komanda xəttindən istifadə etmək və mövcud kodu ehtiyaclarınıza uyğunlaşdırmaq rahat olmalıdır.

Başlanğıcda Raspberry Pi-ni Alexa ilə səslə idarə etməyi təmin etmək üçün bir çayxanada suyu müəyyən bir temperatura qədər qızdırmaq üçün bir layihəyə başladım. İstədiyim qarşılıqlı əlaqə olduqca sadə olsa da (Alexa'dan Raspberry Pi -yə bir nömrə keçin), mövcud dərsliklərdən o vəziyyətə çatmaq üçün çox iş görüldü. Ümid edirəm ki, bu təlimat bu prosesi digərləri üçün mümkün qədər sürətli edəcək.

Nümunəmdə Raspbian ilə Raspberry Pi Zero W ilə başlayıram. Pi -də SPI ekranına mətn yaza bilən Python3 proqramı var və oxuya biləcəyim bir termometr zondum var. Sizin üçün bu proqram demək olar ki, hər şey ola bilər, amma fikir ondadır ki, Alexa vasitəsilə oxumaq istədiyiniz bəzi giriş cihazları və/və ya Alexa ilə idarə etmək istədiyiniz bəzi çıxış cihazları ola bilər.

Məqsəd, Echo ilə asanlıqla idarə edə biləcəyiniz bir cihaza keçməkdir. Artıq bu aparata sahib olduğunuzu düşünsək, bu layihə sizə heç bir pul xərcləməməlidir. Sonda, belə şeylər söyləyə biləcəyiniz yerə çatacaqsınız:

Mən: "Alexa, gadget'ımdan sensor 1 -də temperaturu yoxlamasını xahiş et."

Alexa cavabı: "Zond 72.31 dərəcədir."

və ya

Mən: "Alexa, gadgetma de George Washington yazmasını söylə"

Cavab: Raspberry Pi -yə qoşulan ekranda indi "George Washington" yazılır

Növbəti hissədə, bu işi yerinə yetirmək üçün pərdəarxasında nələrin baş verməsi lazım olduğunu təsvir edəcəyəm. Bunu yalnız layihəniz üzərində işlətmək istəyirsinizsə və bunun necə işlədiyini maraqlandırmırsınızsa, onu atlamaqdan çekinmeyin (bir şey səhv olarsa bu işi çətinləşdirə bilər).

Addım 1: Arxa plan

Fon
Fon

Bu görüntüdə (kredit: https://developer.amazon.com/en-US/docs/alexa/alex… Alexa Gadget'larının ümumi memarlığını görə bilərik.

Echo cihazınıza bir şey dediyiniz zaman, səsi işləndiyi və sizə cavab vermək üçün bir cavabın yaradıldığı Alexa Buluduna göndərir. Havanın nə olduğunu soruşduqda, bu ikisi ünsiyyətdədir. İndi Raspberry Pi üzərindəki kiçik layihələrinizdən birinə səs nəzarəti əlavə etmək istədiyinizi düşünün. Gəmidə olan hər şeyi emal etmək, işlərin davam etməsi üçün əhəmiyyətli bir aparat və çox inkişaf etmiş bir kod bazası tələb edir. Daha yaxşı bir həll, çox inkişaf etmiş və mürəkkəb nitq nümunələrini idarə etməkdə çox yaxşı olan Alexa Buludundan istifadə etmək olar. Alexa Gadgets bunu etmək üçün yaxşı bir yol təqdim edir.

Alexa Gadget bluetooth istifadə edərək Echo cihazı ilə əlaqə qurur. Bu əlaqə qurulduqdan sonra hər ikisi UTF-8 kodlaşdırmasını istifadə edərək bir-birlərinə mesaj ötürür. Echo gadgeta bir şey ötürdükdə buna direktiv deyilir. Digər istiqamət bir hadisə olaraq adlandırılır. Bütün bunların dəqiq axınına girməzdən əvvəl başqa bir əsas elementi təqdim etməliyik: xüsusi Alexa Bacarıqları.

Alexa, inkişaf etdiricilərə bütün Echo cihazlarında istifadə etmək üçün öz qarşılıqlı əlaqələrini və davranışlarını tərtib etməyə imkan verən öz xüsusi bacarıqlarını yaratmağa imkan verir. Məsələn, bir geliştirici, ABŞ -dakı iki hava limanı arasındakı məsafəni izah etmək üçün xüsusi bir bacarıq yarada bilər. Bir istifadəçi deyərdi: "Alexa, mənim xüsusi məsafə kalkulyatorumdan LAX və JFK arasındakı məsafənin nə olduğunu soruş" və "2475 mil" ilə cavab verə bilər. Bunu necə edir? Bir geliştirici xüsusi bir bacarıq hazırladıqda, "yuva" ehtiva edən "nümunə ifadələr" ilə "xüsusi məqsədlər" adlandırılanları təyin edirlər. Məsələn, bu bacarıqda iki nöqtə arasındakı məsafəni hesablamaq üçün "calc_dist" niyyətim ola bilər. "{Slot1} ilə {slot2} arasındakı məsafə nə qədərdir" və ya "{slot1} ilə {slot2} arasındakı məsafə") nümunə bir ifadə ola bilər. Mötərizədə göstərilən yuvalar müəyyən növlərə malikdir. Bu vəziyyətdə bu növlər LAX, JFK, BOS, ATL kimi hava limanı kodları olacaq. İstifadəçi xüsusi bacarıq istədikdə, Alexa Bulud istifadəçinin dediklərini xüsusi bir niyyətlə uyğunlaşdırmağa çalışır və verilən sorğu üçün etibarlı yuva dəyərləri tapmağa çalışır. Bu nümunədə, istifadəçinin "calc_dist" niyyətini istədiyini və slot1 -in LAX, slot2 -nin JFK olduğunu tapacaq. Bu nöqtədə, Alexa Bulud işi geliştiricinin öz koduna keçir. Əsasən, inkişaf etdiricilərə digər detallar arasında nə məqsədlə gəldiyini və bütün yuva dəyərlərinin nə olduğunu söyləyir.

Geliştirici kodlarının harada yaşadığına qərar verməlidir, lakin çox məşhur bir seçim AWS Lambda funksiyasından istifadə etməkdir. Bunun nə olduğunu bilmirsinizsə, mahiyyətcə istədiyiniz vaxt işləyə bilən kodu yükləməyinizə imkan verən və sonra yalnız kodunuzun işlədiyi müddətə görə ödəniş edən bir xidmətdir. Nümunəmizə davam etsək, geliştiricinin kodu iki hava limanı kodunu alan, yerlərini axtaran, məsafələri hesablayan və sonra istifadəçiyə nəsə danışmaq üçün Alexa Buluduna cavab göndərən bir Python funksiyası ola bilər. Alexa Cloud daha sonra həmin çıxış məlumatlarını istifadəçinin cihazına geri göndərəcək və cavabı alacaqlar.

İndi gadget -a qayıda bilərik. Xüsusilə gadget'larla işləmək üçün hazırlanmış xüsusi bacarıqlar yarada bilərik. Bir geliştirici, bağlı bir gadgeta direktiv göndərən bir bacarıq yaza bilər. Bu direktivin gadget üçün lazım olduğu halda istifadə edilə bilən bir yükü var. Bu bacarıq da bir direktiv göndərə bilər və sonra gadget'dan bir hadisəni dinləyə bilər ki, bacarıq kodu gadgetdan göndərilən məlumatlara daxil ola bilsin.

Bu axını qurmaq çox güclü bir vasitə yaratmağa imkan verir, çünki ucuz gadgetlar buluddakı kodla ünsiyyət qura bilər və ən yaxşı səs tanıma vasitələrindən istifadə edərək səs əmrlərinə cavab verə bilər.

Qeyd etmək lazımdır ki, əksər bacarıqlar onlarla qarşılıqlı əlaqədə olmağa imkan verir. Məsələn, bir istifadəçi "Alexa, LAX və JFK arasındakı məsafənin nə olduğunu xüsusi bir məsafə kalkulyatorumdan soruş" (birdəfəlik çağırış deyilir) deyərək birbaşa niyyətə girə bilər və ya sadəcə bir başlatma niyyətindən istifadə edə bilər: "Alexa, xüsusi məsafə kalkulyatorumu açın ". Bu son nümunəni, adətən, Alexa daha çox məlumat istəyərək cavab verərdi. Bu təlimat qəsdən sonuncunun dəstəyini ləğv edir. Daha dəqiq desək, Lambda funksiyasını dəyişdirmədən, yalnız bir vuruşlu çağırışdan istifadə edərək bacarığa müraciət edə bilərsiniz. Bu dizayn seçimi, modelin daha sadə olmasına imkan verir (başlatma niyyətlərini və ya söhbət axını dəstəkləməli deyil) və adətən daha sürətli olduqları üçün gadget'larımla birdəfəlik çağırışlar istifadə edərək qarşılıqlı əlaqə qurmaq istədiyimi gördüm.

Addım 2: Gadget'ı Alexa Səs Xidməti Geliştirici Konsolunda qeyd edin

Aşağıda lazım olan addımların təsviri verilmişdir. Bütün bu addımların necə ediləcəyini göstərən ekvivalent bir video yaratdım. Bu addımı tamamlamaq üçün ya hər ikisindən istifadə edə bilərsiniz.

  1. Https://developer.amazon.com/alexa/console/avs/hom… ünvanına gedin.
  2. Hələ pulsuz hesabınız yoxdursa, bir hesab yaradın
  3. "Məhsullar" düyməsini basın
  4. Etiketləri doldurun və "Alexa Gadget" ı seçin
  5. Qalan sahələr üçün istədiyinizi daxil edin
  6. Bitir düyməsini basın

Addım 3: AWS Lambda Function və Xüsusi Bacarıq yaradın

Alexa Skills Kit Developer Konsolunda Xüsusi Bacarıqlar yaradın

Bu dərs üçün kodu burada tapa bilərsiniz

Bu addımı tamamlamadan əvvəl, burada təlimatda göstərildiyi kimi AWS Lambda funksiyası üçün yerləşdirmə paketini ehtiva edən bir.zip faylı yaratmalısınız.

  1. Github -dan "lambda_function.py" və "requirements.txt" ehtiva edən "lambda" qovluğunu yükləyin
  2. Terminalı açın və mövcud qovluğu bu qovluğun daxilində dəyişdirin.
  3. Aşağıdakı ardıcıllığı işlədin:

pip quraşdırma -r tələbləri.txt -t bacarıq_env

cp lambda_function.py skill_env cd skill_env zip -r../../skill-code.zip

. Zip faylınız indi lambda qovluğunun yerləşdiyi qovluqda yerləşəcək və "skill-code.zip" adlanacaq.

AWS -də ev sahibliyi xərcləri ilə bağlı bir qeyd: Bu dərslikdə bir AWS hesabınızın olması (yaradılmaq üçün pulsuzdur) tələb olunur. Lambda funksiyaları pula başa gəlir, lakin N. Virginia bölgəsindəki cari qiymətləri 128 MB yaddaş ilə 100ms istifadə üçün 0.000000208 dollardır. İstinad üçün, bacarıqlarımın hər bir çağırışı bu pillədə təxminən 800 ms istifadəni nəzərdə tutur. 1.00USD dollarlıq bir hesab toplamaq üçün, bu funksiyanı təxminən 600.000 dəfə çağırmaq məcburiyyətində qalacaqsınız (əgər hər bir çağırış üçün 5 saniyə çəkərsə), 34 gün ərzində funksiyanıza fasiləsiz zəng etmək lazımdır. Bacarıqlarınızı dərc etmədikcə və çox sayda insan istifadə etməyə başlamadıqca xərc əhəmiyyətli bir problem olmamalıdır. AWS -də faktura almaqdan narahat olsanız, istifadənin müəyyən bir həddi keçdiyini sizə xəbər verən istifadə siqnalları qurmağı düşünün.

Aşağıda lazım olan addımların təsviri verilmişdir. Bütün bu addımların necə ediləcəyini göstərən ekvivalent bir video yaratdım. Bu addımı tamamlamaq üçün ya hər ikisindən istifadə edə bilərsiniz.

  1. Https://aws.amazon.com/ ünvanına gedin və konsola daxil olun və ya hesabınız yoxdursa pulsuz hesab yaradın.
  2. Xidmətlər altında Lambda axtarın və üzərinə vurun
  3. "Funksiya Yarat" düyməsini basın
  4. "Sıfırdan Müəllif" seçin, ad verin və iş vaxtı üçün ən son Python 3 versiyasını seçin
  5. "Kodu daxilində redaktə et" sözünü ".zip faylını yüklə" olaraq dəyişdirin və yuxarıda yaradılan.zip faylını seçin
  6. Yeni bir pəncərədə, https://developer.amazon.com/alexa/console/ask ünvanına gedin və daxil olun
  7. "Bacarıq yaradın" düyməsini basın
  8. Bunu etiketləyin, "Xüsusi" modeli və "Özünüzü təmin edin" seçin və "Bacarıq yaradın" düyməsini basın.
  9. "Sıfırdan Başla" və "Seç" düyməsini basın
  10. "Niyyətlər" altında "Əlavə et" düyməsini basın
  11. "Alexa_to_pi" adlı xüsusi bir niyyət yaradın və nümunə ifadəsi olaraq "{person} yaz" yazın
  12. "AMAZON. Person" tipli "şəxs" adlı bir niyyət yuvası yaradın.
  13. "Pi_to_alexa" adlı xüsusi bir niyyət yaradın və "{sensor_num} sensöründən temperaturu yoxlayın" yazın
  14. "AMAZON. NUMBER" tipli "sensor_num" adlı niyyət yuvası yaradın
  15. Arayüzlər altında "Xüsusi İnterfeys Nəzarətçisi" ni açın
  16. Endpoint altında "AWS Lambda ARN" seçin və "Bacarıq ID" nizi kopyalayın
  17. AWS Konsoluna qayıdın
  18. "Tetikleyici əlavə et" düyməsini basın
  19. "Alexa Bacarıqlar Kitini" seçin, Bacarıq ID yoxlamasının altında "Aktiv et" işarəsini qoyun, yeni kopyaladığınız Bacarıq ID -ni yapışdırıb əlavə et düyməsini basın.
  20. Lambda ARN -ni sağ üst küncdə kopyalayın
  21. Alexa Developer Konsoluna qayıdın və Lambda ARN -ni "Varsayılan Bölgə" sahəsinə yapışdırın.
  22. Çağırış altında, Bacarıq Çağırış Adını "gadgetım" olaraq təyin edin
  23. "Modeli Saxla" və sonra "Model Qur" düyməsini basın.
  24. Üst nişanlardakı "Test et" düyməsini basın və seçicini "Qapalı" dan "İnkişaf" olaraq dəyişdirin.
  25. Lambda funksiyası üçün qeydlərin AWS -də "CloudWatch" xidmətində olduğunu unutmayın.

Addım 4: Kodu Raspberry Pi -də qurun

Raspberry Pi -nin Alexa cihazı ilə ünsiyyət qurması üçün, bir neçə digər fayla əlavə olaraq, bluetooth üzərindən məlumat ötürülməsi və bu əlaqənin qorunması üçün bəzi kodlar lazımdır. Amazon-dan ən son sənədləri işə salmağın ən asan yolu, Raspberry Pi Gadgets deposunu klonlaşdırmaqdır. Mövcud layihənizin qovluğuna gedin və işə salın

git klonu

Bu, bütün anbarlarını bütün lazımi kodlarla Pi -yə yükləyəcək. Alexa Gadgets -in bəzi imkanlarını nümayiş etdirən bəzi nümunə layihələr var. Daha çox məlumat əldə etmək istəyirsinizsə, Github səhifəsindəki readme baxın.

Hər şeyi konfiqurasiya etmək üçün qurma funksiyasını işə salın.

cd/home/pi/Alexa-Gadgets-Moruq-Pi-Nümunələri

sudo python3 launch.py -quraşdırma

Gadget etimadnamənizi istifadə edərək konfiqurasiya etmək istədiyinizi soruşduqda təlimatları izləyin və "y" cavabını verin. Gadget'ınızı geliştirici konsolunda qurmaqdan Amazon ID və Gadget Secret -i xatırlayın, çünki burada istəniləcəkdir. Raspberry Pi Zero W. üçün "bt" ötürmə rejimini seçdim. BLE bütün köhnə Echo cihazları tərəfindən dəstəklənmir, ancaq cihazınızın nəyə qadir olduğunu axtara bilərsiniz. Pi-nizi Masaüstü rejimində istifadə edirsinizsə, Amazon əlaqə problemlərinin qarşısını almaq üçün sağ üstdəki bluetooth simgesini sağ tıklayaraq "Paneldən" Bluetooth "u sil" düyməsini basmağı məsləhət görür.

Qeyd: nə qədər quraşdırılmalı olduğuna görə bu addım bir müddət çəkə bilər.

İndi layihənizə qayıtmaq və Echo ilə ünsiyyət qurmaq üçün funksiyalar əlavə etməyə başlamaq üçün lazım olan bütün dəstək sənədləriniz olacaq.

İstəyirsinizsə, "Alexa-Gadgets-Raspberry-Pi-Samples/src" dəki "nümunələr" qovluğunu silə bilərsiniz.

Layihə kodunuzu istədiyiniz yerdə əldə edə bilərsiniz, amma bunun üçün ev qovluğunda bir qovluq hazırlayacağam, alternativ olaraq Github -dan kodu olan qovluğu yükləyə bilərsiniz.ini fayllarını aşağıda göstərildiyi kimi düzəltməyinizə əmin olun.

cd /ev /pi

mkdir my_project cd my_project toxun my_gadget.py touch my_gadget.ini

İndi "my_project" adlı bir qovluqda iki fayl yaratdım.. İni faylı vacibdir. Aşağıdakıları ehtiva etdiyinə və Amazon ID və Gadget Secret -də əvəz etdiyinizə əmin olun:

[Gadget Ayarları]

amazonId = INSERT_AMAZON_ID_HERE alexaGadgetSecret = INSERT_ALEXA_GADGET_SECRET_HERE [GadgetCapabilities] Custom. MyGadget = 1.0

İndi detallara girmədən əvvəl python faylına bir nəzər salaq:

json idxal edin

AlexaGadget idxalından

sinif MyGadget (AlexaGadget):

def _init _ (özünü):

super ()._ başlanğıc _ ()

def on_custom_mygadget_alexatopi (özünü, direktivi):

payload = json.loads (directive.payload.decode ("utf-8")) çap ("Alınan məlumatlar:" + str (payload)) write_text (str (payload ['data'] ['person'] 'dəyər ']))

def on_custom_mygadget_pitoalexa (özünü, direktivi):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Alınan məlumatlar:" + str (yük)) payload = {'data': "Zond oxuyur" + str (get_temp (payload) ['data'] ['sensor_sayı'] ['dəyər'])) + "dərəcə."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', yük) MyGadget (). main ()

Əvvəlcə iki funksiyanı çağırdığını görəcəksiniz: write_text () və get_temp (). Kodumda bu funksiyaları eyni faylda təyin edirəm, lakin onlar aparatımdan asılıdır, buna görə də onları buraxmağı seçmişəm. Bu faylı, bu dəqiq kodu işə salmaq istəsəniz, saxta məlumatları çap etmək və geri qaytarmaq üçün təyin edilmiş funksiyalara əlavə etdim. Layihənizlə işləmək üçün onu dəyişdirməzdən əvvəl bu dəqiq kodla test etməyi təklif edərdim.. İni faylını da əlavə etmişəm, ancaq daxil olub şəxsiyyət və gadget sirrini dəyişdiyinizə əmin olun. Üst funksiya Alexa'dan alınan məlumatları alır. Alt funksiya eyni formatda məlumat alır, lakin Alexa cihazı bir hadisənin öz yükü ilə geri qaytarılmasını beş saniyə gözləyəcək. Bu yük, xüsusən Alexa cihazının məzmununu danışmasıdır.

Bu faylları əldə etdikdən sonra "my_project" qovluğuna gedin və python faylını işə salın.

sudo yenidən başladın

cd/home/pi/my_project sudo python3./my_gadget.py

Proqramı ilk dəfə işə salırsınızsa, onu Echo cihazınıza qoşmalısınız. Bluetooth əlaqəsinə icazə verməli olduğumuz üçün Echo cihazınızın Raspberry Pi yaxınlığında olduğundan əmin olun.

Mobil cihazınızdakı Alexa tətbiqində sağ alt küncdəki "cihazlar" düyməsini basın.

Sol üstdəki "Echo & Alexa" düyməsini basın.

Echo cihazınızı vurun.

"Kablosuz" bölməsində "Bluetooth Cihazları" na vurun.

"YENİ CİHAZI EŞLƏ" düyməsinə vurun və gadgetınızı siyahıda görməlisiniz.

Gadget'ınıza vurun. Uğurla qoşulduğu barədə Pi hesabatını görməlisiniz.

Pi -də çıxışı izləyərkən Echoya səsli bir əmr verməyə çalışın:

Sən: "Alexa, gadget'ımdan istiliyi bir sensordan yoxlamasını xahiş et"

Hər şey düzgün işləyirsə, eşitməlisiniz:

Eko: "Zond 120.505 dərəcə oxuyur."

Sən: "Alexa, gadgetma de ki, George Washington yazsın."

Pi çap etməlidir:

Alınan məlumatlar: {'data': {'person': {'name': 'person', 'value': 'George Washington', 'confirmationStatus': 'NONE'}}}

Corc Vaşinqton"

Addım 5: Sarma

Burada göstərilən video, temperaturun oxunması (F və C ilə eyni zond) və sadə bir ekrana ad yazmaqla işləyən gadgetın bir nümunəsidir.

Ümid edirik ki, bir iş görürsünüzsə, öz layihənizi daha qabiliyyətli etmək üçün bunu özəlləşdirməyə çalışmalısınız. Alexa Developer Console -da niyyətləri asanlıqla düzəldə biləcəyinizi və istifadə etdiyiniz bütün yuvaların faydalı yükdə Pi -yə keçəcəyini unutmayın. Əlavə olaraq, Raspberry Pi kodunuzdan hadisədə geri qaytardığınız yükü düzəldərək Alexa -dan istədiyiniz hər şeyi söyləyə bilərsiniz.

Unutmayın ki, bu dərslik Alexa Gadget ilə istədiyiniz bütün qabiliyyətlər üçün son bir həll ola bilməz. Alexa və Gadget arasında hər istiqamətdə məlumat ötürmək üçün sizə iki sadə funksiya vermək qəsdən məhduddur. Daha mürəkkəb qarşılıqlı əlaqə modelləri yaratmaqla maraqlanırsınızsa, https://github.com/alexa/Alexa-Gadgets-Raspberry-P… ünvanındakı bütün readme fayllarını oxumağı və təqdim etdikləri bütün nümunələri sınamağı tövsiyə edərdim.. Alexa Gadgets Toolkit və Alexa Skills Kit üçün sənədləri oxumağı da təklif edərdim.

Tövsiyə: