۱. مرور کلی/مقدمه
در حالی که برنامههای چندلایه متشکل از وب، سرور برنامه و پایگاه داده، پایه و اساس توسعه وب هستند و نقطه شروع بسیاری از وبسایتها محسوب میشوند، موفقیت اغلب چالشهایی را در زمینه مقیاسپذیری، ادغام و چابکی به همراه خواهد داشت. به عنوان مثال، چگونه میتوان دادهها را به صورت بلادرنگ مدیریت کرد و چگونه میتوان آنها را در چندین سیستم کلیدی تجاری توزیع کرد؟ این مسائل همراه با تقاضاهای برنامههای کاربردی در مقیاس اینترنت، نیاز به یک سیستم پیامرسانی توزیعشده را برانگیخت و الگوی معماری استفاده از خطوط لوله داده را برای دستیابی به سیستمهای بلادرنگ و انعطافپذیر ایجاد کرد. در نتیجه، درک نحوه انتشار دادههای بلادرنگ در یک سیستم پیامرسانی توزیعشده و سپس نحوه ساخت یک خط لوله داده، مهارتهای حیاتی برای توسعهدهنده و معمار است.
آنچه خواهید ساخت
در این آزمایشگاه کد، شما قرار است یک خط لوله داده آب و هوا بسازید که با یک دستگاه اینترنت اشیا (IoT) شروع میشود، از یک صف پیام برای دریافت و تحویل دادهها استفاده میکند، از یک تابع بدون سرور برای انتقال دادهها به یک انبار داده استفاده میکند و سپس یک داشبورد ایجاد میکند که اطلاعات را نمایش میدهد. یک Raspberry Pi با یک حسگر آب و هوا برای دستگاه IoT استفاده خواهد شد و چندین جزء از پلتفرم Google Cloud خط لوله داده را تشکیل میدهند. ساخت Raspberry Pi، اگرچه مفید است، اما بخش اختیاری این آزمایشگاه کد است و دادههای آب و هوای جاری را میتوان با یک اسکریپت جایگزین کرد.

پس از تکمیل مراحل این کدلاگ، شما یک خط لوله داده جریانی خواهید داشت که داشبوردی را تغذیه میکند که دما، رطوبت، نقطه شبنم و فشار هوا را نمایش میدهد.

آنچه یاد خواهید گرفت
- نحوه استفاده از گوگل پاب/ساب
- نحوه استقرار یک تابع Google Cloud
- چگونه از گوگل بیگکوئری (Google BigQuery) استفاده کنیم؟
- نحوه ایجاد داشبورد با استفاده از Google Data Studio
- علاوه بر این، اگر حسگر اینترنت اشیا را بسازید، یاد خواهید گرفت که چگونه از Google Cloud SDK استفاده کنید و چگونه تماسهای دسترسی از راه دور به پلتفرم Google Cloud را ایمن کنید.
آنچه نیاز دارید
- یک حساب کاربری پلتفرم ابری گوگل. کاربران جدید پلتفرم ابری گوگل واجد شرایط دریافت یک دوره آزمایشی رایگان ۳۰۰ دلاری هستند.
اگر میخواهید به جای استفاده از دادههای نمونه و یک اسکریپت، بخش حسگر اینترنت اشیا این آزمایشگاه کد را خودتان بسازید، به موارد زیر نیز نیاز خواهید داشت ( که میتوانید آنها را به صورت یک کیت کامل یا به صورت قطعات جداگانه از اینجا سفارش دهید )...
- رزبری پای زیرو دبلیو به همراه منبع تغذیه، کارت حافظه SD و کیف
- کارت خوان USB
- هاب USB (برای اتصال کیبورد و ماوس به تنها پورت USB روی رزبری پای)
- سیمهای بردبورد ماده به ماده
- هدرهای چکشی GPIO
- سنسور BME280
- هویه با لحیم
علاوه بر این، دسترسی به مانیتور کامپیوتر یا تلویزیون با ورودی HDMI، کابل HDMI، صفحه کلید و ماوس الزامی است.
۲. راهاندازی
تنظیم محیط خودتنظیم
اگر از قبل حساب گوگل (Gmail یا G Suite) ندارید، باید یکی ایجاد کنید . صرف نظر از اینکه از قبل حساب گوگل دارید یا نه، حتماً از نسخه آزمایشی رایگان ۳۰۰ دلاری استفاده کنید!
وارد کنسول پلتفرم ابری گوگل ( console.cloud.google.com ) شوید. میتوانید از پروژه پیشفرض ("اولین پروژه من") برای این آزمایشگاه استفاده کنید یا میتوانید یک پروژه جدید ایجاد کنید. اگر میخواهید یک پروژه جدید ایجاد کنید، میتوانید از صفحه مدیریت منابع استفاده کنید. شناسه پروژه باید یک نام منحصر به فرد در تمام پروژههای ابری گوگل باشد (نامی که در زیر نشان داده شده است قبلاً گرفته شده و برای شما کار نمیکند). شناسه پروژه خود را یادداشت کنید (یعنی شناسه پروژه شما _____ خواهد بود) زیرا بعداً به آن نیاز خواهید داشت.


اجرای این آزمایشگاه کد نباید بیش از چند دلار هزینه داشته باشد، اما اگر تصمیم به استفاده از منابع بیشتر بگیرید یا اگر آنها را در حال اجرا رها کنید، میتواند بیشتر شود. حتماً بخش پاکسازی را در انتهای آزمایشگاه کد بررسی کنید.
۳. یک جدول BigQuery ایجاد کنید
بیگکوئری یک انبار داده سازمانی کمهزینه، بسیار مقیاسپذیر و بدون سرور است و گزینهای ایدهآل برای ذخیره دادههایی است که از دستگاههای اینترنت اشیا پخش میشوند و در عین حال به یک داشبورد تحلیلی اجازه میدهد تا اطلاعات را جستجو کند.
بیایید یک جدول ایجاد کنیم که تمام دادههای آب و هوای اینترنت اشیا را در خود جای دهد. BigQuery را از کنسول Cloud انتخاب کنید. این کار BigQuery را در یک پنجره جدید باز میکند (پنجره اصلی را نبندید زیرا باید دوباره به آن دسترسی پیدا کنید).

روی نماد فلش رو به پایین کنار نام پروژه خود کلیک کنید و سپس "ایجاد مجموعه داده جدید" را انتخاب کنید.

برای Dataset عبارت "weatherData" را وارد کنید، مکانی را که میخواهید در آن ذخیره شود انتخاب کنید و روی "OK" کلیک کنید.

برای ایجاد جدول جدید، روی علامت "+" در کنار مجموعه دادههای خود کلیک کنید.

برای «دادههای منبع» ، «ایجاد جدول خالی» را انتخاب کنید. برای «نام جدول مقصد»، «آبوهوادادهها» را وارد کنید. در زیر «طرحواره» ، روی دکمه «افزودن فیلد» کلیک کنید تا در مجموع ۹ فیلد وجود داشته باشد. فیلدها را مطابق شکل زیر پر کنید و مطمئن شوید که نوع مناسب را برای هر فیلد نیز انتخاب میکنید. وقتی همه چیز کامل شد، روی دکمه «ایجاد جدول» کلیک کنید.

باید نتیجه ای شبیه به این ببینید...

اکنون یک انبار داده برای دریافت دادههای آب و هوایی خود راهاندازی کردهاید.
۴. یک موضوع عمومی/فرعی ایجاد کنید
Cloud Pub/Sub یک پایه ساده، قابل اعتماد و مقیاسپذیر برای تجزیه و تحلیل جریان و سیستمهای محاسباتی مبتنی بر رویداد است. در نتیجه، برای مدیریت پیامهای ورودی IoT و سپس اجازه دادن به سیستمهای پاییندستی برای پردازش آنها، ایدهآل است.
اگر هنوز در پنجره BigQuery هستید، به Cloud Console برگردید. اگر Cloud Console را بستهاید، به https://console.cloud.google.com بروید.
از کنسول ابری، گزینه Pub/Sub و سپس Topics را انتخاب کنید.

اگر پیام فعال کردن API را مشاهده کردید، روی دکمه فعال کردن API کلیک کنید.

روی دکمه ایجاد موضوع کلیک کنید

«weatherdata» را به عنوان نام موضوع وارد کنید و روی «ایجاد» کلیک کنید.

باید تاپیک جدید ایجاد شده رو ببینید

اکنون یک تاپیک Pub/Sub دارید که هم پیامهای IoT را در آن منتشر میکند و هم به سایر فرآیندها اجازه میدهد به آن پیامها دسترسی داشته باشند.
انتشار ایمن در موضوع
اگر قصد دارید پیامهایی را از منابعی خارج از کنسول ابری گوگل خود (مثلاً یک حسگر اینترنت اشیا) در تاپیک Pub/Sub منتشر کنید، لازم است دسترسی را با استفاده از یک حساب کاربری سرویس، محکمتر کنترل کنید و با ایجاد یک گواهی اعتماد، امنیت اتصال را تضمین کنید.
از کنسول ابری، IAM & Admin و سپس Service accounts را انتخاب کنید.

روی دکمه ایجاد حساب کاربری سرویس کلیک کنید

در منوی کشویی نقش، نقش ناشر Pub/Sub را انتخاب کنید.

نام حساب سرویس (iotWeatherPublisher) را تایپ کنید، کادر انتخاب Furnish a new private key را علامت بزنید، مطمئن شوید که نوع کلید (Key type) روی JSON تنظیم شده است و روی "ایجاد" (Create) کلیک کنید.

کلید امنیتی به طور خودکار دانلود خواهد شد. فقط یک کلید وجود دارد، بنابراین مهم است که آن را گم نکنید. روی بستن کلیک کنید.

باید ببینید که یک حساب کاربری سرویس ایجاد شده است و یک شناسه کلید (Key ID) مرتبط با آن وجود دارد.

برای اینکه بعداً به راحتی به کلید دسترسی پیدا کنیم، آن را در فضای ابری گوگل ذخیره خواهیم کرد. از کنسول ابری، فضای ذخیرهسازی و سپس مرورگر را انتخاب کنید.

روی دکمه ایجاد سطل کلیک کنید

یک نام برای مخزن ذخیرهسازی انتخاب کنید (باید نامی باشد که در کل فضای ابری گوگل منحصر به فرد باشد) و روی دکمه ایجاد کلیک کنید.

کلید امنیتی که به طور خودکار دانلود شده است را پیدا کنید و آن را بکشید/رها کنید یا در سطل ذخیرهسازی آپلود کنید.

پس از اتمام آپلود کلید، باید در مرورگر Cloud Storage ظاهر شود.

نام مخزن ذخیرهسازی و نام فایل کلید امنیتی را برای بعد یادداشت کنید.
۵. یک تابع ابری ایجاد کنید
محاسبات ابری مدلهای محاسباتی کاملاً بدون سرور را امکانپذیر کرده است که در آنها میتوان منطق را در پاسخ به رویدادهایی که از هر جایی سرچشمه میگیرند، بنا به تقاضا اجرا کرد. برای این آزمایشگاه، یک تابع ابری هر بار که پیامی در موضوع آب و هوا منتشر میشود، شروع به کار میکند، پیام را میخواند و سپس آن را در BigQuery ذخیره میکند.
از کنسول ابری، توابع ابری را انتخاب کنید

اگر پیام API را مشاهده کردید، روی دکمه فعال کردن API کلیک کنید.

روی دکمه ایجاد تابع کلیک کنید

در فیلد نام، عبارت function-weatherPubSubToBQ را تایپ کنید. برای Trigger، موضوع Cloud Pub/Sub و در منوی کشویی Topic، گزینه weatherdata را انتخاب کنید. برای کد منبع، ویرایشگر درونخطی را انتخاب کنید. در تب 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، کد زیر را روی کد placeholder موجود در آنجا قرار دهید.
{
"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 کلیک کنید.

حدود ۲ دقیقه طول میکشد تا تابع شما نشان دهد که مستقر شده است.

تبریک میگویم! شما همین الان Pub/Sub را از طریق Functions به BigQuery متصل کردید.
۶. راهاندازی سختافزار اینترنت اشیا (اختیاری)
مونتاژ رزبری پای و سنسور
اگر بیش از ۷ پین وجود دارد، هدر را کوتاه کنید تا فقط ۷ پین داشته باشد. پینهای هدر را به برد سنسور لحیم کنید.

پینهای هدر چکشی را با دقت در رزبری پای نصب کنید .

کارت SD را فرمت کنید و با دنبال کردن مراحل اینجا ، نصبکننده NOOBS (نرمافزار آماده نصب جدید) را نصب کنید. کارت SD را داخل رزبری پای قرار دهید و رزبری پای را در جعبهاش قرار دهید.

طبق نمودار زیر، از سیمهای برد بورد برای اتصال سنسور به رزبری پای استفاده کنید.

پین رزبری پای | اتصال سنسور |
پین ۱ (۳.۳ ولت) | شماره شناسایی خودرو (VIN) |
پین ۳ (CPIO2) | اس دی آی |
پین ۵ (GPIO3) | اس سی کی |
پین ۹ (اتصال به زمین) | زمین |

مانیتور (با استفاده از کانکتور mini-HDMI)، کیبورد/ماوس (با هاب USB) و در نهایت آداپتور برق را وصل کنید.
پیکربندی رزبری پای و سنسور
پس از اینکه رزبری پای بوت شد، برای سیستم عامل مورد نظر، Raspbian را انتخاب کنید، مطمئن شوید که زبان مورد نظر شما صحیح است و سپس روی Install (آیکون هارد دیسک در قسمت بالا سمت چپ پنجره) کلیک کنید.

روی آیکون وایفای (بالا سمت راست صفحه) کلیک کنید و یک شبکه را انتخاب کنید. اگر شبکه امن است، رمز عبور (کلید از پیش اشتراکگذاری شده) را وارد کنید.

روی آیکون تمشک (بالا سمت چپ صفحه) کلیک کنید، Preferences و سپس Raspberry Pi Configuration را انتخاب کنید. از تب Interfaces، I2C را فعال کنید. از تب Localisation، Locale و Timezone را تنظیم کنید. پس از تنظیم Timezone، اجازه دهید Raspberry Pi دوباره راهاندازی شود.

پس از اتمام راهاندازی مجدد، روی آیکون ترمینال کلیک کنید تا پنجره ترمینال باز شود.

برای اطمینان از اتصال صحیح سنسور، دستور زیر را تایپ کنید.
sudo i2cdetect -y 1
نتیجه باید به این شکل باشد - مطمئن شوید که عدد ۷۷ را نشان میدهد.

نصب SDK گوگل کلود
برای استفاده از ابزارهای پلتفرم گوگل کلود، باید Google Cloud SDK روی رزبری پای نصب شود. این SDK شامل ابزارهای مورد نیاز برای مدیریت و استفاده از پلتفرم گوگل کلود است و برای چندین زبان برنامهنویسی در دسترس است.
اگر پنجره ترمینال روی رزبری پای باز نیست، آن را باز کنید و یک متغیر محیطی تنظیم کنید که نسخه SDK را با سیستم عامل روی رزبری پای مطابقت دهد.
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
اکنون محل ذخیره بستههای Google Cloud SDK را اضافه کنید تا ابزارهای نصب بدانند که هنگام درخواست نصب SDK، کجا را جستجو کنند.
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 -
مطمئن شوید که تمام نرمافزارهای روی رزبری پای بهروز هستند و SDK اصلی گوگل کلود را نصب کنید.
sudo apt-get update && sudo apt-get install google-cloud-sdk
وقتی از شما پرسیده شد «آیا میخواهید ادامه دهید؟»، Enter را فشار دهید.
بسته tendo را با استفاده از مدیر بسته پایتون نصب کنید. این بسته برای بررسی اینکه آیا یک اسکریپت بیش از یک بار اجرا میشود یا خیر و برای اعمال آن بر روی اسکریپت آب و هوا نصب میشود، استفاده میشود.
pip install tendo
مطمئن شوید که بستههای Google Cloud PubSub و OAuth2 برای پایتون نصب و با استفاده از مدیر بسته پایتون بهروزرسانی شدهاند.
sudo pip install --upgrade google-cloud-pubsub
sudo pip install --upgrade oauth2client
مقداردهی اولیه Google Cloud SDK
این SDK امکان دسترسی از راه دور و احراز هویت شده به فضای ابری گوگل را فراهم میکند. در این آزمایشگاه کد، از آن برای دسترسی به فضای ذخیرهسازی استفاده خواهد شد تا کلید امنیتی به راحتی در رزبری پای دانلود شود.
از خط فرمان روی رزبری پای، دستور زیر را وارد کنید:
gcloud init --console-only
وقتی از شما پرسیده شد «آیا میخواهید وارد سیستم شوید (بله/خیر)؟»، کلید Enter را فشار دهید.
وقتی عبارت «به لینک زیر در مرورگر خود بروید:» و به دنبال آن یک آدرس اینترنتی طولانی که با https://accounts.google.com/o/oauth ?... شروع میشود را مشاهده کردید، با ماوس روی آدرس اینترنتی بروید، کلیک راست کنید و «کپی آدرس اینترنتی» را انتخاب کنید. سپس مرورگر وب (آیکون آبی کره زمین در گوشه سمت چپ بالای صفحه) را باز کنید، روی نوار آدرس کلیک راست کرده و روی «چسباندن» کلیک کنید.
پس از مشاهده صفحه ورود، آدرس ایمیل مرتبط با حساب Google Cloud خود را وارد کرده و Enter را بزنید. سپس رمز عبور خود را وارد کرده و روی دکمه Next کلیک کنید.
از شما پرسیده میشود که آیا Google Cloud SDK میخواهد به حساب گوگل شما دسترسی داشته باشد یا خیر. روی دکمهی Allow کلیک کنید.
کد تأیید به شما نمایش داده میشود. با استفاده از ماوس، آن را هایلایت کنید، سپس کلیک راست کرده و گزینه کپی را انتخاب کنید. به پنجره ترمینال برگردید، مطمئن شوید که مکاننما در سمت راست «کد تأیید را وارد کنید:» قرار دارد، با ماوس کلیک راست کرده و سپس گزینه چسباندن (Paste) را انتخاب کنید. دکمه Enter را فشار دهید.
اگر از شما خواسته شد که «پروژه ابری را برای استفاده انتخاب کنید:»، عدد مربوط به نام پروژهای را که برای این آزمایشگاه کد استفاده کردهاید وارد کنید و سپس Enter را بزنید.
اگر از شما خواسته شد که رابط برنامهنویسی کاربردی محاسباتی (compute API) را فعال کنید، دکمه Enter را فشار دهید تا فعال شود. پس از آن، از شما خواسته میشود تنظیمات موتور محاسباتی گوگل (Google Compute Engine) را پیکربندی کنید. دکمه Enter را بزنید. لیستی از مناطق/نواحی بالقوه به شما ارائه میشود - یکی از مناطق نزدیک به خود را انتخاب کنید، شماره مربوطه را وارد کنید و Enter را فشار دهید.
کمی بعد، اطلاعات بیشتری نمایش داده خواهد شد. Google Cloud SDK اکنون پیکربندی شده است. میتوانید پنجره مرورگر وب را ببندید زیرا در ادامه به آن نیازی نخواهید داشت.
نرمافزار حسگر و اسکریپت آب و هوا را نصب کنید
از خط فرمان روی رزبری پای، بستههای مورد نیاز برای خواندن اطلاعات از پینهای ورودی/خروجی را کپی کنید.
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
پروژه را به شناسه پروژه خود و موضوع را به نام موضوع Pub/Sub خود تغییر دهید (این موارد در بخشهای راهاندازی و ایجاد موضوع Pub/Sub این آزمایشگاه کد ذکر شده است).
مقادیر 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 برای کپی کردن کلید امنیتی از دستگاه محلی خود به Raspberry Pi (در دایرکتوری /home/pi) استفاده کردهاید، میتوانید مرحله بعدی را رد کنید و به مرحلهی export کردن مسیر بروید.
اگر کلید امنیتی را در یک مخزن ذخیرهسازی قرار دادهاید، باید نام مخزن ذخیرهسازی و نام فایل را به خاطر بسپارید. از دستور gsutil برای کپی کردن کلید امنیتی استفاده کنید. این دستور میتواند به Google Storage دسترسی پیدا کند (چرا نام آن gsutil است و چرا مسیر فایل با gs:// شروع میشود). حتماً دستور زیر را به نام مخزن و نام فایل خود تغییر دهید.
gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .
شما باید پیامی مبنی بر کپی شدن فایل و سپس اتمام عملیات را مشاهده کنید.
از خط فرمان روی رزبری پای، مسیری را به کلید امنیتی صادر کنید (نام فایل را مطابق با آنچه دارید تغییر دهید)
export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json
اکنون یک حسگر آب و هوای IoT تکمیل شده دارید که آماده انتقال دادهها به Google Cloud است.
۷. شروع خط لوله داده
ممکن است لازم باشد Compute API را فعال کنید
پخش داده از رزبری پای
اگر یک حسگر آب و هوای Raspberry Pi IoT ساختهاید، اسکریپتی را اجرا کنید که دادههای آب و هوا را میخواند و آنها را به Google Cloud Pub/Sub ارسال میکند. اگر در دایرکتوری /home/pi/iot-data-pipeline نیستید، ابتدا به آنجا بروید.
cd /home/pi/iot-data-pipeline
اسکریپت آب و هوا را شروع کنید
python checkWeather.py
شما باید ببینید که پنجره ترمینال هر دقیقه نتایج دادههای آب و هوا را نمایش میدهد. با جریان دادهها، میتوانید به بخش بعدی بروید (بررسی کنید که دادهها در حال جریان باشند).
جریان داده شبیهسازی شده
اگر حسگر آب و هوای اینترنت اشیا را نساختهاید، میتوانید با استفاده از یک مجموعه داده عمومی که در Google Cloud Storage ذخیره شده است و تغذیه آن به تاپیک Pub/Sub موجود، جریان دادهها را شبیهسازی کنید. از Google Dataflow به همراه یک الگوی ارائه شده توسط گوگل برای خواندن از Cloud Storage و انتشار به Pub/Sub استفاده خواهد شد.
به عنوان بخشی از این فرآیند، Dataflow به یک مکان ذخیرهسازی موقت نیاز دارد، بنابراین بیایید برای این منظور یک مخزن ذخیرهسازی ایجاد کنیم.
از کنسول ابری، گزینه ذخیرهسازی و سپس مرورگر را انتخاب کنید.

روی دکمه ایجاد سطل کلیک کنید

یک نام برای مخزن ذخیرهسازی انتخاب کنید (به یاد داشته باشید، باید نامی باشد که در کل فضای ابری گوگل منحصر به فرد باشد) و روی دکمه ایجاد کلیک کنید. نام این مخزن ذخیرهسازی را به خاطر بسپارید زیرا به زودی به آن نیاز خواهیم داشت.

از کنسول ابری، Dataflow را انتخاب کنید.

روی «ایجاد شغل از الگو» (قسمت بالای صفحه) کلیک کنید

جزئیات شغل را مطابق شکل زیر پر کنید و به موارد زیر توجه کنید:
- نام وظیفه dataflow-gcs-to-pubsub را وارد کنید
- منطقه شما باید به طور خودکار بر اساس محل میزبانی پروژه شما انتخاب شود و نیازی به تغییر آن نیست.
- یک الگوی Cloud Dataflow از GCS Text to Cloud Pub/Sub انتخاب کنید
- برای فایل(های) ذخیرهسازی ابری ورودی، gs://codelab-iot-data-pipeline-sampleweatherdata/*.json را وارد کنید (این یک مجموعه داده عمومی است)
- برای Output Pub/Sub Topic، مسیر دقیق به نام پروژه شما بستگی دارد و چیزی شبیه به "projects/yourProjectName/topics/weatherdata" خواهد بود.
- نام Temporary Location را روی نام باکت ذخیرهسازی ابری گوگل که ایجاد کردهاید، به همراه پیشوند "tmp" تنظیم کنید. این باید چیزی شبیه به "gs://myStorageBucketName/tmp" باشد.
وقتی تمام اطلاعات را پر کردید (به زیر مراجعه کنید)، روی دکمه اجرای کار کلیک کنید

کار Dataflow باید شروع به اجرا کند.

تقریباً یک دقیقه طول میکشد تا کار Dataflow تکمیل شود.

۸. بررسی کنید که دادهها در جریان هستند
گزارشهای عملکرد ابری
مطمئن شوید که تابع ابری توسط Pub/Sub فعال میشود.
gcloud beta functions logs read function-weatherPubSubToBQ
گزارشها باید نشان دهند که تابع در حال اجرا است، دادهها دریافت میشوند و در BigQuery درج میشوند.

دادههای بیگکوئری
بررسی کنید که دادهها به جدول BigQuery وارد میشوند. از کنسول ابری، به BigQuery (bigquery.cloud.google.com) بروید.

زیر نام پروژه (در سمت چپ پنجره)، روی مجموعه داده (weatherData) کلیک کنید، سپس روی جدول (weatherDataTable) و در نهایت روی دکمه جدول پرس و جو (Query Table) کلیک کنید.

یک ستاره به عبارت SQL اضافه کنید تا SELECT * FROM... را همانطور که در زیر نشان داده شده است، بخواند و سپس روی دکمه RUN QUERY کلیک کنید.

در صورت درخواست، روی دکمه اجرای پرسوجو کلیک کنید

اگر نتایج را مشاهده کردید، یعنی دادهها به درستی جریان دارند.

با جریان دادهها، اکنون آمادهی ساخت یک داشبورد تحلیلی هستید.
۹. یک داشبورد Data Studio ایجاد کنید
گوگل دیتا استودیو دادههای شما را به داشبوردها و گزارشهای آموزندهای تبدیل میکند که خواندن، اشتراکگذاری و قابلیت شخصیسازی بالایی دارند.
از مرورگر وب خود، به آدرس https://datastudio.google.com بروید

در قسمت «شروع یک گزارش جدید»، روی خالی کلیک کنید و سپس روی دکمه شروع به کار کلیک کنید.

برای پذیرش شرایط، روی کادر تأیید کلیک کنید، روی دکمهی «بعدی» کلیک کنید، ایمیلهایی را که مایل به دریافت آنها هستید انتخاب کنید و روی دکمهی «انجام شد» کلیک کنید. یک بار دیگر، در قسمت «شروع یک گزارش جدید»، روی «خالی» کلیک کنید

روی دکمه ایجاد منبع داده جدید کلیک کنید

روی BigQuery کلیک کنید، سپس روی دکمه Authorize کلیک کنید و سپس حساب گوگلی را که میخواهید با Data Studio استفاده کنید انتخاب کنید (باید همان حسابی باشد که برای codelab استفاده کردهاید).

روی دکمه اجازه دادن کلیک کنید

نام پروژه، مجموعه داده و جدول خود را انتخاب کنید. سپس روی دکمه اتصال (Connect) کلیک کنید.

فیلدهای نوع را مطابق شکل زیر تغییر دهید (همه چیز باید عدد باشد به جز timecollected و sensorID). توجه داشته باشید که timecollected روی Date Hour تنظیم شده است (و نه فقط Date). فیلدهای Aggregation را مطابق شکل زیر تغییر دهید (نقطه شبنم، دما، رطوبت و فشار باید میانگین باشند و سایر موارد باید روی "None" تنظیم شوند). روی دکمه Create Report کلیک کنید.

با کلیک روی دکمه افزودن به گزارش، تأیید کنید

اگر از شما خواسته شد حساب گوگل خود را انتخاب کنید، این کار را انجام دهید و سپس روی دکمهی «اجازه دادن» کلیک کنید تا Data Studio گزارشهای خود را در Google Drive ذخیره کند.

یک صفحه خالی برای ایجاد داشبورد به شما نمایش داده میشود. از ردیف بالای آیکونها، گزینه Time Series را انتخاب کنید.

یک مستطیل در گوشه بالا سمت چپ صفحه خالی بکشید. این مستطیل باید حدود ¼ از کل صفحه خالی را اشغال کند.

در سمت راست پنجره، تب Style را انتخاب کنید. گزینه Missing Data را از "Line To Zero" به "Line Breaks" تغییر دهید. در بخش Left Y-Axis، عدد 0 را از Axis Min حذف کنید تا به (Auto) تغییر کند.

روی نمودار روی برگه کلیک کنید و آن را ۳ بار کپی/پیست کنید (Ctrl-C/Ctrl-V). نمودارها را طوری تراز کنید که هر کدام ¼ طرح را داشته باشند.

روی هر نمودار کلیک کنید و در بخش «ویژگیها و دادههای سری زمانی» (Time Series Properties and Data)، روی معیار موجود (نقطه شبنم) کلیک کنید، معیار دیگری را برای نمایش انتخاب کنید تا هر چهار داده هواشناسی (نقطه شبنم، دما، رطوبت و فشار) نمودار مخصوص به خود را داشته باشند.


حالا شما یک داشبورد ساده دارید!

۱۰. تبریک میگویم!
شما یک خط لوله داده کامل ایجاد کردهاید! با انجام این کار، یاد گرفتهاید که چگونه از Google Pub/Sub استفاده کنید، چگونه یک تابع بدون سرور را مستقر کنید، چگونه از BigQuery بهره ببرید و چگونه با استفاده از Data Studio یک داشبورد تحلیلی ایجاد کنید. علاوه بر این، دیدهاید که چگونه میتوان از Google Cloud SDK به طور ایمن برای ورود دادهها به پلتفرم Google Cloud استفاده کرد. در نهایت، اکنون تجربه عملی با یک الگوی معماری مهم دارید که میتواند حجم بالایی را مدیریت کند و در عین حال در دسترس بودن را حفظ کند.

پاکسازی
پس از اتمام آزمایش با دادههای آب و هوا و خط لوله تحلیلی، میتوانید منابع در حال اجرا را حذف کنید.
اگر سنسور اینترنت اشیا را ساختهاید، آن را خاموش کنید. در پنجره ترمینال، Ctrl-C را بزنید تا اسکریپت متوقف شود و سپس دستور زیر را برای خاموش کردن رزبری پای تایپ کنید.
shutdown -h now
به Cloud Functions بروید، روی کادر کنار function-weatherPubSubToBQ کلیک کنید و سپس روی Delete کلیک کنید.

به Pub/Sub بروید، روی Topic کلیک کنید، روی کادر کنار موضوع weatherdata کلیک کنید و سپس روی Delete کلیک کنید.

به Storage بروید، روی کادرهای کنار Storage Buckets کلیک کنید و سپس روی Delete کلیک کنید.

به bigquery.cloud.google.com بروید، روی فلش رو به پایین کنار نام پروژه خود کلیک کنید، روی فلش رو به پایین سمت راست مجموعه داده weatherData کلیک کنید و سپس روی حذف مجموعه داده کلیک کنید.

وقتی از شما خواسته شد، شناسه مجموعه داده (weatherData) را تایپ کنید تا حذف دادهها تکمیل شود.
