תוכלו לפעול לפי ההוראות הבאות כדי להריץ קוד מותאם אישית במכשיר בתגובה לפקודות מ-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.