1. शुरू करने से पहले
इंटरनेट ऑफ़ थिंग्स (IoT) डेवलपर के तौर पर, क्लाउड-टू-क्लाउड इंटिग्रेशन बनाए जा सकते हैं. इनकी मदद से, उपयोगकर्ता Google Home ऐप्लिकेशन में टच कंट्रोल और Google Assistant की मदद से बोलकर निर्देश देकर, अपने डिवाइसों को कंट्रोल कर सकते हैं.
Google Assistant के साथ प्रोडक्शन क्वालिटी का इंटिग्रेशन बनाने के लिए, क्लाउड-टू-क्लाउड इंटिग्रेशन के लिए डीबगिंग टूल सीखना एक अहम कदम है. आसानी से निगरानी करने और डीबग करने के लिए, Google Cloud Platform (GCP) मेट्रिक और लॉगिंग और स्मार्ट होम के लिए टेस्ट सुइट उपलब्ध हैं. इनकी मदद से, इंटिग्रेशन से जुड़ी समस्याओं की पहचान करके उन्हें हल किया जा सकता है.
ज़रूरी शर्तें
- क्लाउड-टू-क्लाउड इंटिग्रेशन बनाना डेवलपर गाइड पढ़ें
- स्मार्ट होम डिवाइसों को Google Assistant से कनेक्ट करना कोडलैब चलाएं
आपको क्या बनाना है
इस कोडलैब में, आपको दो गड़बड़ियों के साथ क्लाउड-टू-क्लाउड इंटिग्रेशन डिप्लॉय करना होगा और उसे Assistant से कनेक्ट करना होगा. इसके बाद, स्मार्ट होम और Google Cloud Platform (GCP) मेट्रिक और लॉगिंग के लिए टेस्ट सुइट की मदद से, इंटिग्रेशन की गड़बड़ियों को डीबग करना होगा.
आपको इनके बारे में जानकारी मिलेगी
- प्रोडक्शन से जुड़ी समस्याओं की पहचान करने और उन्हें हल करने के लिए, GCP मेट्रिक और लॉगिंग का इस्तेमाल करने का तरीका
- स्मार्ट होम के लिए टेस्ट सुइट का इस्तेमाल करके, फ़ंक्शन और एपीआई से जुड़ी समस्याओं की पहचान करने का तरीका
आपको इन चीज़ों की ज़रूरत होगी
- Google Chrome जैसा कोई वेब ब्राउज़र
- iOS या Android डिवाइस, जिस पर Google Home ऐप्लिकेशन इंस्टॉल हो
- Node.js का 10.16 या इसके बाद का वर्शन
- Google Cloud बिलिंग खाता
2. गड़बड़ी वाला ऐप्लिकेशन चलाना
सोर्स कोड पाना
अपने डेवलपमेंट मशीन पर इस कोडलैब का सैंपल डाउनलोड करने के लिए, इस लिंक पर क्लिक करें:
इसके अलावा, कमांड लाइन से GitHub रिपॉज़िटरी को क्लोन भी किया जा सकता है:
$ git clone https://github.com/google-home/smarthome-debug.git
प्रोजेक्ट के बारे में जानकारी
वॉशर ऐप्लिकेशन में ये सबडायरेक्ट्री शामिल हैं:
public
: स्मार्ट वॉशर की स्थिति को आसानी से कंट्रोल और मॉनिटर करने के लिए, फ़्रंटएंड यूज़र इंटरफ़ेस (यूआई).functions
: पूरी तरह से लागू की गई क्लाउड सेवा, जो Firebase के लिए Cloud Functions और Firebase रीयलटाइम डेटाबेस की मदद से स्मार्ट वॉशर को मैनेज करती है.
Firebase से कनेक्ट करना
अपनी डेवलपमेंट मशीन पर टर्मिनल खोलें. washer-faulty
डायरेक्ट्री पर जाएं. इसके बाद, Google Assistant के कोडलैब से स्मार्ट होम डिवाइसों को कनेक्ट करें में बनाए गए इंटिग्रेशन प्रोजेक्ट के साथ Firebase CLI सेट अप करें:
$ cd washer-faulty $ firebase use <firebase-project-id>
Firebase पर डिप्लॉय करना
functions
फ़ोल्डर पर जाएं और npm.
का इस्तेमाल करके सभी ज़रूरी डिपेंडेंसी इंस्टॉल करें
$ cd functions $ npm install
ध्यान दें: अगर आपको नीचे दिया गया मैसेज दिखता है, तो उसे अनदेखा करके आगे बढ़ें. यह चेतावनी, कुछ पुरानी डिपेंडेंसी की वजह से दिख रही है. इस बारे में ज़्यादा जानकारी यहां दी गई है.
found 5 high severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details
अब आपने डिपेंडेंसी इंस्टॉल कर ली हैं और अपने प्रोजेक्ट को कॉन्फ़िगर कर लिया है. अब आपके पास वॉशर ऐप्लिकेशन को डिप्लॉय करने का विकल्प है.
$ firebase deploy
आपको यह कंसोल आउटपुट दिखेगा:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<Firebase-project-id>/overview Hosting URL: https://<Firebase-project-id>.firebaseapp.com
HomeGraph अपडेट करना
वेब ऐप्लिकेशन देखने के लिए, अपने ब्राउज़र (https://<firebase-project-id>.firebaseapp.com
) में होस्टिंग यूआरएल खोलें. वेब यूज़र इंटरफ़ेस (यूआई) पर, रिफ़्रेश करें बटन पर क्लिक करके, HomeGraph को अपडेट करें. इसके लिए, सिंक करने का अनुरोध करें सुविधा का इस्तेमाल करके, वॉशर ऐप्लिकेशन के नए डिवाइस मेटाडेटा का इस्तेमाल करें:
Google Home ऐप्लिकेशन खोलें और पुष्टि करें कि आपको खराब वॉशर नाम का वॉशर डिवाइस दिख रहा है.
3. अपने इंटिग्रेशन की जांच करना
प्रोजेक्ट को डिप्लॉय करने के बाद, यह जांचें कि आपका इंटिग्रेशन वॉशर को कंट्रोल करता है या नहीं.
वॉशर की जांच करना
अपने फ़ोन से इनमें से कोई भी वॉइस कमांड आज़माकर, वैल्यू में हुए बदलाव की जांच करें:
"Ok Google, मेरा वॉशर चालू करो."
"Ok Google, वॉशर चालू करो."
"Ok Google, मेरे वॉशर को रोको."
"Ok Google, वॉशर को फिर से चालू करो."
"Ok Google, वॉशर बंद करो."
वॉशर को रोकने या फिर से चालू करने पर, Assistant आपको बोलकर बताएगी कि कुछ गड़बड़ी है:
"माफ़ करें, हम <project display name> तक नहीं पहुंच पाए."
इस समस्या को डीबग करने के लिए, आपको गड़बड़ी के बारे में ज़्यादा जानकारी चाहिए. इससे, आपको समस्या की मुख्य वजह का पता लगाने में मदद मिलेगी.
स्मार्ट होम के आंकड़े दिखाने वाला डैशबोर्ड
गड़बड़ियों की जांच करने के लिए, Smarthome Analytics डैशबोर्ड एक अच्छी जगह है. यह आपके क्लाउड फ़ुलफ़िलमेंट के लिए, इस्तेमाल और हेल्थ मेट्रिक के चार्ट इकट्ठा करता है:
- इस्तेमाल मेट्रिक से, आपके Cloud-to-Cloud इंटिग्रेशन के इस्तेमाल का रुझान पता चलता है. इसमें, हर दिन के सक्रिय उपयोगकर्ताओं की संख्या और आपके अनुरोधों की कुल संख्या शामिल है.
- परफ़ॉर्मेंस मेट्रिक की मदद से, क्लाउड-टू-क्लाउड इंटिग्रेशन में होने वाली गड़बड़ियों पर नज़र रखी जा सकती है. इन मेट्रिक में, अनुरोध में लगने वाला समय, अनुरोध पूरा होने का प्रतिशत, और गड़बड़ी की जानकारी शामिल होती है.
गड़बड़ी की वजह जानने के लिए, प्रोजेक्ट डैशबोर्ड को ऐक्सेस करने के लिए यहां दिया गया तरीका अपनाएं.
- Developer Console में, प्रोजेक्ट पेज पर जाएं.
- अपना स्मार्ट होम प्रोजेक्ट चुनें.
- बाईं ओर मौजूद मेन्यू में, Analytics टैब पर क्लिक करें.
- इससे आपको Google Cloud पर अपने प्रोजेक्ट के डैशबोर्ड की सूची दिखेगी. Google Home Analytics - Cloud Integration डैशबोर्ड चुनें.
- हाइलाइट की गई समयसीमा के लिए गड़बड़ी कोड देखने के लिए, नीचे की ओर स्क्रोल करके क्लाउड से ऑर्डर पूरा करने से जुड़ी गड़बड़ियां - स्टेटस का ब्रेकडाउन चार्ट पर जाएं.
PARTNER_RESPONSE_MISSING_DEVICE
गड़बड़ी कोड, गड़बड़ी की मुख्य वजह के बारे में बताता है. इसके बाद, ज़्यादा जानकारी के लिए गड़बड़ी कोड के आधार पर इवेंट लॉग वापस पाएं.
इवेंट लॉग ऐक्सेस करना
गड़बड़ी के बारे में ज़्यादा जानकारी पाने के लिए, Cloud Logging की मदद से, क्लाउड-टू-क्लाउड इंटिग्रेशन के लिए इवेंट लॉग ऐक्सेस करें.
Google Cloud Platform में नेविगेशन मेन्यू खोलें. इसके बाद, अपने प्रोजेक्ट के इवेंट लॉग ऐक्सेस करने के लिए, ऑपरेशंस में जाकर, लॉगिंग > लॉग एक्सप्लोरर चुनें. इसके अलावा, खोज बॉक्स में लॉग एक्सप्लोरर खोजा जा सकता है.
सभी फ़ील्ड खोजें इनपुट फ़ील्ड में, क्वेरी PARTNER_RESPONSE_MISSING_DEVICE
डालें और क्वेरी चलाएं पर क्लिक करें. क्वेरी से मैच होने वाले लॉग, नतीजे सेक्शन में दिखते हैं.
गड़बड़ी के लॉग में, गड़बड़ी की जानकारी के साथ स्मार्ट होम इवेंट दिखता है. इसमें यह जानकारी दिखती है:
- उपयोगकर्ता की कार्रवाई "वॉशर को फिर से चालू करना" (
actionType:
"STARTSTOP_UNPAUSE
") है. यह कार्रवाई, हाल ही में बोलकर दिए गए निर्देश के जवाब में की गई है. - इससे जुड़ा डीबगिंग मैसेज "
JSON response does not include device.
" है
डीबगिंग मैसेज के आधार पर, आपको यह देखना चाहिए कि वॉशर ऐप्लिकेशन, EXECUTE
रिस्पॉन्स में सही डिवाइस क्यों शामिल नहीं करता.
गड़बड़ी की मुख्य वजह का पता लगाना
functions/index.js
में, EXECUTE
हैंडलर (onExecute
कलेक्शन में) ढूंढें, जो हर निर्देश का स्टेटस और डिवाइस की नई स्थिति दिखाता है. EXECUTE
रिस्पॉन्स में डिवाइस आईडी डालना, updateDevice
फ़ंक्शन के हल होने पर निर्भर करता है:
index.js
app.onExecute(async (body) => {
...
for (const command of intent.payload.commands) {
for (const device of command.devices) {
for (const execution of command.execution) {
executePromises.push(
updateDevice(execution, device.id)
.then((data) => {
result.ids.push(device.id);
Object.assign(result.states, data);
})
.catch((e) =>
functions.logger.error('EXECUTE',
device.id, e.message)));
}
}
}
इसके अलावा, यह भी देखें कि updateDevice
फ़ंक्शन, वॉशर पर रोकें / फिर से शुरू करें को कैसे मैनेज करता है. आपको पता चलेगा कि रोकें / फिर से शुरू करें निर्देश से मैच करने वाली स्ट्रिंग गलत है:
index.js
const updateDevice = async (execution, deviceId) => {
const {params, command} = execution;
let state; let ref;
switch (command) {
...
case 'action.devices.commands.PauseUnpausePause':
state = {isPaused: params.pause};
if (params.pause) state.isRunning = false;
ref = firebaseRef.child(deviceId).child('StartStop');
break;
}
return ref.update(state)
.then(() => state);
};
गड़बड़ी ठीक करना
गड़बड़ी की मुख्य वजह का पता चलने के बाद, रोकें / फिर से शुरू करें कमांड के लिए स्ट्रिंग को ठीक किया जा सकता है:
index.js
const updateDevice = async (execution, deviceId) => {
const {params, command} = execution;
let state; let ref;
switch (command) {
...
case 'action.devices.commands.PauseUnpause':
state = {isPaused: params.pause};
if (params.pause) state.isRunning = false;
ref = firebaseRef.child(deviceId).child('StartStop');
break;
}
return ref.update(state)
.then(() => state);
};
समस्या ठीक करने की जांच करना
Firebase CLI का इस्तेमाल करके, अपडेट किया गया कोड डिप्लॉय करें:
firebase deploy --only functions
नीचे दिए गए वॉइस कमांड फिर से आज़माएं. ऐसा करने पर, वॉशर को रोकने या फिर से चालू करने पर, Assistant अब सही जवाब देगी.
"Ok Google, मेरे वॉशर को रोको."
=>
"ठीक है, वॉशर को रोक दिया जाएगा."
"Ok Google, वॉशर को फिर से चालू करो."
=>
"ठीक है, वॉशर को फिर से चालू कर दिया गया है."
सवाल पूछकर, अपने वॉशर की मौजूदा स्थिति की जांच भी की जा सकती है.
"Ok Google, क्या मेरा वॉशर चालू है?"
"Ok Google, क्या मेरा वॉशर चल रहा है?"
"Ok Google, मेरा वॉशर किस साइकल पर चल रहा है?"
4. Test Suite की मदद से अपने इंटिग्रेशन की जांच करना
मैन्युअल तरीके से जांच करने के अलावा, स्मार्ट होम के लिए ऑटोमेटेड टेस्ट सुइट का इस्तेमाल करके भी, इस्तेमाल के उदाहरणों की पुष्टि की जा सकती है. इसके लिए, इंटिग्रेशन से जुड़े डिवाइस टाइप और खूबियों का इस्तेमाल किया जाता है. टेस्ट सुइट, आपके इंटिग्रेशन में समस्याओं का पता लगाने के लिए कई टेस्ट चलाता है. साथ ही, इवेंट लॉग में जाने से पहले, डीबग करने की प्रोसेस को तेज़ करने के लिए, टेस्ट के उन मामलों के बारे में जानकारी देने वाले मैसेज दिखाता है जो पास नहीं हुए.
स्मार्ट होम के लिए टेस्ट सुइट चलाना
Test Suite की मदद से, क्लाउड-टू-क्लाउड इंटिग्रेशन की जांच करने के लिए, इन निर्देशों का पालन करें:
- अपने वेब ब्राउज़र में, स्मार्ट होम के लिए टेस्ट सुइट खोलें.
- सबसे ऊपर दाएं कोने में मौजूद बटन का इस्तेमाल करके, Google में साइन इन करें. इससे टेस्ट सुइट, सीधे Google Assistant को निर्देश भेज सकता है.
- प्रोजेक्ट आईडी फ़ील्ड में, अपने Cloud-to-Cloud इंटिग्रेशन का प्रोजेक्ट आईडी डालें. इसके बाद, आगे बढ़ने के लिए आगे बढ़ें पर क्लिक करें.
- टेस्ट सेटिंग चरण में, आपको टेस्ट सुइट में वॉशर के डिवाइस टाइप और उसके लक्षण दिखेंगे.
- सिंक करने के अनुरोध की जांच करें विकल्प को बंद करें, क्योंकि वॉशर के सैंपल ऐप्लिकेशन में वॉशर को जोड़ने / हटाने / उसका नाम बदलने के लिए कोई यूज़र इंटरफ़ेस (यूआई) नहीं है. प्रोडक्शन सिस्टम में, जब भी उपयोगकर्ता डिवाइसों को जोड़ता / हटाता / उनका नाम बदलता है, तो आपको सिंक करने का अनुरोध करें को ट्रिगर करना होगा.
- जांच शुरू करने के लिए, आगे बढ़ें पर क्लिक करें.
टेस्ट सुइट के चलने के बाद, टेस्ट केस के नतीजे देखें. आपको गड़बड़ी के मैसेज के साथ, दो ऐसे टेस्ट केस दिखेंगे जो पास नहीं हुए हैं:
गड़बड़ी की वजह से Cloud-to-Cloud इंटिग्रेशन को डीबग करने के लिए, आपको गड़बड़ी के मैसेज का विश्लेषण करके, गड़बड़ी की मुख्य वजह का पता लगाना होगा.
गड़बड़ी के मैसेज का विश्लेषण करना
डेवलपर को गड़बड़ी की असल वजह का पता लगाने में मदद करने के लिए, टेस्ट सुइट हर उस टेस्ट केस के लिए गड़बड़ी के मैसेज दिखाता है जो पास नहीं हुआ है. इन मैसेज से, टेस्ट पास न होने की वजह का पता चलता है.
ऊपर दिए गए पहले टेस्ट केस के लिए,
गड़बड़ी के मैसेज से पता चलता है कि Test Suite को आपके क्लाउड-टू-क्लाउड इंटिग्रेशन से रिपोर्ट किए गए स्टेटस में "isPause": true
दिखना चाहिए, लेकिन असल स्टेटस में सिर्फ़ "isPause": false
दिखता है.
इसके अलावा, दूसरे टेस्ट केस के गड़बड़ी के मैसेज से पता चलता है कि आपके क्लाउड-टू-क्लाउड इंटिग्रेशन के जवाब में QUERY
स्टेटस में "isPause": true
शामिल है. यह आपके क्लाउड-टू-क्लाउड इंटिग्रेशन से रिपोर्ट किए गए स्टेटस में "isPause": false
से अलग है:
गड़बड़ी के दोनों मैसेज के हिसाब से, आपको यह देखना चाहिए कि आपकी इंटिग्रेशन रिपोर्ट में isPaused
की वैल्यू सही है या नहीं.
गड़बड़ी की मुख्य वजह का पता लगाना
functions/index.js
खोलें. इसमें reportstate
फ़ंक्शन होता है, जो रिपोर्ट स्टेटस की मदद से होम ग्राफ़ में स्टेटस में हुए बदलावों को पोस्ट करता है. रिपोर्ट स्टेटस पेलोड की जांच करें. इससे आपको पता चलेगा कि पेलोड में isPaused
स्टेटस मौजूद नहीं है. टेस्ट सुइट ने फ़ेल हुए टेस्ट केस में इसी स्टेटस की जांच की थी.
index.js
exports.reportstate = functions.database.ref('{deviceId}').onWrite(
async (change, context) => {
...
const requestBody = {
requestId: 'ff36a3cc', /* Any unique ID */
agentUserId: USER_ID,
payload: {
devices: {
states: {
/* Report the current state of our washer */
[context.params.deviceId]: {
online: true,
on: snapshot.OnOff.on,
isRunning: snapshot.StartStop.isRunning,
currentRunCycle: [{
currentCycle: 'rinse',
nextCycle: 'spin',
lang: 'en',
}],
currentTotalRemainingTime: 1212,
currentCycleRemainingTime: 301,
},
},
},
},
};
const res = await homegraph.devices.reportStateAndNotification({
requestBody,
});
...
});
गड़बड़ी ठीक करना
अब जब आपको गड़बड़ी की मुख्य वजह का पता चल गया है, तो रिपोर्ट स्टेटस पेलोड में isPaused
स्टेटस जोड़कर functions/index.js
में बदलाव करें:
index.js
exports.reportstate = functions.database.ref('{deviceId}').onWrite(
async (change, context) => {
...
const requestBody = {
requestId: 'ff36a3cc', /* Any unique ID */
agentUserId: USER_ID,
payload: {
devices: {
states: {
/* Report the current state of our washer */
[context.params.deviceId]: {
online: true,
on: snapshot.OnOff.on,
isPaused: snapshot.StartStop.isPaused,
isRunning: snapshot.StartStop.isRunning,
currentRunCycle: [{
currentCycle: 'rinse',
nextCycle: 'spin',
lang: 'en',
}],
currentTotalRemainingTime: 1212,
currentCycleRemainingTime: 301,
},
},
},
},
};
...
});
समस्या ठीक करने की जांच करना
Firebase CLI का इस्तेमाल करके, अपडेट किया गया कोड डिप्लॉय करें:
$ firebase deploy --only functions
स्मार्ट होम के लिए टेस्ट सुइट को फिर से चलाएं. आपको पता चलेगा कि सभी टेस्ट केस पास हो गए हैं.
5. बधाई हो
बधाई हो! आपने स्मार्ट होम और GCP मेट्रिक और लॉगिंग के लिए, टेस्ट सुइट की मदद से क्लाउड-टू-क्लाउड इंटिग्रेशन से जुड़ी समस्याओं को हल करने का तरीका जाना.
ज़्यादा जानें
इस कोडलैब के बाद, यहां दिए गए एक्सरसाइज़ आज़माएं और अन्य संसाधनों को एक्सप्लोर करें:
- अपने डिवाइस में काम करने वाले ज़्यादा ट्रैट जोड़ें और टेस्ट सुइट की मदद से उनकी जांच करें.
- अपने इंटिग्रेशन के इस्तेमाल से जुड़ी काम की मेट्रिक पाने के लिए, डैशबोर्ड बनाएं, सूचनाएं सेट अप करें, और मेट्रिक डेटा को प्रोग्राम के हिसाब से ऐक्सेस करें.
- स्मार्ट होम के लिए, स्थानीय फ़ुलफ़िलमेंट की सुविधा के बारे में जानें.
- ज़्यादा जानने के लिए, हमारा GitHub सैंपल देखें.
समीक्षा के लिए इंटिग्रेशन को जांचने और सबमिट करने के बारे में भी ज़्यादा जानें. इसमें, उपयोगकर्ताओं के लिए अपने इंटिग्रेशन को पब्लिश करने के लिए सर्टिफ़िकेट पाने की प्रोसेस भी शामिल है.