स्थानीय होम को डीबग करना

1. शुरू करने से पहले

स्मार्ट होम इंटिग्रेशन की मदद से, Google Assistant को लोगों के घरों में कनेक्ट किए गए डिवाइसों को कंट्रोल करने की अनुमति मिलती है. क्लाउड-टू-क्लाउड इंटिग्रेशन बनाने के लिए, आपको एक क्लाउड वेबहुक एंडपॉइंट देना होगा. यह स्मार्ट होम इंटेंट को हैंडल कर सकता है. उदाहरण के लिए, जब कोई उपयोगकर्ता कहता है, "Ok Google, लाइट चालू करो," तो Assistant, डिवाइस की स्थिति को अपडेट करने के लिए, आपके क्लाउड फ़ुलफ़िलमेंट को निर्देश भेजती है.

लोकल होम एसडीके, स्मार्ट होम इंटिग्रेशन को बेहतर बनाता है. इसके लिए, यह एक लोकल पाथ जोड़ता है, ताकि स्मार्ट होम इंटेंट को सीधे Google Home डिवाइस पर रूट किया जा सके. इससे, उपयोगकर्ताओं के निर्देशों को प्रोसेस करने में लगने वाला समय कम हो जाता है और भरोसेमंद तरीके से काम होता है. इसकी मदद से, TypeScript या JavaScript में लोकल फ़ुलफ़िलमेंट ऐप्लिकेशन लिखा और डिप्लॉय किया जा सकता है. यह ऐप्लिकेशन, डिवाइसों की पहचान करता है और Google Home स्मार्ट स्पीकर या Google Nest स्मार्ट डिसप्ले पर निर्देश लागू करता है. इसके बाद, आपका ऐप्लिकेशन सीधे तौर पर उपयोगकर्ताओं के मौजूदा स्मार्ट डिवाइसों से कम्यूनिकेट करता है. इसके लिए, वह लोकल एरिया नेटवर्क का इस्तेमाल करता है. साथ ही, कमांड पूरी करने के लिए मौजूदा स्टैंडर्ड प्रोटोकॉल का इस्तेमाल करता है.

72ffb320986092c.png

क्लाउड-टू-क्लाउड इंटिग्रेशन को डीबग करना, प्रोडक्शन क्वालिटी वाले इंटिग्रेशन बनाने के लिए एक ज़रूरी चरण है. हालांकि, जानकारी देने वाले, इस्तेमाल में आसान समस्या हल करने और टेस्टिंग टूल के बिना, यह मुश्किल और समय लेने वाला काम है. क्लाउड-टू-क्लाउड इंटिग्रेशन को डीबग करने के लिए, Google Cloud Platform (GCP) मेट्रिक, लॉगिंग, और स्मार्ट होम के लिए टेस्ट सुइट उपलब्ध हैं. इनसे आपको इंटिग्रेशन से जुड़ी समस्याओं की पहचान करने और उन्हें हल करने में मदद मिलती है.

ज़रूरी शर्तें

आपको क्या बनाना है

इस कोडलैब में, क्लाउड-टू-क्लाउड इंटिग्रेशन के लिए लोकल फ़ुलफ़िलमेंट बनाया जाएगा. साथ ही, इसे Assistant से कनेक्ट किया जाएगा. इसके बाद, स्मार्ट होम और Google Cloud Platform (GCP) मेट्रिक और लॉगिंग के लिए टेस्ट सुइट की मदद से, Local Home ऐप्लिकेशन को डीबग किया जाएगा.

आपको क्या सीखने को मिलेगा

  • GCP मेट्रिक और लॉगिंग का इस्तेमाल करके, प्रोडक्शन से जुड़ी समस्याओं का पता कैसे लगाया जाए और उन्हें कैसे हल किया जाए.
  • फ़ंक्शनल और एपीआई से जुड़ी समस्याओं का पता लगाने के लिए, टेस्ट सुइट का इस्तेमाल करने का तरीका.
  • Local Home ऐप्लिकेशन डेवलप करते समय, Chrome Dev Tools का इस्तेमाल करने का तरीका.

आपको किन चीज़ों की ज़रूरत होगी

  • Google Chrome का सबसे नया वर्शन
  • iOS या Android डिवाइस, जिस पर Google Home ऐप्लिकेशन मौजूद हो
  • Google Home स्मार्ट स्पीकर या Google Nest स्मार्ट डिसप्ले
  • Node.js का 10.16 या इसके बाद का वर्शन
  • एक Google खाता
  • Google Cloud बिलिंग खाता

2. वॉशर ऐप्लिकेशन चलाएं

सोर्स कोड पाना

अपनी डेवलपमेंट मशीन पर इस कोडलैब का सैंपल डाउनलोड करने के लिए, यहां दिए गए लिंक पर क्लिक करें:

...या कमांड लाइन से GitHub रिपॉज़िटरी को क्लोन किया जा सकता है:

$ git clone https://github.com/google-home/smarthome-debug-local.git

प्रोजेक्ट के बारे में

स्टार्टर ऐप्लिकेशन में, क्लाउड-टू-क्लाउड इंटिग्रेशन के लिए लोकल फ़ुलफ़िलमेंट की सुविधा चालू करना कोडलैब की तरह ही सबडायरेक्ट्री और क्लाउड फ़ंक्शन शामिल होते हैं. हालांकि, यहां app-start के बजाय app-faulty है. हम एक ऐसे लोकल होम ऐप्लिकेशन से शुरुआत करेंगे जो काम करता है, लेकिन उतना अच्छा नहीं है.

Firebase से कनेक्ट करें

हम उसी प्रोजेक्ट का इस्तेमाल करेंगे जिसे आपने क्लाउड-टू-क्लाउड इंटिग्रेशन के लिए, स्थानीय पूर्ति की सुविधा चालू करना कोडलैब में बनाया था. हालांकि, हम इस कोडलैब में डाउनलोड की गई फ़ाइलों को डिप्लॉय करेंगे.

app-faulty डायरेक्ट्री पर जाएं. इसके बाद, क्लाउड-टू-क्लाउड इंटिग्रेशन के लिए लोकल फ़ुलफ़िलमेंट की सुविधा चालू करना कोडलैब में बनाए गए इंटिग्रेशन प्रोजेक्ट के साथ Firebase CLI सेट अप करें:

$ cd app-faulty
$ firebase use <project-id>

Firebase पर डिप्लॉय करना

app-faulty/functions फ़ोल्डर पर जाएं और npm का इस्तेमाल करके, सभी ज़रूरी डिपेंडेंसी इंस्टॉल करें:

$ cd functions
$ npm install

ध्यान दें: अगर आपको नीचे दिया गया मैसेज दिखता है, तो इसे अनदेखा करके आगे बढ़ें. यह चेतावनी, कुछ पुरानी डिपेंडेंसी की वजह से मिली है. इसके बारे में ज़्यादा जानकारी यहां देखी जा सकती है.

found 5 high severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

app-faulty/local/ डायरेक्ट्री पर जाएं. इसके बाद, TypeScript कंपाइलर डाउनलोड करने और ऐप्लिकेशन को कंपाइल करने के लिए, यहां दिए गए निर्देश चलाएं:

$ cd ../local
$ npm install
$ npm run build

यह index.ts (टाइपस्क्रिप्ट) सोर्स को कंपाइल करता है और app-faulty/public/local-home/ डायरेक्ट्री में यह कॉन्टेंट डालता है:

  • bundle.js—कंपाइल किया गया JavaScript आउटपुट, जिसमें लोकल ऐप्लिकेशन और डिपेंडेंसी शामिल होती हैं.
  • index.html—लोकल होस्टिंग पेज का इस्तेमाल, डिवाइस पर ऐप्लिकेशन की टेस्टिंग के लिए किया जाता है.

डिपेंडेंसी इंस्टॉल करने और प्रोजेक्ट को कॉन्फ़िगर करने के बाद, अब ऐप्लिकेशन को पहली बार चलाया जा सकता है.

$ firebase deploy

आपको कंसोल में यह आउटपुट दिखेगा:

...

✔ Deploy complete!

Project Console: https://console.firebase.google.com/project/<project-id>/overview
Hosting URL: https://<projectcd -id>.web.app

इस कमांड से, कई Firebase के लिए Cloud Functions के साथ-साथ एक वेब ऐप्लिकेशन भी डिप्लॉय किया जाता है.

HomeGraph को अपडेट करना

वेब ऐप्लिकेशन देखने के लिए, अपने ब्राउज़र (https://<project-id>.web.app) में होस्टिंग यूआरएल खोलें. वेब यूज़र इंटरफ़ेस (यूआई) पर, रीफ़्रेश करेंae8d3b25777a5e30.png बटन पर क्लिक करें. इससे, सिंक करने का अनुरोध करें सुविधा का इस्तेमाल करके, खराब वॉशर ऐप्लिकेशन से डिवाइस के नए मेटाडेटा के साथ HomeGraph को अपडेट किया जा सकेगा.

fa3c47f293cfe0b7.png

Google Home ऐप्लिकेशन खोलें और पुष्टि करें कि आपको "खराब वॉशर" के नाम से वॉशर डिवाइस दिख रहा है. डिवाइस को उस रूम में असाइन करना न भूलें जिसमें Nest डिवाइस मौजूद हो.

2a082ee11d47ad1a.png

3. स्मार्ट वॉशर चालू करो

अगर आपने क्लाउड-टू-क्लाउड इंटिग्रेशन के लिए, स्थानीय फ़ुलफ़िलमेंट की सुविधा चालू करें कोडलैब चलाया है, तो आपको वर्चुअल स्मार्ट वॉशर पहले ही शुरू कर देना चाहिए. अगर वर्चुअल डिवाइस बंद हो गया है, तो उसे फिर से चालू करना न भूलें.

डिवाइस को चालू करें

virtual-device/ डायरेक्ट्री पर जाएं और डिवाइस स्क्रिप्ट चलाएं. इसके लिए, कॉन्फ़िगरेशन पैरामीटर को आर्ग्युमेंट के तौर पर पास करें:

$ cd ../../virtual-device
$ npm install
$ npm start -- \
  --deviceId=deviceid123 --projectId=<project-id> \
  --discoveryPortOut=3311 --discoveryPacket=HelloLocalHomeSDK

पुष्टि करें कि डिवाइस स्क्रिप्ट, अनुमानित पैरामीटर के साथ काम करती है:

(...): UDP Server listening on 3311
(...): Device listening on port 3388
(...): Report State successful

4. लोकल होम ऐप्लिकेशन की जांच करना

Google Home डिवाइस को बोलकर निर्देश देकर, अपने डिवाइस को निर्देश दें. जैसे:

"Ok Google, मेरी वॉशिंग मशीन चालू करो."

"Ok Google, मेरी वॉशिंग मशीन चालू करो."

"Ok Google, फ़ोर्स लोकल."

"Ok Google, मेरी वॉशिंग मशीन बंद करो."

"फ़ोर्स लोकल" सुविधा चालू करने के बाद, वॉशर को कंट्रोल करने की कोशिश करने पर, आपको Google Assistant का यह जवाब मिलेगा: "माफ़ करें, ऐसा लगता है कि फ़िलहाल वॉशर उपलब्ध नहीं है".

इसका मतलब है कि डिवाइस को लोकल पाथ से ऐक्सेस नहीं किया जा सकता. "Ok Google, फ़ोर्स लोकल" कमांड देने से पहले यह काम कर रहा था, क्योंकि जब डिवाइस को लोकल पाथ से ऐक्सेस नहीं किया जा सकेगा, तब हम क्लाउड पाथ का इस्तेमाल करेंगे. हालांकि, "फ़ोर्स लोकल" के बाद, क्लाउड पाथ पर वापस जाने का विकल्प बंद हो जाता है.

समस्या का पता लगाने के लिए, आइए हमारे पास मौजूद टूल का इस्तेमाल करें: Google Cloud Platform (GCP) Metrics और Logging और Chrome Developer Tools.

5. Local Home ऐप्लिकेशन को डीबग करना

यहां दिए गए सेक्शन में, Google की ओर से उपलब्ध कराए गए टूल का इस्तेमाल करके यह पता लगाया जाएगा कि डिवाइस, लोकल पाथ के ज़रिए क्यों नहीं पहुंचा जा सकता. Google Home डिवाइस से कनेक्ट करने, कंसोल लॉग देखने, और लोकल होम ऐप्लिकेशन को डीबग करने के लिए, Google Chrome Developer Tools का इस्तेमाल किया जा सकता है. Cloud Logging को कस्टम लॉग भी भेजे जा सकते हैं, ताकि आपको उन गड़बड़ियों के बारे में पता चल सके जो आपके उपयोगकर्ताओं को लोकल होम ऐप्लिकेशन में मिल रही हैं.

Chrome डेवलपर टूल कनेक्ट करना

डीबगर को अपने लोकल फ़ुलफ़िलमेंट ऐप्लिकेशन से कनेक्ट करने के लिए, यह तरीका अपनाएं:

  1. पक्का करें कि आपने अपने Google Home डिवाइस को ऐसे उपयोगकर्ता से लिंक किया हो जिसके पास Developer Console प्रोजेक्ट को ऐक्सेस करने की अनुमति हो.
  2. अपने Google Home डिवाइस को रीबूट करें. इससे उसे आपके एचटीएमएल का यूआरएल और Developer Console में डाला गया स्कैन कॉन्फ़िगरेशन मिल जाता है.
  3. अपनी डेवलपमेंट मशीन पर Chrome लॉन्च करें.
  4. Chrome में नया टैब खोलें और इंस्पेक्टर लॉन्च करने के लिए, पता फ़ील्ड में chrome://inspect डालें.

आपको पेज पर डिवाइसों की सूची दिखेगी. साथ ही, Google Home डिवाइस के नाम के नीचे, आपके ऐप्लिकेशन का यूआरएल दिखेगा.

567f97789a7d8846.png

इंस्पेक्टर लॉन्च करना

Chrome डेवलपर टूल लॉन्च करने के लिए, अपने ऐप्लिकेशन के यूआरएल में जाकर जांच करें पर क्लिक करें. Console टैब चुनें और पुष्टि करें कि आपको अपने TypeScript ऐप्लिकेशन से प्रिंट किया गया IDENTIFY इंटेंट का कॉन्टेंट दिख रहा है.

774c460c59f9f84a.png

इस आउटपुट का मतलब है कि IDENTIFY हैंडलर ट्रिगर हो गया है. हालांकि, IdentifyResponse में मिले verificationId की वैल्यू, आपके HomeGraph में मौजूद किसी भी डिवाइस से मेल नहीं खाती. आइए, कुछ कस्टम लॉग जोड़कर देखते हैं कि ऐसा क्यों हो रहा है.

कस्टम लॉग जोड़ना

Local Home SDK से DEVICE_VERIFICATION_FAILED गड़बड़ी प्रिंट की गई है. हालांकि, इससे गड़बड़ी की असल वजह का पता लगाने में ज़्यादा मदद नहीं मिलती. आइए, कुछ कस्टम लॉग जोड़ते हैं, ताकि यह पक्का किया जा सके कि हम स्कैन किए गए डेटा को सही तरीके से पढ़ रहे हैं और प्रोसेस कर रहे हैं. ध्यान दें कि अगर हम किसी गड़बड़ी की वजह से प्रॉमिस को अस्वीकार करते हैं, तो गड़बड़ी का मैसेज Cloud Logging को भी भेजा जाता है.

local/index.ts

identifyHandler(request: IntentFlow.IdentifyRequest):
    Promise<IntentFlow.IdentifyResponse> {
  console.log("IDENTIFY intent: " + JSON.stringify(request, null, 2));

  const scanData = request.inputs[0].payload.device.udpScanData;
  if (!scanData) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_request', 'Invalid scan data');
    return Promise.reject(err);
  }

  // In this codelab, the scan data contains only local device id.
  // Is there something wrong here?
  const localDeviceId = Buffer.from(scanData.data);
  console.log(`IDENTIFY handler: received local device id
      ${localDeviceId}`);

  // Add custom logs
  if (!localDeviceId.toString().match(/^deviceid[0-9]{3}$/gi)) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_device', 'Invalid device id from scan data ' +
        localDeviceId);
    return Promise.reject(err);
  }

  const response: IntentFlow.IdentifyResponse = {
    intent: Intents.IDENTIFY,
    requestId: request.requestId,
    payload: {
      device: {
        id: 'washer',
        verificationId: localDeviceId.toString(),
      }
    }
  };
  console.log("IDENTIFY response: " + JSON.stringify(response, null, 2));

  return Promise.resolve(response);
}

साथ ही, लोकल होम ऐप्लिकेशन का वर्शन बदलें, ताकि हम यह पता लगा सकें कि हम सही वर्शन का इस्तेमाल कर रहे हैं या नहीं.

local/index.ts

const localHomeSdk = new App('1.0.1');

कस्टम लॉग जोड़ने के बाद, आपको ऐप्लिकेशन को फिर से कंपाइल करना होगा. साथ ही, इसे Firebase पर फिर से डिप्लॉय करना होगा.

$ cd ../app-faulty/local
$ npm run build
$ firebase deploy --only hosting

अब अपने Google Home डिवाइस को रीबूट करें, ताकि वह अपडेट किए गए लोकल होम ऐप्लिकेशन को लोड कर सके. यह देखने के लिए कि Google Home डिवाइस, उम्मीद के मुताबिक वर्शन का इस्तेमाल कर रहा है या नहीं, Chrome Developer Tools में Console लॉग देखें.

ecc56508ebcf9ab.png

Cloud Logging ऐक्सेस करना

आइए, गड़बड़ियों का पता लगाने के लिए Cloud Logging का इस्तेमाल करने का तरीका जानें. अपने प्रोजेक्ट के लिए Cloud Logging को ऐक्सेस करने के लिए:

  1. Cloud Platform Console में, प्रोजेक्ट पेज पर जाएं.
  2. स्मार्ट होम प्रोजेक्ट चुनें.
  3. कार्रवाइयां में जाकर, लॉगिंग > लॉग एक्सप्लोरर चुनें.

लॉगिंग डेटा का ऐक्सेस, Identity and Access Management (IAM) के ज़रिए मैनेज किया जाता है. यह ऐक्सेस, इंटिग्रेशन प्रोजेक्ट के उपयोगकर्ताओं के लिए होता है. डेटा लॉग करने के लिए भूमिकाओं और अनुमतियों के बारे में ज़्यादा जानने के लिए, Cloud Logging का ऐक्सेस कंट्रोल लेख पढ़ें.

ऐडवांस फ़िल्टर का इस्तेमाल करना

हमें पता है कि IDENTIFY इंटेंट में गड़बड़ियां हो रही हैं. ऐसा इसलिए हो रहा है, क्योंकि लोकल डिवाइस की पहचान नहीं हो पा रही है. इसलिए, लोकल पाथ काम नहीं कर रहा है. हालांकि, हमें यह जानना है कि समस्या क्या है. इसलिए, आइए सबसे पहले IDENTIFY हैंडलर में होने वाली गड़बड़ियों को फ़िल्टर करें.

क्वेरी दिखाएं टॉगल पर क्लिक करें. यह क्वेरी बिल्डर बॉक्स में बदल जाएगा. क्वेरी बिल्डर बॉक्स में jsonPayload.intent="IDENTIFY" डालें और क्वेरी चलाएं बटन पर क्लिक करें.

4c0b9d2828ee2447.png

इस वजह से, आपको IDENTIFY हैंडलर में मौजूद सभी गड़बड़ी लॉग मिलते हैं. इसके बाद, आखिरी गड़बड़ी को बड़ा करें. IDENTIFY हैंडलर में, आपको errorCode और debugString दिखेंगे जिन्हें आपने अभी-अभी प्रॉमिस को अस्वीकार करते समय सेट किया था.

71f2f156c6887496.png

debugString से पता चलता है कि लोकल डिवाइस आईडी, सही फ़ॉर्मैट में नहीं है. Local Home ऐप्लिकेशन को लोकल डिवाइस आईडी, deviceid से शुरू होने वाली स्ट्रिंग के तौर पर मिलता है. इसके बाद, तीन अंक होते हैं. हालांकि, यहां लोकल डिवाइस आईडी एक हेक्स स्ट्रिंग है.

गड़बड़ी ठीक करना

सोर्स कोड पर वापस जाने पर, हमें पता चलता है कि हमने स्ट्रिंग को बाइट में बदलते समय एन्कोडिंग नहीं दी थी. इस सोर्स कोड में, स्कैन किए गए डेटा से लोकल डिवाइस आईडी को पार्स किया जाता है. स्कैन किया गया डेटा, हेक्स स्ट्रिंग के तौर पर मिलता है. इसलिए, hex को कॉल करते समय, hex को वर्ण एन्कोडिंग के तौर पर पास करें.Buffer.from()

local/index.ts

identifyHandler(request: IntentFlow.IdentifyRequest):
    Promise<IntentFlow.IdentifyResponse> {
  console.log("IDENTIFY intent: " + JSON.stringify(request, null, 2));

  const scanData = request.inputs[0].payload.device.udpScanData;
  if (!scanData) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_request', 'Invalid scan data');
    return Promise.reject(err);
  }

  // In this codelab, the scan data contains only local device id.
  const localDeviceId = Buffer.from(scanData.data, 'hex');
  console.log(`IDENTIFY handler: received local device id
      ${localDeviceId}`);

  if (!localDeviceId.toString().match(/^deviceid[0-9]{3}$/gi)) {
    const err = new IntentFlow.HandlerError(request.requestId,
      'invalid_device', 'Invalid device id from scan data ' +
      localDeviceId);
    return Promise.reject(err);
  }

  const response: IntentFlow.IdentifyResponse = {
    intent: Intents.IDENTIFY,
    requestId: request.requestId,
    payload: {
      device: {
        id: 'washer',
        verificationId: localDeviceId.toString(),
      }
    }
  };
  console.log("IDENTIFY response: " + JSON.stringify(response, null, 2));

  return Promise.resolve(response);
}

साथ ही, लोकल होम ऐप्लिकेशन का वर्शन बदलें, ताकि हम यह पता लगा सकें कि हम सही वर्शन का इस्तेमाल कर रहे हैं या नहीं.

local/index.ts

const localHomeSdk = new App('1.0.2');

गड़बड़ी को ठीक करने के बाद, ऐप्लिकेशन को कंपाइल करें और Firebase पर फिर से डिप्लॉय करें. app-faulty/local में, यह कमांड चलाएं:

$ npm run build
$ firebase deploy --only hosting

समस्या ठीक करने की जांच करना

डिप्लॉयमेंट के बाद, अपने Google Home डिवाइस को रीबूट करें, ताकि वह अपडेट किए गए लोकल होम ऐप्लिकेशन को लोड कर सके. पक्का करें कि लोकल होम ऐप्लिकेशन का वर्शन 1.0.2 हो. साथ ही, इस बार आपको Chrome Developers Tools Console में कोई गड़बड़ी नहीं दिखनी चाहिए.

c8456f7b5f77f894.png

अब अपने डिवाइस को फिर से निर्देश दिए जा सकते हैं.

"Ok Google, फ़ोर्स लोकल."

"Ok Google, मेरी वॉशिंग मशीन बंद करो."

"Ok Google, मेरी वॉशिंग मशीन चालू करो."

...

"Ok Google, डिफ़ॉल्ट रूप से सेट करो."

6. स्मार्ट होम के लिए Test Suite चलाना

Google Home ऐप्लिकेशन में टच कंट्रोल या बोलकर दिए जाने वाले निर्देशों का इस्तेमाल करके, अपने डिवाइस की पुष्टि करने के बाद, स्मार्ट होम के लिए टेस्ट सुइट का इस्तेमाल किया जा सकता है. इससे, डिवाइस के टाइप और इंटिग्रेशन से जुड़ी विशेषताओं के आधार पर, इस्तेमाल के उदाहरणों की पुष्टि की जा सकती है. टेस्ट सुइट, आपके इंटिग्रेशन में समस्याओं का पता लगाने के लिए कई तरह के टेस्ट करता है. साथ ही, टेस्ट के मामलों के फ़ेल होने पर जानकारी देने वाले मैसेज दिखाता है, ताकि इवेंट लॉग में जाने से पहले ही डीबग करने की प्रोसेस को तेज़ किया जा सके.

स्मार्ट होम के लिए टेस्ट सुइट चलाना

टेस्ट सुइट की मदद से, क्लाउड-टू-क्लाउड इंटिग्रेशन की जांच करने के लिए, इन निर्देशों का पालन करें:

  1. अपने वेब ब्राउज़र में, स्मार्ट होम के लिए टेस्ट सुइट खोलें.
  2. सबसे ऊपर दाएं कोने में मौजूद बटन का इस्तेमाल करके, Google में साइन इन करें. इससे Test Suite को Google Assistant को सीधे तौर पर निर्देश भेजने की अनुमति मिलती है.
  3. प्रोजेक्ट आईडी फ़ील्ड में, क्लाउड-टू-क्लाउड इंटिग्रेशन का प्रोजेक्ट आईडी डालें. इसके बाद, आगे बढ़ने के लिए आगे बढ़ें पर क्लिक करें.
  4. टेस्ट सेटिंग चरण में, आपको डिवाइस और ट्रे सेक्शन में, खराब वॉशर दिखेगा.
  5. टेस्ट के लिए अनुरोध सिंक करने की सुविधा विकल्प को बंद करें, क्योंकि वॉशर के सैंपल ऐप्लिकेशन में वॉशर को जोड़ने / हटाने / उसका नाम बदलने के लिए कोई यूज़र इंटरफ़ेस (यूआई) नहीं है. प्रोडक्शन सिस्टम में, जब भी उपयोगकर्ता डिवाइसों को जोड़ता है / हटाता है / उनका नाम बदलता है, तब आपको सिंक करने का अनुरोध करें को ट्रिगर करना होगा.
  6. Local Home SDK विकल्प को चालू रहने दें, क्योंकि हमें लोकल और क्लाउड, दोनों पाथ की जांच करनी है.
  7. टेस्ट शुरू करने के लिए, अगला: टेस्ट एनवायरमेंट पर क्लिक करें.

67433d9190fa770e.png

टेस्ट पूरे होने पर, आपको दिखेगा कि लोकल पाथ में Pause/Resume टेस्ट फ़ेल हो रहे हैं, जबकि क्लाउड पाथ में Pause/Resume टेस्ट पास हो रहे हैं.

d1ebd5cfae2a2a47.png

गड़बड़ी के मैसेज का विश्लेषण करना

फ़ेल हुए टेस्ट केस में गड़बड़ी के मैसेज को ध्यान से देखें. इनसे पता चलता है कि उस टेस्ट के लिए, अनुमानित स्थिति क्या है और असल स्थिति क्या थी. इस मामले में, "वॉशर को रोकें" के लिए, अनुमानित स्थिति isPaused: true है. हालांकि, असल स्थिति में हमें isPaused: false मिला. इसी तरह, "वॉशर को रोकें" के लिए, अनुमानित स्थिति isPaused: true है, लेकिन असल स्थिति में हमें isPaused: false मिला.

6bfd3acef9c16b84.png

गड़बड़ी के मैसेज से पता चलता है कि लोकल पाथ में, हम isPaused की स्थिति को उलटे तरीके से सेट कर रहे हैं.

गड़बड़ी की पहचान करके उसे ठीक करना

आइए, उस सोर्स कोड का पता लगाते हैं जहां Local Home ऐप्लिकेशन, डिवाइस को निर्देश भेजता है. getDataCommand(), executeHandler() से कॉल किया गया फ़ंक्शन है. इसका इस्तेमाल, डिवाइस को भेजे गए एक्ज़ीक्यूशन कमांड में payload को सेट करने के लिए किया जाता है.

local/index.ts

getDataForCommand(command: string, params: IWasherParams): unknown {
    switch (command) {
        case 'action.devices.commands.OnOff':
            return {
                on: params.on ? true : false
            };
        case 'action.devices.commands.StartStop':
            return {
                isRunning: params.start ? true : false
            };
        case 'action.devices.commands.PauseUnpause':
            return {
                // Is there something wrong here?
                isPaused: params.pause ? false : true
            };
        default:
            console.error('Unknown command', command);
            return {};
    }
}

हम isPause को रिवर्स स्टेट में सेट कर रहे हैं. जब params.pause true पर सेट हो, तब इसे true पर सेट किया जाना चाहिए. इसके अलावा, इसे false पर सेट किया जाना चाहिए. इसलिए, आइए इसे ठीक करते हैं.

local/index.ts

getDataForCommand(command: string, params: IWasherParams): unknown {
    switch (command) {
        case 'action.devices.commands.OnOff':
            return {
                on: params.on ? true : false
            };
        case 'action.devices.commands.StartStop':
            return {
                isRunning: params.start ? true : false
            };
        case 'action.devices.commands.PauseUnpause':
            return {
                isPaused: params.pause ? true : false
            };
        default:
            console.error('Unknown command', command);
            return {};
    }
}

लोकल होम ऐप्लिकेशन का वर्शन बदलें, ताकि हम यह पता लगा सकें कि हम सही वर्शन का इस्तेमाल कर रहे हैं या नहीं.

local/index.ts

const localHomeSdk = new App('1.0.3');

ऐप्लिकेशन को फिर से कंपाइल करना और Firebase पर फिर से डिप्लॉय करना न भूलें. app-faulty/local में, यह कमांड चलाएं:

$ npm run build
$ firebase deploy --only hosting

अब अपने Google Home डिवाइस को रीबूट करें, ताकि वह अपडेट किए गए लोकल होम ऐप्लिकेशन को लोड कर सके. पक्का करें कि लोकल होम ऐप्लिकेशन का वर्शन 1.0.3 हो.

समस्या ठीक करने की जांच करना

अब, स्मार्ट होम के लिए टेस्ट सुइट को उसी कॉन्फ़िगरेशन के साथ फिर से चलाएं. आपको पता चलेगा कि सभी टेस्ट केस पास हो गए हैं.

b7fc8c5d3c727d8d.png

7. बधाई हो

764dbc83b95782a.png

बधाई हो! आपने स्मार्ट होम और क्लाउड लॉगिंग के लिए टेस्ट सुइट का इस्तेमाल करके, लोकल होम ऐप्लिकेशन से जुड़ी समस्या को हल करने का तरीका सीख लिया है.

ज़्यादा जानें

यहां कुछ और तरीके दिए गए हैं, जिन्हें आज़माया जा सकता है:

समीक्षा के लिए इंटिग्रेशन की जांच करने और उसे सबमिट करने के बारे में ज़्यादा जानें. साथ ही, उपयोगकर्ताओं के लिए इंटिग्रेशन पब्लिश करने की सर्टिफ़िकेशन प्रोसेस के बारे में भी जानें.