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

1. بررسی اجمالی/مقدمه

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

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

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

79cd6c68e83f7fea.png

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

e28ca9ea4abb1457.png

چیزی که یاد خواهید گرفت

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

آنچه شما نیاز دارید

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

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

f414a63d955621a7.png

3415e861c09cd06a.png

گذراندن این کد نباید بیش از چند دلار هزینه داشته باشد، اما اگر تصمیم به استفاده از منابع بیشتری داشته باشید یا آنها را در حال اجرا رها کنید، ممکن است بیشتر باشد. مطمئن شوید که از قسمت Cleanup در انتهای Codelab رفته اید.

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

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

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

12a838f78a10144a.png

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

27616683b64ce34a.png

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

62cfcbd1add830ea.png

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

3d7bff6f9843fa3c.png

برای منبع داده ، ایجاد جدول خالی را انتخاب کنید. برای نام جدول مقصد، weatherDataTable را وارد کنید. در زیر طرحواره ، روی دکمه افزودن فیلد کلیک کنید تا در مجموع 9 فیلد وجود داشته باشد. فیلدها را مطابق شکل زیر پر کنید و مطمئن شوید که نوع مناسب برای هر فیلد را نیز انتخاب کنید. وقتی همه چیز کامل شد، روی دکمه Create Table کلیک کنید.

eef352614a5696a7.png

شما باید چنین نتیجه ای را ببینید ...

7d10e5ab8c6d6a0d.png

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

4. یک موضوع Pub/Sub ایجاد کنید

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

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

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

331ad71e8a1ea7b.png

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

9f6fca9dc8684801.png

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

643670164e9fae12.png

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

d7b049bc66a34db6.png

شما باید موضوع جدید ایجاد شده را ببینید

7c385759f65a1031.png

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

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

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

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

8e2f8a1428d0feca.png

روی دکمه Create service account کلیک کنید

60892b564e0ac140.png

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

31f8c944af11270e.png

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

7e3f9d7e56a44796.png

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

60a7da32dd85ba73.png

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

b25f6f5629fe8fd7.png

برای اینکه بعداً به راحتی به کلید دسترسی پیدا کنید، آن را در Google Cloud Storage ذخیره می کنیم. از Cloud Console، Storage و سپس Browser را انتخاب کنید.

c4414fe61be320a9.png

روی دکمه Create Bucket کلیک کنید

cde91311b267fc65.png

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

28c10e41b401f479.png

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

a0f6d069d42cec4b.png

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

55b25c8b9d73ec19.png

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

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

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

از Cloud Console، Cloud Functions را انتخاب کنید

a14ac2e4f03bf831.png

اگر پیام API را مشاهده کردید، روی دکمه Enable API کلیک کنید

40ba0a08430e0e8a.png

روی دکمه Create function کلیک کنید

5d82d8faeffa55bf.png

در قسمت 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 کلیک کنید

3266d5268980a4db.png

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

26f45854948426d0.png

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

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

Raspberry Pi و سنسور را مونتاژ کنید

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

a162e24426118c97.png

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

a3a697907fe3c9a9.png

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

1e4e2459cd3333ec.png

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

392c2a9c85187094.png

پین رزبری پای

اتصال سنسور

پین 1 (3.3 ولت)

VIN

پین 3 (CPIO2)

SDI

پین 5 (GPIO3)

SCK

پین 9 (زمینی)

GND

44322e38d467d66a.png

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

Raspberry Pi و سنسور را پیکربندی کنید

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

a16f0da19b93126.png

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

17f380b2d41751a8.png

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

14741a77fccdb7e7.png

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

9df6f228f6a31601.png

دستور زیر را وارد کنید تا مطمئن شوید که سنسور به درستی وصل شده است.

  sudo i2cdetect -y 1

نتیجه باید به این شکل باشد - مطمئن شوید که 77 خوانده می شود.

cd35cd97bee8085a.png

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 را انتخاب کنید.

c4414fe61be320a9.png

روی دکمه Create Bucket کلیک کنید

cde91311b267fc65.png

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

1dad4cfbccfc96b1.png

از Cloud Console، Dataflow را انتخاب کنید.

43ec245b47ae2e78.png

روی Create Job from Template (بخش بالایی صفحه) کلیک کنید.

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" خواهد بود.
  • مکان موقت را به نام سطل Google Cloud Storage که به تازگی ایجاد کرده اید به همراه پیشوند نام فایل "tmp" تنظیم کنید. باید شبیه "gs://myStorageBucketName/tmp" باشد.

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

5f8ca16672f19d9b.png

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

e020015c369639ad.png

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

218a3ff7197dcf75.png

8. بررسی کنید که داده ها جریان دارند

سیاهههای مربوط به عملکرد ابر

اطمینان حاصل کنید که عملکرد Cloud توسط Pub/Sub فعال می شود

  gcloud beta functions logs read function-weatherPubSubToBQ

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

d88f7831dabc8b3f.png

داده های BigQuery

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

85627127d58f1d2e.png

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

44dc0f765a69580c.png

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

b3a001e11c2902f2.png

در صورت درخواست، روی دکمه Run query کلیک کنید

2c894d091b789ca3.png

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

c8a061cebb7b528a.png

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

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

Google Data Studio داده‌های شما را به داشبوردها و گزارش‌هایی آموزنده تبدیل می‌کند که خواندن آن‌ها آسان، اشتراک‌گذاری آسان و کاملاً قابل تنظیم است.

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

10f8c27060cd7430.png

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

df1404bc0047595e.png

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

55e91d3dd88b05ca.png

بر روی دکمه Create New Data Source کلیک کنید

a22f3fac05774fc9.png

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

5ab03f341edc8964.png

روی دکمه Allow کلیک کنید

22bcdbb5f5f1d30c.png

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

dc6b6b0ed9ced509.png

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

c60887e29c3bdf9b.png

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

5ec3888dfdd85095.png

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

7b8006a813b3defa.png

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

c7cd97354e1cde04.png

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

e0e82cb19921f835.png

در سمت راست پنجره، تب Style را انتخاب کنید. داده های گمشده را از «خط به صفر» به «خطوط شکسته» تغییر دهید. در قسمت Left Y-Axis 0 را از Axis Min حذف کنید تا آن را به (Auto) تغییر دهید.

c7620bfe734d546.png

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

9a7d3faa28996219.png

روی هر نمودار کلیک کنید و در قسمت خصوصیات سری زمانی و داده ها روی متریک موجود (نقطه شبنم) کلیک کنید، یک متریک دیگر را انتخاب کنید تا نمایش داده شود تا زمانی که هر چهار قرائت آب و هوا (نقطه شبنم، دما، رطوبت و فشار) نمودار خود را داشته باشند.

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

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

8f59e8f4d44b8552.png

10. تبریک می گویم!

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

79cd6c68e83f7fea.png

پاکسازی

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

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

  shutdown -h now

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

ae95f4f7178262e0.png

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

6fb0bba3163d9a32.png

به Storage بروید، روی چک باکس های کنار سطل های ذخیره سازی کلیک کنید و سپس روی Delete کلیک کنید

9067fb2af9f907f4.png

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

a952dfeec49248c4.png

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

6310b1cc8da31a77.png