ایجاد خط لوله داده بدون سرور: اینترنت اشیا به تجزیه و تحلیل

۱. مرور کلی/مقدمه

در حالی که برنامه‌های چندلایه متشکل از وب، سرور برنامه و پایگاه داده، پایه و اساس توسعه وب هستند و نقطه شروع بسیاری از وب‌سایت‌ها محسوب می‌شوند، موفقیت اغلب چالش‌هایی را در زمینه مقیاس‌پذیری، ادغام و چابکی به همراه خواهد داشت. به عنوان مثال، چگونه می‌توان داده‌ها را به صورت بلادرنگ مدیریت کرد و چگونه می‌توان آنها را در چندین سیستم کلیدی تجاری توزیع کرد؟ این مسائل همراه با تقاضاهای برنامه‌های کاربردی در مقیاس اینترنت، نیاز به یک سیستم پیام‌رسانی توزیع‌شده را برانگیخت و الگوی معماری استفاده از خطوط لوله داده را برای دستیابی به سیستم‌های بلادرنگ و انعطاف‌پذیر ایجاد کرد. در نتیجه، درک نحوه انتشار داده‌های بلادرنگ در یک سیستم پیام‌رسانی توزیع‌شده و سپس نحوه ساخت یک خط لوله داده، مهارت‌های حیاتی برای توسعه‌دهنده و معمار است.

آنچه خواهید ساخت

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

79cd6c68e83f7fea.png

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

e28ca9ea4abb1457.png

آنچه یاد خواهید گرفت

  • نحوه استفاده از گوگل پاب/ساب
  • نحوه استقرار یک تابع 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 ) شوید. می‌توانید از پروژه پیش‌فرض ("اولین پروژه من") برای این آزمایشگاه استفاده کنید یا می‌توانید یک پروژه جدید ایجاد کنید. اگر می‌خواهید یک پروژه جدید ایجاد کنید، می‌توانید از صفحه مدیریت منابع استفاده کنید. شناسه پروژه باید یک نام منحصر به فرد در تمام پروژه‌های ابری گوگل باشد (نامی که در زیر نشان داده شده است قبلاً گرفته شده و برای شما کار نمی‌کند). شناسه پروژه خود را یادداشت کنید (یعنی شناسه پروژه شما _____ خواهد بود) زیرا بعداً به آن نیاز خواهید داشت.

f414a63d955621a7.png

3415e861c09cd06a.png

اجرای این آزمایشگاه کد نباید بیش از چند دلار هزینه داشته باشد، اما اگر تصمیم به استفاده از منابع بیشتر بگیرید یا اگر آنها را در حال اجرا رها کنید، می‌تواند بیشتر شود. حتماً بخش پاکسازی را در انتهای آزمایشگاه کد بررسی کنید.

۳. یک جدول BigQuery ایجاد کنید

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

بیایید یک جدول ایجاد کنیم که تمام داده‌های آب و هوای اینترنت اشیا را در خود جای دهد. BigQuery را از کنسول Cloud انتخاب کنید. این کار BigQuery را در یک پنجره جدید باز می‌کند (پنجره اصلی را نبندید زیرا باید دوباره به آن دسترسی پیدا کنید).

12a838f78a10144a.png

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

27616683b64ce34a.png

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

62cfcbd1add830ea.png

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

3d7bff6f9843fa3c.png

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

eef352614a5696a7.png

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

7d10e5ab8c6d6a0d.png

اکنون یک انبار داده برای دریافت داده‌های آب و هوایی خود راه‌اندازی کرده‌اید.

۴. یک موضوع عمومی/فرعی ایجاد کنید

Cloud Pub/Sub یک پایه ساده، قابل اعتماد و مقیاس‌پذیر برای تجزیه و تحلیل جریان و سیستم‌های محاسباتی مبتنی بر رویداد است. در نتیجه، برای مدیریت پیام‌های ورودی IoT و سپس اجازه دادن به سیستم‌های پایین‌دستی برای پردازش آنها، ایده‌آل است.

اگر هنوز در پنجره BigQuery هستید، به Cloud Console برگردید. اگر Cloud Console را بسته‌اید، به https://console.cloud.google.com بروید.

از کنسول ابری، گزینه Pub/Sub و سپس Topics را انتخاب کنید.

331ad71e8a1ea7b.png

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

9f6fca9dc8684801.png

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

۶۴۳۶۷۰۱۶۴e9fae12.png

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

d7b049bc66a34db6.png

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

7c385759f65a1031.png

اکنون یک تاپیک Pub/Sub دارید که هم پیام‌های IoT را در آن منتشر می‌کند و هم به سایر فرآیندها اجازه می‌دهد به آن پیام‌ها دسترسی داشته باشند.

انتشار ایمن در موضوع

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

از کنسول ابری، IAM & Admin و سپس Service accounts را انتخاب کنید.

8e2f8a1428d0feca.png

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

60892b564e0ac140.png

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

31f8c944af11270e.png

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

7e3f9d7e56a44796.png

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

60a7da32dd85ba73.png

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

b25f6f5629fe8fd7.png

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

c4414fe61be320a9.png

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

cde91311b267fc65.png

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

۲۸c10e41b401f479.png

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

a0f6d069d42cec4b.png

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

55b25c8b9d73ec19.png

نام مخزن ذخیره‌سازی و نام فایل کلید امنیتی را برای بعد یادداشت کنید.

۵. یک تابع ابری ایجاد کنید

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

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

a14ac2e4f03bf831.png

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

40ba0a08430e0e8a.png

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

5d82d8faeffa55bf.png

در فیلد نام، عبارت 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 کلیک کنید.

3266d5268980a4db.png

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

26f45854948426d0.png

تبریک می‌گویم! شما همین الان Pub/Sub را از طریق Functions به BigQuery متصل کردید.

۶. راه‌اندازی سخت‌افزار اینترنت اشیا (اختیاری)

مونتاژ رزبری پای و سنسور

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

a162e24426118c97.png

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

a3a697907fe3c9a9.png

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

1e4e2459cd3333ec.png

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

392c2a9c85187094.png

پین رزبری پای

اتصال سنسور

پین ۱ (۳.۳ ولت)

شماره شناسایی خودرو (VIN)

پین ۳ (CPIO2)

اس دی آی

پین ۵ (GPIO3)

اس سی کی

پین ۹ (اتصال به زمین)

زمین

۴۴۳۲۲e۳۸d۴۶۷d۶۶a.png

مانیتور (با استفاده از کانکتور mini-HDMI)، کیبورد/ماوس (با هاب USB) و در نهایت آداپتور برق را وصل کنید.

پیکربندی رزبری پای و سنسور

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

a16f0da19b93126.png

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

۱۷f۳۸۰b۲d۴۱۷۵۱a۸.png

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

۱۴۷۴۱a۷۷fccdb۷e۷.png

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

9df6f228f6a31601.png

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

  sudo i2cdetect -y 1

نتیجه باید به این شکل باشد - مطمئن شوید که عدد ۷۷ را نشان می‌دهد.

cd35cd97bee8085a.png

نصب 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 به یک مکان ذخیره‌سازی موقت نیاز دارد، بنابراین بیایید برای این منظور یک مخزن ذخیره‌سازی ایجاد کنیم.

از کنسول ابری، گزینه ذخیره‌سازی و سپس مرورگر را انتخاب کنید.

c4414fe61be320a9.png

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

cde91311b267fc65.png

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

1dad4cfbccfc96b1.png

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

43ec245b47ae2e78.png

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

da55aaf2a1b0a0d0.png

جزئیات شغل را مطابق شکل زیر پر کنید و به موارد زیر توجه کنید:

  • نام وظیفه 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" باشد.

وقتی تمام اطلاعات را پر کردید (به زیر مراجعه کنید)، روی دکمه اجرای کار کلیک کنید

5f8ca16672f19d9b.png

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

e020015c369639ad.png

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

218a3ff7197dcf75.png

۸. بررسی کنید که داده‌ها در جریان هستند

گزارش‌های عملکرد ابری

مطمئن شوید که تابع ابری توسط Pub/Sub فعال می‌شود.

  gcloud beta functions logs read function-weatherPubSubToBQ

گزارش‌ها باید نشان دهند که تابع در حال اجرا است، داده‌ها دریافت می‌شوند و در BigQuery درج می‌شوند.

d88f7831dabc8b3f.png

داده‌های بیگ‌کوئری

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

85627127d58f1d2e.png

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

44dc0f765a69580c.png

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

b3a001e11c2902f2.png

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

2c894d091b789ca3.png

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

c8a061cebb7b528a.png

با جریان داده‌ها، اکنون آماده‌ی ساخت یک داشبورد تحلیلی هستید.

۹. یک داشبورد Data Studio ایجاد کنید

گوگل دیتا استودیو داده‌های شما را به داشبوردها و گزارش‌های آموزنده‌ای تبدیل می‌کند که خواندن، اشتراک‌گذاری و قابلیت شخصی‌سازی بالایی دارند.

از مرورگر وب خود، به آدرس https://datastudio.google.com بروید

10f8c27060cd7430.png

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

df1404bc0047595e.png

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

55e91d3dd88b05ca.png

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

a22f3fac05774f9.png

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

5ab03f341edc8964.png

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

۲۲bcdbb5f5f1d30c.png

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

d6b6b0ed9ced509.png

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

c60887e29c3bdf9b.png

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

5ec3888dfdd85095.png

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

7b8006a813b3defa.png

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

c7cd97354e1cde04.png

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

e0e82cb19921f835.png

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

c7620bfe734d546.png

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

9a7d3faa28996219.png

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

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

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

8f59e8f4d44b8552.png

۱۰. تبریک می‌گویم!

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

79cd6c68e83f7fea.png

پاکسازی

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

اگر سنسور اینترنت اشیا را ساخته‌اید، آن را خاموش کنید. در پنجره ترمینال، Ctrl-C را بزنید تا اسکریپت متوقف شود و سپس دستور زیر را برای خاموش کردن رزبری پای تایپ کنید.

  shutdown -h now

به Cloud Functions بروید، روی کادر کنار function-weatherPubSubToBQ کلیک کنید و سپس روی Delete کلیک کنید.

ae95f4f7178262e0.png

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

6fb0bba3163d9a32.png

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

۹۰۶۷fb2af9f907f4.png

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

a952dfeec49248c4.png

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

6310b1cc8da31a77.png