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/bn/3-transport/lessons/2-store-location-data/README.md

52 KiB

স্টোর লোকেশন ডেটা

এই পাঠের একটি স্কেচনোট সংক্ষিপ্ত বিবরণ

স্কেচনোট: নিত্য নারাসিমহান। বড় সংস্করণের জন্য ছবিতে ক্লিক করুন।

প্রাক-পাঠ কুইজ

প্রাক-পাঠ কুইজ

ভূমিকা

গত পাঠে, আপনি শিখেছেন কীভাবে একটি GPS সেন্সর ব্যবহার করে লোকেশন ডেটা সংগ্রহ করতে হয়। এই ডেটা ব্যবহার করে একটি খাবার বোঝাই ট্রাকের অবস্থান এবং তার যাত্রা চিত্রিত করতে হলে, এটি ক্লাউডে একটি IoT সার্ভিসে পাঠাতে হবে এবং কোথাও সংরক্ষণ করতে হবে।

এই পাঠে আপনি IoT ডেটা সংরক্ষণের বিভিন্ন পদ্ধতি সম্পর্কে শিখবেন এবং সার্ভারলেস কোড ব্যবহার করে আপনার IoT সার্ভিস থেকে ডেটা সংরক্ষণ করতে শিখবেন।

এই পাঠে আমরা আলোচনা করব:

স্ট্রাকচার্ড এবং আনস্ট্রাকচার্ড ডেটা

কম্পিউটার সিস্টেম ডেটা নিয়ে কাজ করে, এবং এই ডেটা বিভিন্ন আকার এবং প্রকৃতির হতে পারে। এটি একক সংখ্যা থেকে শুরু করে বড় পরিমাণের টেক্সট, ভিডিও এবং ছবি, এবং IoT ডেটা পর্যন্ত হতে পারে। সাধারণত ডেটাকে দুটি বিভাগে ভাগ করা যায় - স্ট্রাকচার্ড ডেটা এবং আনস্ট্রাকচার্ড ডেটা।

  • স্ট্রাকচার্ড ডেটা হলো এমন ডেটা যার একটি সুস্পষ্ট, কঠোর কাঠামো রয়েছে যা পরিবর্তন হয় না এবং সাধারণত টেবিলের ডেটার সাথে সম্পর্কিত থাকে। উদাহরণস্বরূপ, একজন ব্যক্তির নাম, জন্ম তারিখ এবং ঠিকানা।

  • আনস্ট্রাকচার্ড ডেটা হলো এমন ডেটা যার সুস্পষ্ট, কঠোর কাঠামো নেই এবং যা প্রায়ই কাঠামো পরিবর্তন করতে পারে। উদাহরণস্বরূপ, লিখিত ডকুমেন্ট বা স্প্রেডশিট।

গবেষণা করুন: আপনি কি স্ট্রাকচার্ড এবং আনস্ট্রাকচার্ড ডেটার আরও কিছু উদাহরণ ভাবতে পারেন?

💁 এছাড়াও সেমি-স্ট্রাকচার্ড ডেটা রয়েছে যা কাঠামোগত কিন্তু নির্দিষ্ট টেবিলের মধ্যে ফিট হয় না।

IoT ডেটা সাধারণত আনস্ট্রাকচার্ড ডেটা হিসেবে বিবেচিত হয়।

ধরুন আপনি একটি বড় বাণিজ্যিক খামারের যানবাহনগুলিতে IoT ডিভাইস যোগ করছেন। আপনি বিভিন্ন ধরনের যানবাহনের জন্য বিভিন্ন ডিভাইস ব্যবহার করতে চাইতে পারেন। উদাহরণস্বরূপ:

  • খামারের যানবাহন যেমন ট্রাক্টরের জন্য আপনি GPS ডেটা চান যাতে তারা সঠিক মাঠে কাজ করছে তা নিশ্চিত করা যায়।
  • খাদ্য পরিবহনকারী ডেলিভারি ট্রাকের জন্য আপনি GPS ডেটা, গতি এবং ত্বরণ ডেটা চান যাতে চালক নিরাপদে চালাচ্ছে তা নিশ্চিত করা যায়, এবং চালকের পরিচয় ও স্টার্ট/স্টপ ডেটা চান যাতে স্থানীয় আইনের সাথে কাজের সময়ের সম্মতি নিশ্চিত করা যায়।
  • রেফ্রিজারেটেড ট্রাকের জন্য আপনি তাপমাত্রার ডেটা চান যাতে খাদ্য খুব গরম বা ঠান্ডা না হয় এবং পরিবহনে নষ্ট না হয়।

এই ডেটা ক্রমাগত পরিবর্তিত হতে পারে। উদাহরণস্বরূপ, যদি IoT ডিভাইসটি একটি ট্রাক ক্যাবে থাকে, তবে এটি যে ডেটা পাঠায় তা ট্রেলার পরিবর্তনের সাথে পরিবর্তিত হতে পারে, যেমন শুধুমাত্র রেফ্রিজারেটেড ট্রেলার ব্যবহৃত হলে তাপমাত্রার ডেটা পাঠানো।

আর কী ধরনের IoT ডেটা সংগ্রহ করা যেতে পারে? ট্রাকের বহনযোগ্য লোড এবং রক্ষণাবেক্ষণ ডেটা সম্পর্কে চিন্তা করুন।

এই ডেটা যানবাহন থেকে যানবাহনে পরিবর্তিত হয়, তবে এটি সব একই IoT সার্ভিসে প্রক্রিয়াকরণের জন্য পাঠানো হয়। IoT সার্ভিসটি এই আনস্ট্রাকচার্ড ডেটা প্রক্রিয়াকরণ করতে সক্ষম হতে হবে, এটি এমনভাবে সংরক্ষণ করতে হবে যাতে এটি অনুসন্ধান বা বিশ্লেষণ করা যায়, তবে এই ডেটার বিভিন্ন কাঠামোর সাথে কাজ করতে পারে।

SQL বনাম NoSQL স্টোরেজ

ডেটাবেস হলো এমন সার্ভিস যা আপনাকে ডেটা সংরক্ষণ এবং অনুসন্ধান করতে দেয়। ডেটাবেস দুটি প্রকারের হতে পারে - SQL এবং NoSQL।

SQL ডেটাবেস

প্রথম ডেটাবেস ছিল রিলেশনাল ডেটাবেস ম্যানেজমেন্ট সিস্টেম (RDBMS), বা রিলেশনাল ডেটাবেস। এগুলো SQL ডেটাবেস নামে পরিচিত কারণ এগুলোতে স্ট্রাকচার্ড কোয়েরি ল্যাঙ্গুয়েজ (SQL) ব্যবহার করা হয় ডেটা যোগ, অপসারণ, আপডেট বা অনুসন্ধান করতে। এই ডেটাবেসে একটি স্কিমা থাকে - একটি সুস্পষ্টভাবে সংজ্ঞায়িত টেবিলের সেট, যা স্প্রেডশিটের মতো।

রিলেশনাল ডেটাবেস যেখানে ইউজার টেবিলের ID পচases টেবিলের ইউজার ID কলামের সাথে সম্পর্কিত এবং প্রোডাক্ট টেবিলের ID পচases টেবিলের প্রোডাক্ট ID এর সাথে সম্পর্কিত

NoSQL ডেটাবেস

NoSQL ডেটাবেসকে NoSQL বলা হয় কারণ এগুলো SQL ডেটাবেসের মতো কঠোর কাঠামো নেই। এগুলোকে ডকুমেন্ট ডেটাবেসও বলা হয় কারণ এগুলো আনস্ট্রাকচার্ড ডেটা যেমন ডকুমেন্ট সংরক্ষণ করতে পারে।

💁 নামের সত্ত্বেও, কিছু NoSQL ডেটাবেস SQL ব্যবহার করে ডেটা অনুসন্ধান করতে দেয়।

NoSQL ডেটাবেসে ফোল্ডারে ডকুমেন্ট

NoSQL ডেটাবেসে পূর্বনির্ধারিত স্কিমা নেই যা ডেটা সংরক্ষণ সীমাবদ্ধ করে, বরং আপনি JSON ডকুমেন্ট ব্যবহার করে যেকোনো আনস্ট্রাকচার্ড ডেটা সংরক্ষণ করতে পারেন।

এই পাঠে, আপনি NoSQL স্টোরেজ ব্যবহার করে IoT ডেটা সংরক্ষণ করবেন।

GPS ডেটা IoT হাবে পাঠানো

গত পাঠে আপনি GPS সেন্সর থেকে GPS ডেটা সংগ্রহ করেছিলেন। এই ডেটা ক্লাউডে সংরক্ষণ করতে হলে, এটি একটি IoT সার্ভিসে পাঠাতে হবে। আপনি আবার Azure IoT Hub ব্যবহার করবেন, যা আপনি আগের প্রকল্পে ব্যবহার করেছিলেন।

IoT ডিভাইস থেকে IoT হাবে GPS টেলিমেট্রি পাঠানো

কাজ - GPS ডেটা IoT হাবে পাঠানো

  1. ফ্রি টিয়ার ব্যবহার করে একটি নতুন IoT Hub তৈরি করুন।

    ⚠️ প্রকল্প ২, পাঠ থেকে IoT Hub তৈরি করার নির্দেশনা প্রয়োজন হলে দেখুন।

    একটি নতুন রিসোর্স গ্রুপ তৈরি করুন। নতুন রিসোর্স গ্রুপের নাম দিন gps-sensor, এবং নতুন IoT Hub এর নাম দিন gps-sensor-<আপনার নাম>

    💁 আগের প্রকল্প থেকে আপনার IoT Hub এখনও থাকলে, আপনি এটি পুনরায় ব্যবহার করতে পারেন। নতুন সার্ভিস তৈরি করার সময় এই IoT Hub এবং রিসোর্স গ্রুপের নাম ব্যবহার করুন।

  2. IoT Hub-এ একটি নতুন ডিভাইস যোগ করুন। এই ডিভাইসের নাম দিন gps-sensor। ডিভাইসের সংযোগ স্ট্রিং সংগ্রহ করুন।

  3. আপনার ডিভাইস কোড আপডেট করুন যাতে GPS ডেটা নতুন IoT Hub-এ পাঠানো যায়।

    ⚠️ প্রকল্প ২, পাঠ থেকে ডিভাইসকে 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 ডিভাইসের জন্য, গত পাঠের কোড ব্যবহার করে latitude এবং longitude মান সংগ্রহ করুন, তারপর সঠিক 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 Hub-এ প্রবাহিত হচ্ছে az iot hub monitor-events CLI কমান্ড ব্যবহার করে।

হট, ওয়ার্ম এবং কোল্ড পাথ

IoT ডিভাইস থেকে ক্লাউডে প্রবাহিত ডেটা সবসময় রিয়েল টাইমে প্রক্রিয়াকৃত হয় না। কিছু ডেটা রিয়েল টাইমে প্রক্রিয়াকৃত হওয়া প্রয়োজন, অন্য ডেটা কিছু সময় পরে প্রক্রিয়াকৃত হতে পারে, এবং অন্য ডেটা অনেক পরে প্রক্রিয়াকৃত হতে পারে। ডেটা বিভিন্ন সময়ে প্রক্রিয়াকরণের জন্য বিভিন্ন সার্ভিসে প্রবাহিত হওয়ার প্রক্রিয়াকে হট, ওয়ার্ম এবং কোল্ড পাথ বলা হয়।

হট পাথ

হট পাথ হলো ডেটা যা রিয়েল টাইম বা প্রায় রিয়েল টাইমে প্রক্রিয়াকৃত হওয়া প্রয়োজন। উদাহরণস্বরূপ, একটি যানবাহন ডিপোর কাছে আসছে বা একটি রেফ্রিজারেটেড ট্রাকের তাপমাত্রা খুব বেশি হওয়ার সতর্কতা পাওয়ার জন্য হট পাথ ডেটা ব্যবহার করা হবে।

ওয়ার্ম পাথ

ওয়ার্ম পাথ হলো ডেটা যা গ্রহণের কিছু সময় পরে প্রক্রিয়াকৃত হতে পারে, যেমন রিপোর্টিং বা স্বল্পমেয়াদী বিশ্লেষণের জন্য। উদাহরণস্বরূপ, আগের দিনের ডেটা ব্যবহার করে যানবাহনের দৈনিক মাইলেজ রিপোর্ট তৈরি করা।

কোল্ড পাথ

কোল্ড পাথ হলো ঐতিহাসিক ডেটা, দীর্ঘমেয়াদী সংরক্ষণের জন্য যা প্রয়োজন হলে প্রক্রিয়াকৃত হতে পারে। উদাহরণস্বরূপ, যানবাহনের বার্ষিক মাইলেজ রিপোর্ট তৈরি করা বা জ্বালানি খরচ কমানোর জন্য রুট বিশ্লেষণ করা।

এই পাঠে আপনি যে ডেটা সংগ্রহ করেছেন তা হট, ওয়ার্ম বা কোল্ড পাথ ডেটা কি?

সার্ভারলেস কোড ব্যবহার করে GPS ইভেন্ট পরিচালনা

যখন ডেটা IoT Hub-এ প্রবাহিত হয়, তখন আপনি কিছু সার্ভারলেস কোড লিখতে পারেন যা ইভেন্ট-হাব কম্প্যাটিবল এন্ডপয়েন্টে প্রকাশিত ইভেন্টগুলির জন্য শুনবে। এটি ওয়ার্ম পাথ - এই ডেটা সংরক্ষণ করা হবে এবং পরবর্তী পাঠে যাত্রার রিপোর্টিংয়ের জন্য ব্যবহার করা হবে।

IoT ডিভাইস থেকে IoT হাবে GPS টেলিমেট্রি পাঠানো, তারপর ইভেন্ট হাব ট্রিগার ব্যবহার করে Azure Functions-এ

কাজ - সার্ভারলেস কোড ব্যবহার করে GPS ইভেন্ট পরিচালনা

  1. Azure Functions CLI ব্যবহার করে একটি Azure Functions অ্যাপ তৈরি করুন। Python রানটাইম ব্যবহার করুন এবং এটি gps-trigger নামে একটি ফোল্ডারে তৈরি করুন। Functions App প্রকল্পের নামও gps-trigger দিন। নিশ্চিত করুন যে আপনি এটি ব্যবহারের জন্য একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করেছেন।

⚠️ আপনি যদি প্রয়োজন মনে করেন, Azure Functions প্রকল্প তৈরি করার নির্দেশনা প্রকল্প ২, পাঠ ৫ থেকে দেখতে পারেন।

  1. একটি IoT Hub ইভেন্ট ট্রিগার যোগ করুন যা IoT Hub-এর Event Hub সামঞ্জস্যপূর্ণ এন্ডপয়েন্ট ব্যবহার করে।

    ⚠️ প্রয়োজনে প্রজেক্ট ২, পাঠ ৫ থেকে IoT Hub ইভেন্ট ট্রিগার তৈরি করার নির্দেশনা দেখতে পারেন।

  2. local.settings.json ফাইলে Event Hub সামঞ্জস্যপূর্ণ এন্ডপয়েন্টের সংযোগ স্ট্রিং সেট করুন এবং সেই এন্ট্রির কীটি function.json ফাইলে ব্যবহার করুন।

  3. Azurite অ্যাপটি স্থানীয় স্টোরেজ এমুলেটর হিসেবে ব্যবহার করুন।

  4. আপনার ফাংশন অ্যাপ চালান এবং নিশ্চিত করুন যে এটি আপনার GPS ডিভাইস থেকে ইভেন্ট গ্রহণ করছে। নিশ্চিত করুন যে আপনার IoT ডিভাইসও চালু আছে এবং GPS ডেটা পাঠাচ্ছে।

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

Azure Storage Accounts

Azure Storage লোগো

Azure Storage Accounts একটি সাধারণ উদ্দেশ্য স্টোরেজ পরিষেবা যা বিভিন্ন উপায়ে ডেটা সংরক্ষণ করতে পারে। আপনি ব্লব, কিউ, টেবিল বা ফাইল আকারে ডেটা সংরক্ষণ করতে পারেন এবং একই সময়ে সবকিছু করতে পারেন।

Blob storage

Blob শব্দটি বাইনারি বড় অবজেক্ট বোঝায়, তবে এটি এখন যেকোনো অগঠিত ডেটার জন্য ব্যবহৃত হয়। আপনি Blob স্টোরেজে যেকোনো ডেটা সংরক্ষণ করতে পারেন, যেমন IoT ডেটা সম্বলিত JSON ডকুমেন্ট, ছবি বা মুভি ফাইল। Blob স্টোরেজে কন্টেইনার ধারণা রয়েছে, যা নামকৃত বাক্স যেখানে আপনি ডেটা সংরক্ষণ করতে পারেন, এটি রিলেশনাল ডাটাবেসের টেবিলের মতো। এই কন্টেইনারগুলিতে এক বা একাধিক ফোল্ডার থাকতে পারে যেখানে ব্লব সংরক্ষণ করা হয়, এবং প্রতিটি ফোল্ডারে অন্যান্য ফোল্ডার থাকতে পারে, ঠিক যেমন আপনার কম্পিউটারের হার্ড ডিস্কে ফাইল সংরক্ষণ করা হয়।

এই পাঠে আপনি IoT ডেটা সংরক্ষণের জন্য Blob স্টোরেজ ব্যবহার করবেন।

কিছু গবেষণা করুন: Azure Blob Storage সম্পর্কে পড়ুন।

Table storage

Table storage আপনাকে আধা-গঠিত ডেটা সংরক্ষণ করতে দেয়। Table storage আসলে একটি NoSQL ডাটাবেস, তাই এটি পূর্বে সংজ্ঞায়িত টেবিলের সেট প্রয়োজন হয় না, তবে এটি এক বা একাধিক টেবিলে ডেটা সংরক্ষণের জন্য ডিজাইন করা হয়েছে, যেখানে প্রতিটি সারি নির্ধারণের জন্য ইউনিক কী থাকে।

কিছু গবেষণা করুন: Azure Table Storage সম্পর্কে পড়ুন।

Queue storage

Queue storage আপনাকে 64KB পর্যন্ত আকারের বার্তা একটি কিউতে সংরক্ষণ করতে দেয়। আপনি বার্তাগুলি কিউয়ের পিছনে যোগ করতে পারেন এবং সামনের দিক থেকে পড়তে পারেন। কিউ বার্তাগুলি অনির্দিষ্টকালের জন্য সংরক্ষণ করে যতক্ষণ পর্যন্ত স্টোরেজ স্পেস উপলব্ধ থাকে, তাই এটি বার্তাগুলি দীর্ঘমেয়াদে সংরক্ষণ করতে দেয় এবং প্রয়োজন হলে পড়া যায়। উদাহরণস্বরূপ, যদি আপনি GPS ডেটা প্রক্রিয়া করার জন্য একটি মাসিক কাজ চালাতে চান, আপনি প্রতিদিন একটি কিউতে বার্তা যোগ করতে পারেন এবং মাসের শেষে সমস্ত বার্তা প্রক্রিয়া করতে পারেন।

কিছু গবেষণা করুন: Azure Queue Storage সম্পর্কে পড়ুন।

File storage

File storage হলো ক্লাউডে ফাইল সংরক্ষণ, এবং যেকোনো অ্যাপ বা ডিভাইস শিল্প মান প্রোটোকল ব্যবহার করে সংযোগ করতে পারে। আপনি ফাইল স্টোরেজে ফাইল লিখতে পারেন, তারপর এটি আপনার PC বা Mac-এ একটি ড্রাইভ হিসেবে মাউন্ট করতে পারেন।

কিছু গবেষণা করুন: Azure File Storage সম্পর্কে পড়ুন।

আপনার সার্ভারলেস কোডকে স্টোরেজের সাথে সংযুক্ত করুন

আপনার ফাংশন অ্যাপ এখন Blob স্টোরেজের সাথে সংযুক্ত হতে হবে যাতে IoT Hub থেকে বার্তাগুলি সংরক্ষণ করা যায়। এটি করার দুটি উপায় রয়েছে:

  • ফাংশন কোডের ভিতরে Blob স্টোরেজের সাথে সংযোগ করুন এবং Blob স্টোরেজ Python SDK ব্যবহার করে ডেটা লিখুন।
  • একটি আউটপুট ফাংশন বাইন্ডিং ব্যবহার করুন যা ফাংশনের রিটার্ন ভ্যালুকে Blob স্টোরেজের সাথে বাইন্ড করে এবং Blob স্বয়ংক্রিয়ভাবে সংরক্ষণ করে।

এই পাঠে, আপনি Blob স্টোরেজের সাথে কীভাবে ইন্টারঅ্যাক্ট করবেন তা দেখতে Python SDK ব্যবহার করবেন।

IoT ডিভাইস থেকে GPS টেলিমেট্রি IoT Hub-এ পাঠানো, তারপর Azure Functions-এ ইভেন্ট হাব ট্রিগারের মাধ্যমে, তারপর Blob স্টোরেজে সংরক্ষণ করা

ডেটা একটি JSON Blob হিসেবে নিম্নলিখিত ফরম্যাটে সংরক্ষণ করা হবে:

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

কাজ - আপনার সার্ভারলেস কোডকে স্টোরেজের সাথে সংযুক্ত করুন

  1. একটি Azure Storage অ্যাকাউন্ট তৈরি করুন। এটি gps<আপনার নাম> এর মতো কিছু নাম দিন।

    ⚠️ প্রয়োজনে প্রজেক্ট ২, পাঠ ৫ থেকে স্টোরেজ অ্যাকাউন্ট তৈরি করার নির্দেশনা দেখতে পারেন।

    যদি পূর্ববর্তী প্রজেক্ট থেকে একটি স্টোরেজ অ্যাকাউন্ট থাকে, আপনি এটি পুনরায় ব্যবহার করতে পারেন।

    💁 আপনি একই স্টোরেজ অ্যাকাউন্ট ব্যবহার করতে পারবেন আপনার 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 storage 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 রিডিংয়ের জন্য একটি ইউনিক আইডি তৈরি করতে ব্যবহার করা হবে।

    azure.storage.blob প্যাকেজটি 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 Blob SDK-তে এমন কোনো হেল্পার মেথড নেই যা একটি কন্টেইনার তৈরি করে যদি এটি বিদ্যমান না থাকে। এই কোডটি local.settings.json ফাইল (বা ক্লাউডে ডিপ্লয় করার পরে Application Settings) থেকে সংযোগ স্ট্রিং লোড করবে, তারপর Blob স্টোরেজ অ্যাকাউন্টের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি BlobServiceClient ক্লাস তৈরি করবে। এটি Blob স্টোরেজ অ্যাকাউন্টের সমস্ত কন্টেইনারের মধ্য দিয়ে লুপ করবে, প্রদত্ত নামের একটি খুঁজে পেলে একটি ContainerClient ক্লাস রিটার্ন করবে যা কন্টেইনারের সাথে ইন্টারঅ্যাক্ট করতে পারে। যদি এটি না পায়, তাহলে নতুন কন্টেইনার তৈরি করা হয় এবং নতুন কন্টেইনারের ক্লায়েন্ট রিটার্ন করা হয়।

    নতুন কন্টেইনার তৈরি হলে, কন্টেইনারে থাকা Blob-গুলি প্রশ্ন করার জন্য পাবলিক অ্যাক্সেস দেওয়া হয়। এটি পরবর্তী পাঠে 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'
    

    এই কোডটি ইভেন্ট মেটাডেটা থেকে ডিভাইস আইডি পায়, তারপর এটি ব্যবহার করে একটি Blob নাম তৈরি করে। Blob-গুলি ফোল্ডারে সংরক্ষণ করা যেতে পারে, এবং ডিভাইস আইডি ফোল্ডারের নাম হিসেবে ব্যবহার করা হবে, তাই প্রতিটি ডিভাইসের সমস্ত GPS ইভেন্ট একটি ফোল্ডারে থাকবে। Blob নামটি এই ফোল্ডার, একটি ডকুমেন্ট নাম দ্বারা অনুসরণ করা হয়, যা ফরওয়ার্ড স্ল্যাশ দিয়ে পৃথক করা হয়, Linux এবং macOS পাথের মতো (Windows-এর মতোও, তবে Windows ব্যাক স্ল্যাশ ব্যবহার করে)। ডকুমেন্ট নামটি Python uuid মডিউল ব্যবহার করে তৈরি একটি ইউনিক আইডি, যার ফাইল টাইপ json

    উদাহরণস্বরূপ, gps-sensor ডিভাইস আইডির জন্য Blob নাম হতে পারে 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 হেল্পার ক্লাস ব্যবহার করে কন্টেইনার ক্লায়েন্ট পায়, তারপর Blob নাম ব্যবহার করে একটি Blob ক্লায়েন্ট অবজেক্ট পায়। এই Blob ক্লায়েন্টগুলি বিদ্যমান Blob-গুলির জন্য উল্লেখ করতে পারে, অথবা এই ক্ষেত্রে, নতুন Blob-এর জন্য।

  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']
    }
    

    এটি Blob স্টোরেজে লেখা হবে এমন Blob-এর বডি তৈরি করে। এটি একটি JSON ডকুমেন্ট যা ডিভাইস আইডি, IoT Hub-এ টেলিমেট্রি পাঠানোর সময় এবং টেলিমেট্রি থেকে GPS কোঅর্ডিনেট ধারণ করে।

    💁 বার্তার প্রেরণের সময়ের পরিবর্তে বার্তার এনকিউ টাইম ব্যবহার করা গুরুত্বপূর্ণ, কারণ বার্তাটি IoT Hub-এ কিছু সময়ের জন্য অপেক্ষা করতে পারে যদি Functions App চালু না থাকে।

  10. এর নিচে নিম্নলিখিত কোড যোগ করুন:

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

    এই কোডটি একটি Blob লেখার আগে তার বিবরণ লগ করে, তারপর Blob বডি নতুন Blob-এর কন্টেন্ট হিসেবে আপলোড করে।

  11. Functions অ্যাপ চালান। আপনি আউটপুটে GPS ইভেন্টগুলির জন্য Blob লেখা হচ্ছে দেখতে পাবেন:

    [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 Hub ইভেন্ট মনিটর চালাচ্ছেন না।

💁 আপনি এই কোডটি code/functions ফোল্ডারে খুঁজে পেতে পারেন।

কাজ - আপলোড করা Blob যাচাই করুন

  1. তৈরি করা Blob-গুলি দেখতে, আপনি Azure Storage Explorer, একটি বিনামূল্যের টুল যা আপনাকে আপনার স্টোরেজ অ্যাকাউন্ট দেখতে এবং পরিচালনা করতে দেয়, অথবা CLI ব্যবহার করতে পারেন।

    1. CLI ব্যবহার করতে, প্রথমে আপনাকে একটি অ্যাকাউন্ট কী প্রয়োজন হবে। এই কী পেতে নিম্নলিখিত কমান্ডটি চালান:

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

      <storage_name> এর জায়গায় স্টোরেজ অ্যাকাউন্টের নাম দিন।

      key1 এর মানটি কপি করুন।

    2. কন্টেইনারে Blob-গুলির তালিকা দেখতে নিম্নলিখিত কমান্ডটি চালান:

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

      <storage_name> এর জায়গায় স্টোরেজ অ্যাকাউন্টের নাম দিন এবং <key1> এর জায়গায় পূর্ববর্তী ধাপে কপি করা key1 এর মান দিন।

      এটি কন্টেইনারে সমস্ত Blob-এর তালিকা দেখাবে:

      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. নিম্নলিখিত কমান্ডটি ব্যবহার করে একটি Blob ডাউনলোড করুন:

      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 কলামের আউটপুট থেকে Blob-এর সম্পূর্ণ নাম দিন, ফোল্ডার নাম সহ। <file_name> এর জায়গায় একটি স্থানীয় ফাইলের নাম দিন যেখানে Blob সংরক্ষণ করা হবে।

    একবার ডাউনলোড হয়ে গেলে, আপনি JSON ফাইলটি VS Code-এ খুলতে পারেন এবং Blob-এ GPS অবস্থানের বিবরণ দেখতে পাবেন:

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

কাজ - আপনার Functions অ্যাপ ক্লাউডে ডিপ্লয় করুন

এখন আপনার Functions অ্যাপ কাজ করছে, আপনি এটি ক্লাউডে ডিপ্লয় করতে পারেন।

  1. একটি নতুন Azure Functions অ্যাপ তৈরি করুন, পূর্বে তৈরি করা স্টোরেজ অ্যাকাউন্ট ব্যবহার করে। এটি gps-sensor- এর মতো কিছু নাম দিন এবং শেষে একটি ইউনিক আইডেন্টিফায়ার যোগ করুন, যেমন কিছু র্যান্ডম শব্দ বা আপনার নাম।

    ⚠️ প্রয়োজনে প্রজেক্ট ২, পাঠ ৫ থেকে Functions অ্যাপ তৈরি করার নির্দেশনা দেখতে পারেন।

  2. IOT_HUB_CONNECTION_STRING এবং STORAGE_CONNECTION_STRING মানগুলি Application Settings-এ আপলোড করুন।

    ⚠️ প্রয়োজনে প্রজেক্ট ২, পাঠ ৫ থেকে Application Settings আপলোড করার নির্দেশনা দেখতে পারেন।

  3. আপনার স্থানীয় Functions অ্যাপ ক্লাউডে ডিপ্লয় করুন।

⚠️ আপনি প্রয়োজনে প্রজেক্ট ২, পাঠ ৫ থেকে আপনার Functions অ্যাপ ডিপ্লয় করার নির্দেশাবলী দেখতে পারেন।


🚀 চ্যালেঞ্জ

জিপিএস ডেটা সবসময় নিখুঁত নয়, এবং সনাক্তকৃত অবস্থান কয়েক মিটার পর্যন্ত ভুল হতে পারে, বিশেষ করে টানেল এবং উঁচু ভবনের এলাকায়।

ভাবুন, স্যাটেলাইট নেভিগেশন কীভাবে এই সমস্যার সমাধান করতে পারে? আপনার স্যাট-নাভের কাছে কী ধরনের ডেটা আছে যা আপনার অবস্থান সম্পর্কে আরও ভালো পূর্বাভাস দিতে পারে?

লেকচার-পরবর্তী কুইজ

লেকচার-পরবর্তী কুইজ

পর্যালোচনা ও স্ব-অধ্যয়ন

অ্যাসাইনমেন্ট

ফাংশন বাইন্ডিংস নিয়ে অনুসন্ধান করুন


অস্বীকৃতি:
এই নথিটি AI অনুবাদ পরিষেবা Co-op Translator ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতা নিশ্চিত করার চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না।