ניהול פקודות

תוכלו לפעול לפי ההוראות הבאות כדי להריץ קוד מותאם אישית במכשיר בתגובה לפקודות מ-Google Assistant.

הפעלת הדוגמה

אחרי שהגדרתם תכונה ועדכנתם את המודל, כדאי לוודא ש-Google Assistant שולחת בחזרה פקודת הפעלה/כיבוי בשביל השאילתה המתאימה.

googlesamples-assistant-pushtotalk

מקישים על מקש Enter ומנסים את השאילתה הבאה:

הפעלה.

אתם אמורים לראות את ההצהרות הבאות בפלט של המסוף. אם לא, קראו את ההוראות לפתרון בעיות.

INFO:root:Recording audio request.
INFO:root:End of audio request detected
INFO:root:Transcript of user request: "turn on".
INFO:root:Playing assistant response.
INFO:root:Turning device on
INFO:root:Waiting for device executions to complete.
INFO:root:Finished playing assistant response.

אפשר לראות איפה ההצהרות האלה מופיעות בקוד המקור.

קבלת קוד המקור

עכשיו אתם מוכנים להתחיל את הפרויקט שלכם:

git clone https://github.com/googlesamples/assistant-sdk-python

איתור ה-handler של הפקודות

בקובץ pushtotalk.py שבקוד לדוגמה נעשה שימוש ב-SDK כדי לשלוח בקשות ולקבל תשובות מ-Google Assistant.

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/grpc
nano pushtotalk.py

מחפשים את הגדרת ה-handler הבאה:

device_handler = device_helpers.DeviceRequestHandler(device_id)

@device_handler.command('action.devices.commands.OnOff')
def onoff(on):
    if on:
        logging.info('Turning device on')
    else:
        logging.info('Turning device off')

הקוד ב-onoff() מטפל בפקודה action.devices.commands.OnOff. הפקודה הזו היא חלק מסכימת התכונה OnOff.

נכון לעכשיו, ההגדרה של onoff() מתעדת את הפלט במסוף. היא משתמשת בפונקציות מסייעות ב-device_helpers.py כדי לנתח את קובץ ה-JSON של התגובה ולאחסן את הפרמטרים של הפקודה במשתנים כדי להקל על השימוש. תוכלו לשנות את הקוד כדי לבצע מה שתרצו בפרויקט.

אם יש לכם ערכת LED, המשיכו לקרוא כדי ללמוד איך להדליק את נורית ה-LED בתגובה לפקודה OnOff. אם לא, תוכלו לדלג על הקטע הבא כדי ללמוד איך מוסיפים עוד תכונות ורכיבי handler.

השלבים הבאים – Raspberry Pi

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

ייבוא חבילת ה-GPIO

כדי לפשט את הגישה של התוכנה לסיכות של קלט/פלט למטרה כללית (GPIO) ב-Raspberry Pi, מתקינים את חבילת RPi.GPIO בסביבה הווירטואלית.

pip install RPi.GPIO

שינוי הדוגמה

פותחים את הקובץ pushtotalk.py.

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/grpc
nano pushtotalk.py

בקובץ pushtotalk.py, מייבאים את המודול RPi.GPIO כדי לשלוט בסיכות ה-GPIO ב-Pi. מציבים את ההצהרה הבאה ליד שאר ההצהרות של import:

import RPi.GPIO as GPIO

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

device_handler = device_helpers.DeviceRequestHandler(device_id)
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT, initial=GPIO.LOW)

@device_handler.command('action.devices.commands.OnOff')
def onoff(on):
    if on:
        logging.info('Turning device on')
        GPIO.output(25, 1)
    else:
        logging.info('Turning device off')
        GPIO.output(25, 0)

שומרים את השינויים וסוגרים את הקובץ.

הפעלת הדוגמה

מריצים את קוד הדוגמה שהשתנה.

python pushtotalk.py

משתמשים באותה שאילתה כמו קודם. נורית ה-LED אמורה לפעול.

זו רק ההתחלה. כאן מוסבר איך להוסיף תכונות ורכיבי handler.