ניהול פקודות

כדי להריץ קוד מותאם אישית במכשיר, צריך לפעול לפי ההוראות הבאות: לענות לפקודות מ-Google Assistant.

הרצת הדוגמה

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

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

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

הפעלת ההגדרה 'Ok Google'.

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

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):

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

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

הקוד הזה מטפל בפקודה action.devices.commands.OnOff. הזה הפקודה היא חלק מ-OnOff של trait. נכון לעכשיו, הקוד הזה רק מדפיס את הפלט למסוף. אפשר תשנה את הקוד הזה כדי שיעשה כל מה שרוצים פרויקט. מוסיפים את הבלוק הבא בפקודה 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'.

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

השלבים הבאים – פאי פטל

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

ייבוא חבילת ה-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.