> 💁 প্রাচীনতম টেলিমেট্রি ডিভাইসগুলি ফ্রান্সে ১৮৭৪ সালে উদ্ভাবিত হয়েছিল এবং Mont Blanc থেকে প্যারিসে রিয়েল-টাইম আবহাওয়া এবং তুষারের গভীরতা প্রেরণ করেছিল। এটি বাস্তবিক তারগুলি ব্যবহার করত কারণ ওয়্যারলেস প্রযুক্তিগুলি তখন ছিল না।
> 💁 প্রাচীনতম টেলিমেট্রি ডিভাইসগুলি ফ্রান্সে ১৮৭৪ সালে উদ্ভাবিত হয়েছিল এবং Mont Blanc থেকে প্যারিসে রিয়েল-টাইম আবহাওয়া এবং তুষারের গভীরতা প্রেরণ করেছিল। এটি বাস্তবিক তারগুলি ব্যবহার করত কারণ ওয়্যারলেস প্রযুক্তিগুলি তখন ছিল না।
চলুন পাঠ 1 থেকে স্মার্ট থার্মোস্টেটের উদাহরণটি দেখি।
পাঠ 1 থেকে স্মার্ট থার্মোস্টেটের উদাহরণটি দেখি।


@ -131,13 +131,13 @@ MQTT- সংযোগসমূহ পাবলিক ও উন্মুক্
### MQTT ব্রোকার হতে টেলিমেট্রি গ্রহণ
### MQTT ব্রোকার হতে টেলিমেট্রি গ্রহণ
টেলিমেট্রি পাঠানোর কোন অর্থ নেই যদি অন্য প্রান্তে এটি listen-করার মতো কিছু না থাকে। লাইট লেভেল টেলিমেট্রিটির ডেটা প্রক্রিয়া করার জন্য এটিকে কিছু লিসেনিং(listening) এর প্রয়োজ়নীয়তা আছে। এই 'সার্ভার' কোডটি সেই ধরণের কোড যা বৃহত্তর আইওটি অ্যাপ্লিকেশনের অংশ হিসাবে একটি ক্লাউড সেবাতে স্থাপন করবো, তবে এখানে স্থানীয়ভাবে এই কোডটি লোকাল কম্পিউটারে চালাতে পারবো (বা আমাদের Pi-তে সরাসরি কোডিং করতে পারবো)। সার্ভার কোডে একটি পাইথন অ্যাপ থাকে যা MQTT-র মাধ্যমে লাইটে লেভেলগুলোর টেলিমেট্রি বার্তা listen করতে পারে । এই পাঠের পরবর্তীতে, এটিতে কমান্ডের মেসেজ রিপ্লেতে পাঠাবো যাতে নির্দেশনা থাকবে যে এলইডি অন না অফ হবে।
টেলিমেট্রি পাঠানোর কোন অর্থ নেই যদি অন্য প্রান্তে এটিকেগ্রহণ করার মতো কিছু না থাকে। লাইট লেভেল টেলিমেট্রিটির ডেটা প্রক্রিয়া করার জন্য এটিকে কিছু গ্রাহকের এর প্রয়োজ়নীয়তা আছে। এই 'সার্ভার' কোডটি সেই ধরণের কোড যা বৃহত্তর আইওটি অ্যাপ্লিকেশনের অংশ হিসাবে একটি ক্লাউড সেবাতে স্থাপন করবো, তবে এখানে স্থানীয়ভাবে এই কোডটি লোকাল কম্পিউটারে চালাতে পারবো (বা আমাদের Pi-তে সরাসরি কোডিং করতে পারবো)। সার্ভার কোডে একটি পাইথন অ্যাপ থাকে যা MQTT-র মাধ্যমে লাইটে লেভেলগুলোর টেলিমেট্রি বার্তা গ্রহণ করতে পারে। এই পাঠের পরবর্তীতে, এটিতে কমান্ডের মেসেজ রিপ্লেতে পাঠাবো যাতে নির্দেশনা থাকবে যে এলইডি অন না অফ হবে।
✅ কিছু গবেষনা করিঃ MQTT বার্তাগুলোর কী হবে যদি কোনো গ্রাহক না থাকে?
✅ কিছু গবেষনা করিঃ MQTT বার্তাগুলোর কী হবে যদি কোনো গ্রাহক না থাকে?
#### পাইথন এবং ভিএস কোড ইন্সটল করি
#### পাইথন এবং ভিএস কোড ইন্সটল করি
লোকালি Python এবং VS Code ইনস্টল করা না থাকলে সার্ভারে কোড দেওয়ার জন্য দুইটিকেই ইনস্টল করবো। যদি ভার্চুয়াল ডিভাইস ব্যবহার করি বা রাস্পবেরি পাইতে কাজ করি তবে এই পদক্ষেপটি এড়িয়ে যেতে পারি ।
লোকালি Python এবং VS Code ইনস্টল করা না থাকলে সার্ভারে কোড দেওয়ার জন্য দুইটিকেই ইনস্টল করবো। যদি ভার্চুয়াল ডিভাইস ব্যবহার করি বা রাস্পবেরি পাইতে কাজ করি তবে এই পদক্ষেপটি এড়িয়ে যেতে পারি ।
##### কাজ
##### কাজ
@ -151,7 +151,7 @@ Python এবং VS Code ইন্সটল করি।
1. VS Code এর Pylance এক্সটেনশনটি ইন্সটল করি। পাইথন লেঙ্গুয়েজের সাপোর্টের জন্য এটি VS Code এর একটি এক্সটেনশন। এটি এক্সটেনশনটি VS Code-এ কিভাবে ইন্সটল করতে হয় [Pylance extension documentation](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance&WT.mc_id=academic-17441-jabenn) থেকে দেখে নেই।
1. VS Code এর Pylance এক্সটেনশনটি ইন্সটল করি। পাইথন লেঙ্গুয়েজের সাপোর্টের জন্য এটি VS Code এর একটি এক্সটেনশন। এটি এক্সটেনশনটি VS Code-এ কিভাবে ইন্সটল করতে হয় [Pylance extension documentation](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance&WT.mc_id=academic-17441-jabenn) থেকে দেখে নেই।
#### পাইথনের ভার্চুইয়াল এনভায়রনমেন্ট কনফিগারেশন
#### পাইথনের ভার্চুয়াল এনভায়রনমেন্ট কনফিগারেশন
পাইথনের অন্যতম শক্তিশালী ফিচারটি হল [পিপ প্যাকেজ](https://pypi.org) ইনস্টল করার ক্ষমতা – এই কোডের প্যাকেজগুলি অন্যদের দ্বারা লেখা হয় যা পরবর্তীতে ইন্টারনেটে প্রকাশ করা হয়। কম্পিউটারে একটি কমান্ডের এর মাধ্যমে পিপ প্যাকেজ ইন্সটল করা যায়, তারপরে নির্দিষ্ট কোডটিতে সেই প্যাকেজটি ব্যবহার করতে পারবো। MQTT- এর মাধ্যমে যোগাযোগ করতে আমরা পিপ ব্যবহার করে প্যাকেজ ইন্সটল করব।
পাইথনের অন্যতম শক্তিশালী ফিচারটি হল [পিপ প্যাকেজ](https://pypi.org) ইনস্টল করার ক্ষমতা – এই কোডের প্যাকেজগুলি অন্যদের দ্বারা লেখা হয় যা পরবর্তীতে ইন্টারনেটে প্রকাশ করা হয়। কম্পিউটারে একটি কমান্ডের এর মাধ্যমে পিপ প্যাকেজ ইন্সটল করা যায়, তারপরে নির্দিষ্ট কোডটিতে সেই প্যাকেজটি ব্যবহার করতে পারবো। MQTT- এর মাধ্যমে যোগাযোগ করতে আমরা পিপ ব্যবহার করে প্যাকেজ ইন্সটল করব।
@ -291,7 +291,7 @@ Python এবং VS Code ইন্সটল করি।
এই কোডটি একটি ইউনিক নামসহ একটি MQTT ক্লায়েন্ট তৈরি করে যা * test.mosquitto.org * ব্রোকারের সাথে সংযুক্ত হয়। পরবর্তীতে এটি একটি প্রসেসিং লুপ চালু করে যেকোনো সাবস্ক্রাইব টপিকের মেসেজ লিসেনিং এর জন্য ব্যাকগ্রাউন্ড থ্রেডে রান করে করে।
এই কোডটি একটি ইউনিক নামসহ একটি MQTT ক্লায়েন্ট তৈরি করে যা * test.mosquitto.org * ব্রোকারের সাথে সংযুক্ত হয়। পরবর্তীতে এটি একটি প্রসেসিং লুপ চালু করে যেকোনো সাবস্ক্রাইব টপিকের মেসেজ লিসেনিং এর জন্য ব্যাকগ্রাউন্ড থ্রেডে রান করে করে।
The client then subscribes to messages on the telemetry topic, and defines a function that is called when a message is received. When a telemetry message is received, the `handle_telemetry` function is called, printing the message received to the console.
ক্লায়েন্ট পরবর্তীতে টেলিমেট্রি টপিকের মেসেজগুলিতে সাবস্ক্রাইব করে এবং একটি ফাংশন সংজ্ঞায়িত করে আর যখন মেসেজ গৃহীত হয় তখনই ফাংশনটিকে কল করা হয়। যখন একটি টেলেমেট্রি মেসেজ গৃহীত হয় তখনই `handle_telemetry` ফাংশনটি কল করা হয় এবং কনসোলে গৃহীত বার্তাটি প্রিন্ট হয়।
সবশেষে একটি ইনফিনিট লুপে অ্যাপ্লিকেশনটি রান হয়। ব্যাকগ্রাউন্ড থ্রেডে MQTT ক্লায়েন্ট বার্তাগুলোতে লিসেন করে এবং মেইন এপ্লিকেশনটি রান হওয়া অবস্থায় এটি সবসময় রান হয়।
সবশেষে একটি ইনফিনিট লুপে অ্যাপ্লিকেশনটি রান হয়। ব্যাকগ্রাউন্ড থ্রেডে MQTT ক্লায়েন্ট বার্তাগুলোতে লিসেন করে এবং মেইন এপ্লিকেশনটি রান হওয়া অবস্থায় এটি সবসময় রান হয়।
@ -339,7 +339,7 @@ Python এবং VS Code ইন্সটল করি।
লস অফ কানেক্টিভিটি MQTT-কতৃক সামালানোর জন্য প্রয়োজনে ডিভাইস এবং সার্ভার কোডকে মেসেজ ডেলিভারি নিশ্চিত করার দায়ভার গ্রহণ করতে হবে। উদারণস্বরূপ, একটি রিপ্লাই টপিকে অতিরিক্ত মেসেজসমূহের মাধ্যমে প্রেরিত সমস্ত মেসেজসমূহ প্রয়োজনে চাওয়া এবং তা যদি না হয় তবে সেগুলো ম্যানুয়ালি একটি সারিতে থাকবে যাতে পরবর্তী রিপ্লেতে দিবে।
লস অফ কানেক্টিভিটি MQTT-কতৃক সামালানোর জন্য প্রয়োজনে ডিভাইস এবং সার্ভার কোডকে মেসেজ ডেলিভারি নিশ্চিত করার দায়ভার গ্রহণ করতে হবে। উদারণস্বরূপ, একটি রিপ্লাই টপিকে অতিরিক্ত মেসেজসমূহের মাধ্যমে প্রেরিত সমস্ত মেসেজসমূহ প্রয়োজনে চাওয়া এবং তা যদি না হয় তবে সেগুলো ম্যানুয়ালি একটি সারিতে থাকবে যাতে পরবর্তী রিপ্লেতে দিবে।
## কমান্ডস
## কমান্ডসমূহ
কমান্ডস হচ্ছে মেসেজ যা ক্লাউড দ্বারা কোন ডিভাইসে প্রেরণ করা হয় যাতে কিছু করার নির্দেশনা দেওয়া থাকে। বেশিরভাগক্ষেত্রে একচুয়েটরের আউটপুট সম্বলিত কিছু থাকে কিন্তু এতে ডিভাইসের নিজের জন্য কিছু নির্দেশনাও থাকতে পারে (যেমনঃ রিব্যুট করা) বা এক্সট্রা টেলিমেট্রি জড়ো করা এবং রেসপন্স হিসেবে কমান্ডকে রিটার্ন করা।
কমান্ডস হচ্ছে মেসেজ যা ক্লাউড দ্বারা কোন ডিভাইসে প্রেরণ করা হয় যাতে কিছু করার নির্দেশনা দেওয়া থাকে। বেশিরভাগক্ষেত্রে একচুয়েটরের আউটপুট সম্বলিত কিছু থাকে কিন্তু এতে ডিভাইসের নিজের জন্য কিছু নির্দেশনাও থাকতে পারে (যেমনঃ রিব্যুট করা) বা এক্সট্রা টেলিমেট্রি জড়ো করা এবং রেসপন্স হিসেবে কমান্ডকে রিটার্ন করা।
@ -390,7 +390,7 @@ Python এবং VS Code ইন্সটল করি।
এখনে যেহেতু সার্ভার হতে কমান্ডসমূহ প্রেরিত হচ্ছে সেহেতু আমরা আইওটি ডিভাইসকে পরিচালনা করার জন্য এবং এলইডিকে নিয়ন্ত্রণের জন্য তাতে কোড এড করতে পারবো।
এখনে যেহেতু সার্ভার হতে কমান্ডসমূহ প্রেরিত হচ্ছে সেহেতু আমরা আইওটি ডিভাইসকে পরিচালনা করার জন্য এবং এলইডিকে নিয়ন্ত্রণের জন্য তাতে কোড এড করতে পারবো।
MQTT ব্রোকার হতে কমান্ডসমূহ লিসেনের জন্য নিচের পদক্ষেপগুলো অনুসরণ করিঃ
MQTT ব্রোকার হতে কমান্ডসমূহ গ্রহণের জন্য নিচের পদক্ষেপগুলো অনুসরণ করিঃ
* [সিংগেল বোর্ড কম্পিউটার - রাস্পবেরি পাই/ভার্চুয়াল আইওটি ডিভাইস](single-board-computer-commands.bn.md)
* [সিংগেল বোর্ড কম্পিউটার - রাস্পবেরি পাই/ভার্চুয়াল আইওটি ডিভাইস](single-board-computer-commands.bn.md)
@ -425,7 +425,7 @@ MQTT ব্রোকার হতে কমান্ডসমূহ লিসে
[Mosquitto](https://www.mosquitto.org) ব্যবহার করে MQTT ব্রোকার রান করতে ট্রাই করি এবং এটিকে আইওটি ডিভাইস ও সার্ভার কোডের সাথে সংযুক্ত করি।
[Mosquitto](https://www.mosquitto.org) ব্যবহার করে MQTT ব্রোকার রান করতে ট্রাই করি এবং এটিকে আইওটি ডিভাইস ও সার্ভার কোডের সাথে সংযুক্ত করি।
> 💁 টিপ – বাই ডিফল্ট Mosquitto কখনো anonymous কানেকশন এলাউ করে না ( anonymous কানেকশন মানে ইউজারনেম এবং পাসওয়ার্ড ব্যাতীত কানেক্ট হওয়া) এবং যেই কম্পিউটারে এটি রান হচ্ছে সেই কম্পিউটার ব্যাতীত অন্য কানেকশন এলাউ করে না।
> 💁 টিপ – বাই ডিফল্ট Mosquitto কখনো anonymous কানেকশন অনুমোদন করে না (anonymous কানেকশনের অর্থ হচ্ছে ইউজারনেম এবং পাসওয়ার্ড ব্যাতীত কানেক্ট হওয়া) এবং যেই কম্পিউটারে এটি রান হচ্ছে সেই কম্পিউটার ব্যাতীত অন্য কানেকশন অনুমোদন করে না।
> এটিকে [`mosquitto.conf` config file](https://www.mosquitto.org/man/mosquitto-conf-5.html) এর মাধ্যমে ফিক্স করতে নিম্নের কমান্ডটি দিইঃ
> এটিকে [`mosquitto.conf` config file](https://www.mosquitto.org/man/mosquitto-conf-5.html) এর মাধ্যমে ফিক্স করতে নিম্নের কমান্ডটি দিইঃ