תוכן עניינים:

הוסף בקרת אלקסה מותאמת אישית לפרויקט Raspberry Pi: 5 שלבים
הוסף בקרת אלקסה מותאמת אישית לפרויקט Raspberry Pi: 5 שלבים

וִידֵאוֹ: הוסף בקרת אלקסה מותאמת אישית לפרויקט Raspberry Pi: 5 שלבים

וִידֵאוֹ: הוסף בקרת אלקסה מותאמת אישית לפרויקט Raspberry Pi: 5 שלבים
וִידֵאוֹ: Модернизация ИБП APC 650, добавление в Home Assistant, получение фактической емкости аккумулятора 2024, יולי
Anonim
הוסף בקרת אלקסה מותאמת אישית לפרויקט Raspberry Pi
הוסף בקרת אלקסה מותאמת אישית לפרויקט Raspberry Pi

פרויקט זה מיועד לכל מי שיש לו פרוייקט Raspberry Pi שמשתמש בפייתון שרוצה להוסיף שליטה קולית באמצעות מכשירי אמזון הד הקיימים שלהם. אינך צריך להיות מתכנת מנוסה, אך עליך להרגיש בנוח להשתמש בשורת הפקודה ולהתאים קוד קיים בהתאם לצרכיך.

בתחילה יצאתי לפרויקט המאפשר שליטה ב- Raspberry Pi שלי בקול באמצעות Alexa כך שיוכל לחמם מים בקומקום לטמפרטורה ספציפית. למרות שהאינטראקציה שרציתי הייתה פשוטה למדי (העבר מספר אחד מ- Alexa ל- Raspberry Pi), נדרשה הרבה עבודה כדי להגיע למצב זה מהדרכות הקיימות. אני מקווה שהדרכה זו תהפוך את התהליך המהיר ביותר האפשרי לאחרים.

בדוגמה שלי, אני מתחיל עם Raspberry Pi Zero W עם Raspbian. יש לי על פי שלי תוכנית Python3 שמסוגלת לכתוב טקסט לתצוגת SPI, ויש לי בדיקת מדחום שאני יכול לקרוא. עבורך, תוכנית זו יכולה להיות כמעט הכל, אך הרעיון הוא שאולי יהיו לך כמה התקני קלט שתרצה לקרוא באמצעות אלקסה ו/או כמה התקני פלט שאתה רוצה לשלוט בהם באמצעות אלקסה.

המטרה היא לעבור מתוכנית בסיסית כמו זו שתוארה לעיל למכשיר שאפשר לשלוט בו בקלות באמצעות הד שלי. בהנחה שכבר יש ברשותך חומרה זו, פרויקט זה לא אמור לעלות לך כסף. בסופו של דבר תגיע לנקודה שבה תוכל לומר דברים כמו:

אני: "אלכסה, בקשי מהגאדג'ט שלי לבדוק את הטמפרטורה בחיישן 1."

תגובתה של אלקסה: "הבדיקה קוראת 72.31 מעלות".

אוֹ

אני: "אלכסה, אמרי לגאדג'ט שלי לכתוב ג'ורג 'וושינגטון"

תגובה: בתצוגה המחוברת ל- Raspberry Pi שלי כתוב כעת "ג'ורג 'וושינגטון"

בחלק הבא, אתאר מה צריך לקרות מאחורי הקלעים כדי לגרום לזה לעבוד. אם אתה רק רוצה לגרום לזה לעבוד על הפרויקט שלך ולא אכפת לך איך זה עובד, אל תהסס לדלג עליו (אם כי זה עלול להקשות אם משהו משתבש).

שלב 1: רקע

רקע כללי
רקע כללי

בתמונה זו (אשראי: https://developer.amazon.com/en-US/docs/alexa/alex… אנו יכולים לראות את הארכיטקטורה הכללית של הגאדג'טים של Alexa.

כאשר אתה אומר משהו למכשיר ה- Echo שלך, הוא שולח את השמע לענן Alexa, שם הוא מעובד ושם נוצרת תגובה כדי להגיב לך. כשאתה שואל מה מזג האוויר, זה רק שני אלה בתקשורת. כעת נניח שאתה רוצה להוסיף שליטה קולית לאחד הפרויקטים הקטנים שלך ב- Raspberry Pi. עיבוד כל מה שמשולב ידרוש חומרה משמעותית ובסיס קוד מתוחכם מאוד בכדי להניע דברים. פתרון טוב יותר יהיה למנף את הענן Alexa, המתוחכם מאוד והשתפר מאוד בטיפול בדפוסי דיבור מורכבים. גאדג'טים של Alexa מספקים לך דרך טובה לעשות זאת.

גאדג'ט של Alexa מתקשר עם מכשיר הד באמצעות בלוטות '. ברגע שנוצר חיבור זה, השניים מעבירים זה לזה הודעות באמצעות קידוד UTF-8. כאשר הד מעביר משהו לגאדג'ט, הוא נקרא הנחיה. הכיוון השני מכונה אירוע. לפני שנכנס לזרימה המדויקת של כל זה, עלינו להציג אלמנט מרכזי נוסף: מיומנויות Alexa מותאמות אישית.

Alexa מאפשרת למפתחים ליצור כישורים מותאמים אישית משלהם, המאפשרים להם לעצב אינטראקציות והתנהגויות משלהם לשימוש בכל מכשירי הד. לדוגמה, מפתח יכול ליצור מיומנות מותאמת אישית כדי לספר לך את המרחק בין שני שדות תעופה בארה"ב. משתמש היה אומר: "אלקסה, שאל את מחשבון המרחק המותאם אישית שלי מה המרחק בין LAX ל- JFK" והוא יכול להגיב עם "2475 מייל". איך זה עושה את זה? כאשר מפתח עושה מיומנות מותאמת אישית, הוא מגדיר מה שנקרא "כוונות מותאמות אישית" עם "אמירות לדוגמא" המכילות "משבצות". לדוגמה, במיומנות זו עשויה להיות לי הכוונה "calc_dist" לחשב את המרחק בין שתי נקודות. אמירה לדוגמה תהיה "מה המרחק בין {slot1} ל- {slot2}" או "כמה רחוק בין {slot1} ל- {slot2}". לחריצים המוצגים בסוגריים יש סוגים ספציפיים. במקרה זה סוגים אלה יהיו קודי שדות תעופה כגון LAX, JFK, BOS, ATL. כאשר משתמש מבקש את המיומנות המותאמת אישית, Alexa Cloud מנסה להתאים את מה שהמשתמש אומר לכוונה מותאמת אישית באמצעות אמירות המדגם המצורפות ומנסה למצוא ערכי חריץ חוקיים לבקשה זו. בדוגמה זו הוא ימצא שהמשתמש רוצה את כוונת "calc_dist" וכי חריץ 1 הוא LAX וחריץ 2 הוא JFK. בשלב זה, ענן Alexa מעביר את העבודה לקוד של המפתח עצמו. ביסודו של דבר, הוא מספר לקוד המפתחים איזו כוונה הוא קיבל ומה היו כל ערכי המשבצת, בין השאר.

היזם יכול להחליט היכן גר הקוד שלו, אך אפשרות פופולרית מאוד היא להשתמש בפונקציית Lambda של AWS. אם אינך יודע מה זה, זהו בעצם שירות המאפשר לך להעלות קוד שניתן להריץ בכל עת ולאחר מכן לחייב אותך רק על פרק הזמן שהקוד שלך מופעל. אם נמשיך בדוגמה שלנו, קוד המפתח עשוי להיות פונקציה של פייתון המקבלת את שני קודי שדות התעופה, בודקת את מיקומם, מחשבת את המרחקים ולאחר מכן שולחת תגובה חזרה לענן אלקסה כדי לדבר משהו עם המשתמש. אז ענן Alexa ישלח את מידע הדיבור הזה בחזרה למכשיר של המשתמש, והם יקבלו את התשובה.

עכשיו נוכל לחזור לגאדג'ט. אנו יכולים ליצור כישורים מותאמים אישית שנועדו לעבוד במיוחד עם גאדג'טים. מפתח יכול לכתוב מיומנות ששולחת הוראה לגאדג'ט מחובר. להנחיה זו יש מטען שניתן להשתמש בו אך הגאדג'ט צריך אותו. מיומנות זו יכולה גם לשלוח הוראה ולאחר מכן להאזין לאירוע מהגאדג'ט, כך שלקוד המיומנות תהיה גישה למידע שנשלח מהגאדג'ט.

הקמת זרימה זו מאפשרת ליצור כלי רב עוצמה מכיוון שלגאדג'טים זולים יכולים להיות יכולת לתקשר עם קוד בענן ולהגיב לפקודות קוליות באמצעות כמה מהזיהוי הקולי הטוב ביותר שיש.

יש לציין שרוב הכישורים מאפשרים דרכים שונות לקיים איתם אינטראקציה. לדוגמה, משתמש יכול לקפוץ ישר לכוונה על ידי אמירת "אלקסה, שאל את מחשבון המרחק המותאם אישית שלי מה המרחק בין LAX ל- JFK" (נקרא קריאה של זריקה אחת) או שהם פשוט יכולים להשתמש בכוונת השקה: "Alexa, פתח את מחשבון המרחק המותאם אישית שלי ". בדוגמה האחרונה הזו בדרך כלל תעקוב אחריה Alexa שתגיב עם בקשה למידע נוסף. הדרכה זו משמיטה בכוונה את התמיכה באחרון. ליתר דיוק, מבלי לשנות את פונקציית למבדה, תוכל להפעיל את המיומנות רק באמצעות פנייה אחת. בחירת עיצוב זו מאפשרת לדגם להיות פשוט יותר (אינו חייב לתמוך בכוונות ההשקה או בזרימת השיחה), ומצאתי שבדרך כלל אני רוצה ליצור אינטראקציה עם הגאדג'טים שלי באמצעות הזמנות חד פעמיות מכיוון שהם בדרך כלל מהירים יותר.

שלב 2: רשום את הגאדג'ט במסוף המפתחים של שירות Alexa Voice

להלן תיאור השלבים הדרושים. יצרתי סרטון שווה ערך המראה כיצד לבצע את כל השלבים הללו. אתה יכול להשתמש באחד או בשניהם כדי להשלים שלב זה.

  1. נווט אל
  2. אם עדיין אין לך חשבון חינמי, צור חשבון
  3. לחץ על "מוצרים"
  4. מלא את התוויות ובחר "גאדג'ט Alexa"
  5. מלא את כל מה שאתה רוצה עבור שאר השדות
  6. לחץ על סיום

שלב 3: צור פונקציית Lambda של AWS ומיומנות מותאמת אישית

צור מיומנות מותאמת אישית במסוף המפתחים של ערכת כישורים של Alexa

קוד להדרכה זו ניתן למצוא כאן

לפני השלמת שלב זה, יהיה עליך ליצור קובץ.zip המכיל את חבילת הפריסה של פונקציית AWS Lambda כפי שמוצג במדריך כאן.

  1. הורד את התיקיה "lambda" מה- Github שלי המכיל "lambda_function.py" ו- "requirements.txt"
  2. פתח את הטרמינל ושנה את הספרייה הנוכחית כך שהיא תהיה בתוך תיקיה זו.
  3. הפעל את הרצף הבא:

pip install -r requirements.txt -t skill_env

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

קובץ ה- zip שלך ימצא כעת בספרייה שבה הייתה תיקיית ה- lambda ויקרא "skill-code.zip".

הערה על עלות אירוח ב- AWS: הדרכה זו דורשת שיהיה לך חשבון AWS (ניתן ליצור בחינם). פונקציות למבדה אכן עולות כסף, אולם התמחור הנוכחי שלהן באזור נ 'וירג'יניה הוא 0.000000208 $ לכל שימוש ב- 100ms עם זיכרון של 128MB. לעיון, כל פנייה למיומנות שלי מחייבת כ- 800 מילימס של שימוש ברמה זו. כדי לגבות שטר של $ 1.00 USD, יהיה עליך להפעיל את הפונקציה הזו בערך 600, 000 פעמים אשר (אם ייקח לך 5 שניות לכל קריאה) ייקח לך יותר מ -34 ימים של התקשרות רציפה לפונקציה שלך. עלות לא אמורה להוות בעיה משמעותית, אלא אם כן אתה מפרסם את המיומנות שלך ומספר עצום של אנשים מתחילים להשתמש בה. אם אתה מודאג לגבי קבלת חשבונות ב- AWS, שקול להגדיר אזעקות שימוש המודיעות לך אם השימוש עובר רף מוגדר.

להלן תיאור השלבים הדרושים. יצרתי סרטון שווה ערך המראה כיצד לבצע את כל השלבים הללו. אתה יכול להשתמש באחד או בשניהם כדי להשלים שלב זה.

  1. נווט אל https://aws.amazon.com/ והיכנס למסוף או צור חשבון בחינם אם אין לך חשבון.
  2. חפש ולחץ על למבדה תחת שירותים
  3. לחץ על "צור פונקציה"
  4. בחר "מחבר מאפס", תן לו שם ובחר את גירסת ה- Python 3 העדכנית ביותר לזמן ריצה
  5. שנה את "ערוך קוד מוטבע" ל"העלה קובץ.zip "ובחר את קובץ.zip שנוצר למעלה
  6. בחלון חדש, נווט אל https://developer.amazon.com/alexa/console/ask והיכנס
  7. לחץ על "צור מיומנות"
  8. סמן אותו, בחר דגם "מותאם אישית" ו- "הקצה משלך" ולחץ על "צור מיומנות"
  9. לחץ על "התחל מאפס" ולחץ על "בחר"
  10. תחת "כוונות", לחץ על "הוסף"
  11. צור כוונה מותאמת אישית בשם "alexa_to_pi" ומלא את "כתוב {אדם}" כאמירה לדוגמה.
  12. צור משבצת כוונה בשם "אדם" עם סוג "AMAZON. Person"
  13. צור כוונה מותאמת אישית בשם "pi_to_alexa" ומלא "בדוק את הטמפרטורה מהחיישן {sensor_num}
  14. צור חריץ של כוונה בשם "sensor_num" עם סוג "AMAZON. NUMBER"
  15. תחת ממשקים, הפעל את "בקר ממשק מותאם אישית"
  16. תחת נקודת קצה, בחר "AWS Lambda ARN" והעתק את "מזהה המיומנות שלך"
  17. נווט חזרה אל מסוף AWS
  18. לחץ על "הוסף טריגר"
  19. בחר "ערכת כישורים של Alexa", סמן "הפעל" תחת אימות זיהוי מיומנות, הדבק את מזהה המיומנות שהעתקת ולחץ על הוסף
  20. העתק את ה- Lambda ARN בפינה הימנית העליונה
  21. נווט חזרה למסוף המפתחים של Alexa והדבק את ה- Lambda ARN בשדה "אזור ברירת מחדל"
  22. תחת הזמנה, הגדר את שם הזמנת הכישורים להיות "הגאדג'ט שלי"
  23. לחץ על "שמור דגם" ולאחר מכן על "בנה דגם"
  24. לחץ על "בדוק" בכרטיסיות העליונות ושנה את הבורר מ"כבוי "ל"פיתוח"
  25. שים לב שיומני הפונקציה Lambda נמצאים בשירות "CloudWatch" ב- AWS.

שלב 4: הגדר את הקוד ב- Pi Raspberry שלך

כדי ש- Raspberry Pi שלך יתקשר עם מכשיר ה- Alexa, הוא צריך קוד כלשהו כדי להקל על העברת מידע באמצעות Bluetooth ושמירה על חיבור זה, בנוסף לכמה קבצים אחרים. הדרך הקלה ביותר להתחיל עם הקבצים העדכניים ביותר של אמזון היא לשבט את מאגר הגאדג'טים של Raspberry Pi. נווט לספריית הפרויקט הנוכחי שלך והפעל

שיבוט git

זה יטען את כל המאגר שלהם עם כל הקוד הדרוש על ה- Pi שלך. יש לו כמה פרויקטים לדוגמה המציגים חלק מהיכולות של גאדג'טים של Alexa. אם תרצה מידע נוסף, עיין במדריך ההקראה בדף Github שלהם.

הפעל את פונקציית ההתקנה שלהם כדי להגדיר הכל.

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

sudo python3 launch.py -התקנה

עקוב אחר ההנחיות והגיב "y" כשנשאל אם ברצונך להגדיר באמצעות אישורי הגאדג'ט שלך. זכור את מזהה אמזון ואת סוד הגאדג'ט מהגדרת הגאדג'ט שלך במסוף המפתחים מכיוון שהוא יתבקש כאן. בחרתי במצב שידור "bt" עבור Raspberry Pi Zero W. BLE שלי אינו נתמך על ידי כל מכשירי ה- Echo הישנים יותר, אך תוכל לחפש למה החומרה שלך מסוגלת. אם אתה משתמש ב- Pi שלך במצב שולחן עבודה, אמזון ממליצה ללחוץ באמצעות לחצן העכבר הימני על סמל ה- Bluetooth בפינה השמאלית העליונה וללחוץ על "הסר" Bluetooth "מלוח" כדי להימנע מבעיות קישוריות.

הערה: שלב זה עשוי להימשך זמן מה, תלוי בכמה צריך להתקין.

כעת יהיו לך כל קובצי התמיכה הדרושים כדי לחזור לפרויקט שלך ולהתחיל להוסיף את הפונקציות כדי לאפשר תקשורת עם הד שלך.

אם תבחר, תוכל למחוק את תיקיית "דוגמאות" ב "Alexa-Gadgets-Raspberry-Pi-Samples/src"

אתה יכול לקבל את קוד הפרוייקט שלך בכל מקום שתרצה, אבל אני אכין עבורו תיקייה בספריית הבית, לחלופין תוכל להוריד את התיקייה עם הקוד מ- Github שלי, רק הקפד לערוך את קבצי ה-ini כמתואר להלן.

cd /home /pi

mkdir my_project cd my_project גע ב- my_gadget.py גע ב- my_gadget.ini

יצרתי כעת שני קבצים בתיקיה בשם "my_project". קובץ ה-.ini חשוב. ודא שהוא מכיל את הדברים הבאים ותחליף אותו במזהה אמזון ובסוד הגאדג'ט שלך:

[GadgetSettings]

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

עכשיו, בואו נסתכל על קובץ הפייתון לפני שנכנס לפרטים:

יבוא json

מ- agt יבוא AlexaGadget

מחלקת MyGadget (AlexaGadget):

def _init _ (עצמי):

super ()._ init _ ()

def on_custom_mygadget_alexatopi (עצמי, הנחיה):

payload = json.loads (directive.payload.decode ("utf-8")) print ("נתונים שהתקבלו:" + str (מטען)) write_text (str (payload ['data'] ['person'] ['value ']))

def on_custom_mygadget_pitoalexa (עצמי, הנחיה):

payload = json.loads (directive.payload.decode ("utf-8")) print ("נתונים שהתקבלו:" + str (מטען)) payload = {'data': "הבדיקה קוראת" + str (get_temp (payload) ['data'] ['sensor_num'] ['value'])) + "מעלות."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', מטען) MyGadget (). main ()

ראשית תבחין שהוא מכנה שתי פונקציות: write_text () ו- get_temp (). בקוד שלי, אני מגדיר את הפונקציות האלה באותו קובץ, אך הן תלויות בחומרה שלי ולכן בחרתי להשמיט אותן. צירפתי קובץ זה עם הפונקציות שהוגדרו להדפיס ולהחזיר נתוני דמה למקרה שתרצה להריץ את הקוד המדויק הזה. הייתי מציע לבדוק עם הקוד המדויק הזה לפני שתשנה אותו כדי לעבוד עם הפרויקט שלך. צירפתי גם את קובץ ה-ini, אך הקפד להיכנס ולשנות את מזהה וסוד הגאדג'ט. הפונקציה העליונה מקבלת נתונים שהועברו מה- Alexa. הפונקציה התחתונה מקבלת נתונים באותו פורמט, אך מכשיר אלקסה יחכה חמש שניות עד שאירוע יועבר בחזרה עם מטען משלו. מטען זה מיוחד בכך שמכשיר Alexa ידבר את תוכנו.

ברגע שיש לך את הקבצים האלה, נווט אל התיקייה "my_project" והפעל את קובץ הפייתון.

sudo אתחול מחדש

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

אם זו הפעם הראשונה שאתה מפעיל את התוכנית, יהיה עליך להתאים אותה להתקן האקו שלך. ודא שמכשיר האקו שלך נמצא ליד ה- Raspberry Pi, מכיוון שעלינו לאפשר חיבור Bluetooth.

באפליקציית Alexa במכשיר הנייד שלך, לחץ על "מכשירים" בפינה השמאלית התחתונה.

לחץ על "הד ואלכסה" בפינה השמאלית העליונה.

לחץ על מכשיר הד שלך.

תחת "WIRELESS", הקש על "התקני Bluetooth".

הקש על "התאמת מכשיר חדש" וכדאי שתראה את הגאדג'ט שלך ברשימה.

הקש על הגאדג'ט שלך. אתה אמור לראות את דוח ה- Pi שהוא התאמה בהצלחה.

בזמן צפייה בפלט ב- Pi שלך, נסה לתת פקודה קולית לאקו:

אתה: "אלכסה, בקש מהגאדג'ט שלי לבדוק את הטמפרטורה מהחיישן הראשון"

אם הכל עבד כמו שצריך, כדאי לשמוע:

הד: "החללית קוראת 120.505 מעלות".

אתה: "אלכסה, אמרי לגאדג'ט שלי לכתוב ג'ורג 'וושינגטון."

ה- Pi אמור להדפיס:

נתונים שהתקבלו: {'data': {'person': {'name': 'person', 'value': 'George Washington', 'confirmStatus': 'NONE'}}}

ג'ורג' וושינגטון"

שלב 5: עטיפה

הסרטון המוצג כאן הוא דוגמה לגאדג'ט שעובד עם קריאת הטמפרטורה (אותו בדיקה ב- F לעומת C) וכתיבת שמות לתצוגה פשוטה.

כעת, כשתקווה שמשהו עובד עליך, עליך לנסות להתאים אישית את הפרויקט שלך כך שיוכל להפוך את הפרויקט שלך ליותר מסוגל. זכור כי אתה יכול לערוך בקלות את הכוונות במסוף המפתחים של Alexa וכי כל המשבצות שבהן אתה משתמש יועברו לפי שלך במטען. יתר על כן, תוכל לגרום לאלקסה להגיד כל דבר שתרצה על ידי עריכת המטען שאתה מחזיר במקרה מקוד ה- Raspberry Pi שלך.

שים לב שהדרכה זו אינה מיועדת להיות הפתרון הסופי לכל היכולות שאתה יכול לרצות עם גאדג'ט Alexa. זה מוגבל בכוונה לתת לך שתי פונקציות פשוטות להעברת נתונים לכל כיוון בין אלקסה לגאדג'ט. אם אתה מעוניין לבנות דגמי אינטראקציה מתוחכמים יותר, הייתי ממליץ לך לקרוא את כל קבצי ה- readme ב https://github.com/alexa/Alexa-Gadgets-Raspberry-P… ולנסות את כל הדוגמאות שהם מספקים. אני גם מציע שתקרא את התיעוד של ערכת הכלים של גאדג'טים של Alexa וערכת המיומנויות של Alexa.

מוּמלָץ: