Sisukord:

Lisage kohandatud Alexa Control Raspberry Pi projektile: 5 sammu
Lisage kohandatud Alexa Control Raspberry Pi projektile: 5 sammu

Video: Lisage kohandatud Alexa Control Raspberry Pi projektile: 5 sammu

Video: Lisage kohandatud Alexa Control Raspberry Pi projektile: 5 sammu
Video: Home Assistant. Урок 9.4 ADD-ON - Xiaomi Gateway 3, интеграция в zigbee2mqtt 2024, Juuli
Anonim
Lisage kohandatud Alexa Control Raspberry Pi projektile
Lisage kohandatud Alexa Control Raspberry Pi projektile

See projekt on mõeldud kõigile, kellel on Raspberry Pi projekt, mis kasutab Pythoni ja kes soovivad lisada hääljuhtimist oma olemasolevate Amazon Echo seadmete kaudu. Te ei pea olema kogenud programmeerija, kuid teil peaks olema mugav käsurea kasutamine ja olemasoleva koodi kohandamine vastavalt teie vajadustele.

Algselt võtsin ette projekti, mis võimaldaks minu Raspberry Pi-d Alexaga hääljuhtida, et see saaks veekeetjas vett teatud temperatuurini soojendada. Kuigi soovitud suhtlus oli üsna lihtne (edastage üks number Alexalt Raspberry Pi -le), kulus olemasolevatest õpetustest sellesse olekusse jõudmiseks palju tööd. Loodan, et see õpetus muudab selle protsessi teistele võimalikult kiireks.

Minu näites alustan ma Raspberry Pi Zero W -st koos Raspbianiga. Minu Pi -l on programm Python3, mis on võimeline SPI -ekraanile teksti kirjutama, ja mul on termomeetrisond, mida saan lugeda. Teie jaoks võib see programm olla peaaegu kõik, kuid idee järgi võib teil olla mõningaid sisendseadmeid, mida soovite Alexa kaudu lugeda, ja/või mõnda väljundseadet, mida soovite Alexa abil juhtida.

Eesmärk on minna ülalkirjeldatud põhiprogrammist seadmesse, mida saate hõlpsalt minu Echo abil juhtida. Eeldades, et teil on see riistvara juba olemas, ei tohiks see projekt teile raha maksta. Lõpuks jõuate punkti, kus saate öelda selliseid asju nagu:

Mina: "Alexa, palu minu vidinal kontrollida anduri 1 temperatuuri."

Alexa vastus: "Sond näitab 72,31 kraadi."

või

Mina: "Alexa, ütle mu vidinale kirjutada George Washington"

Vastus: Minu Raspberry Pi -ga ühendatud ekraanil on nüüd kiri "George Washington"

Järgmises osas kirjeldan, mis selle töö tegemiseks kulisside taga juhtuma peab. Kui soovite selle lihtsalt oma projektiga tööle panna ja ei hooli sellest, kuidas see töötab, jätke see julgelt vahele (kuigi see võib raskendada, kui midagi läheb valesti).

Samm: taust

Taust
Taust

Sellel pildil (krediit: https://developer.amazon.com/en-US/docs/alexa/alex… näeme Alexa vidinate üldist arhitektuuri.

Kui ütlete oma Echo seadmele midagi, saadab see heli Alexa Cloudi, kus seda töödeldakse ja kus teile vastamiseks genereeritakse vastus. Kui küsite, mis ilm on, siis suhtlemisel on just need kaks. Oletame nüüd, et soovite lisada hääljuhtimise ühele oma väikestele Raspberry Pi projektidele. Kõigi pardal töötlemiseks oleks vaja olulist riistvara ja väga keerukat koodibaasi. Parem lahendus oleks kasutada Alexa Cloudi, mis on väga keerukas ja on väga hästi hakkama saanud keeruliste kõnemustritega. Alexa vidinad pakuvad selleks head võimalust.

Alexa vidin suhtleb Bluetoothi abil Echo seadmega. Kui see ühendus on loodud, edastavad nad üksteisele sõnumeid UTF-8 kodeeringu abil. Kui Echo edastab midagi vidinale, nimetatakse seda direktiiviks. Teist suunda nimetatakse sündmuseks. Enne selle kõige täpse voo uurimist peaksime tutvustama veel ühte võtmeelementi: kohandatud Alexa oskusi.

Alexa võimaldab arendajatel luua oma kohandatud oskusi, mis võimaldab neil kujundada oma suhtluse ja käitumise kasutamiseks kõikides Echo seadmetes. Näiteks võib arendaja luua kohandatud oskuse, et öelda teile kaugus kahe USA lennujaama vahel. Kasutaja ütleks: "Alexa, küsi minu kohandatud kaugusekalkulaatorilt, milline on kaugus LAX -i ja JFK vahel", ja see võib vastata "2475 miili". Kuidas see seda teeb? Kui arendaja teeb kohandatud oskuse, määratlevad nad nn kohandatud kavatsused koos näidisväljenditega, mis sisaldavad "teenindusaegu". Näiteks selles oskuses võiks mul olla kavatsus "calc_dist" arvutada kahe punkti vaheline kaugus. Näidislause oleks "milline on vahemaa {slot1} ja {slot2}" või "kui kaugel on {slot1} ja {slot2}". Sulgudes näidatud pilud on teatud tüüpi. Sel juhul oleksid need tüübid lennujaamade koodid nagu LAX, JFK, BOS, ATL. Kui kasutaja küsib kohandatud oskusi, proovib Alexa Cloud kasutaja öeldut kohandatud kavatsusega sobitada, kasutades kaasasolevaid näidislause ja proovib leida selle taotluse jaoks kehtivaid pesa väärtusi. Selles näites leitakse, et kasutaja soovis "calc_dist" eesmärki ja et pesa 1 on LAX ja pesa 2 on JFK. Sel hetkel edastab Alexa Cloud töö arendaja enda koodile. Põhimõtteliselt ütleb see arendajatele koodi, millise kavatsuse ta sai ja millised olid kõik pesa väärtused, muu hulgas.

Arendaja saab otsustada, kus nende kood elab, kuid väga populaarne võimalus on kasutada AWS Lambda funktsiooni. Kui te ei tea, mis see on, on see sisuliselt teenus, mis võimaldab teil üles laadida koodi, mida saab igal ajal käivitada, ja võtab seejärel tasu ainult selle aja eest, mille teie kood käivitatakse. Kui jätkame oma näitega, võib arendaja kood olla Pythoni funktsioon, mis võtab vastu kaks lennujaama koodi, otsib nende asukohad, arvutab vahemaad ja saadab seejärel vastuse tagasi Alexa Cloudile, et kasutajaga midagi rääkida. Seejärel saatis Alexa Cloud selle kõneteabe tagasi kasutaja seadmesse ja nad said vastuse.

Nüüd saame tagasi vidina juurde. Saame luua kohandatud oskusi, mis on loodud spetsiaalselt vidinatega töötamiseks. Arendaja saab kirjutada oskuse, mis saadab ühendatud vidinale käskkirja. Sellel direktiivil on kasulik koormus, mida saab kasutada, kuigi vidin seda vajab. See oskus võib saata ka käskkirja ja seejärel vidinast sündmust kuulata, et oskuste koodil oleks juurdepääs vidinalt saadetud teabele.

Selle voo lubamise loomine loob väga võimsa tööriista, kuna odavatel vidinatel on võimalus suhelda pilves oleva koodiga ja vastata häälkäsklustele, kasutades mõnda parimat saadaolevat häältuvastust.

Tuleb märkida, et enamik oskusi võimaldab nendega suhelda mitmel viisil. Näiteks võib kasutaja hüpata otse kavatsusele, öeldes: „Alexa, küsi minu kohandatud kaugusekalkulaatorilt, milline on kaugus LAX-i ja JFK vahel“(nimetatakse ühekordseks kutsumiseks), või võib ta lihtsalt kasutada käivitamiskavatsust: „Alexa, avage minu kohandatud vahemaa kalkulaator . Sellele viimasele näitele järgneks tavaliselt Alexa, kes paluks lisateavet. See õpetus jätab tahtlikult viimase toetamise välja. Täpsemalt, ilma Lambda funktsiooni muutmata, saate oskusi esile kutsuda ainult ühekordse kutsumise abil. See disainivalik võimaldab mudelil olla lihtsam (ei pea toetama käivitamiskavatsusi ega vestlusvoogu) ning olen avastanud, et soovin tavaliselt oma vidinatega suhelda, kasutades ühekordseid kutseid, kuna need on tavaliselt kiiremad.

Samm: registreerige vidin Alexa Voice Service'i arendajakonsoolis

Järgnevalt kirjeldatakse vajalikke samme. Olen loonud samaväärse video, mis näitab, kuidas kõiki neid samme teha. Selle sammu lõpuleviimiseks võite kasutada ühte või mõlemat.

  1. Minge saidile
  2. Kui teil pole veel tasuta kontot, tehke see
  3. Klõpsake "Tooted"
  4. Täitke sildid ja valige "Alexa vidin"
  5. Ülejäänud väljade jaoks täitke kõik, mida soovite
  6. Klõpsake nuppu Lõpeta

Samm: looge AWS Lambda funktsioon ja kohandatud oskus

Looge kohandatud oskus Alexa Skills Kit arendajakonsoolil

Selle õpetuse koodi leiate siit

Enne selle sammu lõpuleviimist peate looma.zip -faili, mis sisaldab funktsiooni AWS Lambda juurutuspaketti, nagu on näidatud siin.

  1. Laadige minu Githubist alla kaust "lambda", mis sisaldab "lambda_function.py" ja "needs.txt"
  2. Avage terminal ja muutke praegune kataloog sellesse kausta.
  3. Käivitage järgmine jada:

pip install -r nõuded.txt -t skill_env

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

Teie.zip-fail asub nüüd kataloogis, kus oli lambda kaust, ja seda nimetatakse "skill-code.zip".

Märkus AWS -i hostimise kulude kohta: see õpetus nõuab, et teil oleks AWS -konto (tasuta loomine). Lambda funktsioonid maksavad küll raha, kuid nende praegune hind N. Virginia piirkonnas on 0,000000208 dollarit 100 ms kasutamise kohta koos 128 MB mäluga. Võrdluseks - iga minu oskuste sissenõudmine arvestab sellel tasemel umbes 800 ms. 1,00 USA dollari suuruse arve kogumiseks peate selle funktsiooni käivitama umbes 600 000 korda, mis (kui teil kulub 5 sekundit kutse kohta) võtab teie funktsioonile helistamiseks üle 34 päeva. Maksumus ei tohiks olla oluline probleem, kui te oma oskusi ei avalda ja tohutu hulk inimesi seda kasutama hakkab. Kui olete mures AWS -i arvete saamise pärast, kaaluge kasutusalarmide seadistamist, mis teavitavad teid, kui kasutamine ületab määratud läve.

Järgnevalt kirjeldatakse vajalikke samme. Olen loonud samaväärse video, mis näitab, kuidas kõiki neid samme teha. Selle sammu lõpuleviimiseks võite kasutada ühte või mõlemat.

  1. Minge saidile https://aws.amazon.com/ ja logige sisse konsooli või looge tasuta konto, kui teil seda pole
  2. Otsige teenuste alt Lambda ja klõpsake sellel
  3. Klõpsake "Loo funktsioon"
  4. Valige „Autor nullist”, andke sellele nimi ja valige käitusajaks Python 3 uusim versioon
  5. Muutke "muutmiskoodi inline" asemel ".zip -faili üleslaadimine" ja valige ülaltoodud.zip -fail
  6. Minge uues aknas aadressile https://developer.amazon.com/alexa/console/ask ja logige sisse
  7. Klõpsake nuppu "Loo oskus"
  8. Märgistage see, valige "Kohandatud" mudel ja "Hankige oma" ja klõpsake "Loo oskus"
  9. Klõpsake "Alusta nullist" ja klõpsake "Vali"
  10. Klõpsake jaotises "Kavatsused" nuppu "Lisa"
  11. Looge kohandatud kavatsus nimega "alexa_to_pi" ja täitke näidislausena sõna "kirjuta {person}"
  12. Tehke kavatsusega pesa nimega „isik” tüübiga „AMAZON. Person”
  13. Looge kohandatud kavatsus nimega "pi_to_alexa" ja täitke "kontrollige temperatuuri andurilt {sensor_num}
  14. Tehke kavatsusega pesa nimega „sensor_num” tüübiga „AMAZON. NUMBER”
  15. Lülituste jaotises lülitage sisse "Kohandatud liidesekontroller"
  16. Valige lõpp -punktist „AWS Lambda ARN” ja kopeerige „Teie oskuste ID”
  17. Liikuge tagasi AWS -i konsooli
  18. Klõpsake nuppu "Lisa käivitaja"
  19. Valige "Alexa Skills Kit", märkige jaotises Oskuse ID kinnitamine "Luba", kleepige äsja kopeeritud oskuse ID ja klõpsake nuppu Lisa
  20. Kopeerige Lambda ARN paremas ülanurgas
  21. Navigeerige tagasi Alexa arendajakonsooli ja kleepige Lambda ARN väljale "Vaikepiirkond"
  22. Määrake jaotises Invocation (Oskuse kutse) nimi „minu vidin”
  23. Klõpsake "Salvesta mudel" ja seejärel "Ehita mudel"
  24. Klõpsake ülemistel vahekaartidel nuppu "Testi" ja muutke valija "Väljas" asendiks "Arendus"
  25. Pange tähele, et Lambda funktsiooni logid leiate AWS -i teenusest "CloudWatch".

Samm: seadistage oma Raspberry Pi kood

Selleks, et teie Raspberry Pi saaks Alexa seadmega suhelda, vajab see lisaks mõnele muule failile ka koodi, mis hõlbustab teabe edastamist Bluetoothi kaudu ja selle ühenduse säilitamist. Lihtsaim viis Amazonist kõige värskemate failidega alustamiseks on nende Raspberry Pi vidinate hoidla kloonimine. Liikuge oma praeguse projekti kataloogi ja käivitage

git kloon

See laadib kogu nende hoidla kogu vajaliku koodiga teie Pi -le. Sellel on mõned näidisprojektid, mis näitavad mõningaid Alexa vidinate võimalusi. Kui soovite rohkem teavet, vaadake nende Githubi lehe readme.

Käivitage nende seadistusfunktsioon, et kõik seadistada.

cd/home/pi/Alexa-Gadgets-Raspberry-Pi-Samples

sudo python3 launch.py -seadistamine

Järgige juhiseid ja vastake "y", kui küsitakse, kas soovite seadistada oma vidina mandaadi abil. Meenutage Amazoni ID -d ja vidina saladust vidina seadistamisel arendajakonsoolile, kuna seda küsitakse siin. Valisin oma Raspberry Pi Zero W. edastusrežiimi "bt". Kõik vanemad Echo -seadmed ei toeta BLE -d, kuid saate vaadata, mida teie riistvara suudab. Kui kasutate oma Pi-d töölauarežiimis, soovitab Amazon ühendusprobleemide vältimiseks paremklõpsata paremas ülanurgas asuvat Bluetoothi ikooni ja klõpsata nupul „Eemalda„ Bluetooth”paneelilt”.

Märkus. See samm võib võtta aega, sõltuvalt sellest, kui palju installida tuleb.

Nüüd on teil kõik vajalikud tugifailid, et naasta oma projekti juurde ja hakata lisama funktsioone, mis võimaldavad teie Echo -ga suhtlemist.

Kui valite, saate kustutada kausta "näited" jaotisest "Alexa-Gadgets-Raspberry-Pi-Samples/src"

Teil võib olla oma projekti kood kõikjal, kus soovite, kuid ma teen selle jaoks kodukataloogi kausta. Teise võimalusena saate kausta koos koodiga alla laadida minu Githubist, redigeerige kindlasti.ini -faile, nagu allpool kirjeldatud.

cd /kodu /pi

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

Olen nüüd loonud kaks faili kausta nimega "my_project".. Ini -fail on oluline. Veenduge, et see sisaldaks teie Amazoni ID -s ja vidina saladuses järgmist ja asendaks seda:

[Vidina seaded]

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

Nüüd vaatame enne üksikasjadesse laskumist pythoni faili:

import json

alates agt import AlexaGadget

klassi MyGadget (AlexaGadget):

def _init _ (ise):

super ()._ init _ ()

def on_custom_mygadget_alexatopi (ise, direktiiv):

payload = json.loads (direktiivi.payload.decode ("utf-8")) print ("Vastuvõetud andmed:" + str (kasulik koormus)) write_text (str (kasulik koormus ['andmed'] ['isik'] ['väärtus ']))

def on_custom_mygadget_pitoalexa (ise, direktiiv):

payload = json.loads (direktiivi.payload.decode ("utf-8")) print ("Vastuvõetud andmed:" + str (kasulik koormus)) kasulik koormus = {'andmed': "Sond loeb" + str (get_temp (kasulik koormus) ['data'] ['sensor_num'] ['value'])) + "kraadi."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', kasulik koormus) MyGadget (). main ()

Kõigepealt märkate, et see kutsub kahte funktsiooni: write_text () ja get_temp (). Oma koodis määratlen need funktsioonid samas failis, kuid need sõltuvad minu riistvarast, seega otsustasin need välja jätta. Olen lisanud sellele failile need funktsioonid, mis on määratud ainult näivandmete printimiseks ja tagastamiseks juhuks, kui soovite seda täpset koodi käivitada. Soovitan enne selle projektiga töötamist selle täpse koodiga katsetada. Olen lisanud ka.ini -faili, kuid minge kindlasti sisse ja muutke ID -d ja vidina saladust. Ülemine funktsioon võtab vastu Alexalt edastatud andmeid. Alumine funktsioon võtab andmeid vastu samas vormingus, kuid Alexa seade ootab viis sekundit, kuni sündmus oma kasuliku koormusega tagasi edastatakse. See kasulik koormus on eriline selle poolest, et Alexa seade räägib selle sisu.

Kui need failid on olemas, liikuge kausta "my_project" ja käivitage pythoni fail.

sudo taaskäivitamine

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

Kui käivitate programmi esimest korda, peate selle siduma oma Echo seadmega. Veenduge, et teie Echo seade oleks Raspberry Pi lähedal, kuna peame lubama bluetooth -ühenduse.

Klõpsake oma mobiilseadme rakenduses Alexa paremas alanurgas nuppu „Seadmed”.

Klõpsake vasakus ülanurgas "Echo & Alexa".

Klõpsake oma Echo seadmel.

Puudutage jaotises "WIRELESS" valikut "Bluetooth -seadmed".

Puudutage "PAARI UUS SEADME" ja peaksite oma vidinat loendis nägema.

Puudutage oma vidinat. Peaksite nägema Pi aruannet, et see õnnestus siduda.

Kui vaatate oma Pi väljundit, proovige anda kajale häälkäsklus:

Sina: "Alexa, palu minu vidinal kontrollida sensori 1 temperatuuri"

Kui kõik töötas korralikult, peaksite kuulda:

Kaja: "Sond näitab 120,505 kraadi."

Sina: "Alexa, ütle mu vidinale kirjutada George Washington."

Pi peaks printima:

Vastuvõetud andmed: {'data': {'person': {'name': 'person', 'value': 'George Washington', 'confirmationStatus': 'NONE'}}}

George Washington"

5. samm: pakkimine

Siin näidatud video on näide vidinast, mis töötab temperatuuri lugemisega (sama sond F vs C) ja nimede kirjutamisega lihtsale ekraanile.

Nüüd, kui teil loodetavasti midagi töötab, peaksite proovima seda kohandada, et muuta oma projekt võimekamaks. Pidage meeles, et saate Alexa arendajakonsoolis kavatsusi hõlpsalt muuta ja kõik kasutatavad pesad edastatakse teie Pi -le kasuliku koormusena. Lisaks saate lasta Alexal öelda kõike, mida soovite, lihtsalt redigeerides oma Raspberry Pi koodist sündmusele tagasi antud kasulikku koormust.

Pange tähele, et see õpetus ei ole mõeldud lõplikuks lahenduseks kõigile Alexa vidinaga soovitud võimalustele. See on tahtlikult piiratud, et anda teile kaks lihtsat funktsiooni andmete edastamiseks igas suunas Alexa ja vidina vahel. Kui olete huvitatud keerukamate suhtlusmudelite loomisest, soovitan teil lugeda kõiki readme-faile saidil https://github.com/alexa/Alexa-Gadgets-Raspberry-P… ja proovida kõiki nende näiteid.. Samuti soovitan teil lugeda Alexa vidinate tööriistakomplekti ja Alexa oskuste komplekti dokumentatsiooni.

Soovitan: