1. परिचय
डिवाइस ऐक्सेस प्रोग्राम, डेवलपर के लिए Smart Device Management API उपलब्ध कराता है. यह एक REST API है, जिसकी मदद से डेवलपर अपने ऐप्लिकेशन से Google Nest डिवाइसों को कंट्रोल कर सकते हैं. उपयोगकर्ताओं को अपने Nest डिवाइसों को तीसरे पक्ष को ऐक्सेस करने की अनुमति देनी होगी.
डिवाइस ऐक्सेस के इंटिग्रेशन को इन तीन मुख्य चरणों से पूरा किया जा सकता है:
- प्रोजेक्ट बनाना - Google Cloud Platform में कोई प्रोजेक्ट बनाएं और डिवाइस ऐक्सेस कंसोल में डेवलपर के रूप में साइन अप करें.
- खाता लिंक करना - खाता लिंक करने के फ़्लो की मदद से उपयोगकर्ताओं को जोड़ें और ऐक्सेस कोड पाएं. कोड को ऐक्सेस टोकन से बदलें.
- डिवाइस कंट्रोल - ऐक्सेस टोकन के साथ निर्देश भेजकर, डिवाइसों को कंट्रोल करने के लिए Smart Device Management API के अनुरोध करें.
इस कोडलैब में, हम पुष्टि करने का काम करने वाला वेब ऐप्लिकेशन बनाकर और Smart Device Management API कॉल करके डिवाइस ऐक्सेस के काम करने के तरीके के बारे में गहराई से जानेंगे. साथ ही, हम डिवाइस ऐक्सेस के अनुरोधों को रूट करने के लिए, Node.js और Express का इस्तेमाल करके आसान प्रॉक्सी सर्वर डिप्लॉय करेंगे.
शुरू करने से पहले, बेहतर होगा कि आप उन सामान्य वेब तकनीकों के बारे में जान लें जिनका इस्तेमाल हम इस कोडलैब में करेंगे. जैसे, OAuth 2.0 की मदद से पुष्टि करना या Node.js की मदद से वेब ऐप्लिकेशन बनाना. हालांकि, ऐसा करना ज़रूरी नहीं है.
आपको इन चीज़ों की ज़रूरत होगी
- Node.js 8 या उसके बाद का वर्शन
- Nest Thermostat से लिंक किया गया Google खाता
आपको क्या सीखने को मिलेगा
- स्टैटिक वेब पेजों और Cloud Functions को होस्ट करने वाला Firebase प्रोजेक्ट सेट अप करना
- ब्राउज़र पर काम करने वाले वेब ऐप्लिकेशन की मदद से, डिवाइस का ऐक्सेस पाने के अनुरोध करना
- अपने अनुरोधों को रूट करने के लिए, Node.js और Express की मदद से प्रॉक्सी सर्वर बनाना
2. प्रोजेक्ट बनाना
डिवाइस ऐक्सेस इंटिग्रेशन सेट अप करने के लिए, डेवलपर को Google Cloud Platform (GCP) प्रोजेक्ट बनाना होगा. GCP प्रोजेक्ट में जनरेट किए गए क्लाइंट आईडी और क्लाइंट सीक्रेट का इस्तेमाल, डेवलपर के ऐप्लिकेशन और Google Cloud के बीच OAuth फ़्लो के हिस्से के तौर पर किया जाएगा. स्मार्ट डिवाइस मैनेजमेंट एपीआई को ऐक्सेस करने के लिए, डेवलपर को डिवाइस ऐक्सेस कंसोल पर जाकर प्रोजेक्ट बनाना होगा.
Google Cloud Platform
Google Cloud Platform पर जाएं. 'नया प्रोजेक्ट बनाएं' पर क्लिक करें और प्रोजेक्ट का नाम डालें. Google Cloud के लिए एक प्रोजेक्ट आईडी [GCP-Project-Id] भी दिखेगा. कृपया इसे रिकॉर्ड करें, क्योंकि हम इसका इस्तेमाल Firebase सेटअप के दौरान करेंगे. (हम इस कोडलैब में इस आईडी को [GCP-Project-Id] के तौर पर इस्तेमाल करेंगे.)
पहला चरण, अपने प्रोजेक्ट पर ज़रूरी एपीआई लाइब्रेरी चालू करना है. एपीआई और सेवाएं > लाइब्रेरी पर जाएं और Smart Device Management API खोजें. अपने प्रोजेक्ट को डिवाइस ऐक्सेस एपीआई कॉल के लिए अनुरोध करने की अनुमति देने के लिए, आपको यह एपीआई चालू करना होगा.
OAuth क्रेडेंशियल बनाने से पहले, हमें अपने प्रोजेक्ट के लिए उस स्क्रीन को कॉन्फ़िगर करना होगा जहां OAuth के लिए सहमति दी जाती है. एपीआई और सेवाएं > वह स्क्रीन जहां OAuth के लिए सहमति दी जाती है. उपयोगकर्ता टाइप के लिए, बाहरी चुनें. पहली स्क्रीन को पूरा करने के लिए, अपने ऐप्लिकेशन का नाम और सहायता पाने के लिए ईमेल पता दें. साथ ही, डेवलपर की संपर्क जानकारी भी दें. जब टेस्ट उपयोगकर्ताओं के लिए कहा जाए, तो इस चरण में लिंक किए गए डिवाइसों के साथ उनका ईमेल पता ज़रूर दें.
OAuth की सहमति वाली स्क्रीन को कॉन्फ़िगर करने के बाद, एपीआई और सेवाएं > क्रेडेंशियल पर जाएं. +क्रेडेंशियल बनाएं पर क्लिक करें और OAuth क्लाइंट आईडी चुनें. ऐप्लिकेशन टाइप के लिए वेब ऐप्लिकेशन चुनें.
अपने क्लाइंट को कोई नाम दें और बनाएं पर क्लिक करें. हम बाद में, अनुमति वाले JavaScript ऑरिजिन और आधिकारिक रीडायरेक्ट यूआरआई को जोड़ेंगे. इस प्रोसेस को पूरा करने पर, इस OAuth 2.0 क्लाइंट से जुड़ा [Client-Id] और [Client-Secret] दिखेगा.
डिवाइस का ऐक्सेस कंसोल
डिवाइस ऐक्सेस कंसोल पर जाएं. अगर आपने पहले कभी डिवाइस ऐक्सेस कंसोल का इस्तेमाल नहीं किया है, तो आपको सेवा की शर्तों का कानूनी समझौता दिखेगा. साथ ही, रजिस्टर करने के लिए पांच डॉलर का शुल्क देना होगा.
नया प्रोजेक्ट बनाएं और उसे प्रोजेक्ट का नाम दें. अगली विंडो में, वह [Client-Id] सबमिट करें जो आपको पिछले चरण में GCP से मिला था.
इवेंट चालू करने और प्रोजेक्ट बनाने के चरणों को पूरा करने से, आपको अपने प्रोजेक्ट के होम पेज पर ले जाया जाएगा. आपका [Project-Id], आपके प्रोजेक्ट के नाम के नीचे दिखेगा.
कृपया अपने [Project-Id] को ध्यान में रखें, क्योंकि हम Smart Device Management API को अनुरोध भेजते समय इसका इस्तेमाल करेंगे.
3. Firebase सेटअप करना
Firebase, डेवलपर को वेब ऐप्लिकेशन डिप्लॉय करने का तेज़ और आसान तरीका मुहैया कराता है. हम Firebase का इस्तेमाल करके, डिवाइस ऐक्सेस इंटिग्रेशन के लिए क्लाइंट साइड वेब ऐप्लिकेशन डेवलप करेंगे.
Firebase प्रोजेक्ट बनाना
Firebase कंसोल पर जाएं. प्रोजेक्ट जोड़ें पर क्लिक करें. इसके बाद, वह प्रोजेक्ट चुनें जो आपने प्रोजेक्ट क्रिएशन के चरण में बनाया है. इससे एक Firebase प्रोजेक्ट बन जाएगा, जो आपके GCP प्रोजेक्ट [GCP-Project-Id] से लिंक होगा.
Firebase प्रोजेक्ट बन जाने के बाद, आपको यह स्क्रीन दिखेगी:
Firebase टूल इंस्टॉल करना
Firebase, आपके ऐप्लिकेशन को बनाने और डिप्लॉय करने के लिए, सीएलआई टूल का एक सेट उपलब्ध कराता है. इन टूल को इंस्टॉल करने के लिए, एक नई टर्मिनल विंडो खोलें और यह कमांड चलाएं. इससे Firebase टूल दुनिया भर में इंस्टॉल हो जाएंगे.
$ npm i -g firebase-tools
वर्शन की जानकारी की जांच करके, देखें कि Firebase टूल सही तरीके से इंस्टॉल हुए हैं या नहीं.
$ firebase --version
'लॉगिन' कमांड का इस्तेमाल करके, अपने Google खाते से Firebase CLI टूल में लॉग-इन किया जा सकता है.
$ firebase login
होस्टिंग प्रोजेक्ट शुरू करना
लॉग इन करने के बाद, अपने वेब ऐप्लिकेशन के लिए होस्टिंग प्रोजेक्ट की शुरुआत करें. टर्मिनल से उस फ़ोल्डर पर जाएं जहां आपको अपना प्रोजेक्ट बनाना है. इसके बाद, यह कमांड चलाएं:
$ firebase init hosting
होस्टिंग प्रोजेक्ट पर काम शुरू करने के लिए, Firebase आपसे कुछ सवाल पूछेगा:
- कृपया कोई विकल्प चुनें — किसी मौजूदा प्रोजेक्ट का इस्तेमाल करें
- इस डायरेक्ट्री के लिए कोई डिफ़ॉल्ट Firebase प्रोजेक्ट चुनें — ***[GCP-Project-Id]*** चुनें
- अपनी सार्वजनिक डायरेक्ट्री के तौर पर आपको किसका इस्तेमाल करना है? — सार्वजनिक
- क्या इसे एक पेज वाले ऐप्लिकेशन के तौर पर कॉन्फ़िगर करना है? — हां
- क्या आपको GitHub की मदद से, अपने-आप बिल्ड और डिप्लॉय होने की सुविधा सेट अप करनी है? — नहीं
प्रोजेक्ट शुरू होने के बाद, इसे इस कमांड की मदद से Firebase पर डिप्लॉय किया जा सकता है:
$ firebase deploy
Firebase आपके प्रोजेक्ट को स्कैन करेगा और ज़रूरी फ़ाइलों को क्लाउड होस्टिंग पर डिप्लॉय करेगा.
जब आप किसी ब्राउज़र में होस्टिंग यूआरएल खोलते हैं, तो आपको वह पेज दिखेगा जिसे आपने अभी-अभी डिप्लॉय किया है:
अब जब आप Firebase के साथ किसी वेब पेज को डिप्लॉय करने की बुनियादी बातें जानते हैं, तो चलिए, कोडलैब के हमारे नमूने को डिप्लॉय करते हैं!
4. कोडलैब सैंपल
नीचे दिए गए निर्देश का इस्तेमाल करके, GitHub पर होस्ट की गई codelab रिपॉज़िटरी का क्लोन बनाया जा सकता है:
$ git clone https://github.com/google/device-access-codelab-web-app.git
इस रिपॉज़िटरी में, हम दो अलग-अलग फ़ोल्डर में सैंपल उपलब्ध करा रहे हैं. कोडलैब के मौजूदा पॉइंट से शुरुआत करने के लिए, codelab-start
फ़ोल्डर में ज़रूरी फ़ाइलें मौजूद होती हैं. codelab-done
फ़ोल्डर में, इस कोडलैब का पूरा वर्शन मौजूद होता है. इसमें, पूरी तरह से काम करने वाले क्लाइंट और node.js सर्वर शामिल होते हैं.
हम इस कोडलैब में, codelab-start
फ़ोल्डर की फ़ाइलों का इस्तेमाल करेंगे. अगर आपको लगता है कि किसी भी समय समस्या आ रही है, तो कोडलैब का कोडलैब वाला वर्शन भी देखें.
कोडलैब की सैंपल फ़ाइलें
कोडलैब-स्टार्ट फ़ोल्डर की फ़ाइल का स्ट्रक्चर इस तरह है:
public ├───index.html ├───scripts.js ├───style.css firebase.json
सार्वजनिक फ़ोल्डर में हमारे ऐप्लिकेशन के स्टैटिक पेज शामिल हैं. वेब अनुरोधों को हमारे ऐप्लिकेशन पर रूट करने की ज़िम्मेदारी firebase.json
की है. codelab-done
वर्शन में, आपको एक functions
डायरेक्ट्री भी दिखेगी. इसमें हमारे प्रॉक्सी सर्वर (एक्सप्रेस) के लिए लॉजिक शामिल होंगे, जिन्हें Google Cloud के फ़ंक्शन पर डिप्लॉय किया जाएगा.
कोडलैब सैंपल डिप्लॉय करें
codelab-start
से फ़ाइलों को अपने प्रोजेक्ट की डायरेक्ट्री में कॉपी करें.
$ firebase deploy
Firebase से डिप्लॉयमेंट पूरा होने के बाद, आपको कोडलैब ऐप्लिकेशन दिखेगा:
पुष्टि करने की प्रोसेस शुरू करने के लिए, पार्टनर के क्रेडेंशियल की ज़रूरत होती है. हम अगले सेक्शन में इस बारे में बताएंगे.
5. OAuth को मैनेज करना
OAuth, ऐक्सेस देने के लिए वेब स्टैंडर्ड है. इसका इस्तेमाल, उपयोगकर्ता अपने पासवर्ड शेयर किए बिना, तीसरे पक्ष के ऐप्लिकेशन को अपने खाते की जानकारी का ऐक्सेस देने के लिए करते हैं. डिवाइस ऐक्सेस के ज़रिए उपयोगकर्ता के डिवाइस को ऐक्सेस करने वाले डेवलपर को चालू करने के लिए हम OAuth 2.0 का इस्तेमाल करते हैं.
रीडायरेक्ट यूआरआई तय करें
OAuth फ़्लो के पहले चरण में, Google OAuth 2.0 एंडपॉइंट को पैरामीटर का एक सेट पास करना शामिल है. उपयोगकर्ता की सहमति मिलने के बाद, Google OAuth सर्वर आपके रीडायरेक्ट यूआरआई के लिए ऑथराइज़ेशन कोड के साथ एक अनुरोध जारी करेंगे.
SERVER_URI
कॉन्स्टेंट (लाइन 19) को scripts.js
में अपने होस्टिंग यूआरएल के साथ अपडेट करें:
const SERVER_URI = "https://[GCP-Project-Id].web.app";
इस बदलाव के साथ ऐप्लिकेशन को फिर से डिप्लॉय करने पर, आपके प्रोजेक्ट के लिए इस्तेमाल किया जाने वाला रीडायरेक्ट यूआरआई अपडेट हो जाएगा.
$ firebase deploy
रीडायरेक्ट यूआरआई चालू करें
स्क्रिप्ट फ़ाइल में रीडायरेक्ट यूआरआई को अपडेट करने के बाद, आपको अपने प्रोजेक्ट के लिए बनाए गए Client-ID के लिए इसे अनुमति वाले रीडायरेक्ट यूआरआई की सूची में भी जोड़ना होगा. Google Cloud Platform में क्रेडेंशियल पेज पर जाएं. यहां आपके प्रोजेक्ट के लिए बनाए गए सभी क्रेडेंशियल दिखेंगे:
OAuth 2.0 क्लाइंट आईडी की सूची में, वह क्लाइंट आईडी चुनें जिसे आपने प्रोजेक्ट बनाने के चरण में बनाया है. अपने प्रोजेक्ट के लिए, अनुमति वाले रीडायरेक्ट यूआरआई की सूची में अपने ऐप्लिकेशन का रीडायरेक्ट यूआरआई जोड़ें.
साइन इन करने की कोशिश करें!
Firebase की मदद से सेट अप किए गए होस्टिंग यूआरएल पर जाएं. इसके बाद, अपने पार्टनर के क्रेडेंशियल डालें और साइन इन करें बटन पर क्लिक करें. क्लाइंट आईडी और क्लाइंट सीक्रेट, वे क्रेडेंशियल होते हैं जो आपको Google Cloud Platform से मिलते हैं. प्रोजेक्ट आईडी, डिवाइस ऐक्सेस कंसोल से लिया जाता है.
साइन इन करें बटन, आपके उपयोगकर्ताओं को आपके एंटरप्राइज़ के लिए OAuth फ़्लो पर ले जाएगा. यह फ़्लो, उनके Google खाते की लॉगिन स्क्रीन से शुरू होगा. लॉग इन करने के बाद, उपयोगकर्ताओं से आपके प्रोजेक्ट को अपने Nest डिवाइसों को ऐक्सेस करने की अनुमतियां देने के लिए कहा जाएगा.
यह एक मॉक ऐप्लिकेशन है, इसलिए रीडायरेक्ट जारी करने से पहले Google एक चेतावनी जारी करेगा!
"ऐडवांस" पर क्लिक करें, फिर "web.app पर जाएं (असुरक्षित)" चुनें पर जाएं.
इससे जीईटी अनुरोध के तौर पर एक OAuth कोड मिलेगा. इसके बाद ऐप्लिकेशन, ऐक्सेस टोकन और रीफ़्रेश टोकन लेगा.
6. डिवाइस कंट्रोल
डिवाइस ऐक्सेस के सैंपल ऐप्लिकेशन में, Google Nest डिवाइसों को कंट्रोल करने के लिए, स्मार्ट डिवाइस मैनेजमेंट REST API कॉल का इस्तेमाल किया जाता है. इन कॉल में, कुछ कमांड के लिए ज़रूरी पेलोड के साथ-साथ, जीईटी या पोस्ट अनुरोध के हेडर में ऐक्सेस टोकन पास करना शामिल है.
हमने इन कॉल को हैंडल करने के लिए, ऐक्सेस का अनुरोध करने वाला एक सामान्य फ़ंक्शन लिखा है. हालांकि, इस फ़ंक्शन के लिए आपको सही एंडपॉइंट और पेलोड ऑब्जेक्ट भी देना होगा!
function deviceAccessRequest(method, call, localpath, payload = null) {...}
- method — एचटीटीपी अनुरोध का टाइप (
GET
याPOST)
- call — यह हमारे एपीआई कॉल को दिखाने वाली स्ट्रिंग है. इसका इस्तेमाल, जवाबों (
listDevices
,thermostatMode
,temperatureSetpoint
) को रूट करने के लिए किया जाता है - localpath — वह एंडपॉइंट जिस पर अनुरोध किया जाता है. इसमें प्रोजेक्ट आईडी और डिवाइस आईडी (
https://smartdevicemanagement.googleapis.com/v1
के बाद जोड़ा जाता है) शामिल होता है - पेलोड (*) — एपीआई कॉल के लिए ज़रूरी अतिरिक्त डेटा (उदाहरण के लिए, किसी सेटपॉइंट के लिए तापमान दिखाने वाली संख्या)
हम Nest Thermostat को कंट्रोल करने के लिए, यूज़र इंटरफ़ेस (यूआई) कंट्रोल के नमूने (डिवाइस की सूची बनाना, मोड सेट करना, तापमान सेट करना) बनाएंगे:
ये यूज़र इंटरफ़ेस (यूआई) कंट्रोल, scripts.js
से मिलते-जुलते फ़ंक्शन (listDevices()
, postThermostatMode()
, postTemperatureSetpoint()
) को कॉल करेंगे. इन्हें लागू करने के लिए, खाली छोड़ दिया गया है! इसका मकसद सही तरीका/पाथ चुनना और deviceAccessRequest(...)
फ़ंक्शन में पेलोड पास करना है.
डिवाइसों की सूची
सबसे आसान डिवाइस ऐक्सेस कॉल listDevices
है. यह GET
अनुरोध का इस्तेमाल करता है और इसके लिए किसी पेलोड की ज़रूरत नहीं होती. एंडपॉइंट को projectId
का इस्तेमाल करके, स्ट्रक्चर किया जाना चाहिए. listDevices()
फ़ंक्शन को इस तरह से पूरा करें:
function listDevices() { var endpoint = "/enterprises/" + projectId + "/devices"; deviceAccessRequest('GET', 'listDevices', endpoint); }
अपने बदलावों को सेव करें और यहां दिए गए कमांड का इस्तेमाल करके, अपने Firebase प्रोजेक्ट को फिर से डिप्लॉय करें:
$ firebase deploy
ऐप्लिकेशन का नया वर्शन डिप्लॉय होने के बाद, पेज को फिर से लोड करें और डिवाइसों की सूची पर क्लिक करें. इससे डिवाइस कंट्रोल में, सूची में जानकारी अपने-आप भर जाएगी. यहां आपको अपने थर्मोस्टैट का आईडी दिखेगा:
सूची से डिवाइस चुनने पर, scripts.js
फ़ाइल में deviceId
फ़ील्ड अपडेट हो जाएगा. अगले दो कंट्रोल के लिए, हमें उस डिवाइस के लिए deviceId
तय करना होगा जिसे कंट्रोल करना है.
थर्मोस्टैट कंट्रोल
Smart Device Management API में, Nest थर्मोस्टैट को बुनियादी तौर पर कंट्रोल करने के लिए दो ट्रैट हैं. ThermostatMode और TemperatureSetpoint. ThermostatMode के साथ, Nest Thermostat के मोड को चार अलग-अलग मोड में से किसी एक पर सेट किया जाता है: {Off, Heat, Cool, HeatCool}. इसके बाद, हमें पेलोड के हिस्से के तौर पर चुने गए मोड की जानकारी देनी होगी.
scripts.js
में अपने postThermostatMode()
फ़ंक्शन को इनके साथ बदलें:
function postThermostatMode() { var endpoint = "/enterprises/" + projectId + "/devices/" + deviceId + ":executeCommand"; var tempMode = id("tempMode").value; var payload = { "command": "sdm.devices.commands.ThermostatMode.SetMode", "params": { "mode": tempMode } }; deviceAccessRequest('POST', 'thermostatMode', endpoint, payload); }
अगला फ़ंक्शन, postTemperatureSetpoint()
, आपके Nest Thermostat के लिए तापमान (सेल्सियस में) सेट करने की सुविधा देता है. चुने गए थर्मोस्टैट मोड के आधार पर, पेलोड में दो पैरामीटर सेट किए जा सकते हैं, heatCelsius
और coolCelsius
.
function postTemperatureSetpoint() { var endpoint = "/enterprises/" + projectId + "/devices/" + deviceId + ":executeCommand"; var heatCelsius = parseFloat(id("heatCelsius").value); var coolCelsius = parseFloat(id("coolCelsius").value); var payload = { "command": "", "params": {} }; if ("HEAT" === id("tempMode").value) { payload.command = "sdm.devices.commands.ThermostatTemperatureSetpoint.SetHeat"; payload.params["heatCelsius"] = heatCelsius; } else if ("COOL" === id("tempMode").value) { payload.command = "sdm.devices.commands.ThermostatTemperatureSetpoint.SetCool"; payload.params["coolCelsius"] = coolCelsius; } else if ("HEATCOOL" === id("tempMode").value) { payload.command = "sdm.devices.commands.ThermostatTemperatureSetpoint.SetRange"; payload.params["heatCelsius"] = heatCelsius; payload.params["coolCelsius"] = coolCelsius; } else { console.log("Off and Eco mode don't allow this function"); return; } deviceAccessRequest('POST', 'temperatureSetpoint', endpoint, payload); }
7. Node.js सर्वर (ज़रूरी नहीं)
बधाई हो! आपने ऐसा क्लाइंट साइड वेब ऐप्लिकेशन बनाया है जो ब्राउज़र से Smart Device Management API के अनुरोध कर सकता है. अगर आपको सर्वर साइड पर टैग बनाना है, तो हम आपको एक प्रॉक्सी सर्वर से शुरुआत करने का सुझाव देते हैं. यह सर्वर, ब्राउज़र से किए गए आपके अनुरोधों को रीडायरेक्ट कर सकता है.
इस प्रॉक्सी सर्वर के लिए, हम Firebase क्लाउड फ़ंक्शन, Node.js और Express का इस्तेमाल करेंगे.
Cloud Functions को शुरू करना
कोई नई टर्मिनल विंडो खोलें, अपनी प्रोजेक्ट डायरेक्ट्री पर जाएं, और ये निर्देश चलाएं:
$ firebase init functions
क्लाउड फ़ंक्शन शुरू करने के लिए, Firebase आपसे कुछ सवाल पूछेगा:
- Cloud Functions लिखने के लिए आपको किस भाषा का इस्तेमाल करना है? — JavaScript
- क्या संभावित गड़बड़ियों को पहचानने और स्टाइल लागू करने के लिए, ESLint का इस्तेमाल करना है? — नहीं
- क्या आपको अभी npm की मदद से डिपेंडेंसी इंस्टॉल करनी हैं? — हां
इससे आपके प्रोजेक्ट में functions
फ़ोल्डर शुरू हो जाएगा. साथ ही, ज़रूरी डिपेंडेंसी भी इंस्टॉल हो जाएंगी. आपको दिखेगा कि आपके प्रोजेक्ट फ़ोल्डर में एक फ़ंक्शन डायरेक्ट्री है, जिसमें index.js फ़ाइल है, जो हमारे क्लाउड फ़ंक्शन को तय करती है. साथ ही, सेटिंग तय करने के लिए package.json और डिपेंडेंसी शामिल करने के लिए node_modules डायरेक्ट्री.
सर्वर-साइड फ़ंक्शन बनाने के लिए, हम दो npm
लाइब्रेरी का इस्तेमाल करेंगे: Express और xmlhttprequest. आपको package.json फ़ाइल में डिपेंडेंसी की सूची में ये एंट्री जोड़नी होंगी:
"xmlhttprequest": "^1.8.0", "express": "^4.17.0"
इसके बाद, फ़ंक्शन डायरेक्ट्री से npm इंस्टॉल चलाकर, अपने प्रोजेक्ट के लिए डिपेंडेंसी इंस्टॉल करनी चाहिए:
$ npm install
अगर npm को पैकेज डाउनलोड करने में कोई समस्या आती है, तो इस कमांड की मदद से xmlhttprequest और एक्सप्रेस को साफ़ तौर पर सेव करने की कोशिश करें:
$ npm install express xmlhttprequest --save
Blaze प्लान पर अपग्रेड करें
firebase deploy
निर्देश का इस्तेमाल करने के लिए आपको Blaze प्लान पर अपग्रेड करना होगा. इसके लिए, आपको अपने खाते में पेमेंट का तरीका जोड़ना होगा. प्रोजेक्ट की खास जानकारी > इस्तेमाल और बिलिंग पर जाएं. साथ ही, अपने प्रोजेक्ट के लिए Blaze प्लान चुनना न भूलें.
बिल्ड एक्सप्रेस सर्वर
इनकमिंग GET
और POST
अनुरोधों का जवाब देने के लिए, एक्सप्रेस सर्वर एक आसान फ़्रेमवर्क का इस्तेमाल करता है. हमने एक ऐसा सर्वलेट बनाया है जो POST
अनुरोधों को सुनता है और उन्हें पेलोड में बताए गए डेस्टिनेशन यूआरएल पर भेजता है. साथ ही, ट्रांसफ़र से मिले जवाब के साथ जवाब देता है.
फ़ंक्शन डायरेक्ट्री में अपनी index.js
फ़ाइल में बदलाव करके, उसे इस तरह बनाएं:
const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; const functions = require('firebase-functions'); const express = require('express'); const http = require('http'); const app = express(); app.use(express.json()); //***** Device Access - Proxy Server *****// // Serving Get Requests (Not used) app.get('*', (request, response) => { response.status(200).send("Hello World!"); }); // Serving Post Requests app.post('*', (request, response) => { setTimeout(() => { // Read the destination address from payload: var destination = request.body.address; // Create a new proxy post request: var xhr = new XMLHttpRequest(); xhr.open('POST', destination); // Add original headers to proxy request: for (var key in request.headers) { var value = request.headers[key]; xhr.setRequestHeader(key, value); } // Add command/parameters to proxy request: var newBody = {}; newBody.command = request.body.command; newBody.params = request.body.params; // Respond to original request with the response coming // back from proxy request (to Device Access Endpoint) xhr.onload = function () { response.status(200).send(xhr.responseText); }; // Send the proxy request! xhr.send(JSON.stringify(newBody)); }, 1000); }); // Export our app to firebase functions: exports.app = functions.https.onRequest(app);
अनुरोधों को हमारे सर्वर पर रूट करने के लिए, हमें firebase.json
के रीराइट को इस तरह अडजस्ट करना होगा:
{ "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "rewrites": [{ "source": "/proxy**", "function": "app" },{ "source": "**", "destination": "/index.html" } ] } }
इससे, /proxy
से शुरू होने वाले यूआरएल हमारे Express सर्वर पर भेजे जाएंगे और बाकी यूआरएल हमारे index.html
पर भेजे जाएंगे.
प्रॉक्सी एपीआई कॉल
अब जब हमारा सर्वर तैयार है, तो scripts.js
में प्रॉक्सी यूआरआई तय करें, ताकि हमारा ब्राउज़र इस पते पर अनुरोध भेज सके:
const PROXY_URI = SERVER_URI + "/proxy";
इसके बाद, proxyRequest
फ़ंक्शन को scripts.js
के तौर पर जोड़ें. यह फ़ंक्शन, डिवाइस ऐक्सेस के लिए किए जाने वाले इनडायरेक्ट कॉल के लिए, deviceAccessRequest(...)
फ़ंक्शन जैसा ही सिग्नेचर रखता है.
function proxyRequest(method, call, localpath, payload = null) { var xhr = new XMLHttpRequest(); // We are doing our post request to our proxy server: xhr.open(method, PROXY_URI); xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); xhr.onload = function () { // Response is passed to deviceAccessResponse function: deviceAccessResponse(call, xhr.response); }; // We are passing the device access endpoint in address field of the payload: payload.address = "https://smartdevicemanagement.googleapis.com/v1" + localpath; if ('POST' === method && payload) xhr.send(JSON.stringify(payload)); else xhr.send(); }
आखिरी चरण postThermostatMode()
में, deviceAccessRequest(...)
कॉल को proxyRequest(...)
फ़ंक्शन और scripts.js
में postTemperatureSetpoint()
फ़ंक्शन से बदलना है.
ऐप्लिकेशन को अपडेट करने के लिए, firebase deploy
चलाएं.
$ firebase deploy
इससे, अब आपके पास Cloud Functions पर Express का इस्तेमाल करके चलने वाला Node.js प्रॉक्सी सर्वर है.
Cloud फ़ंक्शन की अनुमतियां दें
आखिरी चरण में, अपने क्लाउड फ़ंक्शन के लिए ऐक्सेस की अनुमतियों की समीक्षा करें और पक्का करें कि आपका क्लाइंट साइड ऐप्लिकेशन उन्हें कॉल कर सके.
Google Cloud Platform से, मेन्यू में Cloud Functions टैब पर जाएं. इसके बाद, अपना क्लाउड फ़ंक्शन चुनें:
अनुमतियां पर क्लिक करें. इसके बाद, सदस्य जोड़ें पर क्लिक करें. नए सदस्य फ़ील्ड में सभी उपयोगकर्ता लिखें और Cloud Functions चुनें Cloud Functions इनवोकर की भूमिका है. सेव करें पर क्लिक करने पर, आपको चेतावनी वाला यह मैसेज दिखेगा:
'सार्वजनिक ऐक्सेस की अनुमति दें' चुनने पर, आपका क्लाइंट साइड ऐप्लिकेशन आपके क्लाउड फ़ंक्शन का इस्तेमाल कर पाएगा.
बधाई हो – आपने सभी चरण पूरे कर लिए हैं. अब अपने वेब ऐप्लिकेशन पर जाकर, प्रॉक्सी सर्वर के ज़रिए डिवाइस कंट्रोल को आज़माएं!
अगले चरण
क्या आपको डिवाइस ऐक्सेस करने के बारे में ज़्यादा जानना है? दूसरे Nest डिवाइसों को कंट्रोल करने के बारे में ज़्यादा जानने के लिए, Traits से जुड़ा दस्तावेज़ देखें. साथ ही, अपने प्रॉडक्ट को दुनिया भर में लॉन्च करने का तरीका जानने के लिए, सर्टिफ़िकेशन की प्रोसेस देखें!
डिवाइस ऐक्सेस वेब ऐप्लिकेशन सैंपल ऐप्लिकेशन की मदद से अपने कौशल को और बेहतर बनाएं. यहां कोडलैब का अपना अनुभव बेहतर बनाया जा सकता है. साथ ही, Nest कैमरों, दरवाज़े की घंटी, और थर्मोस्टैट को कंट्रोल करने के लिए, काम करने वाला वेब ऐप्लिकेशन डिप्लॉय किया जा सकता है.