ניהול פקודות

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

הפעלת הדוגמה

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

googlesamples-assistant-hotword --device-model-id my-model

אפשר לנסות את השאילתה הבאה:

Ok Google, turn on.

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

ON_RECOGNIZING_SPEECH_FINISHED:
  {'text': 'turn on'}
ON_DEVICE_ACTION:
  {'inputs': [{'payload': {'commands': [{'execution': [{'command': 'action.devices.commands.OnOff',
  'params': {'on': True}}], 'devices': [{'id': 'E56D39D894C2704108758EA748C71255'}]}]},
  'intent': 'action.devices.EXECUTE'}], 'requestId': '4785538375947649081'}
Do command action.devices.commands.OnOff with params {'on': True}

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

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

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

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

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

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

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/library
nano hotword.py

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

def process_event(event):

נכון לעכשיו, הפונקציה הזו מדפיסה כל שם של אירוע Device Action וכל פרמטר עם השורה הבאה:

print('Do command', command, 'with params', str(params))

הקוד הזה מטפל בפקודה action.devices.commands.OnOff. הפקודה הזו היא חלק מסכימת התכונה OnOff. נכון לעכשיו, הקוד מדפיס רק את הפלט בקונסולה. תוכלו לשנות את הקוד כדי לעשות מה שתרצו בפרויקט. מוסיפים את הבלוק הבא בפקודה print ב-process_event().

print('Do command', command, 'with params', str(params)) # Add the following:
if command == "action.devices.commands.OnOff":
    if params['on']:
        print('Turning the LED on.')
    else:
        print('Turning the LED off.')

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

python hotword.py --device-model-id my-model

השתמש באותה שאילתה כמו קודם:

Ok Google, turn on.

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

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

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

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

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

pip install RPi.GPIO

שינוי הדוגמה

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

nano hotword.py

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

import RPi.GPIO as GPIO

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

with Assistant(credentials, device_model_id) as assistant:
    events = assistant.start()

    device_id = assistant.device_id
    print('device_model_id:', device_model_id)
    print('device_id:', device_id + '\n')
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(25, GPIO.OUT, initial=GPIO.LOW)
        ...

עליך לשנות את הקוד שהוספת ב-process_event(). כשפקודת on מתקבלת, מגדירים את קוד האימות למצב הלוגי הגבוה. כשהפקודה מושבתת, מגדירים את הסיכה למצב הלוגי הנמוך.

if command == "action.devices.commands.OnOff":
    if params['on']:
        print('Turning the LED on.')
        GPIO.output(25, 1)
    else:
        print('Turning the LED off.')
        GPIO.output(25, 0)

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

הפעלת הדוגמה

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

python hotword.py --device-model-id my-model

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

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