इवेंट एसिंक्रोनस होते हैं. इन्हें Google Cloud Pub/Sub की मदद से, एक ही विषय के हिसाब से मैनेज किया जाता है Project. इवेंट सभी डिवाइसों और स्ट्रक्चर के लिए अपडेट देते हैं और इवेंट की रसीद जब तक उपयोगकर्ता ऐक्सेस टोकन को रद्द नहीं करता और इवेंट मैसेज को समयसीमा खत्म हो गई है.
इवेंट सक्षम करें
इवेंट, एसडीएम एपीआई की एक वैकल्पिक सुविधा है. यहां जाएं: अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इवेंट चालू करना आपके लिए इसे चालू करने का तरीका जानने के लिए Project.
Google Cloud Pub/Sub
जानने के लिए, Google Cloud Pub/Sub का दस्तावेज़ देखें Pub/Sub के काम करने के तरीके के बारे में ज़्यादा जानकारी. खास तौर पर:
- Pub/Sub की बुनियादी बातें जानने के लिए, इन स्लाइड का इस्तेमाल करें इस्तेमाल करने का तरीका.
- जानें कि पुष्टि करने की सुविधा कैसे काम करती है.
- उपलब्ध कराई गई क्लाइंट लाइब्रेरी चुनें या आप खुद लिख सकते हैं और REST/एचटीटीपी या gRPC एपीआई प्लैटफ़ॉर्म.
इवेंट की सदस्यता
जब आपके Projectके लिए इवेंट चालू किए जाएंगे, तब आपको उससे जुड़ा एक विषय असाइन किया जाएगा Project आईडी:
projects/sdm-prod/topics/enterprise-project-id
इवेंट पाने के लिए, पुल बनाएं या उस विषय की सदस्यता पुश करें. यह सदस्यता आपकी ज़रूरतों पर निर्भर करती है इस्तेमाल का उदाहरण. एसडीएम विषय की एक से ज़्यादा सदस्यताएं ली जा सकती हैं. यहां जाएं: ज़्यादा के लिए सदस्यताएं मैनेज करना जानकारी.
इवेंट शुरू करना
Pub/Sub सदस्यता बनाने के बाद, पहली बार इवेंट शुरू करने के लिए,
devices.list
एपीआई कॉल को एक बार ट्रिगर होने वाले के तौर पर चुनें. सभी स्ट्रक्चर और डिवाइस के इवेंट, इसके बाद पब्लिश किए जाएंगे
कॉल.
उदाहरण के लिए, देखें कि क्विक स्टार्ट में पेज को अनुमति दें गाइड.
इवेंट का क्रम
Pub/Sub, ऑर्डर किए गए इवेंट डिलीवर करने की गारंटी नहीं देता. साथ ही, इवेंट के रसीद का ऑर्डर शायद
इवेंट असल में जिस क्रम में हुए हैं. timestamp
का इस्तेमाल करना
फ़ील्ड का इस्तेमाल करके इवेंट के क्रम के हिसाब से समाधान में सहायता मिल सकती है. इवेंट अलग-अलग या एक साथ भी दिखाए जा सकते हैं
किसी एक इवेंट संदेश में भेज सकते हैं.
ज़्यादा जानकारी के लिए, यह देखें मैसेज का क्रम तय करना.
यूज़र आईडी
अगर आपको लागू करने की प्रोसेस उपयोगकर्ताओं (स्ट्रक्चर या डिवाइस के बजाय) पर आधारित है, तो
संसाधनों और इवेंट को जोड़ने के लिए, इवेंट पेलोड से userID
फ़ील्ड. यह फ़ील्ड
उपयोगकर्ता को दिखाने वाला अस्पष्ट आईडी.
userID
, हर एपीआई कॉल के एचटीटीपी रिस्पॉन्स हेडर में भी उपलब्ध होता है.
संबंध इवेंट
रिलेशन इवेंट, किसी संसाधन के रिलेशनल अपडेट को दिखाते हैं. उदाहरण के लिए, जब कोई डिवाइस को किसी स्ट्रक्चर में जोड़ा गया हो या जब किसी डिवाइस को स्ट्रक्चर से मिटा दिया गया हो.
रिलेशन इवेंट तीन तरह के होते हैं:
- हटा दिया गया
- अपडेट कर दिया गया है
रिलेशन इवेंट का पेलोड इस तरह है:
पेलोड
{ "eventId" : "096cde55-2e67-4708-8b0d-1ca0913b077d", "timestamp" : "2019-01-01T00:00:01Z", "relationUpdate" : { "type" : "CREATED", "subject" : "enterprises/project-id/structures/structure-id", "object" : "enterprises/project-id/devices/device-id" }, "userId": "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi" }
रिलेशन इवेंट में, object
वह संसाधन होता है जो इवेंट को ट्रिगर करता है और
subject
एक ऐसा संसाधन है जिससे object
अब जुड़ा हुआ है. इस
उदाहरण के लिए, user ने इस डिवाइस को
developerऔर userका अधिकृत डिवाइस अब उसकी अनुमति वाले डिवाइस से जुड़ा हुआ है
स्ट्रक्चर, जो इवेंट को ट्रिगर करता है.
subject
सिर्फ़ कोई कमरा या स्ट्रक्चर हो सकता है. अगर a developer नहीं है
userका स्ट्रक्चर देखने की अनुमति देते हैं, subject
हमेशा
खाली.
फ़ील्ड
फ़ील्ड | ब्यौरा | डेटा टाइप |
---|---|---|
eventId |
इवेंट के लिए यूनीक आइडेंटिफ़ायर. | string जैसे: "94099140-e525-4e12-92b6-2226a521f6d5" |
timestamp |
इवेंट होने का समय. | string जैसे: "2019-01-01T00:00:01Z" |
relationUpdate |
रिलेशन के अपडेट के बारे में जानकारी देने वाला ऑब्जेक्ट. | object |
userId |
एक यूनीक और अस्पष्ट आइडेंटिफ़ायर, जो उपयोगकर्ता के बारे में बताता है. | string उदाहरण के लिए: "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi" |
अलग-अलग इवेंट के बारे में ज़्यादा जानने के लिए, इवेंट देखें इवेंट और उनके काम करने के तरीक़े की जानकारी मिलती है.
उदाहरण
हर तरह के रिलेशन इवेंट के लिए इवेंट पेलोड अलग-अलग होते हैं:
बनाया गया
स्ट्रक्चर बनाया गया
"relationUpdate" : { "type" : "CREATED", "subject" : "", "object" : "enterprises/project-id/structures/structure-id" }
डिवाइस बनाया गया
"relationUpdate" : { "type" : "CREATED", "subject" : "enterprises/project-id/structures/structure-id", "object" : "enterprises/project-id/devices/device-id" }
डिवाइस बनाया गया
"relationUpdate" : { "type" : "CREATED", "subject" : "enterprises/project-id/structures/structure-id/rooms/room-id", "object" : "enterprises/project-id/devices/device-id" }
अपडेट कर दिया गया है
डिवाइस को स्थानांतरित किया गया
"relationUpdate" : { "type" : "UPDATED", "subject" : "enterprises/project-id/structures/structure-id/rooms/room-id", "object" : "enterprises/project-id/devices/device-id" }
हटा दिया गया
स्ट्रक्चर मिटा दिया गया
"relationUpdate" : { "type" : "DELETED", "subject" : "", "object" : "enterprises/project-id/structures/structure-id" }
डिवाइस मिटाया गया
"relationUpdate" : { "type" : "DELETED", "subject" : "enterprises/project-id/structures/structure-id", "object" : "enterprises/project-id/devices/device-id" }
डिवाइस मिटाया गया
"relationUpdate" : { "type" : "DELETED", "subject" : "enterprises/project-id/structures/structure-id/rooms/room-id", "object" : "enterprises/project-id/devices/device-id" }
संबंध इवेंट तब नहीं भेजे जाते, जब:
- एक कमरा मिटा दिया गया है
संसाधन इवेंट
संसाधन इवेंट किसी संसाधन का अपडेट दिखाता है. यह किसी बदलाव की वजह से हो सकता है जैसे, थर्मोस्टैट का मोड बदलना. यह डिवाइस के लिए एक ऐसी कार्रवाई भी दिखा सकता है जो Trait फ़ील्ड में बदलाव नहीं करता. जैसे, डिवाइस का बटन दबाने से.
Trait फ़ील्ड की वैल्यू में बदलाव होने पर जनरेट होने वाले इवेंट में,
traits
ऑब्जेक्ट, डिवाइस के GET कॉल से मिलता-जुलता है:
पेलोड
{
"eventId" : "64473d81-d201-4e29-8281-ac74ac22e24f",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : {
"name" : "enterprises/project-id/devices/device-id",
"traits" : {
"sdm.devices.traits.ThermostatMode
" : {
"mode" : "COOL"
}
}
},
"userId": "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"resourceGroup" : [
"enterprises/project-id/devices/device-id"
]
}
इसका इस्तेमाल करें व्यक्तिगत Trait से जुड़े दस्तावेज़, ताकि किसी Trait फ़ील्ड में बदलाव करने वाले संसाधन के पेलोड फ़ॉर्मैट को समझा जा सके इवेंट.
डिवाइस की कार्रवाई के जवाब में जनरेट हुए इवेंट में, Trait फ़ील्ड में बदलाव नहीं किया जाता है
पेलोड, resourceUpdate
ऑब्जेक्ट के साथ, लेकिन events
ऑब्जेक्ट के साथ
किसी traits
ऑब्जेक्ट के बजाय:
पेलोड
{ "eventId" : "ad458fd9-a64a-45ed-a183-79f74538336b",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion
" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "TkahNphxcly8HACE4M5B9pHMoF...", } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"eventThreadId" : "d67cd3f7-86a7-425e-8bb3-462f92ec9f59",
"eventThreadState" : "STARTED",
"resourceGroup" : [ "enterprises/project-id/devices/device-id" ] }
इस तरह के संसाधन इवेंट को किसी खास विशेषता के ज़रिए बताया जाता है. उदाहरण के लिए, मोशन इवेंट को इसमें बताया गया है CameraMotion trait. हर विशेषता के दस्तावेज़ देखें ताकि इस तरह के रिसॉर्स इवेंट के पेलोड फ़ॉर्मैट को समझा जा सके.
फ़ील्ड
फ़ील्ड | ब्यौरा | डेटा टाइप |
---|---|---|
eventId |
इवेंट के लिए यूनीक आइडेंटिफ़ायर. | string जैसे: "ad458fd9-a64a-45ed-a183-79f74538336b" |
timestamp |
इवेंट होने का समय. | string जैसे: "2019-01-01T00:00:01Z" |
resourceUpdate |
एक ऑब्जेक्ट जो संसाधन के अपडेट के बारे में जानकारी देता है. | object |
userId |
एक यूनीक और अस्पष्ट आइडेंटिफ़ायर, जो उपयोगकर्ता के बारे में बताता है. | string उदाहरण के लिए: "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi" |
eventThreadId |
इवेंट थ्रेड के लिए यूनीक आइडेंटिफ़ायर. | string जैसे: "d67cd3f7-86a7-425e-8bb3-462f92ec9f59" |
eventThreadState |
इवेंट थ्रेड की स्थिति. | string वैल्यू: "STARTED", "UPDATED", "ENDED" |
resourceGroup |
एक ऑब्जेक्ट जो ऐसे संसाधनों के बारे में बताता है जिनमें इस इवेंट से मिलते-जुलते अपडेट हो सकते हैं. इस ऑब्जेक्ट में, इवेंट का संसाधन (resourceUpdate ऑब्जेक्ट से) हमेशा मौजूद रहेगा. |
object |
अलग-अलग इवेंट के बारे में ज़्यादा जानने के लिए, इवेंट देखें इवेंट और उनके काम करने के तरीक़े की जानकारी मिलती है.
अपडेट होने वाली सूचनाएं
संसाधन इवेंट के आधार पर सूचनाएं, किसी ऐप्लिकेशन में लागू की जा सकती हैं, जैसे Android या iOS. भेजी जाने वाली सूचनाओं की संख्या कम करने के लिए, अपडेट की जा सकने वाली सूचनाएं लागू की जा सकती हैं, जिनमें पहले से मौजूद सूचनाएं उसी इवेंट में बाद के इवेंट के आधार पर नई जानकारी के साथ अपडेट किए जाते हैं थ्रेड.अपडेट की जा सकने वाली सूचनाओं के लिए, इवेंट की सुविधा उपलब्ध कराने का विकल्प चुनें. साथ ही, इन्हें इस तरह से टैग किया गया हो
अपडेट किया जा सकता है eventThreadId
नाम का एक अतिरिक्त फ़ील्ड होता है. इसका इस्तेमाल करें
पहले से मौजूद इवेंट को अपडेट करने के लिए, अलग-अलग इवेंट को एक साथ लिंक करने के लिए फ़ील्ड
एक ऐसी सूचना है जो किसी उपयोगकर्ता को दिखती है.
इवेंट थ्रेड और इवेंट सेशन अलग-अलग होते हैं. इवेंट थ्रेड उसी थ्रेड में, पिछले इवेंट के अपडेट किए गए स्टेटस की पहचान करता है. कॉन्टेंट बनाने इवेंट सेशन एक-दूसरे से जुड़े अलग-अलग इवेंट की पहचान करता है और किसी इवेंट सेशन में एक से ज़्यादा इवेंट थ्रेड हो सकते हैं.
सूचना के मकसद से, अलग-अलग तरह के इवेंट को अलग-अलग ग्रुप में रखा जाता है थ्रेड.
इस थ्रेड को ग्रुप में बांटने और टाइमिंग लॉजिक को Google मैनेज करता है. यह इन पर निर्भर करता है बदल सकते हैं. developer को इन बातों के आधार पर सूचनाएं अपडेट करनी चाहिए एसडीएम एपीआई से मिले इवेंट के थ्रेड और सेशन.
थ्रेड की स्थिति
जिन इवेंट में अपडेट की जा सकने वाली सूचनाएं काम करती हैं उनमें एक eventThreadState
भी होती है
ऐसा फ़ील्ड है जो उस समय इवेंट थ्रेड की स्थिति को दिखाता है. यह
फ़ील्ड में ये वैल्यू होती हैं:
- शुरू किया गया — किसी इवेंट थ्रेड में पहला इवेंट.
- अपडेट किया गया — किसी मौजूदा इवेंट थ्रेड में कोई इवेंट. किसी एक थ्रेड में इस स्थिति से, शून्य या उससे ज़्यादा इवेंट हो सकते हैं.
- खत्म हो गया — इवेंट थ्रेड में आखिरी इवेंट, जो थ्रेड टाइप के आधार पर, अपडेट किए गए पिछले इवेंट का डुप्लीकेट हो सकता है.
इस फ़ील्ड का इस्तेमाल इवेंट थ्रेड की प्रोग्रेस को ट्रैक करने के लिए किया जा सकता है. साथ ही, यह तब भी देखा जा सकता है, जब इसमें खत्म हो गया.
इवेंट फ़िल्टर करना
कुछ मामलों में, डिवाइस से पहचाने गए इवेंट को पब्लिश करने से बाहर रखा जा सकता है को एसडीएम Pub/Sub विषय से जोड़ना होगा. यह व्यवहार इसे इवेंट फ़िल्टर करना कहा जाता है. इवेंट को फ़िल्टर करने का मकसद, लोगों को बहुत कम समय में बहुत सारे समान इवेंट संदेश प्रकाशित करना.
उदाहरण के लिए, कोई मैसेज एसडीएम के विषय पर पब्लिश हो सकता है शुरुआती मोशन इवेंट के लिए. किसी और तरीके से इसके बाद, मोशन वाले मैसेज एक तय समय बीतने तक फ़िल्टर करके उसे पब्लिश करने की प्रोसेस से हटाया जा सकता है. इस अवधि के एक बार कुछ समय बीतने के बाद, उस इवेंट टाइप के लिए इवेंट का मैसेज फिर से पब्लिश किया जा सकता है.
Google Home ऐप्लिकेशन (जीएचए) में, ऐसे इवेंट जो फ़िल्टर किया गया डेटा userके इवेंट इतिहास में अब भी दिखेगा. हालांकि, ऐसे इवेंट की वजह से ऐप्लिकेशन की कोई सूचना नहीं जनरेट होती (भले ही वह सूचना इस टाइप की हो सक्षम किया गया है).
हर तरह के इवेंट का अपना इवेंट फ़िल्टर करने का लॉजिक होता है, जो Google. इसमें किसी भी समय बदलाव किया जा सकता है. इवेंट को फ़िल्टर करने का यह लॉजिक है और सेशन लॉजिक, इवेंट थ्रेड और सेशन लॉजिक से अलग है.
सेवा खाते
एसडीएम एपीआई को मैनेज करने के लिए, सेवा खातों का सुझाव दिया जाता है सदस्यताएँ और इवेंट मैसेज. सेवा खाते का इस्तेमाल किसी ऐप्लिकेशन या कोई व्यक्ति नहीं, बल्कि वर्चुअल मशीन के पास इसकी अपनी यूनीक खाता कुंजी होती है.
Pub/Sub API के लिए, सेवा खाते की अनुमति का इस्तेमाल करना दो पैरों वाला OAuth (2LO).
2LO की पुष्टि करने वाले फ़्लो में:
- developer , सेवा कुंजी का इस्तेमाल करके ऐक्सेस टोकन का अनुरोध करता है.
- developer , एपीआई को कॉल करने के साथ ऐक्सेस टोकन का इस्तेमाल करता है.
Google 2LO और इसे सेट अप करने के तरीके के बारे में ज़्यादा जानने के लिए, यहां जाएं सर्वर से सर्वर के लिए OAuth 2.0 का इस्तेमाल करना ऐप्लिकेशन.
अनुमति देना
सेवा खाते को, Pub/Sub एपीआई:
- क्लाउड Pub/Sub चालू करना एपीआई को भी ऐक्सेस किया जा सकता है.
- यहां बताए गए तरीके से, सेवा खाता और सेवा खाता कुंजी बनाना सेवा खाता बनाना. हमारा सुझाव है कि इसे सिर्फ़ Pub/Sub के सदस्य की भूमिका दें. पक्का करें कि सेवा खाता कुंजी को उस मशीन पर डाउनलोड करें जो Pub/Sub एपीआई.
- अपने
आवेदन करने के लिए पिछले पेज पर दिए गए निर्देशों का पालन करें
या
oauth2l
का इस्तेमाल करके मैन्युअल तरीके से ऐक्सेस टोकन पाएं. एपीआई ऐक्सेस की फटाफट जांच करनी हो. - सेवा खाते के क्रेडेंशियल या ऐक्सेस टोकन का इस्तेमाल
Pub/Sub
project.subscriptions
एपीआई का इस्तेमाल करने के लिए किया जा सकता है.
ओऑथ2एल
Google oauth2l
, Go में लिखे गए OAuth के लिए एक कमांड-लाइन टूल है. इसे इसके लिए इंस्टॉल करें
Mac या Linux में Go का इस्तेमाल किया जा रहा है.
- अगर आपके सिस्टम पर Go ऐप्लिकेशन नहीं है, तो पहले उसे डाउनलोड करके इंस्टॉल करें.
- Go इंस्टॉल हो जाने के बाद,
oauth2l
इंस्टॉल करें और इसकी जगह की जानकारी अपनेPATH
में जोड़ें एनवायरमेंट वैरिएबल:go install github.com/google/oauth2l@latest
export PATH=$PATH:~/go/bin
- एपीआई का ऐक्सेस टोकन पाने के लिए,
oauth2l
का इस्तेमाल करें. इसके लिए, सही तरीके का इस्तेमाल करें OAuth के दायरे: उदाहरण के लिए, अगर आपकी सेवा कुंजीoauth2l fetch --credentials path-to-service-key.json --scope https://www.googleapis.com/auth/pubsub https://www.googleapis.com/auth/cloud-platform
~/myServiceKey-eb0a5f900ee3.json
:oauth2l fetch --credentials ~/myServiceKey-eb0a5f900ee3.json --scope https://www.googleapis.com/auth/pubsub https://www.googleapis.com/auth/cloud-platform
ya29.c.Elo4BmHXK5...
ज़्यादा इस्तेमाल के बारे में जानने के लिए, oauth2l
README देखें
जानकारी.
Google API क्लाइंट लाइब्रेरी
Google API के लिए ऐसी कई क्लाइंट लाइब्रेरी उपलब्ध हैं जो OAuth का इस्तेमाल करती है 2.0. इस बारे में ज़्यादा जानकारी के लिए, Google API क्लाइंट लाइब्रेरी देखें आपकी पसंद की भाषा में हो.
जब इन लाइब्रेरी को Pub/Sub APIके साथ इस्तेमाल किया जाता है, तो इनका इस्तेमाल करें: ये स्कोप स्ट्रिंग:
https://www.googleapis.com/auth/pubsub https://www.googleapis.com/auth/cloud-platform
गड़बड़ियां
इस गाइड से जुड़े ये गड़बड़ी कोड दिख सकते हैं:
गड़बड़ी संदेश | RPC | समस्या का हल |
---|---|---|
कैमरा इमेज अब डाउनलोड नहीं की जा सकती. | DEADLINE_EXCEEDED |
इवेंट के पब्लिश होने के 30 सेकंड बाद, उसकी इमेज दिखना बंद हो जाती है. समयसीमा खत्म होने से पहले, इमेज को डाउनलोड कर लें. |
इवेंट आईडी कैमरे से नहीं जुड़ा है. | FAILED_PRECONDITION |
कैमरा इवेंट से मिले सही eventID का इस्तेमाल करें. |
इसके लिए एपीआई गड़बड़ी कोड संदर्भ देखें में देखें.