إنشاء مسار بيانات بدون خادم: إنترنت الأشياء إلى التحليلات

1. نظرة عامة/مقدمة

في حين أنّ التطبيقات المتعددة المستويات التي تتألف من الويب وخادم التطبيقات وقاعدة البيانات هي أساس تطوير الويب ونقطة البداية للعديد من المواقع الإلكترونية، غالبًا ما يؤدي النجاح إلى ظهور تحديات بشأن قابلية التوسع والتكامل والمرونة. على سبيل المثال، كيف يمكن التعامل مع البيانات في الوقت الفعلي وكيف يمكن توزيعها على أنظمة أعمال رئيسية متعددة؟ أدّت هذه المشاكل إلى جانب متطلبات التطبيقات التي تعمل على نطاق الإنترنت إلى الحاجة إلى نظام مراسلة موزّع، وأدّت إلى ظهور نمط معماري لاستخدام مسارات البيانات لتحقيق أنظمة مرنة وفي الوقت الفعلي. نتيجةً لذلك، يُعدّ فهم كيفية نشر البيانات في الوقت الفعلي إلى نظام مراسلة موزّع ثم كيفية إنشاء مسار بيانات من المهارات الأساسية لكل من المطوّرين والمصمّمين.

ما ستنشئه

في هذا الدرس التطبيقي حول الترميز، ستنشئ مسار بيانات خاصًا بالطقس يبدأ بجهاز إنترنت الأشياء (IoT)، ويستخدم قائمة انتظار الرسائل لتلقّي البيانات وتسليمها، ويستفيد من دالة بلا خادم لنقل البيانات إلى مستودع بيانات، ثم ينشئ لوحة بيانات تعرض المعلومات. سيتم استخدام جهاز Raspberry Pi مزوّدًا بمستشعر للطقس كجهاز إنترنت الأشياء، وستشكّل عدة مكونات من Google Cloud Platform مسار نقل البيانات. إنّ إعداد Raspberry Pi، على الرغم من أنّه مفيد، هو جزء اختياري من هذا الدرس التطبيقي حول الترميز، ويمكن استبدال بيانات الطقس المتدفقة بنص برمجي.

79cd6c68e83f7fea.png

بعد إكمال الخطوات الواردة في هذا الدرس التطبيقي، سيكون لديك مسار بيانات بث يوفّر بيانات للوحة بيانات تعرض درجة الحرارة والرطوبة ونقطة الندى وضغط الهواء.

e28ca9ea4abb1457.png

ما ستتعلمه

  • كيفية استخدام Google Pub/Sub
  • كيفية نشر إحدى دوال Google Cloud
  • كيفية الاستفادة من Google BigQuery
  • كيفية إنشاء لوحة بيانات باستخدام "مركز البيانات من Google"
  • بالإضافة إلى ذلك، إذا أنشأت جهاز استشعار إنترنت الأشياء، ستتعرّف أيضًا على كيفية استخدام حزمة تطوير البرامج (SDK) من Google Cloud وكيفية تأمين طلبات الوصول عن بُعد إلى Google Cloud Platform.

المتطلبات

إذا كنت تريد إنشاء جزء مستشعر إنترنت الأشياء (IoT) من هذا الدرس التطبيقي حول الترميز بدلاً من الاستفادة من عيّنات البيانات والبرنامج النصي، ستحتاج أيضًا إلى ما يلي ( يمكن طلبها كمجموعة كاملة أو كأجزاء فردية هنا)...

  • ‫Raspberry Pi Zero W مع مصدر طاقة وبطاقة ذاكرة SD وحافظة
  • قارئ بطاقات USB
  • موزّع منافذ USB (للسماح بتوصيل لوحة مفاتيح وماوس بمنفذ USB الوحيد على Raspberry Pi)
  • أسلاك لوحة التجارب من أنثى إلى أنثى
  • رؤوس مطرقة GPIO
  • مستشعر BME280
  • كاوية لِحام مع لحام

بالإضافة إلى ذلك، يُفترض أنّه يمكنك الوصول إلى شاشة كمبيوتر أو تلفزيون مزوَّد بمنفذ إدخال HDMI وكابل HDMI ولوحة مفاتيح وماوس.

2. الإعداد

إعداد البيئة بوتيرة ذاتية

إذا لم يكن لديك حساب على Google (Gmail أو G Suite)، عليك إنشاء حساب. سواء كان لديك حساب على Google أم لا، احرص على الاستفادة من الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

سجِّل الدخول إلى "وحدة تحكّم Google Cloud Platform" (console.cloud.google.com). يمكنك استخدام المشروع التلقائي ("مشروعي الأول") في هذا المختبر أو يمكنك اختيار إنشاء مشروع جديد. إذا أردت إنشاء مشروع جديد، يمكنك استخدام صفحة "إدارة الموارد". يجب أن يكون رقم تعريف المشروع اسمًا فريدًا في جميع مشاريع Google Cloud (الاسم الموضّح أدناه مستخدَم من قبل ولن يكون متاحًا لك). دوِّن رقم تعريف مشروعك (أي سيكون رقم تعريف مشروعك هو _____) لأنّك ستحتاج إليه لاحقًا.

f414a63d955621a7.png

3415e861c09cd06a.png

يجب ألا تتجاوز تكلفة هذا الدرس البرمجي بضعة دولارات، ولكن قد تكون أعلى إذا قررت استخدام المزيد من الموارد أو إذا تركتها قيد التشغيل. احرص على الانتقال إلى قسم "التنظيف" في نهاية الدرس العملي.

3- إنشاء جدول BigQuery

‫BigQuery هو مستودع بيانات للمؤسسات يعمل بدون خادم ويتّسم بإمكانية التوسع بشكل كبير وبتكلفة منخفضة، وسيكون خيارًا مثاليًا لتخزين البيانات التي يتم بثها من أجهزة إنترنت الأشياء، مع السماح أيضًا للوحة بيانات الإحصاءات بالبحث عن المعلومات.

لننشئ جدولاً سيحتوي على جميع بيانات الطقس من أجهزة إنترنت الأشياء. اختَر BigQuery من Cloud Console. سيؤدي ذلك إلى فتح BigQuery في نافذة جديدة (لا تغلق النافذة الأصلية لأنّك ستحتاج إلى الوصول إليها مرة أخرى).

12a838f78a10144a.png

انقر على رمز السهم المتّجه للأسفل بجانب اسم مشروعك، ثم اختَر "إنشاء مجموعة بيانات جديدة".

27616683b64ce34a.png

أدخِل "weatherData" في حقل "مجموعة البيانات"، واختَر الموقع الجغرافي الذي سيتم تخزينها فيه، ثم انقر على "حسنًا".

62cfcbd1add830ea.png

انقر على علامة "+" بجانب "مجموعة البيانات" لإنشاء جدول جديد.

3d7bff6f9843fa3c.png

بالنسبة إلى بيانات المصدر، اختَر إنشاء جدول فارغ. بالنسبة إلى اسم جدول الوجهة، أدخِل weatherDataTable. ضمن المخطط، انقر على الزر إضافة حقل إلى أن يصبح هناك 9 حقول إجمالاً. املأ الحقول كما هو موضّح أدناه، مع الحرص على اختيار النوع المناسب لكل حقل. عند الانتهاء من كل شيء، انقر على زر إنشاء جدول.

eef352614a5696a7.png

يجب أن تظهر لك نتيجة مثل هذه...

7d10e5ab8c6d6a0d.png

أصبح لديك الآن مستودع بيانات معدّ لتلقّي بيانات الطقس.

4. إنشاء موضوع Pub/Sub

‫Cloud Pub/Sub هي أساس بسيط وموثوق وقابل للتوسيع لتحليلات البث وأنظمة الحوسبة المستندة إلى الأحداث. نتيجةً لذلك، يكون مثاليًا للتعامل مع رسائل إنترنت الأشياء الواردة ثم السماح للأنظمة النهائية بمعالجتها.

إذا كنت لا تزال في نافذة BigQuery، ارجع إلى Cloud Console. إذا أغلقت Cloud Console، انتقِل إلى https://console.cloud.google.com

من Cloud Console، اختَر Pub/Sub ثم المواضيع.

331ad71e8a1ea7b.png

إذا ظهر لك طلب بتفعيل واجهة برمجة التطبيقات، انقر على الزر "تفعيل واجهة برمجة التطبيقات".

9f6fca9dc8684801.png

انقر على الزر "إنشاء موضوع".

643670164e9fae12.png

أدخِل "weatherdata" كاسم الموضوع وانقر على "إنشاء".

d7b049bc66a34db6.png

سيظهر لك الموضوع الذي تم إنشاؤه حديثًا

7c385759f65a1031.png

يتوفّر لديك الآن موضوع Pub/Sub لنشر رسائل إنترنت الأشياء والسماح للعمليات الأخرى بالوصول إلى هذه الرسائل.

النشر الآمن في الموضوع

إذا كنت تخطّط لنشر رسائل إلى موضوع Pub/Sub من موارد خارج Google Cloud Console (مثل جهاز استشعار إنترنت الأشياء)، سيكون من الضروري التحكّم في الوصول بشكل أكثر صرامة باستخدام حساب خدمة وضمان أمان الاتصال من خلال إنشاء شهادة ثقة.

من Cloud Console، اختَر "إدارة الهوية وإمكانية الوصول" ثم "حسابات الخدمة".

8e2f8a1428d0feca.png

انقر على الزر "إنشاء حساب خدمة".

60892b564e0ac140.png

في القائمة المنسدلة "الدور"، اختَر دور "ناشر Pub/Sub".

31f8c944af11270e.png

اكتب اسم حساب خدمة (iotWeatherPublisher)، وضع علامة في مربّع الاختيار "تقديم مفتاح خاص جديد"، وتأكّد من ضبط "نوع المفتاح" على JSON، ثم انقر على "إنشاء".

7e3f9d7e56a44796.png

سيتم تنزيل مفتاح الأمان تلقائيًا. لا يتوفّر سوى مفتاح واحد، لذا من المهم عدم فقدانه. انقر على "إغلاق".

60a7da32dd85ba73.png

من المفترض أن يظهر لك أنّه تم إنشاء حساب خدمة وأنّه يتضمّن رقم تعريف مفتاح مرتبطًا به.

b25f6f5629fe8fd7.png

للوصول إلى المفتاح بسهولة لاحقًا، سنخزّنه في Google Cloud Storage. من Cloud Console، اختَر "مساحة التخزين" ثمّ "المتصفّح".

c4414fe61be320a9.png

انقر على الزر "إنشاء حزمة"

cde91311b267fc65.png

اختَر اسمًا لحزمة التخزين (يجب أن يكون اسمًا فريدًا على مستوى جميع خدمات Google Cloud) وانقر على الزر "إنشاء".

28c10e41b401f479.png

ابحث عن مفتاح الأمان الذي تم تنزيله تلقائيًا، ثم اسحبه وأفلته أو حمِّله في حزمة التخزين.

a0f6d069d42cec4b.png

بعد اكتمال عملية تحميل المفتاح، من المفترض أن يظهر في متصفّح Cloud Storage

55b25c8b9d73ec19.png

دوِّن اسم حزمة التخزين واسم ملف مفتاح الأمان للرجوع إليهما لاحقًا.

5- إنشاء دالة Cloud

أتاحت الحوسبة السحابية نماذج حوسبة بدون خادم بالكامل، حيث يمكن تشغيل المنطق عند الطلب استجابةً للأحداث الواردة من أي مكان. في هذا المختبر، سيتم تشغيل Cloud Function في كل مرة يتم فيها نشر رسالة في موضوع الطقس، وستقرأ الرسالة ثم تخزّنها في BigQuery.

من Cloud Console، اختَر Cloud Functions

a14ac2e4f03bf831.png

إذا ظهرت لك رسالة واجهة برمجة تطبيقات، انقر على الزر "تفعيل واجهة برمجة التطبيقات".

40ba0a08430e0e8a.png

انقر على زرّ "إنشاء دالة"

5d82d8faeffa55bf.png

في حقل "الاسم" (Name)، اكتب function-weatherPubSubToBQ. بالنسبة إلى "المشغّل"، اختَر موضوع Cloud Pub/Sub، ثم اختَر 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، ألصِق الرمز التالي فوق رمز العنصر النائب المتوفّر هناك

{
  "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". انقر على زر إنشاء

3266d5268980a4db.png

سيستغرق الأمر حوالي دقيقتين حتى تظهر وظيفتك على أنّها تم نشرها

26f45854948426d0.png

تهانينا! لقد ربطت Pub/Sub بـ BigQuery من خلال الدوال.

6. إعداد أجهزة إنترنت الأشياء (اختياري)

تجميع جهاز Raspberry Pi والمستشعر

إذا كان هناك أكثر من 7 إشارات، يجب تقليل عدد الإشارات في العنوان إلى 7 فقط. الحِم دبابيس الرأس بلوحة جهاز الاستشعار.

a162e24426118c97.png

ثبِّت دبابيس رأس المطرقة في Raspberry Pi بعناية.

a3a697907fe3c9a9.png

نسِّق بطاقة SD وثبِّت برنامج التثبيت NOOBS (New Out Of Box Software) باتّباع الخطوات الموضّحة هنا. أدخِل بطاقة SD في Raspberry Pi وضَع Raspberry Pi في الحافظة.

1e4e2459cd3333ec.png

استخدِم أسلاك لوحة التجارب لتوصيل المستشعر بجهاز Raspberry Pi وفقًا للمخطّط البياني أدناه.

392c2a9c85187094.png

دبوس Raspberry Pi

اتصال أداة الاستشعار

الطرف 1 (3.3 فولت)

رقم هوية السيارة

Pin 3 (CPIO2)

SDI

Pin 5 (GPIO3)

SCK

الطرف 9 (الأرضي)

GND

44322e38d467d66a.png

وصِّل الشاشة (باستخدام موصِّل mini-HDMI) ولوحة المفاتيح/الماوس (بموزّع USB) وأخيرًا محوّل الطاقة.

ضبط Raspberry Pi وأداة الاستشعار

بعد انتهاء Raspberry Pi من بدء التشغيل، اختَر Raspbian كنظام التشغيل المطلوب، وتأكَّد من أنّ اللغة المطلوبة صحيحة، ثم انقر على "تثبيت" (رمز القرص الصلب في الجزء الأيمن العلوي من النافذة).

a16f0da19b93126.png

انقر على رمز Wi-Fi (أعلى يسار الشاشة) واختَر شبكة. إذا كانت شبكة آمنة، أدخِل كلمة المرور (المفتاح المشترك مسبقًا).

17f380b2d41751a8.png

انقر على رمز التوت (أعلى يسار الشاشة)، ثمّ اختَر "الإعدادات المفضّلة" (Preferences) ثمّ "إعدادات Raspberry Pi" (Raspberry Pi Configuration). من علامة التبويب "الواجهات"، فعِّل I2C. من علامة التبويب "التوطين"، اضبط اللغة والمنطقة الزمنية. بعد ضبط المنطقة الزمنية، اسمح لجهاز Raspberry Pi بإعادة التشغيل.

14741a77fccdb7e7.png

بعد اكتمال عملية إعادة التشغيل، انقر على رمز "الوحدة الطرفية" لفتح نافذة وحدة طرفية.

9df6f228f6a31601.png

اكتب الأمر التالي للتأكّد من ربط المستشعر بشكلٍ صحيح.

  sudo i2cdetect -y 1

يجب أن تبدو النتيجة على النحو التالي، وتأكَّد من أنّها تشير إلى 77.

cd35cd97bee8085a.png

تثبيت Google Cloud SDK

للاستفادة من الأدوات المتاحة على منصة Google Cloud، يجب تثبيت حزمة تطوير البرامج (SDK) من Google Cloud على 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.

ثبِّت حزمة tendo باستخدام أداة إدارة حِزم Python. تُستخدَم هذه الحزمة للتحقّق ممّا إذا كان النص البرمجي يتم تنفيذه أكثر من مرة ويتم تثبيته لتطبيقه على نص الطقس البرمجي.

  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، ثم انقر بزر الماوس الأيمن واختَر "نسخ عنوان URL". بعد ذلك، افتح متصفّح الويب (رمز الكرة الأرضية الزرقاء في أعلى يسار الشاشة)، وانقر بزر الماوس الأيمن على شريط العناوين، ثم انقر على "لصق".

بعد ظهور شاشة "تسجيل الدخول"، أدخِل عنوان البريد الإلكتروني المرتبط بحسابك على Google Cloud واضغط على Enter. بعد ذلك، أدخِل كلمة المرور وانقر على الزر "التالي".

سيُطلب منك تأكيد أنّ حزمة تطوير البرامج (SDK) من Google Cloud تريد الوصول إلى حسابك على Google. انقر على الزر "سماح".

سيظهر لك رمز التحقّق. باستخدام الماوس، حدِّد النص، ثم انقر بزر الماوس الأيمن واختَر "نسخ". ارجع إلى نافذة الجهاز، وتأكَّد من أنّ المؤشر يقع على يسار "أدخِل رمز التحقّق:"، ثم انقر بزر الماوس الأيمن واختَر "لصق". اضغط على زر Enter.

إذا طُلب منك "اختيار مشروع على السحابة الإلكترونية لاستخدامه"، أدخِل الرقم المقابل لاسم المشروع الذي كنت تستخدمه في هذا الدرس التطبيقي حول الترميز، ثم اضغط على مفتاح Enter.

إذا طُلب منك تفعيل واجهة برمجة التطبيقات Compute API، اضغط على مفتاح Enter لتفعيلها. بعد ذلك، سيُطلب منك ضبط إعدادات Google Compute Engine. اضغط على مفتاح 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 (تمت الإشارة إلى هذه المعلومات في قسمَي "الإعداد" و"إنشاء موضوع Pub/Sub" في هذا الدرس التطبيقي حول الترميز).

غيِّر قيم sensorID وsensorZipCode وsensorLat وsensorLong إلى أي قيمة تريدها. يمكنك العثور هنا على قيم خطوط الطول والعرض لموقع جغرافي أو عنوان معيّن.

عند الانتهاء من إجراء التغييرات اللازمة، اضغط على Ctrl-X لبدء الخروج من محرّر النصوص nano. اضغط على 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، ابدأ تشغيل النص البرمجي الذي سيقرأ بيانات الطقس ويرسلها إلى 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، اختَر "مساحة التخزين" ثمّ "المتصفّح".

c4414fe61be320a9.png

انقر على الزر "إنشاء حزمة"

cde91311b267fc65.png

اختَر اسمًا لحزمة التخزين (يجب أن يكون اسمًا فريدًا على مستوى جميع خدمات Google Cloud) وانقر على الزر "إنشاء". تذكَّر اسم حزمة التخزين هذه لأنّك ستحتاج إليها قريبًا.

1dad4cfbccfc96b1.png

من Cloud Console، اختَر Dataflow.

43ec245b47ae2e78.png

انقر على "إنشاء مهمة من نموذج" (الجزء العلوي من الشاشة).

da55aaf2a1b0a0d0.png

املأ تفاصيل الوظيفة كما هو موضّح أدناه مع الانتباه إلى ما يلي:

  • أدخِل اسم مهمة dataflow-gcs-to-pubsub
  • يجب أن يتم اختيار منطقتك تلقائيًا وفقًا لمكان استضافة مشروعك، ولا يجب تغييرها.
  • اختَر نموذج Cloud Dataflow من GCS Text إلى Cloud Pub/Sub
  • بالنسبة إلى "ملفات Cloud Storage للإدخال" (Input Cloud Storage File(s))، أدخِل gs://codelab-iot-data-pipeline-sampleweatherdata/*.json (هذه مجموعة بيانات عامة).
  • بالنسبة إلى موضوع Output Pub/Sub، سيعتمد المسار الدقيق على اسم مشروعك وسيبدو على النحو التالي: "projects/yourProjectName/topics/weatherdata"
  • اضبط "الموقع الجغرافي المؤقت" على اسم حزمة Google Cloud Storage التي أنشأتها للتو مع بادئة اسم الملف "tmp". يجب أن يكون بالشكل "gs://myStorageBucketName/tmp".

عند الانتهاء من ملء جميع المعلومات (انظر أدناه)، انقر على الزر "تشغيل المهمة"

5f8ca16672f19d9b.png

من المفترض أن تبدأ مهمة Dataflow في التنفيذ.

e020015c369639ad.png

من المفترض أن يستغرق إكمال مهمة Dataflow دقيقة واحدة تقريبًا.

218a3ff7197dcf75.png

8. التأكّد من أنّ البيانات تتدفّق

سجلات Cloud Functions

تأكَّد من أنّ Cloud Function يتم تشغيلها من خلال Pub/Sub

  gcloud beta functions logs read function-weatherPubSubToBQ

يجب أن توضّح السجلات أنّ الدالة قيد التنفيذ، وأنّه يتم تلقّي البيانات وإدراجها في BigQuery.

d88f7831dabc8b3f.png

بيانات BigQuery

تأكَّد من أنّ البيانات يتم نقلها إلى جدول BigQuery. من Cloud Console، انتقِل إلى BigQuery (bigquery.cloud.google.com).

85627127d58f1d2e.png

ضمن اسم المشروع (على الجانب الأيمن من النافذة)، انقر على مجموعة البيانات (weatherData)، ثم على الجدول (weatherDataTable)، ثم على الزر "جدول طلب البحث".

44dc0f765a69580c.png

أضِف علامة نجمة إلى عبارة SQL ليصبح نصها SELECT * FROM... كما هو موضّح أدناه، ثم انقر على الزر RUN QUERY

b3a001e11c2902f2.png

انقر على الزر "تنفيذ طلب البحث" إذا طُلب منك ذلك.

2c894d091b789ca3.png

إذا ظهرت لك نتائج، يعني ذلك أنّ البيانات تنتقل بشكل سليم.

c8a061cebb7b528a.png

بعد أن تبدأ البيانات بالتدفق، ستكون جاهزًا الآن لإنشاء لوحة بيانات إحصائية.

9- إنشاء لوحة بيانات في مركز البيانات

يحوّل "مركز البيانات من Google" بياناتك إلى لوحات بيانات وتقارير غنيّة بالمعلومات وسهلة القراءة والمشاركة وقابلة للتخصيص بالكامل.

من متصفّح الويب، انتقِل إلى https://datastudio.google.com

10f8c27060cd7430.png

ضمن "بدء تقرير جديد"، انقر على "فارغ" ثمّ على الزرّ "البدء".

df1404bc0047595e.png

ضَع علامة في مربّع الاختيار لقبول البنود، ثم انقر على الزر "التالي"، واختَر الرسائل الإلكترونية التي تريد تلقّيها، ثم انقر على الزر "تم". مرّة أخرى، ضمن "بدء تقرير جديد"، انقر على "فارغ".

55e91d3dd88b05ca.png

انقر على زر "إنشاء مصدر بيانات جديد".

a22f3fac05774fc9.png

انقر على BigQuery، ثم على الزر "منح الإذن"، ثم اختَر حساب Google الذي تريد استخدامه مع "مركز البيانات" (يجب أن يكون هو الحساب نفسه الذي كنت تستخدمه في التدريب العملي).

5ab03f341edc8964.png

انقر على الزر "سماح"

22bcdbb5f5f1d30c.png

اختَر اسم مشروعك ومجموعة البيانات والجدول. بعد ذلك، انقر على الزر "ربط".

dc6b6b0ed9ced509.png

غيِّر حقول النوع كما هو موضّح أدناه (يجب أن يكون كل شيء رقمًا باستثناء timecollected وsensorID). يُرجى العِلم أنّه تم ضبط timecollected على "التاريخ والساعة" (وليس "التاريخ" فقط). غيِّر حقول تجميع البيانات كما هو موضّح أدناه (يجب أن تكون درجة التكثّف ودرجة الحرارة والرطوبة والضغط هي المتوسطات، ويجب ضبط كل شيء آخر على "بلا"). انقر على الزرّ "إنشاء تقرير".

c60887e29c3bdf9b.png

أكِّد ذلك بالنقر على زر "إضافة إلى التقرير".

5ec3888dfdd85095.png

إذا طُلب منك اختيار حسابك على Google، اختَره ثم انقر على الزر "سماح" للسماح لـ "مركز البيانات" بتخزين تقاريره في Google Drive.

7b8006a813b3defa.png

ستظهر لك مساحة فارغة يمكنك إنشاء لوحة البيانات عليها. من الصف العلوي للرموز، اختَر "سلسلة زمنية".

c7cd97354e1cde04.png

ارسم مستطيلاً في الزاوية العلوية اليسرى من ورقة العمل الفارغة. يجب أن يشغل حوالي ربع الورقة البيضاء الإجمالية.

e0e82cb19921f835.png

على يسار النافذة، انقر على علامة التبويب "النمط". غيِّر "البيانات الناقصة" من "خط إلى صفر" إلى "فواصل الأسطر". في قسم "المحور Y الأيسر"، احذف الرقم 0 من "الحد الأدنى للمحور" لتغييره إلى "تلقائي".

c7620bfe734d546.png

انقر على الرسم البياني في الورقة وانسخه/الصقه (Ctrl-C/Ctrl-V) 3 مرات. رتب الرسومات البيانية بحيث يشغل كل منها ربع مساحة التخطيط.

9a7d3faa28996219.png

انقر على كل رسم بياني، ثمّ انقر على المقياس الحالي (نقطة الندى) ضمن قسم "خصائص السلسلة الزمنية والبيانات"، واختَر مقياسًا مختلفًا ليتم عرضه إلى أن يصبح لكل قراءة من قراءات الطقس الأربع (نقطة الندى ودرجة الحرارة والرطوبة والضغط) رسم بياني خاص بها.

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

أصبحت لديك الآن لوحة معلومات أساسية.

8f59e8f4d44b8552.png

10. تهانينا!

لقد أنشأت مسار بيانات كاملاً. من خلال ذلك، تعلّمت كيفية استخدام Google Pub/Sub، وكيفية نشر دالة حوسبة بدون خادم، وكيفية الاستفادة من BigQuery، وكيفية إنشاء لوحة بيانات إحصاءات باستخدام مركز البيانات. بالإضافة إلى ذلك، تعرّفت على كيفية استخدام حزمة تطوير البرامج (SDK) من Google Cloud بشكل آمن لنقل البيانات إلى Google Cloud Platform. أخيرًا، لديك الآن بعض الخبرة العملية في نمط معماري مهم يمكنه التعامل مع أحجام كبيرة مع الحفاظ على التوفّر.

79cd6c68e83f7fea.png

الإزالة

بعد الانتهاء من تجربة بيانات الطقس ومسار إعداد التقارير الإحصائية، يمكنك إزالة الموارد التي يتم تشغيلها.

إذا كنت قد أنشأت جهاز استشعار تابعًا لإنترنت الأشياء، عليك إيقافه. اضغط على Ctrl-C في نافذة المحطة الطرفية لإيقاف النص البرمجي، ثم اكتب ما يلي لإيقاف Raspberry Pi

  shutdown -h now

انتقِل إلى Cloud Functions، وانقر على مربّع الاختيار بجانب function-weatherPubSubToBQ، ثم انقر على "حذف".

ae95f4f7178262e0.png

انتقِل إلى Pub/Sub، وانقر على "الموضوع"، ثم على مربّع الاختيار بجانب موضوع weatherdata، ثم على "حذف".

6fb0bba3163d9a32.png

انتقِل إلى "مساحة التخزين"، وانقر على مربّعات الاختيار بجانب حِزم مساحة التخزين، ثم انقر على "حذف".

9067fb2af9f907f4.png

انتقِل إلى bigquery.cloud.google.com، وانقر على السهم المتّجه للأسفل بجانب اسم مشروعك، ثم انقر على السهم المتّجه للأسفل على يسار مجموعة بيانات weatherData، ثم انقر على "حذف مجموعة البيانات".

a952dfeec49248c4.png

عندما يُطلب منك ذلك، اكتب معرّف مجموعة البيانات (weatherData) لإنهاء عملية حذف البيانات.

6310b1cc8da31a77.png