हैंडल से जुड़े निर्देश

Google Assistant से मिलने वाले निर्देशों के जवाब में अपने डिवाइस पर कस्टम कोड चलाने के लिए, इन निर्देशों का पालन करें.

सैंपल चलाएं

अब आपने एक trait तय कर लिया है और मॉडल को अपडेट कर दिया है. ऐसे में, पक्का करें कि 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

कमांड हैंडलर ढूंढना

सैंपल कोड में मौजूद hotword.py फ़ाइल, अनुरोध भेजने और Google Assistant से जवाब पाने के लिए, SDK टूल का इस्तेमाल करती है.

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

हैंडलर की इस परिभाषा को खोजें:

def process_event(event):

फ़िलहाल, यह फ़ंक्शन नीचे दी गई लाइन वाले हर डिवाइस ऐक्शन इवेंट का नाम और सभी पैरामीटर प्रिंट करता है:

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

यह कोड action.devices.commands.OnOff निर्देश को हैंडल करता है. यह कमांड, OnOff trait स्कीमा का हिस्सा है. फ़िलहाल, यह कोड सिर्फ़ कंसोल पर आउटपुट को प्रिंट करता है. इस कोड में बदलाव करके, अपने प्रोजेक्ट में मनचाहा काम किया जा सकता है. process_event() में print निर्देश के तहत नीचे दिए गए ब्लॉक को जोड़ें.

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, चालू करें.

अगर आपने Raspबेरी Pi से एलईडी कनेक्ट किया है, तो ऑनऑफ़ निर्देश के जवाब में एलईडी लाइट कैसे चालू करें, यह जानने के लिए पढ़ना जारी रखें. अगर आपने ऐसा नहीं किया है, तो ज़्यादा traits और हैंडलर जोड़ने का तरीका जानने के लिए अगले सेक्शन पर जाएं.

अगला चरण - Raspबेरी Pi

अब आपको पता है कि आने वाले कमांड को कैसे हैंडल करना है, तो एलईडी लाइट करने के लिए सैंपल कोड में बदलाव करें. अगर आप रैज़बेरी पाई का इस्तेमाल कर रहे हैं, तो इसके लिए कुछ और हार्डवेयर की ज़रूरत होगी.

GPIO पैकेज इंपोर्ट करें

Raspबेरी Pi पर मौजूद सामान्य 'इनपुट/आउटपुट' (GPIO) पिन को आसानी से ऐक्सेस करने के लिए, वर्चुअल एनवायरमेंट में RPi.GPIO पैकेज इंस्टॉल करें.

pip install RPi.GPIO

सैंपल में बदलाव करें

hotword.py फ़ाइल खोलें.

nano hotword.py

hotword.py फ़ाइल में, RPi.GPIO मॉड्यूल इंपोर्ट करें, ताकि पाई पर GPIO पिन को कंट्रोल किया जा सके. इस स्टेटमेंट को 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() में जोड़े गए कोड में बदलाव करें. ऑन निर्देश मिलने पर, पिन को हाई लॉजिक स्टेट पर सेट करें. बंद निर्देश मिलने पर, पिन को लो लॉजिक स्टेट पर सेट करें.

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

पहले वाली क्वेरी का ही इस्तेमाल करें. एलईडी चालू हो जानी चाहिए.

यह तो बस शुरुआत है. ज़्यादा traits और हैंडलर जोड़ने का तरीका जानें.