# উদ্ভিদকে ক্লাউডে সংযুক্ত করা ![A sketchnote overview of this lesson](../../../../sketchnotes/lesson-8.jpg) > স্কেচনোটটি তৈরী করেছেন [Nitya Narasimhan](https://github.com/nitya). বড় সংস্করণে দেখার জন্য ছবিটিতে ক্লিক করতে হবে। ## লেকচার-পূর্ববর্তী কুইজ [লেকচার-পূর্ববর্তী কুইজ](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/15) ## সূচনা গত পাঠে, আমরা দেখেছি কীভাবে উদ্ভিদটি একটি এমকিউটিটি ব্রোকারের সাথে সংযুক্ত করা যায় এবং লোকালি চলমান কিছু সার্ভার কোড থেকে রিলে নিয়ন্ত্রণ করেছিলাম। এটি এমন একধরণের ইন্টারনেট-সংযুক্ত স্বয়ংক্রিয় পানি সরবরাহ ব্যবস্থা যা বাসাবাড়ির দুয়েকটা উদ্ভিদ থেকে শুরু করে বাণিজ্যিক খামা্রে পর্যন্ত ব্যবহৃত হয়। আইওটি ডিভাইসের কার্যনীতি দেখানোর জন্যই মূলত আমরা সর্বজনীন এমকিউটিটি ব্রোকারের মাধ্যমে সংযোগ করেছিলাম, তবে এটি সবচেয়ে নির্ভরযোগ্য বা সুরক্ষিত উপায় নয়। এই পাঠে আমরা ক্লাউড সম্পর্কে এবং পাবলিক ক্লাউড পরিষেবাগুলির দ্বারা সরবরাহকৃত আইওটি সুবিধাগুলো সম্পর্কে শিখব। কীভাবে আমাদের চারাগাছকে পাবলিক এমকিউটিটি ব্রোকারের পরিবর্তে ক্লাউডে স্থানান্তরিত করা যায়, তা শিখবো। এই লেসনে আমরা দেখবোঃ * [ক্লাউড কী ?](#ক্লাউড-কী) * [ক্লাউড-সাবস্ক্রিপশন-গ্রহণ](#ক্লাউড-সাবস্ক্রিপশন-গ্রহণ) * [ক্লাউড IoT সার্ভিস](#ক্লাউড-IoT-সার্ভিস) * [ক্লাউডে IoT সার্ভিস তৈরী করা](#ক্লাউডে-IoT-সার্ভিস-তৈরী-করা) * [IoT Hub এর সাথে সংযোগ](#IoT-Hub-এর-সাথে-সংযোগ) * [IoT সার্ভিসগুলোর সাথে ডিভাইসের সংযোগ](#IoT-সার্ভিসগুলোর-সাথে-ডিভাইসের-সংযোগ) ## ক্লাউড কী ? ক্লাউড আবির্ভাবের পূর্বে যখন কোন কোম্পানি তাদের কর্মীদের কাছে কোন সার্ভিস (যেমন ডেটাবেস বা ফাইল স্টোরেজ), বা জনসাধারণের ব্যবহারের কোন ফীচার (যেমন ওয়েবসাইট) সরবরাহ করতে চায়, তখন তারা ডেটা সেন্টার তৈরি এবং পরিচালনা করে। এটি কয়েকটি কম্পিউটার সম্বলিত একটি ঘর থেকে শুরু করে অনেকগুলি কম্পিউটার নিয়ে একটি বিল্ডিং সমান বড়ও হতে পারে। ঐ কোম্পানি সবকিছুই নিজেরা পরিচালনা করে, যেমন - * কম্পিউটার কেনা * হার্ডওয়্যার রক্ষণাবেক্ষণ * পাওয়ার এবং কুলিং * নেটওয়ার্কিং * সুরক্ষা (বিল্ডিং এবং কম্পিউটারগুলিতে থাকা সফ্টওয়্যার) * সফ্টওয়্যার ইনস্টলেশন ও আপডেট এটি খুব ব্যয়বহুল হতে পারে, বিশাল সংখ্যক দক্ষ কর্মী প্রয়োজন এবং কিছু পরিবর্তন করতে গেলে, তা খুব ধীর হবে। উদাহরণস্বরূপ, যদি কোন অনলাইন স্টোরকে ব্যস্ত ছুটির মৌসুমের জন্য পরিকল্পনা করার প্রয়োজন হয়, তাদের অধিক বিক্রয় এর পরিচালনার জন্য আরও হার্ডওয়ার কেনা, তা কনফিগার করা, ইনস্টল করা প্রয়োজন এবং এসব করার জন্য তাদের কয়েক মাস আগে থেকেই পরিকল্পনা করতে হবে। ছুটির মৌসুম শেষ হয়ে যাওয়ার পরে বিক্রয় কমে যায় -কিন্তু তখনও তারা পরবর্তী ব্যস্ত মৌসুম আসা পর্যন্ত অলস বসে থাকবে , তাদের সব ব্য্যবহুল যন্ত্রও বেকার পড়ে থাকবে। ✅ এভাবে কাজ করলে, কোম্পানি গুলো কী পরিস্থিতিভেদে দ্রুত তাদের কাজের ধারা বদলাতে পারবে? যদি কোন অনলাইন পোশাক খুচরা বিক্রেতা হঠাৎ করে (কোন সেলিব্রিটি তাদের পোশাকগুলিতে দেখা যাওয়ার কারণে) জনপ্রিয় হয়ে ওঠে, তবে তারা কি হঠাৎ অর্ডারের প্রবাহকে সাপোর্ট করার জন্য তাদের কম্পিউটিং ক্ষমতা পর্যাপ্ত পরিমাণে বাড়িয়ে তুলতে সক্ষম হবে? ### আরেকজনের কম্পিউটার ক্লাউডকে প্রায়শই হাস্যকরভাবে 'অন্য কারো কম্পিউটার' হিসাবে বলা হয়। প্রাথমিক ধারণাটি বেশ সহজ - কম্পিউটার কেনার পরিবর্তে অন্য কারও কম্পিউটার ভাড়া নেয়া। ক্লাউড কম্পিউটিং প্রদানকারী সেই "অন্য কেউ" এই বিশাল ডেটা সেন্টার পরিচালনা করে, তারা হার্ডওয়্যার ক্রয় এবং ইনস্টল করার জন্য, পাওয়ার পরিচালনা এবং কুলিং পরিচালনা, নেটওয়ার্কিং, সুরক্ষা, হার্ডওয়্যার এবং সফ্টওয়্যার আপডেটগুলি, সমস্ত কিছুর জন্য দায়বদ্ধ থাকে। গ্রাহক হিসাবে, আমরা প্রয়োজনীয় কম্পিউটারগুলি ভাড়া নেব; কাজের চাহিদা বাড়লে বেশি ক্ষমতার কম্পিউটার ভাড়া নেব এবং তারপরে চাহিদা কমে গেলে তা ছেড়ে দেব - এভাবেই আমাদের সুবিধামত কাজ করা যাবে। এই ক্লাউড ডেটা সেন্টারগুলি সারা বিশ্ব জুড়ে ছড়িয়ে রয়েছে। ![A Microsoft cloud data center](../../../../images/azure-region-existing.png) ![A Microsoft cloud data center planned expansion](../../../../images/azure-region-planned-expansion.png) এই ডেটা সেন্টারগুলি আকারে একাধিক বর্গকিলোমিটার হতে পারে। উপরের চিত্রগুলি কয়েক বছর আগে একটি মাইক্রোসফ্ট ক্লাউড ডেটা সেন্টারে তোলা হয়েছিল, এবং পরিকল্পিত সম্প্রসারণের পাশাপাশি প্রাথমিক আকারটি দেখায়। সম্প্রসারণের জন্য ক্লিয়ার করা অঞ্চলটি 5 বর্গকিলোমিটারেরও বেশি জায়গাজুড়ে অবস্থিত! > 💁 এই ডেটা সেন্টারগুলিতে এত বেশি পরিমাণে বিদ্যুতের প্রয়োজন হয় যে কোন কোন ক্লাউড সার্ভিস প্রোভাইডার এর নিজস্ব বিদ্যুৎ কেন্দ্র রয়েছে। তাদের আকার এবং ক্লাউড সরবরাহকারীদের বিনিয়োগের স্তরের কারণে এগুলি সাধারণত খুব পরিবেশ বান্ধব হয়। এগুলি অনেকগুলো ক্ষুদ্র ক্ষুদ্র ডেটা সেন্টার ব্যবহার করার তুলনায় অনেক বেশি কার্যকরী; বেশিরভাগ সময়ই নবায়নযোগ্য শক্তির উপর চালিত হয় এবং ক্লাউড সরবরাহকারীরা ডেটা সেন্টারগুলি তৈরির জায়গায় বর্জ্য হ্রাস করতে, জলের ব্যবহার কমানোর জন্য এবং বনগুলি পুনর্বাসনের জন্য চেষ্টা করে। ক্লাউড প্রোভাইডাররা পরিবেশগত বিষয়ে কীভাবে সুরক্ষা নিশ্চিতে কাজ করছে তা জানতে [Azure sustainability](https://azure.microsoft.com/global-infrastructure/sustainability/?WT.mc_id=academic-17441-jabenn) পড়ে দেখা যেতে পারে। ✅ ছোট একটি গবেষণা করা যাকঃ বড় ক্লাউডসমূহ যেমন [মাইক্রোসফটের Azure](https://azure.microsoft.com/?WT.mc_id=academic-17441-jabenn) বা [গুগলের GCP](https://cloud.google.com) সম্পর্কে পড়ে নিই এবং জানার চেষ্টা করি তাদের কয়টি ডেটা সেন্টার রয়েছে এবং তারা পৃথিবীতে কোথায় এগুলোকে রেখেছে? ক্লাউড সার্ভিসের ব্যবহার - কোম্পানিগুলোর ব্যয়কে কমিয়ে দেয় এবং তাদের সরবরাহকারীর হাতে ক্লাউড কম্পিউটিং সংক্রান্ত বিষয়ের ভার দিয়ে রেখে তারা নিজেদের গুরুত্বপূর্ণ কাজগুলিতে মনোনিবেশ করতে পারে। ব্যবসায়ী কোম্পানিগুলোকে ডেটা সেন্টার স্পেস ভাড়া বা কেনার প্রয়োজন হয় না, সংযোগ এবং বিদ্যুতের জন্য বিভিন্ন সরবরাহকারীর অর্থ প্রদান বা বিশেষজ্ঞ নিয়োগের প্রয়োজন হয় না। এর পরিবর্তে তারা ক্লাউড সরবরাহকারীর কাছে সবকিছু বাবদ শুধুমাত্র একটি মাসিক বিল প্রদান করে। ক্লাউড সরবরাহকারী এক্ষেত্রে নিজেদের ব্যয় কমিয়ে আনার জন্য বড় বড় পর্যায়ে কাজ করে যেমন - কম ব্যয়ে প্রচুর কম্পিউটার কিনে, রক্ষণাবেক্ষণের ক্ষেত্রে তাদের কাজের চাপ হ্রাস করার জন্য সরঞ্জামে বিনিয়োগ করতে পারে, এমনকি তাদের ক্লাউডের সেবা উন্নত করার জন্য তাদের নিজস্ব হার্ডওয়্যার ডিজাইনও তৈরি করতে পারে। ### Microsoft Azure Azure হলো মাইক্রোসফটের ডেভলাপার ক্লাউড এবং এই লেসনে আমরা এটিই ব্যবহার করব। নীচের ভিডিওটিতে Azure সম্পর্কে একটি সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে: [![Overview of Azure video](../../../../images/what-is-azure-video-thumbnail.png)](https://www.microsoft.com/videoplayer/embed/RE4Ibng?WT.mc_id=academic-17441-jabenn) ## ক্লাউড সাবস্ক্রিপশন গ্রহণ ক্লাউডে পরিষেবাগুলি ব্যবহার করতে হলে ক্লাউড সরবরাহকারীর সাথে সাবস্ক্রিপশনের জন্য সাইন আপ করতে হয়। এই পাঠের জন্য, আমরা মাইক্রোসফ্ট অ্যাজুরে সাবস্ক্রিপশনের জন্য সাইন আপ করব। যদি ইতিমধ্যে অ্যাজুরে একটি সাবস্ক্রিপশন থাকে তবে এই অংশটি এড়িয়ে, পরবর্তী অংশে চলে যাওয়া যাবে। এখানে বর্ণিত সাবস্ক্রিপশন বিষয়াদি বর্তমানে লেখার সময় সঠিক আছে, তবে সময়ের সাথে তা পরিবর্তিত হতে পারে। > 💁 কেউ যদি শিক্ষাপ্রতিষ্ঠানের মাধ্যমে এই লেসনগুলি ব্যবহার করে থাকে, তবে ইতিমধ্যে হয়তো তার কাছে একটি অ্যাজুর সাবস্ক্রিপশন আছে। শিক্ষকের সাথে যোগাযোগ করে বিষয়টি নিশ্চিত করতে হবে। এখানে দুটি ভিন্ন ধরণের বিনামূল্যে Azure সাবস্ক্রিপশন ব্যবহার করে আমরা সাইন আপ করতে পারবঃ * **Azure for Students** - এটি প্রাপ্তবয়ষ্ক শিক্ষার্থীদের জন্য ডিজাইন করা একটি সাবস্ক্রিপশন। সাইন আপ করার জন্য কোনও ক্রেডিট কার্ডের দরকার নেই এবং আবেদনকারী যে শিক্ষার্থী তা যাচাই করার জন্য প্রাতিষ্ঠানিক ইমেল ঠিকানা ব্যবহার করলেই হবে। সাইন আপ করলেই, ক্লাউডে সার্ভিসে ব্যয় করার জন্য ১০০ মার্কিন ডলার দেয়া হবে, সাথে থাকবে আইওটি পরিষেবা সহ বিনামূল্যে বেশ কিছু ফ্রি পরিষেবা। এটির মেয়াদ 12 মাস স্থায়ী হয় এবং প্রতি বছর রিনিউ করা যাবে। * **Azure free subscription** - যারা শিক্ষার্থী নয়, তাদের জন্যই এই সাবস্ক্রিপশন। সাবস্ক্রিপশনে সাইন আপ করার আপনার ক্রেডিট কার্ডের প্রয়োজন হবে, তবে আপনার কার্ডটির কোন বিল/খরচ আসবেনা, এটি কেবল একারণেই যে - আবেদনকারী একজন সত্যিকারের মানুষ, বট নয় - তা যাচাই করা। যে কোন পরিষেবাতে প্রথম 30 দিনের মধ্যে Azure পরিষেবাদির free tier সহ $200 ক্রেডিট দেয়া হয়। ক্রেডিট একবার ব্যবহার হয়ে গেলেও, সরাসরি কার্ড থেকে কোন অর্থ গ্রহণ করা হবেনা, যতক্ষণ পর্যন্ত নাহ সেই ব্যবহারকারী pay-as-you-go সাবস্ক্রিপশন নিচ্ছে। > 💁 মাইক্রোসফ্ট অপ্রাপ্তবয়ষ্ক অর্থাৎ 18 বছরের কম বয়সী শিক্ষার্থীদের জন্য "স্টুডেন্ট স্টার্টার" সাবস্ক্রিপশন সরবরাহ করে, তবে এই লেসন লেখার সময় পর্যন্তও এটি আইওটি পরিষেবা সমর্থন করে না। ### কাজ - ফ্রী ক্লাউড সাবস্ক্রিপশনের জন্য সাইন আপ 18+ বয়সের শিক্ষার্থীদের সাবস্ক্রিপশনের জন্য অ্যাজুরে সাইন আপ করতে হবে। একটি স্কুল ইমেল ঠিকানাে যাচাই করে নিতে হবে। নিম্নের দুটি উপায়ের যেকোন একটিতে এটি করা যাবে: * GitHub student developer pack এর জন্য [education.github.com/pack](https://education.github.com/pack) থেকে সাইন আপ করতে হবে। এটি গিটহাব এবং মাইক্রোসফ্ট অ্যাজুর সহ বিভিন্ন ট্যুল এবং অফারগুলিতে অ্যাক্সেস দেয়। একবার developer pack এর জন্য সাইন আপ করে নিলে, তারপরে শিক্ষার্থীদের জন্য অফারগুলো অফারটি সক্রিয় করা যাবে। * Azure for Students একাউন্টের জন্য সরাসরি [azure.microsoft.com/free/students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-17441-jabenn) থেকে সাইন আপ করা। > ⚠️প্রাতিষ্ঠানিক ইমেইল এড্রেস যদি কাজ না করে, তবে [এই রেপোসিটরিতে ইস্যু রেইজ](https://github.com/Microsoft/IoT-For-Beginners/issues) করার অনুরোধ করা হচ্ছে। তখন আমরা দেখবো এই প্রতিষ্ঠানের শিক্ষার্থীদের অনুমতি তালিকায় যুক্ত করা যায় কিনা। কেউ যদি ছাত্র না হয় বা বৈধ স্কুল ইমেইল ঠিকানা না থাকে তবে একটি অ্যাজুর ফ্রি সাবস্ক্রিপশনের জন্য সাইন আপ করতে পারবে। * অ্যাজুর ফ্রি সাবস্ক্রিপশনের জন্য [azure.microsoft.com/free](https://azure.microsoft.com/free/?WT.mc_id=academic-17441-jabenn) থেকে সাইন-আপ করা যাবে। ## ক্লাউড IoT সার্ভিস আমরা যে পাবলিক টেস্ট এমকিউটিটি ব্রোকারটি ব্যবহার করেছি, তা শেখার ক্ষেত্রে অনেক ভালো একটি অপশন। তবে বাণিজ্যিক সেটিংয়ে ব্যবহার করার সরঞ্জাম হিসাবে তার অনেকগুলি ত্রুটি রয়েছে: * নির্ভরযোগ্যতা - এটি কোন গ্যারান্টিবিহীন একটি ফ্রী সার্ভিস এবং যে কোনও সময় বন্ধ হতে পারে। * সুরক্ষা - এটি সর্বজনীন, সুতরাং যে কেউ আমাদের টেলিমেট্রি জানতে বা আমাদের হার্ডওয়্যার নিয়ন্ত্রণের জন্য আদেশগুলি পাঠাতে পারে * পারফরম্যান্স - এটি কেবল কয়েকটি পরীক্ষামূলক বার্তাগুলির জন্য ডিজাইন করা হয়েছে, সুতরাং বিপুল পরিমাণ বার্তা প্রেরণের জন্য যথোপযুক্ত নয় * সনাক্তকরণ - এতে কোন ডিভাইসগুলি সংযুক্ত রয়েছে তা জানার কোন উপায় নেই ক্লাউডে আইওটি পরিষেবাগুলি এই সমস্যাগুলি সমাধান করে। এগুলি বড় ক্লাউড সরবরাহকারীদের দ্বারা পরিচালিত হয় যারা নির্ভরযোগ্যতার জন্য প্রচুর পরিমাণে বিনিয়োগ করে এবং আকস্মিকভাবে উদ্ভূত সমস্যা সমাধানের জন্য সক্ষমতা রয়েছে । হ্যাকারদের দ্বারা আমাদের ডেটা পড়া বা কমান্ড প্রেরণ বন্ধ করার জন্য, সুরক্ষার ব্যবস্থা রয়েছে। ক্লাউডের প্রয়োজন অনুযায়ী সক্ষমতা বাড়ানো কমানোর সুযোগ সহ প্রতিদিন তারা কয়েক মিলিয়ন বার্তা হ্যান্ডেল করতে সক্ষম । > 💁 যদিও এই সুবিধাগুলোর জন্য একটি মাসিক ফি প্রদান করতে হয়, তবুও বেশিরভাগ ক্লাউড সরবরাহকারীরা তাদের আইওটি পরিষেবার একটি ফ্রী ভার্সন রাখে যা প্রতিদিন সীমিত পরিমাণে বার্তা সরবরাহ করে। এই ফ্রী সংস্করণটি সাধারণত কোন ডেভলাপার এর জন্য, ক্লাউড প্রোভাইডারের পরিষেবা সম্পর্কে জানার জন্য যথেষ্ট। এই পাঠে আমরা একটি বিনামূল্যে সংস্করণ ব্যবহার করব। আইওটি ডিভাইসগুলি হয় কোন ডিভাইস SDK (একটি লাইব্রেরি যা সার্ভিসটির বৈশিষ্ট্যগুলির সাথে কাজ করার জন্য কোড সরবরাহ করে) ব্যবহার করে অথবা এমকিউটিটি বা এইচটিটিপি এর মতো কোন যোগাযোগ প্রোটোকলের মাধ্যমে সরাসরি ক্লাউড পরিষেবায় সংযুক্ত হয়। ডিভাইস এসডিকে সাধারণত সবচেয়ে সহজতম উপায় কারণ এটি নিজেই সমস্ত কিছু পরিচালনা করে যেমন কোন বিষয়গুলি প্রকাশ বা সাবস্ক্রাইব করতে হয় তা জেনে রাখা এবং কীভাবে সুরক্ষা নিশ্চিত করতে হয় তা পরিচালনা করা। ![Devices connect to a service using a device SDK. Server code also connects to the service via an SDK](../../../../images/iot-service-connectivity.png) আমাদের ডিভাইসটি তারপরে এই অ্যাপ্লিকেশনের অন্যান্য অংশগুলির সাথে এই সার্ভিসের মাধ্যমে যোগাযোগ করে - যেভাবে আমরা এমকিউটিটি-এর মাধ্যমে নির্দেশ গ্রহণ এবং টেলমেট্রি পাঠিয়েছিলাম। বার্তাগুলি সাধারণত আমাদের ডিভাইস থেকে সার্ভিসে আসে যেখানে আমাদের অ্যাপ্লিকেশনের অন্যান্য উপাদানগুলি সেগুলি পড়তে পারে এবং বার্তাগুলি ডিভাইসে আবারও পাঠানো যেতে পারে। ![Devices without a valid secret key cannot connect to the IoT service](../../../../images/iot-service-allowed-denied-connection.png) এই সার্ভিসগুলোতে সংযোগ স্থাপন এবং ডেটা প্রেরণ করতে পারে এমন সমস্ত ডিভাইস সম্পর্কে তথ্য নিয়ে, তারপর তাদের সুরক্ষা বাস্তবায়িত করে। এটি করার জন্য হয় সার্ভিসের সাথে ডিভাইসগুলিকে প্রাক-নিবন্ধভুক্ত করে অথবা ডিভাইসগুলিকে গোপনীয় চাবি বা সার্টিফিকেট দিয়ে তারা প্রথমবার সার্ভিসে নিবন্ধিত করে। এক্ষেত্রে অজানা(Unknown) ডিভাইসগুলি সংযোগ করতে অক্ষম, যদি তারা তা করার চেষ্টা করে, তবে সার্ভিস সেসকল সংযোগ প্রত্যাখ্যান করে এবং তাদের দ্বারা প্রেরিত বার্তাগুলি উপেক্ষা করে। ✅ কিছু গবেষণা করা যাক: যেকোন ডিভাইস বা কোড সংযোগ করতে পারে- এমন উন্মুক্ত আইওটি পরিষেবা নেওয়ার নেতিবাচক দিক কী? হ্যাকাররা এগুলো ব্যবহার করেছে - এমন নির্দিষ্ট উদাহরণ কী আছে? আমাদের অ্যাপ্লিকেশনটির অন্যান্য উপাদানগুলি আইওটি সার্ভিসে সংযুক্ত হতে পারে এবং সংযুক্ত বা নিবন্ধিত সমস্ত ডিভাইসগুলি সম্পর্কে জানতে এবং তাদের সাথে সরাসরি একত্রে বা স্বতন্ত্রভাবে যোগাযোগ করতে পারে > 💁 আইওটি সার্ভিসগুলি অতিরিক্ত সক্ষমতা ব্যবহার করে এবং ক্লাউড সরবরাহকারীদের কাছে অতিরিক্ত পরিষেবা এবং অ্যাপ্লিকেশন রয়েছে যা সার্ভিসের সাথে সংযুক্ত হতে পারে। উদাহরণস্বরূপ, আমরা যদি আমাদের ডিভাইসগুলো দ্বারা প্রেরিত সকল টেলিমেট্রি বার্তাগুলি সংরক্ষণ করতে চাই নির্দিষ্ট কোন ডাটাবেসে, তবে ক্লাউড সরবরাহকারীর কনফিগারেশন ট্যুল থেকে গোটা সার্ভিসটিকে একটি ডাটাবেসে সংযুক্ত করতে এবং ডেটা স্ট্রিম করার জন্য - কেবলমাত্র কয়েকটি ক্লিকই যথেষ্ট। ## ক্লাউডে IoT সার্ভিস তৈরী করা এখন আমাদের কাছে অ্যাজুর সাবস্ক্রিপশন রয়েছে, আমরা একটি আইওটি সার্ভিসে সাইন আপ করতে পা্রি। মাইক্রোসফ্ট থেকে আইওটি পরিষেবাটিকে বলা হয় Auzre IoT Hub । ![The Azure IoT Hub logo](../../../../images/azure-iot-hub-logo.png) নীচের ভিডিওটিতে অ্যাজুরে আইওটি হাবের একটি সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে: [![Overview of Azure IoT Hub video](https://img.youtube.com/vi/smuZaZZXKsU/0.jpg)](https://www.youtube.com/watch?v=smuZaZZXKsU) > 🎥 ভিডিও দেখতে উপরের চিত্রটি ক্লিক করতে হবে। ✅ কিছু অতিরিক্ত বিষয় শিখতে এবং আইওটি হাব সম্পর্কে জানতে [Microsoft IoT Hub documentation](https://docs.microsoft.com/azure/iot-hub/about-iot-hub?WT.mc_id=academic-17441-jabenn) পড়া বেশ ভালো একটি উপায়। Azure ক্লাউড সার্ভিসগুলো ওয়েব-ভিত্তিক পোর্টাল বা কমান্ড-লাইন ইন্টারফেসের (সিএলআই) মাধ্যমে কনফিগার করা যেতে পারে। এই কাজের জন্য, আমরা সিএলআই(CLI) ব্যবহার করব। ### কাজ - Azure CLI ইন্সটল করা Azure CLI ব্যবহার করার জন্য প্রথমে এটি আমাদের পিসি বা ম্যাকে ইনস্টল করা আবশ্যক। 1. Azure CLI ইনস্টল করার জন্য [Azure CLI documentation](https://docs.microsoft.com/cli/azure/install-azure-cli?WT.mc_id=academic-17441-jabenn) পেইজ অনুসরণ করতে হবে। 1. অ্যাজুর সিএলআই কয়েকটি এক্সটেনশন সাপোর্ট করে যা বিস্তৃত অ্যাজুর পরিষেবাদি পরিচালনা করার সক্ষমতা বাড়ায়। আমাদের কমান্ড লাইন বা টার্মিনাল থেকে নিম্নলিখিত কমান্ডটি চালিয়ে আইওটি এক্সটেনশন ইনস্টল করতে হবে: ```sh az extension add --name azure-iot ``` 1. কমান্ড লাইন বা টার্মিনাল থেকে, আজুর সিএলআই এর মাধ্যমে অ্যাজুর সাবস্ক্রিপশনে লগ ইন করতে নিম্নলিখিত কমান্ডটি চালাতে হবে। ```sh az login ``` ডিফল্ট ব্রাউজারে একটি ওয়েবপেইজ চালু হবে। আমরা আজুর সাবস্ক্রিপশনের জন্য সাইন আপ করতে যে অ্যাকাউন্টটি ব্যবহার করেছি, তা ব্যবহার করেই লগ ইন করতে হবে। একবার লগ ইন হয়ে গেলে, ব্রাউজার ট্যাবটি বন্ধ করে দেয়া যাবে। 1. কারো যদি একাধিক Azure সাবস্ক্রিপশন থাকে, যেমন শিক্ষাপ্রতিষ্ঠানের সরবরাহ করা সাবস্ক্রিপশন, আবার একটি নিজস্ব Student subscription - যেটিই ব্যবহার করতে চাইবো, সেটি সিলেক্ট করতে হবে।আমাদের যে সমস্ত সাবস্ক্রিপশনে অ্যাক্সেস রয়েছে তা তালিকাভুক্ত করতে নিম্নলিখিত কমান্ডটি চালালেই হবে: ```sh az account list --output table ``` আউটপুটে সাবস্ক্রিপশনের নাম এবং `SubscriptionId` দেখা যাবে। ```output ➜ ~ az account list --output table Name CloudName SubscriptionId State IsDefault ---------------------- ----------- ------------------------------------ ------- ----------- School-subscription AzureCloud cb30cde9-814a-42f0-a111-754cb788e4e1 Enabled True Azure for Students AzureCloud fa51c31b-162c-4599-add6-781def2e1fbf Enabled False ``` যে সাবস্ক্রিপশনটি ব্যবহার করতে চাই, তা নির্বাচন করতে নিম্নলিখিত কমান্ডটি ব্যবহার করতে হবে: ```sh az account set --subscription ``` `` এর জায়গায় আমরা যে সাবস্ক্রিপশন ব্যবহার করতে চাই, সেটির আইডি দিতে হবে। এই কমান্ডটি চালানোর পরে, আমাদের অ্যাকাউন্টগুলি তালিকাভুক্ত করতে কমান্ডটি আবার চালাতে হবে। তখন `IsDefault` কলামটি `True` হিসেবে মার্ক করা থাকবে আমাদের ব্যবহৃত সাবস্ক্রিপশন এর জন্য । ### কাজ - রিসোর্স গ্রুপ তৈরী আইওটি হাবের ভার্চুয়াল মেশিন, ডাটাবেস, বা এআই পরিষেবাগুলির মতো অ্যাজুর পরিষেবাগুলিকে **রিসোর্স** হিসাবে উল্লেখ করা হয়। প্রতিটি রিসোর্স একটি **রিসোর্স গ্রুপ** এর মধ্যে থাকতে হয়, যা এক বা একাধিক রিসোর্সের যৌক্তিক গ্রুপিং। > 💁 রিসোর্স গ্রুপগুলি ব্যবহার করার অর্থ আমরা একবারে একাধিক সার্ভিস পরিচালনা করতে পারব। উদাহরণস্বরূপ, একবার আমরা এই প্রজেক্টের সমস্ত পাঠ শেষ করে নেওয়ার পরে, রিসোর্স গ্রুপ ডিলিট করে দেয়া যাবে এবং এতে থাকা সমস্ত রিসোর্স স্বয়ংক্রিয়ভাবে ডিলিট হবে। 1. বিশ্বজুড়ে বিভিন্ন অঞ্চলে একাধিক Azure ডেটা সেন্টার রয়েছে। আমরা যখন একটি অ্যাজুর রিসোর্স বা রিসোর্স গ্রুপ তৈরি কর্রি, তখন আমাদেরকে মাথায় রাখতে হবে যে এটি আমরা কোথায় তৈরি করতে চাই। বিভিন্ন অবস্থানের তালিকা পেতে নিম্নলিখিত কমান্ডটি চালানো যাবে: ```sh az account list-locations --output table ``` অবস্থানের একটি দীর্ঘ তালিকা দেখা যাবে। > 💁 এই লেসন লেখার সময়, 65 টি অবস্থান রয়েছে যেখানে আমরা আমাদের রিসোর্স রাখতে পারি। ```output ➜ ~ az account list-locations --output table DisplayName Name RegionalDisplayName ------------------------ ------------------- ------------------------------------- East US eastus (US) East US East US 2 eastus2 (US) East US 2 South Central US southcentralus (US) South Central US ... ``` `Name` কলামের ভ্যালুগুলো নোট রাখতে হবে যেগুলো আমাদের আশাপাশে বা নিকটে রয়েছে। ম্যাপ থেকে এগুলো দেখা যাবে [Azure geographies page](https://azure.microsoft.com/global-infrastructure/geographies/?WT.mc_id=academic-17441-jabenn) এ গিয়ে। 1. নিচের কমান্ড রান করে `soil-moisture-sensor` নামক রিসোর্স গ্রুপ তৈরী করতে হবে। রিসোর্স গ্রুপের নামগুলি একটি সাবস্ক্রিপশনে অনন্য(unique) হতে হবে । ```sh az group create --name soil-moisture-sensor \ --location ``` এখানে `` এর পবিবর্তে পূর্ববর্তী ধাপে নির্দিষ্টকৃত লোকেশন দিতে হবে। ### কাজ - IoT Hub তৈরী আমরা এখন আমাদের রিসোর্স গ্রুপে একটি আইওটি হাব রিসোর্স তৈরি করতে পারি। 1. নিচের কমান্ড ব্যবহার করে আইওটি হাব রিসোর্স তৈরি করি। ```sh az iot hub create --resource-group soil-moisture-sensor \ --sku F1 \ --partition-count 2 \ --name ``` এখানে`` এর পরবর্তে আমাদের হাব এর নাম দিতে হবে। এই নাম বিশ্বজুড়ে ইউনিক বা একটিমাত্র হতে হবে - অন্য কোনও আইওটি হাব (যে কারও দ্বারা তৈরি) একই নাম এর হওয়া যাবেনা। কেননা এটি দ্বারা URL তৈরী করা হবে। এক্ষেত্রে `soil-moisture-sensor-` শব্দাংশের পর আমাদের নাম বা কোন সংখ্যা বা অন্য কিছু যোগ করে দেয়া যেতে পারে। `--sku F1` দ্বারা বোঝায় এটি free tier ব্যবহার করছে। Free tier দ্বারা প্রতিদিন ৮০০০ ম্যাসেজ আদান প্রদান করা যায়। > 🎓অ্যাজুর সার্ভিসের বিভিন্ন মূল্যের স্তরগুলিকে 'TIER' হিসাবে উল্লেখ করা হয়। প্রতিটি স্তরের আলাদা আলাদা খরচ থাকে এবং এগুলো বিভিন্ন বৈশিষ্ট্য বা ডেটা ভলিউম সরবরাহ করে। > 💁 খরচ সম্পর্কে আরো বিস্তারিত [Azure IoT Hub pricing guide](https://azure.microsoft.com/pricing/details/iot-hub/?WT.mc_id=academic-17441-jabenn) পড়লে জানা যাবে। এখানে `--partition-count 2` নির্দিষ্ট করে যে এই হাব কয়টি ডাটা স্ট্রীম ব্যবহার করবে। পার্টিশন বেশি থাকলে তা আইওটি হাব থেকে একাধিক জিনিস পড়া এবং লেখার সময় ডেটা ব্লকিং হ্রাস করে। Partitions নিয়ে এই লেসনে আলোচনা করার সুযোগ নেই, তবে free tier IoT Hub তৈরীর জন্য এর ভ্যালু দিতে হবে। > 💁 প্রতি সাবস্ক্রিপশনে সর্বোচ্চ ১টি free tier IoT Hub নেয়া যাবে। আইওটি হাব তৈরি হয়ে যাবে। এটি সম্পূর্ণ হতে এক মিনিট বা তার একটু বেশি সময় নেয়। ## IoT Hub এর সাথে সংযোগ শপূর্ববর্তী পাঠে, আমরা এমকিউটিটি ব্যবহার করেছি এবং বিভিন্ন বিষয়ে বিভিন্ন উদ্দেশ্য নিয়ে বিভিন্ন বার্তা প্রেরণ করেছি। আইওটি হাবের বিভিন্ন বিষয়ের উপর বার্তা প্রেরণের পরিবর্তে হাবের সাথে যোগাযোগের জন্য একাধিক সুনির্দিষ্ট উপায় রয়েছে। > 💁 আইওটি হাব এবং ডিভাইসের মধ্যে এই যোগাযোগটি MQTT, HTTPS বা AMQP ব্যবহার করে করা যাবে। * ডিভাইস থেকে ক্লাউডে (D2C) বার্তা - these are messages sent from a device to IoT Hub, such as telemetry. They can then be read off the IoT Hub by your application code.এগুলি আইওটি হাবের কাছে টেলিমেট্রির মতো কোন ডিভাইস থেকে প্রেরিত বার্তা। এরপরে আমাদের অ্যাপ্লিকেশন কোড আইওটি হাব থেকে সেই ডেটা নিতে পারে। > 🎓 IoT Hub একটি Azure service ব্যবহার করে যার নাম [Event Hubs](https://docs.microsoft.com/azure/event-hubs/?WT.mc_id=academic-17441-jabenn)। আমরা যখন হাবটিতে প্রেরিত বার্তাগুলি পড়ার জন্য কোড লিখি, তখন এগুলোকে প্রায়শই ইভেন্ট হিসাবে বলা হয়। * ক্লাউড থেকে ডিভাইসে (C2D) বার্তা - আইওটি হাবের মাধ্যমে ডিভাইসে এসব বার্তা পাঠানো হয় এপ্লিকেশন কোড ব্যবহার করে। * ডিরেক্ট মেথড রিকুয়েস্ট - আইওটি হাবের মাধ্যমে ডিভাইসে এসব বার্তা পাঠানো হয় এপ্লিকেশন কোড ব্যবহার করে। সাধারণত এসব কোড ব্যবহার করা হয় যাতে ডিভাইসটি কোন কাজ করে, যেমন- একচুয়েটর নিয়ন্ত্রণ করার জন্য অনুরোধ করা। এই বার্তাগুলির একটি প্রতিক্রিয়া প্রয়োজন যাতে আমাদের অ্যাপ্লিকেশন কোডটি সফলভাবে প্রক্রিয়া করা হয়েছে কিনা বোঝা যায়। * ডিভাইস টুইন - এগুলি JSON ডকুমেন্ট যা ডিভাইস এবং আইওটি হাবের মধ্যে সামঞ্জস্যতা বজায় রাখে। এগুলো ব্যবহার করে সেটিং সমূহ এবং প্রপার্টিগুলো স্টোর করে রাখা হয় যা হয় ডিভাইস থেকে আসে অথবা আইওটি হাব কর্তৃক ডিভাইসে পাঠাতে হবে। আইওটি হাব একটি কনফিগারযোগ্য কোন নির্দিষ্ট সময়ের জন্য (ডিফল্ট ১দিন) ডিরেক্ট মেথড রিকুয়েস্ট এবং ম্যাসেজগুলো স্টোর করতে পারে। সুতরাং যদি কোন ডিভাইস বা অ্যাপ্লিকেশন কোড সংযোগ হারিয়ে ফেলে তবে এটি পুনরায় সংযোগের পরে অফলাইনে থাকা বার্তাগুলি পুনরুদ্ধার করতে পারে। ডিভাইস টুইনগুলো আইওটি হাবে স্থায়ীভাবে রাখা হয়, তাই যে কোনও সময় কোন ডিভাইস পুনরায় সংযোগ করতে পারে এবং সর্বশেষতম ডিভাইস টুইনে সংযোগ পেতে পারে। ✅ ছোট একটি কাজ করা যাকঃ বিভিন্ন ধরণের ম্যাসেজ সম্পর্কে আরো জানতে [Device-to-cloud communications guidance](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-d2c-guidance?WT.mc_id=academic-17441-jabenn) এবং [Cloud-to-device communications guidance](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-c2d-guidance?WT.mc_id=academic-17441-jabenn) পড়া উচিত হবে। ## IoT সার্ভিসগুলোর সাথে ডিভাইসের সংযোগ হাবটি তৈরি হয়ে গেলে, আমাদের আইওটি ডিভাইস এটির সাথে সংযোগ করতে পারবে। কেবল নিবন্ধিত ডিভাইসগুলিই কোন সার্ভিসে সংযোগ করতে পারে। তাই আমাদেরকে প্রথমে আমাদের ডিভাইসটি নিবন্ধিত করতে হবে। নিবন্ধন করার সময় সংযোগ স্ট্রিং (Connection String) পাওয়া যাবে যা ক্লাউডে সংযোগের জন্য ডিভাইসটি ব্যবহার করতে পারে। এই সংযোগ স্ট্রিংটি ডিভাইস-নির্দিষ্ট এবং এতে আইওটি হাব, ডিভাইস এবং একটি গোপন কী রয়েছে যা এই ডিভাইসটিকে সংযোগ করার অনুমতি দেয়। > 🎓 সংযোগ স্ট্রিং (Connection String) একটি জেনেরিক শব্দ যা সংযোগের তথ্য বিশিষ্ট কিছু টেক্সট এর একটি সমন্বয়। আইওটি হাব, ডাটাবেস এবং অন্যান্য অনেক পরিষেবাতে সংযোগ করার সময় এগুলি ব্যবহৃত হয়। এগুলিতে সাধারণত সার্ভিসের জন্য একটি শনাক্তকারী, যেমন একটি URL এবং সুরক্ষা তথ্য যেমন একটি গোপন কী থাকে। পরিষেবাগুলিতে যুক্ত হওয়ার জন্য এগুলিকে SDK এর মাধ্যমেই সংযোগ দেওয়া হয়। > ⚠️ সংযোগ স্ট্রিংগুলি (Connection Strings) সুরক্ষিত রাখতে হবে! সামনের লেসনগুলোতে নিরাপত্তা বিষয়টি আরও বিস্তারিতভাবে ব্যখ্যা করা হবে। ### কাজ - IoT ডিভাইসের নিবন্ধন (Registration) আইওটি ডিভাইস Azure CLI ব্যবহার কর আইওটি হাবের সাথে নিবন্ধনভুক্ত হতে পারে। 1. একটি ডিভাইসকে রেজিস্টার করতে, নিম্নের কমান্ডটি রান করতে হবে ```sh az iot hub device-identity create --device-id soil-moisture-sensor \ --hub-name ``` এখানে `` এর পরিবর্তে আমাদের ব্যবহৃত নামটি দিতে হবে। আমরা `soil-moisture-sensor` এর জন্য একটি ডিভাইস আইডি পাবো। 1. যখন আইওটি ডিভাইসটি SDK ব্যবহার করে , আইওটি হাবের সাথে সংযুক্ত হয়, তখন একটি সংযোগ স্ট্রিং ব্যবহার করতে হবে যা একটি গোপন কী সহ হাবের URL দেয়। সংযোগের স্ট্রিং পেতে নিম্নলিখিত কমান্ডটি চালাতে হবে: ```sh az iot hub device-identity connection-string show --device-id soil-moisture-sensor \ --output table \ --hub-name ``` এখানে `` এর পরিবর্তে আমাদের ব্যবহৃত নামটি দিতে হবে। 1. আউটপুটে আসা কানেকশন স্ট্রিং কোথাও লিখে রাখতে হবে। পরবর্তীতে এটির দরকার হবে। ### কাজ - IoT ডিভাইসকে ক্লাউডের সাথে যুক্ত করা নিম্নের যেকোন একটি প্রাসঙ্গিক গাইড ধরে, প্রাথমিক কাজগুলো সম্পন্ন করতে হবে। * [Arduino - Wio Terminal](wio-terminal-connect-hub.md) * [Single-board computer - Raspberry Pi/Virtual IoT device](single-board-computer-connect-hub.md) ### কাজ - ইভেন্টগুলো পর্যবেক্ষণ এখনই আমরা আমাদের সার্ভার কোড আপডেট করবোনা। এর পরিবর্তে আইওটি ডিভাইস থেকে ইভেন্টগুলি নিরীক্ষণ করতে Azure CLI ব্যবহার করবো। 1. এটি নিশ্চিত করতে হবে যে আমাদের আইওটি ডিভাইসটি চলছে এবং মাটির আর্দ্রতা টেলিমেট্রি মানগুলি প্রেরণ করছে । 1. আইওটি হাবে আসা ম্যাসেজগুলো দেখতে কমান্ড প্রম্পট বা টার্মিনাল থেকে নিম্নের কোড কমান্ড রান করি। ```sh az iot hub monitor-events --hub-name ``` এখানে `` এর পরিবর্তে আমাদের ব্যবহৃত নামটি দিতে হবে। কনসোল আউটপুটে ম্যাসেজগুলো তখন দেখাবেঃ ```output Starting event monitor, use ctrl-c to stop... { "event": { "origin": "soil-moisture-sensor", "module": "", "interface": "", "component": "", "payload": "{\"soil_moisture\": 376}" } }, { "event": { "origin": "soil-moisture-sensor", "module": "", "interface": "", "component": "", "payload": "{\"soil_moisture\": 381}" } } ``` এখানে `payload` এর কনটেন্টগুলো আইওটি ডিভাইসে আসা ম্যাসেজের সাথে মিলবে। 1. এই বার্তাগুলিতে তাদের সাথে স্বয়ংক্রিয়ভাবে সংযুক্ত থাকা অসংখ্য বৈশিষ্ট্য রয়েছে, যেমন টাইমস্ট্যাম্প। এগুলি *annotations* বা টীকা হিসাবে পরিচিত। সমস্ত বার্তা টীকা বা message annotations দেখতে, নিম্নলিখিত কমান্ড ব্যবহার করতে হবে: ```sh az iot hub monitor-events --properties anno --hub-name ``` `` এর পরিবর্তে আমাদের ব্যবহৃত নামটি দিতে হবে। আইওটি ডিভাইস দ্বারা প্রেরিত হওয়ার সাথে সাথে বার্তাগুলি কনসোল আউটপুটে প্রদর্শিত হবে। ```output Starting event monitor, use ctrl-c to stop... { "event": { "origin": "soil-moisture-sensor", "module": "", "interface": "", "component": "", "properties": {}, "annotations": { "iothub-connection-device-id": "soil-moisture-sensor", "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}", "iothub-connection-auth-generation-id": "637553997165220462", "iothub-enqueuedtime": 1619976150288, "iothub-message-source": "Telemetry", "x-opt-sequence-number": 1379, "x-opt-offset": "550576", "x-opt-enqueued-time": 1619976150277 }, "payload": "{\"soil_moisture\": 381}" } } ``` এনোটেশন গুলোর সময়ের ভ্যালু [UNIX time](https://wikipedia.org/wiki/Unix_time) এ প্রদর্শিত, যা ১জানুয়ারি, ১৯৭০ মধ্যরাত থেকে কত সেকেন্ড হয়েছে তা দেখায়। কাজ শেষে ইভেন্ট মনিটর থেকে এক্সিট করতে হবে। ### কাজ - IoT device নিয়ন্ত্রণ Azure CLI ব্যবহার করে direct method এ IoT device এ যোগাযোগ করা যাবে। 1. `relay_on` মেথড শুরু করতে কমান্ড প্রম্পট বা টার্মিনালে নিম্নের কমান্ড রান করিঃ ```sh az iot hub invoke-device-method --device-id soil-moisture-sensor \ --method-name relay_on \ --method-payload '{}' \ --hub-name ``` `` এর পরিবর্তে আমাদের ব্যবহৃত নামটি দিতে হবে। এটি `method-name` নামক মেথডের জন্য direct method এর রিকুয়েস্ট পাঠাবে। এগুলো একটি payload (যাতে মেথডের ডেটা রয়েছে) নিতে পারে এবং এটিকে `method-payload` প্যারামিটার হিসেবে JSON এ সুনির্দিষ্ট করতে হবে। রিলে চালু হবে এবং আউটপুটে আসবেঃ ```output Direct method received - relay_on ``` 1. পূর্বের ধাপ আবারো করতে হবে, তবে `--method-name` পরিবর্তন করে `relay_off` দিতে হবে। তখন দেখা যাবে যে রিলে বন্ধ হয়ে গিয়েছে এবং আইওটি ডিভাইস থেকে সেরকম আউটপুটই আসবে। --- ## 🚀 চ্যালেঞ্জ IoT Hub এর free tier দৈনিক ৮০০০ ম্যাসেজ এর সুযোগ দেয়। আমাদের কোডে প্রতি ১০ সেকেন্ডে একটি করে ম্যাসেজ যায়। তাহলে দৈনিক কতটি ম্যাসেজ হচ্ছে ? একটু ভাবতে হবে যে কতটা সময় পরপর আর্দ্রতার মান জানলে আমাদের কাজ চলবে। Free tier এর ভিতরে থাকার জন্য কোড কীভাবে পরিবর্তন করতে হবে এবং ঘন ঘন মান না নিয়ে, শুধু প্রয়োজনের সময়ই দেখলাম - এটা কীভাবে করা যাবে? দ্বিতীয় আরেকটি ডিভাইস এখানে যুক্ত করলে সেক্ষেত্রে কী হবে? ## লেকচার পরবর্তী কুইজ [লেকচার-পরবর্তী কুইজ](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/16) ## রিভিউ এবং স্ব-অধ্যয়ন IoT Hub SDK আরডুইনো এবং পাইথন উভয়ের জন্যই ওপেন সোর্স। গিটহাবে অনেকগুলো নমুনা রয়েছে আইওটি হাবের সাথে ব্যবহারের। * Wio Terminal ব্যবহার করলে [Arduino samples on GitHub](https://github.com/Azure/azure-iot-pal-arduino/tree/master/pal/samples) দেখা উচিত। * Raspberry Pi অথবা Virtual device ব্যবহার করলে [Python samples on GitHub](https://github.com/Azure/azure-iot-sdk-python/tree/master/azure-iot-hub/samples)দেখা উচিত। ## এসাইনমেন্ট [ক্লাউড সার্ভিসের ব্যাপারে জানা](assignment.bn.md)