You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/hi/3-transport/lessons/2-store-location-data
co-op-translator[bot] e83309237f
🌐 Update translations via Co-op Translator (#538)
4 weeks ago
..
README.md 🌐 Update translations via Co-op Translator (#538) 4 weeks ago
assignment.md 🌐 Update translations via Co-op Translator (#538) 4 weeks ago

README.md

स्टोर लोकेशन डेटा

इस पाठ का स्केच नोट अवलोकन

स्केच नोट नित्या नरसिम्हन द्वारा। बड़े संस्करण के लिए छवि पर क्लिक करें।

प्री-लेक्चर क्विज़

प्री-लेक्चर क्विज़

परिचय

पिछले पाठ में, आपने सीखा कि GPS सेंसर का उपयोग करके लोकेशन डेटा कैसे कैप्चर किया जाता है। इस डेटा का उपयोग ट्रक की लोकेशन और उसकी यात्रा को विज़ुअलाइज़ करने के लिए किया जा सकता है, लेकिन इसे क्लाउड में IoT सेवा पर भेजने और कहीं स्टोर करने की आवश्यकता होती है।

इस पाठ में आप IoT डेटा को स्टोर करने के विभिन्न तरीकों के बारे में जानेंगे और यह भी सीखेंगे कि अपने IoT सेवा से डेटा को सर्वरलेस कोड का उपयोग करके कैसे स्टोर किया जाए।

इस पाठ में हम निम्नलिखित विषयों को कवर करेंगे:

संरचित और असंरचित डेटा

कंप्यूटर सिस्टम डेटा के साथ काम करते हैं, और यह डेटा विभिन्न आकारों और प्रकारों में आता है। यह एकल नंबर से लेकर बड़े टेक्स्ट, वीडियो, इमेज और IoT डेटा तक हो सकता है। डेटा को आमतौर पर दो श्रेणियों में विभाजित किया जा सकता है - संरचित डेटा और असंरचित डेटा।

  • संरचित डेटा वह डेटा है जिसका एक स्पष्ट, कठोर ढांचा होता है जो नहीं बदलता और आमतौर पर डेटा की तालिकाओं और उनके संबंधों से मेल खाता है। उदाहरण के लिए, किसी व्यक्ति का नाम, जन्म तिथि और पता।

  • असंरचित डेटा वह डेटा है जिसका कोई स्पष्ट, कठोर ढांचा नहीं होता, और जो अक्सर बदल सकता है। उदाहरण के लिए, लिखित दस्तावेज़ या स्प्रेडशीट।

शोध करें: क्या आप संरचित और असंरचित डेटा के कुछ अन्य उदाहरण सोच सकते हैं?

💁 इसके अलावा, अर्ध-संरचित डेटा भी होता है, जो संरचित होता है लेकिन निश्चित तालिकाओं में फिट नहीं होता।

IoT डेटा को आमतौर पर असंरचित डेटा माना जाता है।

कल्पना करें कि आप एक बड़े वाणिज्यिक खेत के वाहनों के बेड़े में IoT डिवाइस जोड़ रहे हैं। आप विभिन्न प्रकार के वाहनों के लिए अलग-अलग डिवाइस का उपयोग करना चाह सकते हैं। उदाहरण के लिए:

  • खेत के वाहनों जैसे ट्रैक्टर के लिए आप GPS डेटा चाहते हैं ताकि यह सुनिश्चित किया जा सके कि वे सही खेतों पर काम कर रहे हैं।
  • खाद्य पदार्थों को गोदामों तक ले जाने वाले डिलीवरी ट्रकों के लिए आप GPS डेटा के साथ-साथ गति और त्वरण डेटा चाहते हैं ताकि यह सुनिश्चित किया जा सके कि ड्राइवर सुरक्षित रूप से चला रहा है, और ड्राइव पहचान और स्टार्ट/स्टॉप डेटा ताकि स्थानीय कानूनों के तहत काम के घंटे का पालन हो सके।
  • रेफ्रिजरेटेड ट्रकों के लिए आप तापमान डेटा चाहते हैं ताकि यह सुनिश्चित किया जा सके कि खाद्य पदार्थ बहुत गर्म या ठंडे न हों और ट्रांज़िट में खराब न हों।

यह डेटा लगातार बदल सकता है। उदाहरण के लिए, यदि IoT डिवाइस ट्रक के कैब में है, तो यह डेटा ट्रेलर बदलने के साथ बदल सकता है, जैसे कि केवल रेफ्रिजरेटेड ट्रेलर का उपयोग होने पर तापमान डेटा भेजना।

और कौन सा IoT डेटा कैप्चर किया जा सकता है? ट्रकों द्वारा ले जाने वाले लोड और रखरखाव डेटा के बारे में सोचें।

यह डेटा वाहन से वाहन में भिन्न होता है, लेकिन यह सब एक ही IoT सेवा में प्रोसेसिंग के लिए भेजा जाता है। IoT सेवा को इस असंरचित डेटा को प्रोसेस करने में सक्षम होना चाहिए, इसे इस तरह से स्टोर करना चाहिए कि इसे खोजा या विश्लेषण किया जा सके, लेकिन इस डेटा के विभिन्न ढांचों के साथ काम कर सके।

SQL बनाम NoSQL स्टोरेज

डेटाबेस ऐसी सेवाएं हैं जो आपको डेटा स्टोर और क्वेरी करने की अनुमति देती हैं। डेटाबेस दो प्रकार के होते हैं - SQL और NoSQL।

SQL डेटाबेस

पहले डेटाबेस रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) थे, जिन्हें रिलेशनल डेटाबेस भी कहा जाता है। इन्हें SQL डेटाबेस भी कहा जाता है क्योंकि इनमें डेटा जोड़ने, हटाने, अपडेट करने या क्वेरी करने के लिए स्ट्रक्चर्ड क्वेरी लैंग्वेज (SQL) का उपयोग किया जाता है। ये डेटाबेस एक स्कीमा से बने होते हैं - डेटा की एक स्पष्ट रूप से परिभाषित तालिका सेट, जो स्प्रेडशीट के समान होती है। प्रत्येक तालिका में कई नामित कॉलम होते हैं। जब आप डेटा डालते हैं, तो आप तालिका में एक पंक्ति जोड़ते हैं, प्रत्येक कॉलम में मान डालते हैं। यह डेटा को एक बहुत ही कठोर ढांचे में रखता है - हालांकि आप कॉलम खाली छोड़ सकते हैं, यदि आप एक नया कॉलम जोड़ना चाहते हैं तो आपको इसे डेटाबेस में करना होगा और मौजूदा पंक्तियों के लिए मान भरना होगा। ये डेटाबेस रिलेशनल होते हैं - यानी एक तालिका का दूसरे तालिका से संबंध हो सकता है।

एक रिलेशनल डेटाबेस जिसमें उपयोगकर्ता तालिका का ID खरीदारी तालिका के उपयोगकर्ता ID कॉलम से संबंधित है, और उत्पाद तालिका का ID खरीदारी तालिका के उत्पाद ID से संबंधित है

उदाहरण के लिए, यदि आप उपयोगकर्ता का व्यक्तिगत विवरण एक तालिका में स्टोर करते हैं, तो आपके पास प्रत्येक उपयोगकर्ता के लिए एक प्रकार का आंतरिक अद्वितीय ID होगा जो उपयोगकर्ता का नाम और पता वाली तालिका में उपयोग किया जाता है। यदि आप उस उपयोगकर्ता के बारे में अन्य विवरण स्टोर करना चाहते हैं, जैसे उनकी खरीदारी, तो आप एक नई तालिका में एक कॉलम में उस उपयोगकर्ता का ID रखेंगे। जब आप किसी उपयोगकर्ता को खोजते हैं, तो आप उनके ID का उपयोग करके उनके व्यक्तिगत विवरण एक तालिका से और उनकी खरीदारी दूसरी तालिका से प्राप्त कर सकते हैं।

SQL डेटाबेस संरचित डेटा को स्टोर करने और यह सुनिश्चित करने के लिए आदर्श हैं कि डेटा आपके स्कीमा से मेल खाता है।

यदि आपने पहले SQL का उपयोग नहीं किया है, तो SQL पेज पर Wikipedia पर इसके बारे में पढ़ें।

कुछ प्रसिद्ध SQL डेटाबेस हैं Microsoft SQL Server, MySQL, और PostgreSQL।

शोध करें: इन SQL डेटाबेस और उनकी क्षमताओं के बारे में पढ़ें।

NoSQL डेटाबेस

NoSQL डेटाबेस को NoSQL कहा जाता है क्योंकि इनमें SQL डेटाबेस की तरह कठोर ढांचा नहीं होता। इन्हें डॉक्यूमेंट डेटाबेस भी कहा जाता है क्योंकि ये असंरचित डेटा जैसे डॉक्यूमेंट को स्टोर कर सकते हैं।

💁 उनके नाम के बावजूद, कुछ NoSQL डेटाबेस आपको SQL का उपयोग करके डेटा क्वेरी करने की अनुमति देते हैं।

NoSQL डेटाबेस में फोल्डरों में डॉक्यूमेंट

NoSQL डेटाबेस में पहले से परिभाषित स्कीमा नहीं होता जो डेटा को स्टोर करने के तरीके को सीमित करता है। इसके बजाय, आप किसी भी असंरचित डेटा को डाल सकते हैं, आमतौर पर JSON डॉक्यूमेंट का उपयोग करके। इन डॉक्यूमेंट को फोल्डरों में व्यवस्थित किया जा सकता है, जैसे आपके कंप्यूटर पर फाइलें। प्रत्येक डॉक्यूमेंट में अन्य डॉक्यूमेंट से अलग फील्ड हो सकते हैं - उदाहरण के लिए, यदि आप अपने खेत के वाहनों से IoT डेटा स्टोर कर रहे हैं, तो कुछ में एक्सेलेरोमीटर और गति डेटा के लिए फील्ड हो सकते हैं, जबकि अन्य में ट्रेलर के तापमान के लिए फील्ड हो सकते हैं। यदि आप एक नए ट्रक प्रकार को जोड़ते हैं, जैसे कि ऐसा ट्रक जिसमें उत्पाद के वजन को ट्रैक करने के लिए बिल्ट-इन स्केल हो, तो आपका IoT डिवाइस इस नए फील्ड को जोड़ सकता है और इसे डेटाबेस में बिना किसी बदलाव के स्टोर किया जा सकता है।

कुछ प्रसिद्ध NoSQL डेटाबेस हैं Azure CosmosDB, MongoDB, और CouchDB।

शोध करें: इन NoSQL डेटाबेस और उनकी क्षमताओं के बारे में पढ़ें।

इस पाठ में, आप IoT डेटा को स्टोर करने के लिए NoSQL स्टोरेज का उपयोग करेंगे।

GPS डेटा को IoT हब पर भेजें

पिछले पाठ में आपने अपने IoT डिवाइस से जुड़े GPS सेंसर से GPS डेटा कैप्चर किया। इस IoT डेटा को क्लाउड में स्टोर करने के लिए, आपको इसे IoT सेवा पर भेजना होगा। एक बार फिर, आप Azure IoT Hub का उपयोग करेंगे, वही IoT क्लाउड सेवा जिसे आपने पिछले प्रोजेक्ट में उपयोग किया था।

IoT डिवाइस से IoT हब तक GPS टेलीमेट्री भेजना

कार्य - GPS डेटा को IoT हब पर भेजें

  1. फ्री टियर का उपयोग करके एक नया IoT हब बनाएं।

    ⚠️ यदि आवश्यक हो, तो प्रोजेक्ट 2, पाठ 4 से IoT हब बनाने के निर्देश देखें।

    एक नया रिसोर्स ग्रुप बनाना याद रखें। नए रिसोर्स ग्रुप का नाम gps-sensor रखें, और नए IoT हब का नाम gps-sensor पर आधारित एक अद्वितीय नाम रखें, जैसे gps-sensor-<आपका नाम>

    💁 यदि आपके पास पिछले प्रोजेक्ट से आपका IoT हब अभी भी है, तो आप इसे पुनः उपयोग कर सकते हैं। अन्य सेवाएं बनाते समय इस IoT हब और उसके रिसोर्स ग्रुप का नाम उपयोग करना याद रखें।

  2. IoT हब में एक नया डिवाइस जोड़ें। इस डिवाइस का नाम gps-sensor रखें। डिवाइस के लिए कनेक्शन स्ट्रिंग प्राप्त करें।

  3. अपने डिवाइस कोड को अपडेट करें ताकि GPS डेटा को नए IoT हब पर डिवाइस कनेक्शन स्ट्रिंग का उपयोग करके भेजा जा सके।

    ⚠️ यदि आवश्यक हो, तो प्रोजेक्ट 2, पाठ 4 से अपने डिवाइस को IoT से कनेक्ट करने के निर्देश देखें।

  4. जब आप GPS डेटा भेजें, तो इसे निम्नलिखित JSON प्रारूप में भेजें:

    {
        "gps" :
        {
            "lat" : <latitude>,
            "lon" : <longitude>
        }
    }
    
  5. GPS डेटा हर मिनट भेजें ताकि आप अपने दैनिक संदेश आवंटन का उपयोग न करें।

यदि आप Wio Terminal का उपयोग कर रहे हैं, तो सभी आवश्यक लाइब्रेरी जोड़ना याद रखें और NTP सर्वर का उपयोग करके समय सेट करें। आपका कोड यह सुनिश्चित करने की आवश्यकता होगी कि GPS लोकेशन भेजने से पहले उसने सीरियल पोर्ट से सभी डेटा पढ़ लिया है, पिछले पाठ के मौजूदा कोड का उपयोग करके। JSON डॉक्यूमेंट बनाने के लिए निम्नलिखित कोड का उपयोग करें:

DynamicJsonDocument doc(1024);
doc["gps"]["lat"] = gps.location.lat();
doc["gps"]["lon"] = gps.location.lng();

यदि आप वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं, तो वर्चुअल एनवायरनमेंट का उपयोग करके सभी आवश्यक लाइब्रेरी इंस्टॉल करना याद रखें।

Raspberry Pi और वर्चुअल IoT डिवाइस दोनों के लिए, पिछले पाठ के मौजूदा कोड का उपयोग करके अक्षांश और देशांतर मान प्राप्त करें, फिर उन्हें सही JSON प्रारूप में निम्नलिखित कोड के साथ भेजें:

message_json = { "gps" : { "lat":lat, "lon":lon } }
print("Sending telemetry", message_json)
message = Message(json.dumps(message_json))

💁 आप इस कोड को code/wio-terminal, code/pi या code/virtual-device फ़ोल्डर में पा सकते हैं।

अपने डिवाइस कोड को चलाएं और सुनिश्चित करें कि संदेश IoT हब में az iot hub monitor-events CLI कमांड का उपयोग करके प्रवाहित हो रहे हैं।

हॉट, वॉर्म और कोल्ड पाथ्स

IoT डिवाइस से क्लाउड तक प्रवाहित डेटा हमेशा रियल टाइम में प्रोसेस नहीं किया जाता। कुछ डेटा को रियल टाइम प्रोसेसिंग की आवश्यकता होती है, अन्य डेटा को थोड़ी देर बाद प्रोसेस किया जा सकता है, और अन्य डेटा को बहुत बाद में प्रोसेस किया जा सकता है। डेटा के प्रवाह को विभिन्न सेवाओं में जो अलग-अलग समय पर डेटा प्रोसेस करती हैं, हॉट, वॉर्म और कोल्ड पाथ्स कहा जाता है।

हॉट पाथ

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

हॉट पाथ डेटा का उपयोग करने के लिए, आपका कोड आपके क्लाउड सेवाओं द्वारा प्राप्त होते ही इवेंट्स पर प्रतिक्रिया देगा।

वॉर्म पाथ

वॉर्म पाथ उस डेटा को संदर्भित करता है जिसे प्राप्त होने के थोड़ी देर बाद प्रोसेस किया जा सकता है, उदाहरण के लिए रिपोर्टिंग या शॉर्ट टर्म एनालिटिक्स के लिए। आप वॉर्म पाथ डेटा का उपयोग दैनिक वाहन माइलेज रिपोर्ट के लिए करेंगे, जो पिछले दिन के डेटा का उपयोग करता है।

वॉर्म पाथ डेटा को क्लाउड सेवा द्वारा प्राप्त होते ही किसी प्रकार के स्टोरेज में स्टोर किया जाता है जिसे जल्दी एक्सेस किया जा सकता है।

कोल्ड पाथ

कोल्ड पाथ ऐतिहासिक डेटा को संदर्भित करता है, लंबे समय तक डेटा को स्टोर करना ताकि इसे जब भी आवश्यक हो प्रोसेस किया जा सके। उदाहरण के लिए, आप कोल्ड पाथ का उपयोग वार्षिक वाहन माइलेज रिपोर्ट प्राप्त करने के लिए कर सकते हैं, या ईंधन लागत को कम करने के लिए सबसे अनुकूल मार्ग खोजने के लिए रूट्स पर एनालिटिक्स चला सकते हैं।

कोल्ड पाथ डेटा को डेटा वेयरहाउस में स्टोर किया जाता है - बड़े पैमाने पर डेटा स्टोर करने के लिए डिज़ाइन किए गए डेटाबेस जो कभी नहीं बदलते और जिन्हें जल्दी और आसानी से क्वेरी किया जा सकता है। आमतौर पर आपके क्लाउड एप्लिकेशन में एक नियमित जॉब होती है जो हर दिन, सप्ताह, या महीने में एक नियमित समय पर चलती है ताकि डेटा को वॉर्म पाथ स्टोरेज से डेटा वेयरहाउस में स्थानांतरित किया जा सके।

अब तक आपने इन पाठों में जो डेटा कैप्चर किया है, वह हॉट, वॉर्म या कोल्ड पाथ डेटा है?

GPS इवेंट्स को सर्वरलेस कोड का उपयोग करके हैंडल करें

एक बार जब डेटा आपके IoT हब में प्रवाहित हो रहा हो, तो आप कुछ सर्वरलेस कोड लिख सकते हैं जो इवेंट-हब संगत एंडपॉइंट पर प्रकाशित इवेंट्स को सुनता है। यह वॉर्म पाथ है - इस डेटा को स्टोर किया जाएगा और अगले पाठ में यात्रा की रिपोर्टिंग के लिए उपयोग किया जाएगा।

IoT डिवाइस से IoT हब तक GPS टेलीमेट्री भेजना, फिर इवेंट हब ट्रिगर के माध्यम से Azure Functions तक

कार्य - GPS इवेंट्स को सर्वरलेस कोड का उपयोग करके हैंडल करें

  1. Azure Functions CLI का उपयोग करके एक Azure Functions ऐप बनाएं। Python रनटाइम का उपयोग करें, और इसे gps-trigger नामक फ़ोल्डर में बनाएं, और Functions App प्रोजेक्ट नाम के लिए भी यही नाम उपयोग करें। सुनिश्चित करें कि आप इसके लिए एक वर्चुअल एनवायरमेंट बनाएं।

⚠️ आप Azure Functions प्रोजेक्ट बनाने के निर्देश, प्रोजेक्ट 2, पाठ 5 का संदर्भ ले सकते हैं यदि आवश्यक हो।

  1. IoT हब के इवेंट हब संगत एंडपॉइंट का उपयोग करते हुए एक IoT हब इवेंट ट्रिगर जोड़ें।

    ⚠️ यदि आवश्यक हो, तो प्रोजेक्ट 2, पाठ 5 से IoT हब इवेंट ट्रिगर बनाने के निर्देश देखें।

  2. local.settings.json फ़ाइल में इवेंट हब संगत एंडपॉइंट कनेक्शन स्ट्रिंग सेट करें, और उस प्रविष्टि के लिए कुंजी का उपयोग function.json फ़ाइल में करें।

  3. Azurite ऐप का उपयोग स्थानीय स्टोरेज एमुलेटर के रूप में करें।

  4. यह सुनिश्चित करने के लिए अपने फ़ंक्शन ऐप को चलाएं कि यह आपके GPS डिवाइस से इवेंट प्राप्त कर रहा है। सुनिश्चित करें कि आपका IoT डिवाइस भी चल रहा है और GPS डेटा भेज रहा है।

    Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}}
    

Azure स्टोरेज अकाउंट्स

Azure स्टोरेज लोगो

Azure स्टोरेज अकाउंट्स एक सामान्य उद्देश्य स्टोरेज सेवा है जो विभिन्न तरीकों से डेटा संग्रहीत कर सकती है। आप डेटा को ब्लॉब्स, कतारों, तालिकाओं, या फ़ाइलों के रूप में संग्रहीत कर सकते हैं, और यह सब एक साथ कर सकते हैं।

ब्लॉब स्टोरेज

ब्लॉब का अर्थ है बाइनरी बड़े ऑब्जेक्ट्स, लेकिन यह किसी भी असंरचित डेटा के लिए उपयोग किया जाने वाला शब्द बन गया है। आप ब्लॉब स्टोरेज में कोई भी डेटा संग्रहीत कर सकते हैं, जैसे IoT डेटा वाले JSON दस्तावेज़, छवि और मूवी फ़ाइलें। ब्लॉब स्टोरेज में कंटेनर की अवधारणा होती है, जो नामित बकेट्स होते हैं जिनमें आप डेटा संग्रहीत कर सकते हैं, जो रिलेशनल डेटाबेस में तालिकाओं के समान होते हैं। इन कंटेनरों में एक या अधिक फ़ोल्डर हो सकते हैं जिनमें ब्लॉब्स संग्रहीत होते हैं, और प्रत्येक फ़ोल्डर में अन्य फ़ोल्डर हो सकते हैं, जैसे आपकी कंप्यूटर हार्ड डिस्क पर फ़ाइलें संग्रहीत होती हैं।

इस पाठ में आप IoT डेटा संग्रहीत करने के लिए ब्लॉब स्टोरेज का उपयोग करेंगे।

शोध करें: Azure Blob Storage के बारे में पढ़ें।

टेबल स्टोरेज

टेबल स्टोरेज आपको अर्ध-संरचित डेटा संग्रहीत करने की अनुमति देता है। टेबल स्टोरेज वास्तव में एक NoSQL डेटाबेस है, इसलिए इसे पहले से परिभाषित तालिकाओं के सेट की आवश्यकता नहीं होती है, लेकिन इसे एक या अधिक तालिकाओं में डेटा संग्रहीत करने के लिए डिज़ाइन किया गया है, प्रत्येक पंक्ति को परिभाषित करने के लिए अद्वितीय कुंजियों के साथ।

शोध करें: Azure Table Storage के बारे में पढ़ें।

कतार स्टोरेज

कतार स्टोरेज आपको 64KB तक के संदेशों को एक कतार में संग्रहीत करने की अनुमति देता है। आप संदेशों को कतार के पीछे जोड़ सकते हैं, और उन्हें सामने से पढ़ सकते हैं। जब तक स्टोरेज स्पेस उपलब्ध है, कतारें संदेशों को अनिश्चित काल तक संग्रहीत करती हैं, जिससे संदेशों को लंबे समय तक संग्रहीत किया जा सकता है और आवश्यकता पड़ने पर पढ़ा जा सकता है। उदाहरण के लिए, यदि आप GPS डेटा को संसाधित करने के लिए मासिक कार्य चलाना चाहते हैं, तो आप इसे एक महीने के लिए हर दिन कतार में जोड़ सकते हैं, और फिर महीने के अंत में सभी संदेशों को कतार से संसाधित कर सकते हैं।

शोध करें: Azure Queue Storage के बारे में पढ़ें।

फ़ाइल स्टोरेज

फ़ाइल स्टोरेज क्लाउड में फ़ाइलों का भंडारण है, और कोई भी ऐप्स या डिवाइस उद्योग मानक प्रोटोकॉल का उपयोग करके कनेक्ट हो सकते हैं। आप फ़ाइल स्टोरेज में फ़ाइलें लिख सकते हैं, फिर इसे अपने पीसी या मैक पर एक ड्राइव के रूप में माउंट कर सकते हैं।

शोध करें: Azure File Storage के बारे में पढ़ें।

अपने सर्वरलेस कोड को स्टोरेज से कनेक्ट करें

अब आपके फ़ंक्शन ऐप को IoT हब से संदेशों को संग्रहीत करने के लिए ब्लॉब स्टोरेज से कनेक्ट करने की आवश्यकता है। इसे करने के 2 तरीके हैं:

  • फ़ंक्शन कोड के अंदर, ब्लॉब स्टोरेज Python SDK का उपयोग करके ब्लॉब्स के रूप में डेटा लिखें।
  • आउटपुट फ़ंक्शन बाइंडिंग का उपयोग करें ताकि फ़ंक्शन के रिटर्न वैल्यू को ब्लॉब स्टोरेज से बाइंड किया जा सके और ब्लॉब को स्वचालित रूप से सहेजा जा सके।

इस पाठ में, आप Python SDK का उपयोग करके देखेंगे कि ब्लॉब स्टोरेज के साथ कैसे इंटरैक्ट किया जाए।

IoT डिवाइस से GPS टेलीमेट्री को IoT हब, फिर इवेंट हब ट्रिगर के माध्यम से Azure Functions, और फिर ब्लॉब स्टोरेज में सहेजना

डेटा को निम्नलिखित प्रारूप में JSON ब्लॉब के रूप में सहेजा जाएगा:

{
    "device_id": <device_id>,
    "timestamp" : <time>,
    "gps" :
    {
        "lat" : <latitude>,
        "lon" : <longitude>
    }
}

कार्य - अपने सर्वरलेस कोड को स्टोरेज से कनेक्ट करें

  1. एक Azure स्टोरेज अकाउंट बनाएं। इसे gps<आपका नाम> जैसा कुछ नाम दें।

    ⚠️ यदि आवश्यक हो, तो प्रोजेक्ट 2, पाठ 5 से स्टोरेज अकाउंट बनाने के निर्देश देखें।

    यदि आपके पास पिछले प्रोजेक्ट से एक स्टोरेज अकाउंट है, तो आप इसे पुनः उपयोग कर सकते हैं।

    💁 आप इस स्टोरेज अकाउंट का उपयोग इस पाठ में बाद में अपने Azure Functions ऐप को तैनात करने के लिए कर सकेंगे।

  2. स्टोरेज अकाउंट के लिए कनेक्शन स्ट्रिंग प्राप्त करने के लिए निम्नलिखित कमांड चलाएं:

    az storage account show-connection-string --output table \
                                              --name <storage_name>
    

    <storage_name> को पिछले चरण में बनाए गए स्टोरेज अकाउंट के नाम से बदलें।

  3. local.settings.json फ़ाइल में अपने स्टोरेज अकाउंट कनेक्शन स्ट्रिंग के लिए एक नई प्रविष्टि जोड़ें, पिछले चरण से मान का उपयोग करें। इसे STORAGE_CONNECTION_STRING नाम दें।

  4. Azure स्टोरेज Pip पैकेज स्थापित करने के लिए requirements.txt फ़ाइल में निम्नलिखित जोड़ें:

    azure-storage-blob
    

    अपने वर्चुअल एनवायरनमेंट में इस फ़ाइल से पैकेज इंस्टॉल करें।

    यदि आपको कोई त्रुटि मिलती है, तो अपने वर्चुअल एनवायरनमेंट में Pip संस्करण को नवीनतम संस्करण में अपग्रेड करने के लिए निम्नलिखित कमांड का उपयोग करें, फिर पुनः प्रयास करें:

    pip install --upgrade pip
    
  5. iot-hub-trigger के लिए __init__.py फ़ाइल में निम्नलिखित इम्पोर्ट स्टेटमेंट जोड़ें:

    import json
    import os
    import uuid
    from azure.storage.blob import BlobServiceClient, PublicAccess
    

    json सिस्टम मॉड्यूल JSON पढ़ने और लिखने के लिए उपयोग किया जाएगा, os सिस्टम मॉड्यूल कनेक्शन स्ट्रिंग पढ़ने के लिए उपयोग किया जाएगा, और uuid सिस्टम मॉड्यूल GPS रीडिंग के लिए एक अद्वितीय ID उत्पन्न करने के लिए उपयोग किया जाएगा।

    azure.storage.blob पैकेज ब्लॉब स्टोरेज के साथ काम करने के लिए Python SDK को शामिल करता है।

  6. main विधि से पहले, निम्नलिखित सहायक फ़ंक्शन जोड़ें:

    def get_or_create_container(name):
        connection_str = os.environ['STORAGE_CONNECTION_STRING']
        blob_service_client = BlobServiceClient.from_connection_string(connection_str)
    
        for container in blob_service_client.list_containers():
            if container.name == name:
                return blob_service_client.get_container_client(container.name)
    
        return blob_service_client.create_container(name, public_access=PublicAccess.Container)
    

    Python ब्लॉब SDK में ऐसा सहायक तरीका नहीं है जो कंटेनर को तब बनाए जब वह मौजूद न हो। यह कोड local.settings.json फ़ाइल (या क्लाउड में तैनात होने के बाद एप्लिकेशन सेटिंग्स) से कनेक्शन स्ट्रिंग लोड करेगा, फिर ब्लॉब स्टोरेज अकाउंट के साथ इंटरैक्ट करने के लिए BlobServiceClient क्लास बनाएगा। यह फिर ब्लॉब स्टोरेज अकाउंट के सभी कंटेनरों के माध्यम से लूप करता है, दिए गए नाम के साथ एक की तलाश करता है - यदि यह एक पाता है तो यह एक ContainerClient क्लास लौटाएगा जो कंटेनर के साथ इंटरैक्ट कर सकता है। यदि यह नहीं पाता है, तो कंटेनर बनाया जाता है और नए कंटेनर के लिए क्लाइंट लौटाया जाता है।

    जब नया कंटेनर बनाया जाता है, तो कंटेनर में ब्लॉब्स को क्वेरी करने के लिए सार्वजनिक पहुंच प्रदान की जाती है। इसका उपयोग अगले पाठ में GPS डेटा को मानचित्र पर विज़ुअलाइज़ करने के लिए किया जाएगा।

  7. मिट्टी की नमी के विपरीत, इस कोड के साथ हम हर इवेंट को संग्रहीत करना चाहते हैं, इसलिए main फ़ंक्शन में for event in events: लूप के अंदर, logging स्टेटमेंट के नीचे निम्नलिखित कोड जोड़ें:

    device_id = event.iothub_metadata['connection-device-id']
    blob_name = f'{device_id}/{str(uuid.uuid1())}.json'
    

    यह कोड इवेंट मेटाडेटा से डिवाइस ID प्राप्त करता है, फिर इसका उपयोग ब्लॉब नाम बनाने के लिए करता है। ब्लॉब्स को फ़ोल्डरों में संग्रहीत किया जा सकता है, और डिवाइस ID को फ़ोल्डर नाम के लिए उपयोग किया जाएगा, ताकि प्रत्येक डिवाइस के सभी GPS इवेंट एक फ़ोल्डर में हों। ब्लॉब नाम इस फ़ोल्डर, उसके बाद एक दस्तावेज़ नाम, और उनके बीच फॉरवर्ड स्लैश से अलग होता है, जो Linux और macOS पथों के समान है (Windows के समान भी, लेकिन Windows बैक स्लैश का उपयोग करता है)। दस्तावेज़ नाम Python uuid मॉड्यूल का उपयोग करके उत्पन्न एक अद्वितीय ID है, जिसमें फ़ाइल प्रकार json है।

    उदाहरण के लिए, gps-sensor डिवाइस ID के लिए, ब्लॉब नाम gps-sensor/a9487ac2-b9cf-11eb-b5cd-1e00621e3648.json हो सकता है।

  8. इसके नीचे निम्नलिखित कोड जोड़ें:

    container_client = get_or_create_container('gps-data')
    blob = container_client.get_blob_client(blob_name)
    

    यह कोड get_or_create_container सहायक क्लास का उपयोग करके कंटेनर क्लाइंट प्राप्त करता है, और फिर ब्लॉब नाम का उपयोग करके एक ब्लॉब क्लाइंट ऑब्जेक्ट प्राप्त करता है। ये ब्लॉब क्लाइंट मौजूदा ब्लॉब्स को संदर्भित कर सकते हैं, या इस मामले में, नए ब्लॉब को।

  9. इसके बाद निम्नलिखित कोड जोड़ें:

    event_body = json.loads(event.get_body().decode('utf-8'))
    blob_body = {
        'device_id' : device_id,
        'timestamp' : event.iothub_metadata['enqueuedtime'],
        'gps': event_body['gps']
    }
    

    यह ब्लॉब के शरीर का निर्माण करता है जिसे ब्लॉब स्टोरेज में लिखा जाएगा। यह एक JSON दस्तावेज़ है जिसमें डिवाइस ID, IoT हब को भेजे गए टेलीमेट्री का समय, और टेलीमेट्री से GPS निर्देशांक शामिल हैं।

    💁 यह महत्वपूर्ण है कि संदेश के संलग्न समय का उपयोग करें न कि वर्तमान समय का, ताकि संदेश भेजे जाने का समय प्राप्त हो सके। यदि Functions ऐप नहीं चल रहा है, तो यह हब पर कुछ समय के लिए बैठ सकता है।

  10. इसके नीचे निम्नलिखित जोड़ें:

    logging.info(f'Writing blob to {blob_name} - {blob_body}')
    blob.upload_blob(json.dumps(blob_body).encode('utf-8'))
    

    यह कोड लॉग करता है कि एक ब्लॉब को इसके विवरण के साथ लिखा जा रहा है, फिर ब्लॉब के शरीर को नए ब्लॉब की सामग्री के रूप में अपलोड करता है।

  11. Functions ऐप चलाएं। आप आउटपुट में सभी GPS इवेंट्स के लिए ब्लॉब्स को लिखा हुआ देखेंगे:

    [2021-05-21T01:31:14.325Z] Python EventHub trigger processed an event: {"gps": {"lat": 47.73092, "lon": -122.26206}}
    ...
    [2021-05-21T01:31:14.351Z] Writing blob to gps-sensor/4b6089fe-ba8d-11eb-bc7b-1e00621e3648.json - {'device_id': 'gps-sensor', 'timestamp': '2021-05-21T00:57:53.878Z', 'gps': {'lat': 47.73092, 'lon': -122.26206}}
    

    💁 सुनिश्चित करें कि आप एक ही समय में IoT हब इवेंट मॉनिटर नहीं चला रहे हैं।

💁 आप इस कोड को code/functions फ़ोल्डर में पा सकते हैं।

कार्य - अपलोड किए गए ब्लॉब्स को सत्यापित करें

  1. बनाए गए ब्लॉब्स को देखने के लिए, आप या तो Azure Storage Explorer, एक मुफ्त टूल जो आपको अपने स्टोरेज अकाउंट्स को देखने और प्रबंधित करने की अनुमति देता है, या CLI का उपयोग कर सकते हैं।

    1. CLI का उपयोग करने के लिए, पहले आपको एक अकाउंट कुंजी की आवश्यकता होगी। यह कुंजी प्राप्त करने के लिए निम्नलिखित कमांड चलाएं:

      az storage account keys list --output table \
                                   --account-name <storage_name>
      

      <storage_name> को स्टोरेज अकाउंट के नाम से बदलें।

      key1 का मान कॉपी करें।

    2. कंटेनर में ब्लॉब्स की सूची प्राप्त करने के लिए निम्नलिखित कमांड चलाएं:

      az storage blob list --container-name gps-data \
                           --output table \
                           --account-name <storage_name> \
                           --account-key <key1>
      

      <storage_name> को स्टोरेज अकाउंट के नाम से बदलें, और <key1> को पिछले चरण में कॉपी किए गए key1 के मान से बदलें।

      यह कंटेनर में सभी ब्लॉब्स की सूची देगा:

      Name                                                  Blob Type    Blob Tier    Length    Content Type              Last Modified              Snapshot
      ----------------------------------------------------  -----------  -----------  --------  ------------------------  -------------------------  ----------
      gps-sensor/1810d55e-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:27+00:00
      gps-sensor/18293e46-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00
      gps-sensor/1844549c-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00
      gps-sensor/1894d714-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00
      
    3. निम्नलिखित कमांड का उपयोग करके ब्लॉब्स में से एक को डाउनलोड करें:

      az storage blob download --container-name gps-data \
                               --account-name <storage_name> \
                               --account-key <key1> \
                               --name <blob_name> \
                               --file <file_name>
      

      <storage_name> को स्टोरेज अकाउंट के नाम से बदलें, और <key1> को पहले चरण में कॉपी किए गए key1 के मान से बदलें।

      <blob_name> को Name कॉलम से पूर्ण नाम से बदलें, जिसमें फ़ोल्डर नाम भी शामिल है। <file_name> को स्थानीय फ़ाइल के नाम से बदलें जिसमें ब्लॉब को सहेजना है।

    एक बार डाउनलोड हो जाने के बाद, आप JSON फ़ाइल को VS Code में खोल सकते हैं, और आप GPS स्थान विवरण वाला ब्लॉब देखेंगे:

    {"device_id": "gps-sensor", "timestamp": "2021-05-21T00:57:53.878Z", "gps": {"lat": 47.73092, "lon": -122.26206}}
    

कार्य - अपने Functions ऐप को क्लाउड में तैनात करें

अब जब आपका फ़ंक्शन ऐप काम कर रहा है, तो आप इसे क्लाउड में तैनात कर सकते हैं।

  1. एक नया Azure Functions ऐप बनाएं, पहले बनाए गए स्टोरेज अकाउंट का उपयोग करें। इसे gps-sensor- जैसा कुछ नाम दें और अंत में एक अद्वितीय पहचानकर्ता जोड़ें, जैसे कुछ यादृच्छिक शब्द या आपका नाम।

    ⚠️ यदि आवश्यक हो, तो प्रोजेक्ट 2, पाठ 5 से Functions ऐप बनाने के निर्देश देखें।

  2. IOT_HUB_CONNECTION_STRING और STORAGE_CONNECTION_STRING मानों को एप्लिकेशन सेटिंग्स में अपलोड करें।

    ⚠️ यदि आवश्यक हो, तो प्रोजेक्ट 2, पाठ 5 से एप्लिकेशन सेटिंग्स अपलोड करने के निर्देश देखें।

  3. अपने स्थानीय Functions ऐप को क्लाउड में तैनात करें। ⚠️ यदि आवश्यक हो, तो आप प्रोजेक्ट 2, पाठ 5 से अपने Functions ऐप को डिप्लॉय करने के निर्देश का संदर्भ ले सकते हैं।


🚀 चुनौती

GPS डेटा पूरी तरह से सटीक नहीं होता है, और जो स्थान डिटेक्ट किए जा रहे हैं, वे कुछ मीटर तक गलत हो सकते हैं, खासकर सुरंगों और ऊंची इमारतों वाले क्षेत्रों में।

सोचें कि सैटेलाइट नेविगेशन इस समस्या को कैसे हल कर सकता है? आपके सैट-नेव के पास ऐसा कौन सा डेटा है जो इसे आपके स्थान का बेहतर अनुमान लगाने में मदद कर सकता है?

व्याख्यान के बाद क्विज़

व्याख्यान के बाद क्विज़

समीक्षा और स्व-अध्ययन

असाइनमेंट

फ़ंक्शन बाइंडिंग की जांच करें

अस्वीकरण:
यह दस्तावेज़ AI अनुवाद सेवा Co-op Translator का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।