1. بررسی اجمالی/مقدمه
در حالی که برنامه های کاربردی چند لایه متشکل از وب، سرور برنامه و پایگاه داده پایه ای برای توسعه وب هستند و نقطه شروع بسیاری از وب سایت ها هستند، موفقیت اغلب چالش هایی را در مورد مقیاس پذیری، یکپارچگی و چابکی به همراه خواهد داشت. به عنوان مثال، چگونه می توان داده ها را در زمان واقعی مدیریت کرد و چگونه می توان آنها را در چندین سیستم تجاری کلیدی توزیع کرد؟ این مسائل همراه با تقاضاهای برنامه های کاربردی در مقیاس اینترنت نیاز به یک سیستم پیام رسانی توزیع شده را برانگیخت و باعث ایجاد الگوی معماری استفاده از خطوط لوله داده برای دستیابی به سیستم های انعطاف پذیر و بلادرنگ شد. در نتیجه، درک چگونگی انتشار دادههای بلادرنگ در یک سیستم پیامرسانی توزیعشده و سپس نحوه ایجاد خط لوله داده، مهارتهای بسیار مهمی برای توسعهدهنده و معمار است.
آنچه خواهید ساخت
در این نرم افزار کد، شما قصد دارید یک خط لوله داده آب و هوا بسازید که با یک دستگاه اینترنت اشیا (IoT) شروع می شود، از یک صف پیام برای دریافت و تحویل داده ها استفاده می کند، از یک عملکرد بدون سرور برای انتقال داده ها به انبار داده و سپس ایجاد استفاده می کند. داشبوردی که اطلاعات را نمایش می دهد. یک Raspberry Pi با سنسور آب و هوا برای دستگاه IoT استفاده خواهد شد و چندین مؤلفه پلتفرم Google Cloud خط لوله داده را تشکیل خواهند داد. ساخت Raspberry Pi، اگرچه مفید است، اما بخشی اختیاری از این Codelab است و دادههای جریان آب و هوا را میتوان با یک اسکریپت جایگزین کرد.
پس از تکمیل مراحل در این آزمایشگاه کد، یک خط لوله داده جریانی خواهید داشت که داشبوردی را تغذیه می کند که دما، رطوبت، نقطه شبنم و فشار هوا را نمایش می دهد.
چیزی که یاد خواهید گرفت
- نحوه استفاده از Google Pub/Sub
- نحوه استقرار یک تابع Google Cloud
- چگونه از Google BigQuery استفاده کنیم
- نحوه ایجاد داشبورد با استفاده از Google Data Studio
- علاوه بر این، اگر حسگر اینترنت اشیا را بسازید، نحوه استفاده از Google Cloud SDK و نحوه ایمن سازی تماس های دسترسی از راه دور به پلتفرم Google Cloud را نیز یاد خواهید گرفت.
آنچه شما نیاز دارید
- یک حساب Google Cloud Platform. کاربران جدید Google Cloud Platform واجد شرایط استفاده آزمایشی رایگان 300 دلاری هستند.
اگر میخواهید به جای استفاده از دادههای نمونه و یک اسکریپت، بخش حسگر اینترنت اشیاء این کد لبه را بسازید، به موارد زیر نیز نیاز دارید ( که میتوانید بهعنوان یک کیت کامل یا به صورت قطعات جداگانه در اینجا سفارش دهید )...
- Raspberry Pi Zero W با منبع تغذیه، کارت حافظه SD و کیس
- کارت خوان USB
- هاب USB (برای اتصال صفحه کلید و ماوس به تنها درگاه USB در Raspberry Pi)
- سیم های نان برد ماده به ماده
- GPIO Hammer Headers
- سنسور BME280
- لحیم کاری با لحیم کاری
علاوه بر این، دسترسی به مانیتور کامپیوتر یا تلویزیون با ورودی HDMI، کابل HDMI، صفحه کلید و ماوس در نظر گرفته شده است.
2. راه اندازی
تنظیم محیط خود به خود
اگر قبلاً یک حساب Google (Gmail یا G Suite) ندارید، باید یک حساب ایجاد کنید . صرف نظر از اینکه قبلاً یک حساب Google دارید یا خیر، مطمئن شوید که از مزایای آزمایشی رایگان 300 دلاری استفاده کنید!
به کنسول Google Cloud Platform ( consol.cloud.google.com ) وارد شوید. می توانید از پروژه پیش فرض ("پروژه اول من") برای این آزمایشگاه استفاده کنید یا می توانید یک پروژه جدید ایجاد کنید. اگر میخواهید پروژه جدیدی ایجاد کنید، میتوانید از صفحه مدیریت منابع استفاده کنید. شناسه پروژه باید یک نام منحصر به فرد در تمام پروژه های Google Cloud باشد (یکی که در زیر نشان داده شده است قبلاً گرفته شده است و برای شما کار نمی کند). شناسه پروژه خود را یادداشت کنید (یعنی شناسه پروژه شما _____ خواهد بود) زیرا بعداً مورد نیاز خواهد بود.
گذراندن این کد نباید بیش از چند دلار هزینه داشته باشد، اما اگر تصمیم به استفاده از منابع بیشتری داشته باشید یا آنها را در حال اجرا رها کنید، ممکن است بیشتر باشد. مطمئن شوید که از قسمت Cleanup در انتهای Codelab رفته اید.
3. یک جدول BigQuery ایجاد کنید
BigQuery یک انبار داده سازمانی بدون سرور، بسیار مقیاسپذیر و کم هزینه است و یک گزینه ایدهآل برای ذخیره دادههایی است که از دستگاههای اینترنت اشیا پخش میشوند و همچنین به داشبورد تحلیلی اجازه میدهد تا اطلاعات را جستجو کند.
بیایید جدولی ایجاد کنیم که تمام داده های آب و هوای اینترنت اشیا را در خود جای دهد. BigQuery را از کنسول Cloud انتخاب کنید. با این کار BigQuery در یک پنجره جدید باز می شود (پنجره اصلی را نبندید زیرا باید دوباره به آن دسترسی داشته باشید).
روی نماد فلش رو به پایین در کنار نام پروژه خود کلیک کنید و سپس "ایجاد مجموعه داده جدید" را انتخاب کنید.
"weatherData" را برای مجموعه داده وارد کنید، مکانی را انتخاب کنید که در آن ذخیره شود و روی "OK" کلیک کنید.
برای ایجاد جدول جدید، روی علامت "+" در کنار مجموعه داده خود کلیک کنید
برای منبع داده ، ایجاد جدول خالی را انتخاب کنید. برای نام جدول مقصد، weatherDataTable را وارد کنید. در زیر طرحواره ، روی دکمه افزودن فیلد کلیک کنید تا در مجموع 9 فیلد وجود داشته باشد. فیلدها را مطابق شکل زیر پر کنید و مطمئن شوید که نوع مناسب برای هر فیلد را نیز انتخاب کنید. وقتی همه چیز کامل شد، روی دکمه Create Table کلیک کنید.
شما باید چنین نتیجه ای را ببینید ...
اکنون یک انبار داده برای دریافت داده های آب و هوا دارید.
4. یک موضوع Pub/Sub ایجاد کنید
Cloud Pub/Sub یک پایه ساده، قابل اعتماد و مقیاس پذیر برای تجزیه و تحلیل جریان و سیستم های محاسباتی رویداد محور است. در نتیجه، برای مدیریت پیام های IoT دریافتی و سپس اجازه دادن به سیستم های پایین دستی برای پردازش آنها عالی است.
اگر هنوز در پنجره BigQuery هستید، به کنسول Cloud برگردید. اگر کنسول Cloud را بسته اید، به https://console.cloud.google.com بروید
از کنسول Cloud، Pub/Sub و سپس Topics را انتخاب کنید.
اگر اعلان Enable API را مشاهده کردید، روی دکمه Enable API کلیک کنید.
بر روی دکمه ایجاد موضوع کلیک کنید
"Weatherdata" را به عنوان نام موضوع وارد کنید و روی ایجاد کلیک کنید
شما باید موضوع جدید ایجاد شده را ببینید
اکنون یک موضوع Pub/Sub دارید تا هم پیامهای اینترنت اشیا را منتشر کنید و هم به فرآیندهای دیگر اجازه دسترسی به آن پیامها را بدهید.
انتشار امن موضوع
اگر قصد دارید پیامهایی را از منابع خارج از Google Cloud Console خود (به عنوان مثال یک حسگر اینترنت اشیا) به موضوع Pub/Sub منتشر کنید، لازم است دسترسی را با استفاده از حساب سرویس به شدت کنترل کنید و از امنیت اتصال با ایجاد اطمینان حاصل کنید. گواهی اعتماد
از Cloud Console، IAM & Admin و سپس Service accounts را انتخاب کنید
روی دکمه Create service account کلیک کنید
در منوی Role، نقش Pub/Sub Publisher را انتخاب کنید
نام حساب سرویس (iotWeatherPublisher) را تایپ کنید، کادر بررسی Furnish a new private key را علامت بزنید، مطمئن شوید که نوع Key روی JSON تنظیم شده است و روی «Create» کلیک کنید.
کلید امنیتی به طور خودکار دانلود می شود. تنها یک کلید وجود دارد، بنابراین مهم است که آن را گم نکنید. روی Close کلیک کنید.
باید ببینید که یک حساب سرویس ایجاد شده است و یک شناسه کلید مرتبط با آن وجود دارد.
برای اینکه بعداً به راحتی به کلید دسترسی پیدا کنید، آن را در Google Cloud Storage ذخیره می کنیم. از Cloud Console، Storage و سپس Browser را انتخاب کنید.
روی دکمه Create Bucket کلیک کنید
یک نام برای سطل ذخیره سازی انتخاب کنید (این باید نامی باشد که در سراسر Google Cloud منحصر به فرد باشد) و روی دکمه ایجاد کلیک کنید.
کلید امنیتی را که به طور خودکار دانلود شده است پیدا کنید و آن را بکشید/ رها کنید یا در سطل ذخیره سازی آپلود کنید
پس از تکمیل آپلود کلید، باید در مرورگر Cloud Storage ظاهر شود
نام سطل ذخیره سازی و نام فایل کلید امنیتی را برای بعد یادداشت کنید.
5. یک تابع ابری ایجاد کنید
رایانش ابری مدلهای محاسباتی کاملاً بدون سرور را امکانپذیر کرده است که در آنها منطق میتواند بر حسب تقاضا در پاسخ به رویدادهایی که از هر نقطه سرچشمه میگیرند، بچرخد. برای این آزمایشگاه، هر بار که پیامی برای موضوع آب و هوا منتشر می شود، یک تابع ابری شروع می شود، پیام را می خواند و سپس آن را در BigQuery ذخیره می کند.
از Cloud Console، Cloud Functions را انتخاب کنید
اگر پیام API را مشاهده کردید، روی دکمه Enable API کلیک کنید
روی دکمه Create function کلیک کنید
در قسمت Name تابع-weatherPubSubToBQ را تایپ کنید. برای Trigger، موضوع Cloud Pub/Sub را انتخاب کنید و در منوی کشویی Topic، داده های هواشناسی را انتخاب کنید. برای کد منبع، ویرایشگر درون خطی را انتخاب کنید. در تب index.js، کد زیر را روی آنچه برای شروع وجود دارد، قرار دهید. مطمئن شوید که ثابت های projectId، dataId و 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" تنظیم شده است، آن را به "اشتراک" تغییر دهید. روی دکمه Create کلیک کنید
حدود 2 دقیقه طول می کشد تا عملکرد شما نشان دهد که مستقر شده است
تبریک می گویم! شما فقط Pub/Sub را از طریق Functions به BigQuery متصل کردید.
6. راه اندازی سخت افزار اینترنت اشیا (اختیاری)
Raspberry Pi و سنسور را مونتاژ کنید
اگر بیش از 7 پین وجود دارد، هدر را فقط به 7 پین برش دهید. پین های هدر را به برد سنسور لحیم کنید.
پین های هدر چکش را با دقت در Raspberry Pi نصب کنید .
کارت SD را فرمت کنید و با دنبال کردن مراحل اینجا نصب کننده NOOBS (نرم افزار جدید خارج از جعبه) را نصب کنید. کارت SD را در Raspberry Pi قرار دهید و Raspberry Pi را در جعبه آن قرار دهید.
طبق نمودار زیر از سیم های برد برد برای اتصال سنسور به Raspberry Pi استفاده کنید.
پین رزبری پای | اتصال سنسور |
پین 1 (3.3 ولت) | VIN |
پین 3 (CPIO2) | SDI |
پین 5 (GPIO3) | SCK |
پین 9 (زمینی) | GND |
مانیتور (با استفاده از کانکتور mini-HDMI)، صفحه کلید/ماوس (با هاب USB) و در نهایت آداپتور برق را وصل کنید.
Raspberry Pi و سنسور را پیکربندی کنید
پس از اتمام بوت شدن Raspberry Pi، Raspbian را برای سیستم عامل مورد نظر انتخاب کنید، مطمئن شوید که زبان مورد نظر شما صحیح است و سپس بر روی Install (نماد هارد درایو در قسمت سمت چپ بالای پنجره) کلیک کنید.
روی نماد Wifi (بالا سمت راست صفحه) کلیک کنید و یک شبکه را انتخاب کنید. اگر یک شبکه ایمن است، رمز عبور (کلید از قبل مشترک) را وارد کنید.
روی نماد رزبری (بالای سمت چپ صفحه) کلیک کنید، گزینه Preferences و سپس Raspberry Pi Configuration را انتخاب کنید. از تب Interfaces، I2C را فعال کنید. از تب Localization، Locale و Timezone را تنظیم کنید. پس از تنظیم Timezone، اجازه راه اندازی مجدد Raspberry Pi را بدهید.
پس از اتمام راه اندازی مجدد، روی نماد ترمینال کلیک کنید تا یک پنجره ترمینال باز شود.
دستور زیر را وارد کنید تا مطمئن شوید که سنسور به درستی وصل شده است.
sudo i2cdetect -y 1
نتیجه باید به این شکل باشد - مطمئن شوید که 77 خوانده می شود.
Google Cloud SDK را نصب کنید
برای استفاده از ابزارها در پلتفرم Google Cloud، Google Cloud SDK باید روی Raspberry Pi نصب شود. SDK شامل ابزارهای مورد نیاز برای مدیریت و استفاده از Google Cloud Platform است و برای چندین زبان برنامه نویسی در دسترس است.
اگر از قبل باز نشده است، یک پنجره ترمینال را در Raspberry Pi باز کنید و یک متغیر محیطی تنظیم کنید که نسخه SDK را با سیستم عامل Raspberry Pi مطابقت دهد.
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
کلید عمومی را از مخزن بسته Google اضافه کنید تا Raspberry Pi امنیت را تأیید کند و در حین نصب به محتوا اعتماد کند.
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
اطمینان حاصل کنید که همه نرم افزارهای Raspberry Pi به روز هستند و هسته Google Cloud SDK را نصب کنید.
sudo apt-get update && sudo apt-get install google-cloud-sdk
وقتی از شما خواسته شد «آیا میخواهید ادامه دهید؟»، Enter را فشار دهید.
بسته تندو را با استفاده از مدیریت بسته پایتون نصب کنید. این بسته برای بررسی اینکه آیا یک اسکریپت بیش از یک بار اجرا می شود و برای کاربرد آن در اسکریپت آب و هوا در حال نصب است استفاده می شود.
pip install tendo
مطمئن شوید که بستههای Google Cloud PubSub و OAuth2 برای Python با استفاده از مدیریت بسته Python نصب و بهروز هستند.
sudo pip install --upgrade google-cloud-pubsub
sudo pip install --upgrade oauth2client
Google Cloud SDK را راهاندازی کنید
SDK امکان دسترسی از راه دور و احراز هویت به Google Cloud را می دهد. برای این کد لبه، از آن برای دسترسی به سطل ذخیره سازی استفاده می شود تا کلید امنیتی به راحتی در Raspberry Pi دانلود شود.
از خط فرمان روی Raspberry Pi وارد شوید
gcloud init --console-only
هنگامی که از شما خواسته شد "آیا می خواهید وارد شوید (Y/n)؟"، Enter را فشار دهید.
وقتی «رفتن به پیوند زیر در مرورگر خود:» را میبینید و به دنبال آن یک URL طولانی که با https://accounts.google.com/o/oauth ?... شروع میشود، با ماوس روی URL حرکت دهید، کلیک راست کنید. و "Copy URL" را انتخاب کنید. سپس مرورگر وب را باز کنید (آیکون کره آبی در گوشه سمت چپ بالای صفحه)، روی نوار آدرس کلیک راست کرده و روی «Paste» کلیک کنید.
هنگامی که صفحه ورود به سیستم را مشاهده کردید، آدرس ایمیل خود را که با حساب Google Cloud شما مرتبط است وارد کنید و Enter را بزنید. سپس رمز عبور خود را وارد کرده و بر روی دکمه Next کلیک کنید.
از شما خواسته می شود که Google Cloud SDK می خواهد به حساب Google شما دسترسی پیدا کند. روی دکمه Allow کلیک کنید.
کد تایید به شما نمایش داده می شود. با استفاده از ماوس، آن را برجسته کنید، سپس راست کلیک کرده و گزینه Copy را انتخاب کنید. به پنجره ترمینال برگردید، مطمئن شوید که مکان نما در سمت راست "Enter verification code:" باشد، با ماوس کلیک راست کرده و سپس Paste را انتخاب کنید. دکمه Enter را فشار دهید.
اگر از شما خواسته شد که "Pick cloud project to use:" را انتخاب کنید، شماره مربوط به نام پروژه ای را که برای این Codelab استفاده کرده اید وارد کنید و سپس Enter را فشار دهید.
اگر از شما خواسته شد که API محاسبه را فعال کنید، دکمه Enter را فشار دهید تا فعال شود. پس از آن، از شما خواسته می شود تنظیمات موتور محاسباتی گوگل را پیکربندی کنید. Enter را بزنید. فهرستی از مناطق/منطقههای احتمالی به شما نمایش داده میشود – یکی را که نزدیک به خود است انتخاب کنید، شماره مربوطه را وارد کنید و Enter را فشار دهید.
در یک لحظه، برخی از اطلاعات اضافی را مشاهده خواهید کرد. Google Cloud SDK اکنون پیکربندی شده است. شما می توانید پنجره مرورگر وب را ببندید زیرا در آینده به آن نیاز نخواهید داشت.
نرم افزار سنسور و اسکریپت آب و هوا را نصب کنید
از خط فرمان در Raspberry Pi، بسته های مورد نیاز برای خواندن اطلاعات از پین های ورودی/خروجی را کلون کنید.
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 خود تغییر دهید (این موارد در بخش Getting Set-up and Create a 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"
کلید امنیتی را نصب کنید
کلید امنیتی (از بخش «انتشار امن در یک موضوع») را در Raspberry Pi کپی کنید.
اگر از SFTP یا SCP برای کپی کردن کلید امنیتی از دستگاه محلی خود در Raspberry Pi خود (در پوشه /home/pi) استفاده کرده اید، می توانید مرحله بعدی را رد کرده و به سمت پایین به صادرات مسیر بروید.
اگر کلید امنیتی را در یک سطل ذخیره سازی قرار داده اید، باید نام سطل ذخیره سازی و نام فایل را به خاطر بسپارید. از دستور gsutil برای کپی کردن کلید امنیتی استفاده کنید. این دستور می تواند به Google Storage دسترسی داشته باشد (چرا gsutil نامگذاری شده است و چرا مسیر فایل با gs:// شروع می شود). حتماً دستور زیر را تغییر دهید تا نام سطل و نام فایل شما باشد.
gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .
باید پیامی مبنی بر اینکه فایل در حال کپی شدن است و سپس عملیات تکمیل شده است را مشاهده کنید.
از خط فرمان در Raspberry Pi، یک مسیر به کلید امنیتی صادر کنید (نام فایل را تغییر دهید تا مطابق با آنچه دارید)
export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json
اکنون یک سنسور آب و هوای اینترنت اشیا تکمیل شده دارید که آماده انتقال داده ها به Google Cloud است.
7. خط لوله داده را شروع کنید
شاید لازم باشد Compute API را فعال کنید
جریان داده از Raspberry Pi
اگر یک سنسور آب و هوای 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 به همراه یک الگوی ارائه شده توسط Google برای خواندن از Cloud Storage و انتشار در Pub/Sub استفاده خواهد شد.
به عنوان بخشی از فرآیند، Dataflow به یک مکان ذخیره سازی موقت نیاز دارد، بنابراین بیایید یک سطل ذخیره سازی برای این منظور ایجاد کنیم.
از Cloud Console، Storage و سپس Browser را انتخاب کنید.
روی دکمه Create Bucket کلیک کنید
یک نام برای سطل ذخیره سازی انتخاب کنید (به یاد داشته باشید، باید نامی باشد که در سراسر Google Cloud منحصر به فرد باشد) و روی دکمه ایجاد کلیک کنید. نام این سطل ذخیره سازی را به خاطر بسپارید زیرا به زودی به آن نیاز خواهید داشت.
از Cloud Console، Dataflow را انتخاب کنید.
روی Create Job from Template (بخش بالایی صفحه) کلیک کنید.
مشخصات شغل را مطابق شکل زیر با توجه به موارد زیر پر کنید:
- نام شغل 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" خواهد بود.
- مکان موقت را به نام سطل Google Cloud Storage که به تازگی ایجاد کرده اید به همراه پیشوند نام فایل "tmp" تنظیم کنید. باید شبیه "gs://myStorageBucketName/tmp" باشد.
هنگامی که تمام اطلاعات را پر کردید (به زیر مراجعه کنید)، روی دکمه Run job کلیک کنید
کار Dataflow باید شروع به اجرا کند.
تقریباً یک دقیقه طول می کشد تا کار Dataflow کامل شود.
8. بررسی کنید که داده ها جریان دارند
سیاهههای مربوط به عملکرد ابر
اطمینان حاصل کنید که عملکرد Cloud توسط Pub/Sub فعال می شود
gcloud beta functions logs read function-weatherPubSubToBQ
گزارشها باید نشان دهند که تابع در حال اجرا است، دادهها دریافت میشوند و در BigQuery درج میشوند.
داده های BigQuery
بررسی کنید تا مطمئن شوید که داده ها در جدول BigQuery جریان دارند. از کنسول Cloud، به BigQuery (bigquery.cloud.google.com) بروید.
در زیر نام پروژه (در سمت چپ پنجره)، روی Dataset (weatherData)، سپس روی جدول (weatherDataTable) و سپس روی دکمه Query Table کلیک کنید.
یک ستاره به دستور SQL اضافه کنید تا مطابق شکل زیر SELECT * FROM... خوانده شود و سپس روی دکمه RUN QUERY کلیک کنید.
در صورت درخواست، روی دکمه Run query کلیک کنید
اگر نتایج را مشاهده کردید، داده ها به درستی در جریان هستند.
با جریان دادهها، اکنون آماده ساخت یک داشبورد تحلیلی هستید.
9. یک داشبورد Data Studio ایجاد کنید
Google Data Studio دادههای شما را به داشبوردها و گزارشهایی آموزنده تبدیل میکند که خواندن آنها آسان، اشتراکگذاری آسان و کاملاً قابل تنظیم است.
از مرورگر وب خود، به https://datastudio.google.com بروید
در قسمت «شروع یک گزارش جدید»، روی Blank کلیک کنید و سپس روی دکمه شروع کار کلیک کنید
برای پذیرفتن شرایط روی چک باکس کلیک کنید، روی دکمه Next کلیک کنید، ایمیلهایی را که میخواهید دریافت کنید انتخاب کنید و روی دکمه انجام شد کلیک کنید. یک بار دیگر، در زیر "شروع یک گزارش جدید"، روی خالی کلیک کنید
بر روی دکمه Create New Data Source کلیک کنید
روی BigQuery، سپس روی دکمه Authorize کلیک کنید و سپس اکانت گوگلی را که میخواهید با Data Studio استفاده کنید انتخاب کنید (باید همان حسابی باشد که برای نرمافزار کد استفاده میکردید).
روی دکمه Allow کلیک کنید
نام پروژه، مجموعه داده و جدول خود را انتخاب کنید. سپس روی دکمه Connect کلیک کنید.
فیلدهای نوع را مطابق شکل زیر تغییر دهید (همه چیز باید یک عدد باشد به جز timecollected و sensorID). توجه داشته باشید که timecollected روی Date Hour (و نه فقط Date) تنظیم شده است. فیلدهای Aggregation را مطابق شکل زیر تغییر دهید (نقطه شبنم، دما، رطوبت و فشار باید متوسط باشند و بقیه موارد باید روی "هیچکدام" تنظیم شوند). بر روی دکمه ایجاد گزارش کلیک کنید.
با کلیک بر روی دکمه افزودن به گزارش، تایید کنید
اگر از شما خواسته شد حساب Google خود را انتخاب کنید، این کار را انجام دهید و سپس روی دکمه Allow کلیک کنید تا Data Studio گزارش های خود را در Google Drive ذخیره کند.
یک بوم خالی به شما ارائه می شود که می توانید داشبورد خود را روی آن ایجاد کنید. از ردیف بالای نمادها، سری زمانی را انتخاب کنید.
یک مستطیل در گوشه سمت چپ بالای صفحه خالی بکشید. باید حدود ¼ از کل صفحه خالی را اشغال کند.
در سمت راست پنجره، تب Style را انتخاب کنید. داده های گمشده را از «خط به صفر» به «خطوط شکسته» تغییر دهید. در قسمت Left Y-Axis 0 را از Axis Min حذف کنید تا آن را به (Auto) تغییر دهید.
روی نمودار روی برگه کلیک کنید و 3 بار آن را کپی/پیست کنید (Ctrl-C/Ctrl-V). نمودارها را طوری تراز کنید که هر کدام ¼ از طرح را داشته باشند.
روی هر نمودار کلیک کنید و در قسمت خصوصیات سری زمانی و داده ها روی متریک موجود (نقطه شبنم) کلیک کنید، یک متریک دیگر را انتخاب کنید تا نمایش داده شود تا زمانی که هر چهار قرائت آب و هوا (نقطه شبنم، دما، رطوبت و فشار) نمودار خود را داشته باشند.
شما اکنون یک داشبورد اولیه دارید!
10. تبریک می گویم!
شما یک خط لوله کامل داده ایجاد کرده اید! با انجام این کار، نحوه استفاده از Google Pub/Sub، نحوه استقرار یک تابع بدون سرور، نحوه استفاده از BigQuery و نحوه ایجاد یک داشبورد تجزیه و تحلیل با استفاده از Data Studio را آموخته اید. علاوه بر این، دیدهاید که چگونه میتوان از Google Cloud SDK بهطور ایمن برای آوردن دادهها به پلتفرم Google Cloud استفاده کرد. در نهایت، شما اکنون تجربه عملی با یک الگوی معماری مهم دارید که میتواند حجم بالا را با حفظ در دسترس بودن، مدیریت کند.
پاکسازی
پس از انجام آزمایش با داده های آب و هوا و خط لوله تجزیه و تحلیل، می توانید منابع در حال اجرا را حذف کنید.
اگر حسگر اینترنت اشیا را ساخته اید، آن را خاموش کنید. Ctrl-C را در پنجره ترمینال بزنید تا اسکریپت متوقف شود و سپس عبارت زیر را تایپ کنید تا Raspberry Pi خاموش شود.
shutdown -h now
به Cloud Functions بروید، روی کادر کنار function-weatherPubSubToBQ کلیک کنید و سپس روی Delete کلیک کنید.
به Pub/Sub بروید، روی Topic کلیک کنید، روی کادر کنار موضوع آب و هوا کلیک کنید و سپس روی Delete کلیک کنید.
به Storage بروید، روی چک باکس های کنار سطل های ذخیره سازی کلیک کنید و سپس روی Delete کلیک کنید
به bigquery.cloud.google.com بروید، روی فلش رو به پایین در کنار نام پروژه خود کلیک کنید، روی فلش رو به پایین در سمت راست مجموعه داده weatherData کلیک کنید و سپس روی حذف مجموعه داده کلیک کنید.
هنگامی که از شما خواسته شد، شناسه مجموعه داده (weatherData) را تایپ کنید تا حذف داده ها به پایان برسد.