১. সংক্ষিপ্ত বিবরণ/ভূমিকা
যদিও ওয়েব, অ্যাপ্লিকেশন সার্ভার এবং ডেটাবেস নিয়ে গঠিত মাল্টি-টিয়ার অ্যাপ্লিকেশনগুলো ওয়েব ডেভেলপমেন্টের ভিত্তি এবং অনেক ওয়েবসাইটের সূচনা বিন্দু, তবুও সফলতার পথে প্রায়শই স্কেলেবিলিটি, ইন্টিগ্রেশন এবং এজিলিটি সংক্রান্ত চ্যালেঞ্জ আসে। উদাহরণস্বরূপ, কীভাবে রিয়েল-টাইমে ডেটা পরিচালনা করা যায় এবং কীভাবে তা একাধিক গুরুত্বপূর্ণ ব্যবসায়িক সিস্টেমে বিতরণ করা যায়? এই সমস্যাগুলো এবং ইন্টারনেট-স্কেল অ্যাপ্লিকেশনের চাহিদা একটি ডিস্ট্রিবিউটেড মেসেজিং সিস্টেমের প্রয়োজনীয়তা তৈরি করেছে এবং স্থিতিস্থাপক ও রিয়েল-টাইম সিস্টেম অর্জনের জন্য ডেটা পাইপলাইন ব্যবহারের একটি আর্কিটেকচারাল প্যাটার্নের জন্ম দিয়েছে। ফলস্বরূপ, একটি ডিস্ট্রিবিউটেড মেসেজিং সিস্টেমে কীভাবে রিয়েল-টাইম ডেটা প্রকাশ করতে হয় এবং তারপরে কীভাবে একটি ডেটা পাইপলাইন তৈরি করতে হয়, তা বোঝা ডেভেলপার এবং আর্কিটেক্ট উভয়ের জন্যই অত্যন্ত গুরুত্বপূর্ণ দক্ষতা।
আপনি যা তৈরি করবেন
এই কোডল্যাবে, আপনি একটি আবহাওয়ার ডেটা পাইপলাইন তৈরি করবেন যা একটি ইন্টারনেট অফ থিংস (IoT) ডিভাইস দিয়ে শুরু হয়, ডেটা গ্রহণ ও প্রেরণের জন্য একটি মেসেজ কিউ ব্যবহার করে, ডেটাকে একটি ডেটা ওয়্যারহাউসে স্থানান্তরের জন্য একটি সার্ভারলেস ফাংশন কাজে লাগায় এবং সবশেষে তথ্য প্রদর্শনের জন্য একটি ড্যাশবোর্ড তৈরি করে। IoT ডিভাইস হিসেবে একটি ওয়েদার সেন্সরসহ রাস্পবেরি পাই ব্যবহার করা হবে এবং গুগল ক্লাউড প্ল্যাটফর্মের বিভিন্ন উপাদান ডেটা পাইপলাইনটি গঠন করবে। রাস্পবেরি পাই তৈরি করা সুবিধাজনক হলেও, এটি এই কোডল্যাবের একটি ঐচ্ছিক অংশ এবং স্ট্রিমিং আবহাওয়ার ডেটার পরিবর্তে একটি স্ক্রিপ্ট ব্যবহার করা যেতে পারে।

এই কোডল্যাবের ধাপগুলো সম্পন্ন করার পর, আপনার কাছে একটি স্ট্রিমিং ডেটা পাইপলাইন থাকবে যা একটি ড্যাশবোর্ডে তাপমাত্রা, আর্দ্রতা, শিশিরবিন্দু এবং বায়ুচাপ প্রদর্শন করবে।

আপনি যা শিখবেন
- কীভাবে গুগল পাব/সাব ব্যবহার করবেন
- কীভাবে একটি গুগল ক্লাউড ফাংশন স্থাপন করবেন
- কীভাবে গুগল বিগকোয়েরি কাজে লাগাবেন
- গুগল ডেটা স্টুডিও ব্যবহার করে কীভাবে একটি ড্যাশবোর্ড তৈরি করবেন
- এছাড়াও, আপনি যদি IoT সেন্সরটি তৈরি করেন, তাহলে আপনি Google Cloud SDK কীভাবে ব্যবহার করতে হয় এবং Google Cloud Platform-এ রিমোট অ্যাক্সেস কলগুলিকে কীভাবে সুরক্ষিত করতে হয়, তাও শিখবেন।
আপনার যা যা লাগবে
- একটি গুগল ক্লাউড প্ল্যাটফর্ম অ্যাকাউন্ট। গুগল ক্লাউড প্ল্যাটফর্মের নতুন ব্যবহারকারীরা ৩০০ ডলারের একটি বিনামূল্যে ট্রায়ালের জন্য যোগ্য।
আপনি যদি স্যাম্পল ডেটা এবং একটি স্ক্রিপ্ট ব্যবহার করার পরিবর্তে এই কোডল্যাবের IoT সেন্সর অংশটি তৈরি করতে চান, তাহলে আপনার নিম্নলিখিত জিনিসগুলিরও প্রয়োজন হবে ( যা একটি সম্পূর্ণ কিট হিসাবে অথবা আলাদা আলাদা অংশ হিসাবে এখান থেকে অর্ডার করা যেতে পারে )...
- পাওয়ার সাপ্লাই, এসডি মেমরি কার্ড এবং কেস সহ রাস্পবেরি পাই জিরো ডাব্লিউ।
- ইউএসবি কার্ড রিডার
- ইউএসবি হাব (রাস্পবেরি পাই-এর একমাত্র ইউএসবি পোর্টে কিবোর্ড ও মাউস সংযোগ করার জন্য)
- ফিমেল-টু-ফিমেল ব্রেডবোর্ড তার
- GPIO হ্যামার হেডার
- BME280 সেন্সর
- সোল্ডার সহ সোল্ডারিং আয়রন
এছাড়াও, এইচডিএমআই ইনপুটসহ একটি কম্পিউটার মনিটর বা টিভি, এইচডিএমআই ক্যাবল, কিবোর্ড এবং মাউস থাকার বিষয়টি ধরে নেওয়া হচ্ছে।
২. প্রস্তুতি গ্রহণ
স্ব-গতিতে পরিবেশ সেটআপ
আপনার যদি আগে থেকে কোনো গুগল অ্যাকাউন্ট (জিমেইল বা জি স্যুট) না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে। আপনার গুগল অ্যাকাউন্ট আগে থেকে থাকুক বা না থাকুক, ৩০০ ডলারের ফ্রি ট্রায়ালটির সুবিধা নিতে ভুলবেন না!
Google Cloud Platform কনসোলে ( console.cloud.google.com ) সাইন-ইন করুন। আপনি এই ল্যাবের জন্য ডিফল্ট প্রজেক্ট ("My First Project") ব্যবহার করতে পারেন অথবা একটি নতুন প্রজেক্ট তৈরি করতে পারেন। আপনি যদি একটি নতুন প্রজেক্ট তৈরি করতে চান, তাহলে আপনি 'Manage resources' পৃষ্ঠাটি ব্যবহার করতে পারেন। প্রজেক্ট আইডিটি সমস্ত Google Cloud প্রজেক্টের মধ্যে একটি অনন্য নাম হতে হবে (নীচে দেখানো নামটি ইতিমধ্যে ব্যবহৃত হয়েছে এবং আপনার জন্য কাজ করবে না)। আপনার প্রজেক্ট আইডিটি লিখে রাখুন (যেমন: আপনার প্রজেক্ট আইডি হবে _____) কারণ এটি পরে প্রয়োজন হবে।


এই কোডল্যাবটি চালাতে কয়েক ডলারের বেশি খরচ হওয়ার কথা নয়, কিন্তু আপনি যদি আরও রিসোর্স ব্যবহার করার সিদ্ধান্ত নেন বা সেগুলোকে চালু রাখেন, তাহলে খরচ আরও বেশি হতে পারে। কোডল্যাবের শেষে থাকা ক্লিনআপ (Cleanup) সেকশনটি অবশ্যই দেখে নেবেন।
৩. একটি BigQuery টেবিল তৈরি করুন
BigQuery হলো একটি সার্ভারবিহীন, অত্যন্ত স্কেলেবল ও স্বল্প খরচের এন্টারপ্রাইজ ডেটা ওয়্যারহাউস, যা IoT ডিভাইস থেকে স্ট্রিম হওয়া ডেটা সংরক্ষণের জন্য একটি আদর্শ বিকল্প হবে এবং একই সাথে একটি অ্যানালিটিক্স ড্যাশবোর্ডকে সেই তথ্য কোয়েরি করার সুযোগ দেবে।
চলুন একটি টেবিল তৈরি করি যেখানে সমস্ত IoT আবহাওয়ার ডেটা থাকবে। ক্লাউড কনসোল থেকে BigQuery নির্বাচন করুন। এটি একটি নতুন উইন্ডোতে BigQuery খুলবে (মূল উইন্ডোটি বন্ধ করবেন না, কারণ আপনার এটি আবার অ্যাক্সেস করার প্রয়োজন হবে)।

আপনার প্রোজেক্টের নামের পাশে থাকা নিচের দিকে মুখ করা তীর চিহ্নের আইকনে ক্লিক করুন এবং তারপরে "নতুন ডেটাসেট তৈরি করুন" নির্বাচন করুন।

ডেটা সেটের জন্য 'weatherData' লিখুন, এটি সংরক্ষণের জন্য একটি স্থান নির্বাচন করুন এবং 'OK' ক্লিক করুন।

নতুন টেবিল তৈরি করতে আপনার ডেটাসেটের পাশে থাকা "+" চিহ্নে ক্লিক করুন।

সোর্স ডেটার জন্য, ‘Create empty table’ নির্বাচন করুন। ডেস্টিনেশন টেবিলের নামের জন্য, ‘weatherDataTable’ লিখুন। স্কিমার নিচে, মোট ৯টি ফিল্ড না হওয়া পর্যন্ত ‘Add Field’ বোতামে ক্লিক করতে থাকুন। নিচে দেখানো অনুযায়ী ফিল্ডগুলো পূরণ করুন এবং প্রতিটি ফিল্ডের জন্য উপযুক্ত ‘Type’ নির্বাচন করতে ভুলবেন না। সবকিছু সম্পূর্ণ হলে, ‘Create Table’ বোতামে ক্লিক করুন।

আপনার এরকম একটি ফলাফল দেখা উচিত...

আপনার আবহাওয়ার ডেটা গ্রহণ করার জন্য এখন একটি ডেটা ওয়্যারহাউস সেটআপ করা আছে।
৪. একটি পাব/সাব টপিক তৈরি করুন
ক্লাউড পাব/সাব হলো স্ট্রিম অ্যানালিটিক্স এবং ইভেন্ট-ড্রাইভেন কম্পিউটিং সিস্টেমের জন্য একটি সহজ, নির্ভরযোগ্য ও স্কেলেবল ভিত্তি। ফলে, এটি আগত IoT বার্তাগুলো গ্রহণ এবং পরবর্তী সিস্টেমগুলোকে সেগুলো প্রসেস করার সুযোগ দেওয়ার জন্য আদর্শ।
আপনি যদি এখনও BigQuery উইন্ডোতে থাকেন, তাহলে ক্লাউড কনসোলে ফিরে যান। আপনি যদি ক্লাউড কনসোল বন্ধ করে দিয়ে থাকেন, তাহলে https://console.cloud.google.com-এ যান।
ক্লাউড কনসোল থেকে, পাব/সাব এবং তারপর টপিকস নির্বাচন করুন।

যদি আপনি ‘Enable API’ প্রম্পট দেখতে পান, তাহলে ‘Enable API’ বোতামটিতে ক্লিক করুন।

Create a topic বাটনে ক্লিক করুন

টপিকের নাম হিসেবে 'weatherdata' লিখুন এবং Create-এ ক্লিক করুন।

আপনার নতুন তৈরি করা বিষয়টি দেখা উচিত।

এখন আপনার একটি পাব/সাব টপিক আছে, যেখানে আপনি আইওটি মেসেজ প্রকাশ করতে এবং অন্যান্য প্রসেসকে সেই মেসেজগুলো অ্যাক্সেস করার অনুমতি দিতে পারবেন।
বিষয়টিতে সুরক্ষিত প্রকাশনা
আপনি যদি আপনার গুগল ক্লাউড কনসোলের বাইরের কোনো রিসোর্স (যেমন একটি IoT সেন্সর) থেকে পাব/সাব টপিকে মেসেজ প্রকাশ করার পরিকল্পনা করেন, তাহলে একটি সার্ভিস অ্যাকাউন্ট ব্যবহার করে অ্যাক্সেস আরও কঠোরভাবে নিয়ন্ত্রণ করা এবং একটি ট্রাস্ট সার্টিফিকেট তৈরি করে সংযোগের নিরাপত্তা নিশ্চিত করা প্রয়োজন হবে।
ক্লাউড কনসোল থেকে, IAM ও অ্যাডমিন এবং তারপরে সার্ভিস অ্যাকাউন্টস নির্বাচন করুন।

সার্ভিস অ্যাকাউন্ট তৈরি করুন বোতামে ক্লিক করুন

Role ড্রপডাউন থেকে Pub/Sub Publisher রোলটি নির্বাচন করুন।

একটি সার্ভিস অ্যাকাউন্টের নাম (iotWeatherPublisher) টাইপ করুন, "Furnish a new private key" চেকবক্সটি চেক করুন, নিশ্চিত করুন যে "Key type" JSON-এ সেট করা আছে এবং "Create"-এ ক্লিক করুন।

সিকিউরিটি কী স্বয়ংক্রিয়ভাবে ডাউনলোড হয়ে যাবে। কী একটাই, তাই এটি হারিয়ে না ফেলা জরুরি। ক্লোজ-এ ক্লিক করুন।

আপনি দেখতে পাবেন যে একটি পরিষেবা অ্যাকাউন্ট তৈরি করা হয়েছে এবং এর সাথে একটি কী আইডি যুক্ত আছে।

পরবর্তীতে সহজে কী-টি অ্যাক্সেস করার জন্য, আমরা এটি গুগল ক্লাউড স্টোরেজে সংরক্ষণ করব। ক্লাউড কনসোল থেকে, স্টোরেজ এবং তারপর ব্রাউজার নির্বাচন করুন।

Create Bucket বোতামে ক্লিক করুন

স্টোরেজ বাকেটের জন্য একটি নাম বেছে নিন (নামটি অবশ্যই গুগল ক্লাউডের সর্বত্র অনন্য হতে হবে) এবং Create বোতামে ক্লিক করুন।

স্বয়ংক্রিয়ভাবে ডাউনলোড হওয়া সিকিউরিটি কী-টি খুঁজে বের করুন এবং সেটিকে স্টোরেজ বাকেটে ড্র্যাগ/ড্রপ অথবা আপলোড করুন।

কী আপলোড সম্পন্ন হলে, এটি ক্লাউড স্টোরেজ ব্রাউজারে দেখা যাবে।

পরবর্তীতে ব্যবহারের জন্য স্টোরেজ বাকেটের নাম এবং সিকিউরিটি কী ফাইলের নাম লিখে রাখুন।
৫. একটি ক্লাউড ফাংশন তৈরি করুন
ক্লাউড কম্পিউটিং সম্পূর্ণ সার্ভারবিহীন কম্পিউটিং মডেলকে সম্ভব করেছে, যেখানে যেকোনো স্থান থেকে উদ্ভূত ইভেন্টের প্রতিক্রিয়ায় চাহিদা অনুযায়ী লজিক চালু করা যায়। এই ল্যাবের জন্য, ওয়েদার টপিকে যখনই কোনো মেসেজ পাবলিশ করা হবে, একটি ক্লাউড ফাংশন চালু হবে, মেসেজটি পড়বে এবং তারপর সেটি BigQuery-তে স্টোর করবে।
ক্লাউড কনসোল থেকে ক্লাউড ফাংশন নির্বাচন করুন।

যদি আপনি কোনো API বার্তা দেখতে পান, তাহলে Enable API বোতামে ক্লিক করুন।

Create ফাংশন বোতামে ক্লিক করুন

Name ফিল্ডে function-weatherPubSubToBQ টাইপ করুন। Trigger-এর জন্য Cloud Pub/Sub topic নির্বাচন করুন এবং Topic ড্রপডাউন থেকে weatherdata নির্বাচন করুন। সোর্স কোডের জন্য, inline editor নির্বাচন করুন। index.js ট্যাবে, শুরুতে যা আছে তার উপর নিম্নলিখিত কোডটি পেস্ট করুন। আপনার পরিবেশ অনুযায়ী projectId, datasetId এবং tableId-এর কনস্ট্যান্টগুলো পরিবর্তন করে নিতে ভুলবেন না।
/**
* Background Cloud Function to be triggered by PubSub.
*
* @param {object} event The Cloud Functions event.
* @param {function} callback The callback function.
*/
exports.subscribe = function (event, callback) {
const BigQuery = require('@google-cloud/bigquery');
const projectId = "myProject"; //Enter your project ID here
const datasetId = "myDataset"; //Enter your BigQuery dataset name here
const tableId = "myTable"; //Enter your BigQuery table name here -- make sure it is setup correctly
const PubSubMessage = event.data;
// Incoming data is in JSON format
const incomingData = PubSubMessage.data ? Buffer.from(PubSubMessage.data, 'base64').toString() : "{'sensorID':'na','timecollected':'1/1/1970 00:00:00','zipcode':'00000','latitude':'0.0','longitude':'0.0','temperature':'-273','humidity':'-1','dewpoint':'-273','pressure':'0'}";
const jsonData = JSON.parse(incomingData);
var rows = [jsonData];
console.log(`Uploading data: ${JSON.stringify(rows)}`);
// Instantiates a client
const bigquery = BigQuery({
projectId: projectId
});
// Inserts data into a table
bigquery
.dataset(datasetId)
.table(tableId)
.insert(rows)
.then((foundErrors) => {
rows.forEach((row) => console.log('Inserted: ', row));
if (foundErrors && foundErrors.insertErrors != undefined) {
foundErrors.forEach((err) => {
console.log('Error: ', err);
})
}
})
.catch((err) => {
console.error('ERROR:', err);
});
// [END bigquery_insert_stream]
callback();
};
package.json ট্যাবে থাকা প্লেসহোল্ডার কোডের উপর নিম্নলিখিত কোডটি পেস্ট করুন।
{
"name": "function-weatherPubSubToBQ",
"version": "0.0.1",
"private": true,
"license": "Apache-2.0",
"author": "Google Inc.",
"dependencies": {
"@google-cloud/bigquery": "^0.9.6"
}
}
যদি কার্যকর করার ফাংশনটি 'HelloWorld' সেট করা থাকে, তবে এটিকে 'subscribe'-এ পরিবর্তন করুন। Create বোতামে ক্লিক করুন।

আপনার ফাংশনটি ডেপ্লয় হয়েছে তা দেখাতে প্রায় ২ মিনিট সময় লাগবে।

অভিনন্দন! আপনি এইমাত্র ফাংশনের মাধ্যমে পাব/সাবকে বিগকোয়েরির সাথে সংযুক্ত করেছেন।
৬. আইওটি হার্ডওয়্যার সেটআপ করুন (ঐচ্ছিক)
রাস্পবেরি পাই এবং সেন্সর একত্রিত করুন
যদি ৭টির বেশি পিন থাকে, তবে হেডারটি কেটে শুধু ৭টি পিন রাখুন। হেডারের পিনগুলো সেন্সর বোর্ডে সোল্ডার করে দিন।

সাবধানে র্যাস্পবেরি পাই-তে হ্যামার হেডার পিনগুলো ইনস্টল করুন ।

এখানে দেওয়া ধাপগুলো অনুসরণ করে এসডি কার্ডটি ফরম্যাট করুন এবং NOOBS (New Out Of Box Software) ইনস্টলারটি ইনস্টল করুন। এসডি কার্ডটি রাস্পবেরি পাই-তে প্রবেশ করান এবং রাস্পবেরি পাই-টিকে এর কেসের মধ্যে রাখুন।

নিচের ডায়াগ্রাম অনুযায়ী ব্রেডবোর্ডের তার ব্যবহার করে সেন্সরটিকে রাস্পবেরি পাই-এর সাথে সংযুক্ত করুন।

রাস্পবেরি পাই পিন | সেন্সর সংযোগ |
পিন ১ (৩.৩ ভোল্ট) | ভিন |
পিন 3 (CPIO2) | এসডিআই |
পিন 5 (GPIO3) | এসসিকে |
পিন ৯ (গ্রাউন্ড) | জিএনডি |

মনিটর (মিনি-এইচডিএমআই কানেক্টর ব্যবহার করে), কিবোর্ড/মাউস (ইউএসবি হাবের সাহায্যে) এবং সবশেষে পাওয়ার অ্যাডাপ্টার সংযুক্ত করুন।
রাস্পবেরি পাই এবং সেন্সর কনফিগার করুন
রাস্পবেরি পাই বুট আপ হওয়া শেষ হলে, পছন্দের অপারেটিং সিস্টেম হিসেবে রাসবিয়ান নির্বাচন করুন, আপনার পছন্দের ভাষাটি সঠিক আছে কিনা তা নিশ্চিত করুন এবং তারপরে ইনস্টল-এ ক্লিক করুন (উইন্ডোর উপরের বাম অংশে থাকা হার্ড ড্রাইভ আইকন)।

স্ক্রিনের উপরের ডানদিকে থাকা ওয়াইফাই আইকনে ক্লিক করুন এবং একটি নেটওয়ার্ক বেছে নিন। যদি এটি একটি সুরক্ষিত নেটওয়ার্ক হয়, তাহলে পাসওয়ার্ড (প্রি-শেয়ার্ড কী) দিন।

স্ক্রিনের উপরের বাম দিকের রাস্পবেরি আইকনে ক্লিক করুন, প্রেফারেন্সেস (Preferences) এবং তারপর রাস্পবেরি পাই কনফিগারেশন (Raspberry Pi Configuration) নির্বাচন করুন। ইন্টারফেসেস (Interfaces) ট্যাব থেকে, I2C সক্রিয় করুন। লোকালাইজেশন (Localisation) ট্যাব থেকে, লোকেল (Locale) এবং টাইমজোন (Timezone) সেট করুন। টাইমজোন সেট করার পর, রাস্পবেরি পাইকে রিবুট হতে দিন।

রিবুট সম্পন্ন হওয়ার পর, টার্মিনাল উইন্ডো খোলার জন্য টার্মিনাল আইকনে ক্লিক করুন।

সেন্সরটি সঠিকভাবে সংযুক্ত হয়েছে কিনা তা নিশ্চিত করতে নিম্নলিখিত কমান্ডটি টাইপ করুন।
sudo i2cdetect -y 1
ফলাফলটি দেখতে এইরকম হবে – নিশ্চিত করবেন যেন এটি ৭৭ হয়।

গুগল ক্লাউড এসডিকে ইনস্টল করুন
গুগল ক্লাউড প্ল্যাটফর্মের টুলগুলো ব্যবহার করার জন্য রাস্পবেরি পাই-তে গুগল ক্লাউড এসডিকে ইনস্টল করতে হবে। এই এসডিকে-তে গুগল ক্লাউড প্ল্যাটফর্ম পরিচালনা ও ব্যবহারের জন্য প্রয়োজনীয় টুলগুলো অন্তর্ভুক্ত রয়েছে এবং এটি বিভিন্ন প্রোগ্রামিং ভাষার জন্য উপলব্ধ।
যদি রাস্পবেরি পাই-তে আগে থেকে কোনো টার্মিনাল উইন্ডো খোলা না থাকে, তবে সেটি খুলুন এবং একটি এনভায়রনমেন্ট ভ্যারিয়েবল সেট করুন যা এসডিকে ভার্সনটিকে রাস্পবেরি পাই-এর অপারেটিং সিস্টেমের সাথে মিলিয়ে দেবে।
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
এখন গুগল ক্লাউড এসডিকে প্যাকেজগুলো যেখানে সংরক্ষিত আছে সেই অবস্থানটি যোগ করুন, যাতে এসডিকে ইনস্টল করতে বলা হলে ইনস্টলেশন টুলগুলো জানতে পারে কোথায় খুঁজতে হবে।
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
গুগলের প্যাকেজ রিপোজিটরি থেকে পাবলিক কী যোগ করুন, যাতে ইনস্টলেশনের সময় রাস্পবেরি পাই নিরাপত্তা যাচাই করে বিষয়বস্তুটিকে বিশ্বাসযোগ্য বলে মনে করতে পারে।
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
রাস্পবেরি পাই-এর সমস্ত সফ্টওয়্যার হালনাগাদ আছে কিনা তা নিশ্চিত করুন এবং কোর গুগল ক্লাউড এসডিকে ইনস্টল করুন।
sudo apt-get update && sudo apt-get install google-cloud-sdk
"আপনি কি চালিয়ে যেতে চান?" জিজ্ঞাসা করা হলে, এন্টার চাপুন।
পাইথন প্যাকেজ ম্যানেজার ব্যবহার করে টেন্ডো (tendo) প্যাকেজটি ইনস্টল করুন। কোনো স্ক্রিপ্ট একাধিকবার চলছে কিনা তা পরীক্ষা করতে এবং ওয়েদার স্ক্রিপ্টে এর প্রয়োগের জন্য এই প্যাকেজটি ইনস্টল করা হয়।
pip install tendo
পাইথন প্যাকেজ ম্যানেজার ব্যবহার করে নিশ্চিত করুন যে পাইথনের জন্য Google Cloud PubSub এবং OAuth2 প্যাকেজগুলি ইনস্টল এবং হালনাগাদ করা আছে।
sudo pip install --upgrade google-cloud-pubsub
sudo pip install --upgrade oauth2client
গুগল ক্লাউড এসডিকে শুরু করুন
এই SDK-টি গুগল ক্লাউডে দূরবর্তী ও প্রমাণীকৃত অ্যাক্সেসের সুযোগ দেয়। এই কোডল্যাবের জন্য, এটি স্টোরেজ বাকেট অ্যাক্সেস করতে ব্যবহার করা হবে, যাতে সিকিউরিটি কী-টি সহজেই রাস্পবেরি পাই-তে ডাউনলোড করা যায়।
রাস্পবেরি পাই-এর কমান্ড লাইন থেকে, প্রবেশ করান
gcloud init --console-only
যখন "আপনি কি লগ ইন করতে চান (Y/n)?" লেখাটি আসবে, তখন এন্টার চাপুন।
যখন আপনি "আপনার ব্রাউজারে নিম্নলিখিত লিঙ্কে যান:" লেখাটির পরে https://accounts.google.com/o/oauth ?... দিয়ে শুরু হওয়া একটি দীর্ঘ URL দেখতে পাবেন, তখন মাউস দিয়ে URL-টির উপর যান, রাইট ক্লিক করুন এবং "Copy URL" নির্বাচন করুন। এরপর ওয়েব ব্রাউজারটি খুলুন (স্ক্রিনের উপরের বাম কোণে থাকা নীল গ্লোব আইকন), অ্যাড্রেস বারের উপর রাইট ক্লিক করুন এবং "Paste" এ ক্লিক করুন।
সাইন ইন স্ক্রিনটি দেখতে পেলে, আপনার গুগল ক্লাউড অ্যাকাউন্টের সাথে যুক্ত ইমেল ঠিকানাটি লিখে এন্টার চাপুন। এরপর আপনার পাসওয়ার্ড দিয়ে নেক্সট বাটনে ক্লিক করুন।
আপনাকে জানানো হবে যে গুগল ক্লাউড এসডিকে আপনার গুগল অ্যাকাউন্ট অ্যাক্সেস করতে চাইছে। Allow বাটনে ক্লিক করুন।
আপনাকে ভেরিফিকেশন কোডটি দেখানো হবে। মাউস দিয়ে কোডটি হাইলাইট করুন, তারপর রাইট ক্লিক করে কপি (Copy) অপশনটি বেছে নিন। টার্মিনাল উইন্ডোতে ফিরে আসুন, নিশ্চিত করুন যে কার্সরটি "Enter verification code:" এর ডানদিকে আছে, মাউস দিয়ে রাইট ক্লিক করে পেস্ট (Paste) অপশনটি বেছে নিন। এন্টার বাটনটি চাপুন।
যদি আপনাকে "ব্যবহার করার জন্য ক্লাউড প্রজেক্ট বেছে নিন:" জিজ্ঞাসা করা হয়, তাহলে এই কোডল্যাবের জন্য আপনি যে প্রজেক্টটি ব্যবহার করছেন তার সাথে সম্পর্কিত নম্বরটি প্রবেশ করান এবং তারপর এন্টার চাপুন।
যদি আপনাকে কম্পিউট এপিআই (compute API) চালু করতে বলা হয়, তবে তা চালু করতে এন্টার (Enter) বোতামটি চাপুন। এরপর, আপনাকে গুগল কম্পিউট ইঞ্জিন (Google Compute Engine) সেটিংস কনফিগার করতে বলা হবে। এন্টার চাপুন। আপনার সামনে সম্ভাব্য অঞ্চল/জোনের একটি তালিকা আসবে – আপনার কাছাকাছি একটি বেছে নিন, সংশ্লিষ্ট নম্বরটি লিখুন এবং এন্টার চাপুন।
কিছুক্ষণের মধ্যেই আপনি কিছু অতিরিক্ত তথ্য দেখতে পাবেন। গুগল ক্লাউড এসডিকে এখন কনফিগার করা হয়েছে। আপনি ওয়েব ব্রাউজার উইন্ডোটি বন্ধ করে দিতে পারেন, কারণ এরপরে আপনার এটির আর প্রয়োজন হবে না।
সেন্সর সফটওয়্যার এবং ওয়েদার স্ক্রিপ্ট ইনস্টল করুন।
রাস্পবেরি পাই-এর কমান্ড লাইন থেকে ইনপুট/আউটপুট পিনগুলো থেকে তথ্য পড়ার জন্য প্রয়োজনীয় প্যাকেজগুলো ক্লোন করুন।
git clone https://github.com/adafruit/Adafruit_Python_GPIO
ডাউনলোড করা প্যাকেজগুলি ইনস্টল করুন
cd Adafruit_Python_GPIO
sudo python setup.py install
cd ..
ওয়েদার সেন্সরটি সক্রিয় করে এমন প্রজেক্ট কোডটি ক্লোন করুন।
git clone https://github.com/googlecodelabs/iot-data-pipeline
সেন্সর ড্রাইভারটি ডাউনলোড করা বাকি সফটওয়্যারগুলোর সাথে একই ডিরেক্টরিতে কপি করুন।
cd iot-data-pipeline/third_party/Adafruit_BME280
mv Adafruit_BME280.py ../..
cd ../..
টাইপ করে স্ক্রিপ্টটি সম্পাদনা করুন...
nano checkWeather.py
প্রজেক্টটি পরিবর্তন করে আপনার প্রজেক্ট আইডি এবং টপিকটি পরিবর্তন করে আপনার পাব/সাব টপিকের নাম দিন (এই কোডল্যাবের 'গেটিং সেট-আপ' এবং 'ক্রিয়েট এ পাব/সাব টপিক' সেকশনগুলোতে এগুলো উল্লেখ করা হয়েছে)।
sensorID, sensorZipCode, sensorLat এবং sensorLong-এর মান আপনার পছন্দমতো যেকোনো মানে পরিবর্তন করুন। কোনো নির্দিষ্ট স্থান বা ঠিকানার অক্ষাংশ ও দ্রাঘিমাংশের মান এখানে পাওয়া যাবে।
প্রয়োজনীয় পরিবর্তনগুলো করা হয়ে গেলে, ন্যানো এডিটর থেকে বের হওয়ার জন্য Ctrl-X চাপুন। নিশ্চিত করতে Y চাপুন।
# constants - change to fit your project and location
SEND_INTERVAL = 10 #seconds
sensor = BME280(t_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8)
credentials = GoogleCredentials.get_application_default()
project="myProject" #change this to your Google Cloud project id
topic = "myTopic" #change this to your Google Cloud PubSub topic name
sensorID = "s-Googleplex"
sensorZipCode = "94043"
sensorLat = "37.421655"
sensorLong = "-122.085637"
নিরাপত্তা কী ইনস্টল করুন
‘সিকিউর পাবলিশিং টু এ টপিক’ সেকশন থেকে সিকিউরিটি কী-টি রাস্পবেরি পাই-তে কপি করুন।
যদি আপনি SFTP বা SCP ব্যবহার করে আপনার লোকাল মেশিন থেকে আপনার রাস্পবেরি পাই-তে (অর্থাৎ /home/pi ডিরেক্টরিতে) সিকিউরিটি কী-টি কপি করে থাকেন, তাহলে আপনি পরবর্তী ধাপটি বাদ দিয়ে সরাসরি পাথ এক্সপোর্ট করার ধাপে চলে যেতে পারেন।
আপনি যদি সিকিউরিটি কী-টি কোনো স্টোরেজ বাকেটে রেখে থাকেন, তাহলে আপনাকে স্টোরেজ বাকেটটির নাম এবং ফাইলটির নাম মনে রাখতে হবে। সিকিউরিটি কী-টি কপি করার জন্য gsutil কমান্ডটি ব্যবহার করুন। এই কমান্ডটি গুগল স্টোরেজ অ্যাক্সেস করতে পারে (এজন্যই এর নাম gsutil এবং ফাইলটির পাথ gs:// দিয়ে শুরু হয়)। নিচের কমান্ডটি পরিবর্তন করে আপনার বাকেটের নাম এবং ফাইলের নাম যোগ করে নিন।
gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .
আপনি একটি বার্তা দেখতে পাবেন যে ফাইলটি কপি হচ্ছে এবং তারপরে অপারেশনটি সম্পন্ন হয়েছে।
রাস্পবেরি পাই-এর কমান্ড লাইন থেকে সিকিউরিটি কী-এর পাথ এক্সপোর্ট করুন (ফাইলের নামটি আপনার ফাইলের নামের সাথে মিলিয়ে পরিবর্তন করুন)।
export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json
আপনার কাছে এখন একটি সম্পূর্ণ IoT আবহাওয়া সেন্সর রয়েছে যা গুগল ক্লাউডে ডেটা প্রেরণ করার জন্য প্রস্তুত।
৭. ডেটা পাইপলাইন চালু করুন।
Compute API সক্রিয় করার প্রয়োজন হতে পারে।
রাস্পবেরি পাই থেকে ডেটা স্ট্রিমিং
আপনি যদি একটি রাস্পবেরি পাই আইওটি ওয়েদার সেন্সর তৈরি করে থাকেন, তাহলে আবহাওয়ার ডেটা পড়ার এবং গুগল ক্লাউড পাব/সাব-এ পাঠানোর স্ক্রিপ্টটি চালু করুন। আপনি যদি /home/pi/iot-data-pipeline ডিরেক্টরিতে না থাকেন, তাহলে প্রথমে সেখানে যান।
cd /home/pi/iot-data-pipeline
আবহাওয়ার স্ক্রিপ্ট শুরু করুন
python checkWeather.py
আপনার প্রতি মিনিটে টার্মিনাল উইন্ডোতে আবহাওয়ার ডেটার ফলাফল প্রদর্শিত হতে দেখা উচিত। ডেটা প্রবাহ শুরু হলে, আপনি পরবর্তী বিভাগে (ডেটা প্রবাহ হচ্ছে কিনা তা পরীক্ষা করুন) যেতে পারেন।
সিমুলেটেড ডেটা স্ট্রিমিং
আপনি যদি IoT ওয়েদার সেন্সরটি তৈরি না করে থাকেন, তাহলে গুগল ক্লাউড স্টোরেজে সংরক্ষিত একটি পাবলিক ডেটাসেট ব্যবহার করে এবং সেটিকে বিদ্যমান পাব/সাব টপিকে ফিড করার মাধ্যমে ডেটা স্ট্রিমিং সিমুলেট করতে পারেন। ক্লাউড স্টোরেজ থেকে ডেটা পড়া এবং পাব/সাব-এ প্রকাশ করার জন্য গুগল ডেটাফ্লো এবং গুগল-প্রদত্ত একটি টেমপ্লেট ব্যবহার করা হবে।
প্রক্রিয়াটির অংশ হিসেবে ডেটাফ্লো-র একটি অস্থায়ী স্টোরেজ লোকেশন প্রয়োজন হবে, তাই এই উদ্দেশ্যে একটি স্টোরেজ বাকেট তৈরি করা যাক।
ক্লাউড কনসোল থেকে স্টোরেজ এবং তারপর ব্রাউজার নির্বাচন করুন।

Create Bucket বোতামে ক্লিক করুন

স্টোরেজ বাকেটটির জন্য একটি নাম বেছে নিন (মনে রাখবেন, নামটি অবশ্যই গুগল ক্লাউডের সর্বত্র বিশ্বব্যাপী অনন্য হতে হবে) এবং ক্রিয়েট (Create) বোতামে ক্লিক করুন। এই স্টোরেজ বাকেটটির নামটি মনে রাখবেন, কারণ শীঘ্রই এটির প্রয়োজন হবে।

ক্লাউড কনসোল থেকে ডেটাফ্লো নির্বাচন করুন।

স্ক্রিনের উপরের অংশে থাকা 'Create Job from Template'-এ ক্লিক করুন।

নিম্নলিখিত বিষয়গুলির প্রতি মনোযোগ দিয়ে, নিচে দেখানো অনুযায়ী চাকরির বিবরণ পূরণ করুন:
- dataflow-gcs-to-pubsub নামে একটি জব নেম লিখুন।
- আপনার প্রজেক্টটি যেখানে হোস্ট করা আছে, সেই অনুযায়ী আপনার অঞ্চল স্বয়ংক্রিয়ভাবে নির্বাচিত হবে এবং এটি পরিবর্তন করার প্রয়োজন হবে না।
- GCS টেক্সট টু ক্লাউড পাব/সাব-এর একটি ক্লাউড ডেটাফ্লো টেমপ্লেট নির্বাচন করুন।
- ইনপুট ক্লাউড স্টোরেজ ফাইল(গুলি) এর জন্য, gs://codelab-iot-data-pipeline-sampleweatherdata/*.json লিখুন (এটি একটি পাবলিক ডেটাসেট)।
- আউটপুট পাব/সাব টপিকের জন্য, সঠিক পাথটি আপনার প্রোজেক্টের নামের উপর নির্ভর করবে এবং দেখতে অনেকটা "projects/yourProjectName/topics/weatherdata"-এর মতো হবে।
- আপনার এইমাত্র তৈরি করা গুগল ক্লাউড স্টোরেজ বাকেটের নামের সাথে 'tmp' ফাইলনেম প্রিফিক্স যোগ করে টেম্পোরারি লোকেশন সেট করুন। এটি দেখতে 'gs://myStorageBucketName/tmp'-এর মতো হবে।
যখন আপনি সমস্ত তথ্য পূরণ করবেন (নীচে দেখুন), তখন 'Run job' বোতামে ক্লিক করুন।

ডেটাফ্লো জবটি চলতে শুরু করবে।

ডেটাফ্লো কাজটি সম্পন্ন হতে আনুমানিক এক মিনিট সময় লাগা উচিত।

৮. ডেটা প্রবাহ ঠিক আছে কিনা তা যাচাই করুন।
ক্লাউড ফাংশন লগ
নিশ্চিত করুন যে ক্লাউড ফাংশনটি পাব/সাব দ্বারা ট্রিগার করা হচ্ছে।
gcloud beta functions logs read function-weatherPubSubToBQ
লগগুলিতে দেখা যাবে যে ফাংশনটি এক্সিকিউট হচ্ছে, ডেটা গ্রহণ করা হচ্ছে এবং তা BigQuery-তে ইনসার্ট করা হচ্ছে।

বিগকোয়েরি ডেটা
BigQuery টেবিলে ডেটা আসছে কিনা তা নিশ্চিত করতে পরীক্ষা করুন। ক্লাউড কনসোল থেকে BigQuery (bigquery.cloud.google.com)-তে যান।

প্রজেক্টের নামের নিচে (উইন্ডোর বাম দিকে), ডেটাসেট (weatherData)-এ ক্লিক করুন, তারপর টেবিল (weatherDataTable)-এ ক্লিক করুন এবং সবশেষে কোয়েরি টেবিল বাটনে ক্লিক করুন।

SQL স্টেটমেন্টে একটি অ্যাস্টারিস্ক (*) যোগ করুন যাতে এটি নীচের ছবির মতো SELECT * FROM... দেখায় এবং তারপরে RUN QUERY বোতামে ক্লিক করুন।

অনুরোধ করা হলে, রান কোয়েরি বাটনে ক্লিক করুন।

যদি ফলাফল দেখা যায়, তাহলে ডেটা সঠিকভাবে প্রবাহিত হচ্ছে।

ডেটা প্রবাহ শুরু হয়ে গেলে, আপনি এখন একটি অ্যানালিটিক্স ড্যাশবোর্ড তৈরি করার জন্য প্রস্তুত।
৯. একটি ডেটা স্টুডিও ড্যাশবোর্ড তৈরি করুন
গুগল ডেটা স্টুডিও আপনার ডেটাকে তথ্যপূর্ণ ড্যাশবোর্ড এবং রিপোর্টে রূপান্তরিত করে, যা সহজে পড়া যায়, সহজে শেয়ার করা যায় এবং সম্পূর্ণরূপে কাস্টমাইজযোগ্য।
আপনার ওয়েব ব্রাউজার থেকে https://datastudio.google.com-এ যান।

"Start a new report"-এর নিচে, Blank-এ ক্লিক করুন এবং তারপরে Get Started বোতামে ক্লিক করুন।

শর্তাবলী গ্রহণ করতে চেকবক্সে ক্লিক করুন, 'Next' বোতামে ক্লিক করুন, আপনি কোন ইমেলগুলি পেতে আগ্রহী তা নির্বাচন করুন এবং 'Done' বোতামে ক্লিক করুন। আবারও, 'Start a new report'-এর অধীনে, 'Blank'-এ ক্লিক করুন।

নতুন ডেটা উৎস তৈরি করুন বোতামে ক্লিক করুন

BigQuery-তে ক্লিক করুন, তারপর Authorize বোতামে ক্লিক করুন এবং এরপর Data Studio-র সাথে ব্যবহার করতে ইচ্ছুক Google অ্যাকাউন্টটি বেছে নিন (এটি সেই একই অ্যাকাউন্ট হতে হবে যা আপনি কোডল্যাবের জন্য ব্যবহার করে আসছেন)।

Allow বাটনে ক্লিক করুন

আপনার প্রজেক্টের নাম, ডেটাসেট ও টেবিল নির্বাচন করুন। তারপর কানেক্ট বাটনে ক্লিক করুন।

নিচে দেখানো অনুযায়ী টাইপ ফিল্ডগুলো পরিবর্তন করুন (timecollected এবং sensorID ছাড়া বাকি সবকিছু সংখ্যা হবে)। লক্ষ্য করুন যে timecollected-কে Date Hour হিসেবে সেট করা হয়েছে (শুধু Date হিসেবে নয়)। নিচে দেখানো অনুযায়ী অ্যাগ্রিগেশন ফিল্ডগুলো পরিবর্তন করুন (dewpoint, temperature, humidity এবং pressure গড় হবে এবং বাকি সবকিছু "None" হিসেবে সেট করতে হবে)। Create Report বাটনে ক্লিক করুন।

রিপোর্টে যোগ করুন বোতামে ক্লিক করে নিশ্চিত করুন

আপনার গুগল অ্যাকাউন্ট নির্বাচন করতে বলা হলে, তা করুন এবং তারপর ডেটা স্টুডিওকে গুগল ড্রাইভে রিপোর্টগুলো সংরক্ষণ করার অনুমতি দিতে Allow বোতামে ক্লিক করুন।

আপনার ড্যাশবোর্ড তৈরি করার জন্য একটি খালি ক্যানভাস দেওয়া হবে। আইকনগুলোর উপরের সারি থেকে টাইম সিরিজ (Time Series) বেছে নিন।

সাদা কাগজের উপরের বাম কোণে একটি আয়তক্ষেত্র আঁকুন। এটি কাগজের মোট জায়গার প্রায় এক-চতুর্থাংশ জুড়ে থাকবে।

উইন্ডোর ডানদিকে, স্টাইল ট্যাবটি নির্বাচন করুন। মিসিং ডেটা (Missing Data) 'লাইন টু জিরো' (Line To Zero) থেকে 'লাইন ব্রেকস' (Line Breaks)-এ পরিবর্তন করুন। লেফট ওয়াই-অ্যাক্সিস (Left Y-Axis) বিভাগে, অ্যাক্সিস মিন (Axis Min) থেকে ০ মুছে দিয়ে এটিকে (অটো) তে পরিবর্তন করুন।

শীটে থাকা গ্রাফটিতে ক্লিক করে সেটি ৩ বার কপি/পেস্ট (Ctrl-C/Ctrl-V) করুন। গ্রাফগুলো এমনভাবে সাজান যাতে প্রতিটির জন্য লেআউটের এক-চতুর্থাংশ জায়গা থাকে।

প্রতিটি গ্রাফে ক্লিক করুন এবং 'Time Series Properties and Data' বিভাগের অধীনে বিদ্যমান মেট্রিকটিতে (শিশিরবিন্দু) ক্লিক করে প্রদর্শনের জন্য একটি ভিন্ন মেট্রিক নির্বাচন করুন, যতক্ষণ না চারটি আবহাওয়ার পাঠের (শিশিরবিন্দু, তাপমাত্রা, আর্দ্রতা এবং চাপ) প্রত্যেকটির নিজস্ব গ্রাফ তৈরি হয়।


এখন আপনার একটি প্রাথমিক ড্যাশবোর্ড আছে!

১০. অভিনন্দন!
আপনি একটি সম্পূর্ণ ডেটা পাইপলাইন তৈরি করেছেন! এটি করতে গিয়ে, আপনি শিখেছেন কীভাবে গুগল পাব/সাব (Google Pub/Sub) ব্যবহার করতে হয়, কীভাবে একটি সার্ভারলেস ফাংশন (serverless Function) ডেপ্লয় (deploy) করতে হয়, কীভাবে বিগকোয়েরি (BigQuery) কাজে লাগাতে হয় এবং ডেটা স্টুডিও (Data Studio) ব্যবহার করে কীভাবে একটি অ্যানালিটিক্স ড্যাশবোর্ড (analytics dashboard) তৈরি করতে হয়। এছাড়াও, আপনি দেখেছেন কীভাবে গুগল ক্লাউড প্ল্যাটফর্মে (Google Cloud Platform) নিরাপদে ডেটা আনার জন্য গুগল ক্লাউড এসডিকে (Google Cloud SDK) ব্যবহার করা যায়। পরিশেষে, এখন আপনার একটি গুরুত্বপূর্ণ আর্কিটেকচারাল প্যাটার্নের (architectural pattern) উপর হাতে-কলমে অভিজ্ঞতা হয়েছে, যা অ্যাভেইলেবিলিটি (availability) বজায় রেখে বিপুল পরিমাণ ডেটা সামলাতে পারে।

পরিষ্কার-পরিচ্ছন্নতা
আবহাওয়ার ডেটা এবং অ্যানালিটিক্স পাইপলাইন নিয়ে পরীক্ষা-নিরীক্ষা শেষ হয়ে গেলে, আপনি চলমান রিসোর্সগুলো সরিয়ে ফেলতে পারেন।
আপনি যদি IoT সেন্সরটি তৈরি করে থাকেন, তবে সেটি বন্ধ করুন। স্ক্রিপ্টটি বন্ধ করতে টার্মিনাল উইন্ডোতে Ctrl-C চাপুন এবং তারপরে রাস্পবেরি পাই বন্ধ করতে নিম্নলিখিতটি টাইপ করুন।
shutdown -h now
ক্লাউড ফাংশন-এ যান, function-weatherPubSubToBQ-এর পাশের চেকবক্সে ক্লিক করুন এবং তারপর ডিলিট-এ ক্লিক করুন।

Pub/Sub-এ যান, Topic-এ ক্লিক করুন, weatherdata টপিকের পাশের চেকবক্সে ক্লিক করুন এবং তারপর Delete-এ ক্লিক করুন।

স্টোরেজে যান, স্টোরেজ বাকেটগুলোর পাশের চেকবক্সগুলোতে ক্লিক করুন এবং তারপর ডিলিট-এ ক্লিক করুন।

bigquery.cloud.google.com-এ যান, আপনার প্রোজেক্টের নামের পাশে থাকা নিচের দিকে মুখ করা তীরচিহ্নে ক্লিক করুন, weatherData ডেটাসেটের ডানদিকে থাকা নিচের দিকে মুখ করা তীরচিহ্নে ক্লিক করুন এবং তারপরে 'Delete dataset'-এ ক্লিক করুন।

অনুরোধ করা হলে, ডেটা মুছে ফেলার প্রক্রিয়াটি সম্পন্ন করতে ডেটাসেট আইডি (weatherData) টাইপ করুন।
