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

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

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

التطبيقات التي ستنشئها

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

79cd6c68e83f7fea.png

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

e28ca9ea4abb1457.png

المعلومات التي ستطّلع عليها

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

المتطلبات

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

  • جهاز 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. سيؤدي ذلك إلى فتح BigQuery في نافذة جديدة (لا تغلق النافذة الأصلية لأنّك ستحتاج إلى الوصول إليها مرة أخرى).

12a838f78a10144a.png

انقر فوق أيقونة السهم لأسفل بجوار اسم مشروعك ثم حدد "Create new dataset" (إنشاء مجموعة بيانات جديدة)

27616683b64ce34a.png

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

62cfcbd1add830ea.png

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

3d7bff6f9843fa3c.png

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

eef352614a5696a7.png

من المفترض أن تظهر لك نتيجة مثل هذه...

7d10e5ab8c6d6a0d.png

تم الآن إعداد مستودع بيانات لتلقّي بيانات الطقس.

4. إنشاء موضوع على خدمة Pub/Sub

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

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

من Cloud Console، انقر على "نشر/اشتراك" ثم على Topics.

331ad71e8a1ea7b.png

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

9f6fca9dc8684801.png

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

643670164e9fae12.png

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

d7b049bc66a34db6.png

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

7c385759f65a1031.png

أصبح لديك الآن موضوع 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

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

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

a14ac2e4f03bf831.png

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

40ba0a08430e0e8a.png

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

5d82d8faeffa55bf.png

في حقل "الاسم"، اكتب 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 من خلال Functions.

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

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

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

a162e24426118c97.png

يجب تثبيت دبابيس رؤوس المطرقة بعناية في جهاز Raspberry Pi.

a3a697907fe3c9a9.png

عليك تنسيق بطاقة SD وتثبيت أداة تثبيت NOOBS (برنامج الإصدار الجديد من الحزمة الجديدة) من خلال اتّباع الخطوات الواردة هنا. أدخِل بطاقة SD في جهاز Raspberry Pi ثم ضع جهاز Raspberry Pi في غلافه.

1e4e2459cd3333ec.png

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

392c2a9c85187094.png

موصّل Raspberry Pi

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

الإبرة 1 (3.3 فولت)

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

رقم التعريف الشخصي 3 (CPIO2)

وصلة SDI

الإبرة 5 (GPIO3)

SCK

الدبوس 9 (البرّي)

GND

44322e38d467d66a.png

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

ضبط جهاز Raspberry Pi وجهاز الاستشعار

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

a16f0da19b93126.png

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

17f380b2d41751a8.png

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

14741a77fccdb7e7.png

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

9df6f228f6a31601.png

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

  sudo i2cdetect -y 1

من المفترض أن تظهر النتيجة على النحو التالي: 77.

cd35cd97bee8085a.png

تثبيت حزمة تطوير البرامج (SDK) لخدمة Google Cloud

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

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

  pip install tendo

التأكّد من أنّ حزمتَي Google Cloud PubSub وOAuth2 للغة Python مثبَّتتان ومحدَّثتان باستخدام أداة إدارة حزم Python

  sudo pip install --upgrade google-cloud-pubsub
  sudo pip install --upgrade oauth2client

إعداد حزمة تطوير البرامج (SDK) في Google Cloud

تسمح حزمة تطوير البرامج (SDK) بالوصول عن بُعد والمصدَّق عليه إلى Google Cloud. في هذا الدليل التعليمي حول رموز البرامج، سيتم استخدامه للوصول إلى حزمة التخزين حتى يمكن تنزيل مفتاح الأمان بسهولة إلى Raspberry Pi.

من سطر الأوامر في Raspberry Pi، أدخل

  gcloud init --console-only

عندما يظهر لك السؤال "هل تريد تسجيل الدخول (نعم/لا)؟"، اضغط على مفتاح Enter.

عندما تظهر لك الرسالة "الانتقال إلى الرابط التالي في المتصفّح:" متبوعة بعنوان URL طويل يبدأ بـ https://accounts.google.com/o/oauth؟...، مرِّر مؤشر الماوس فوق عنوان URL وانقر بزر الماوس الأيمن واختَر "نسخ عنوان URL". بعد ذلك افتح متصفح الويب (رمز الكرة الأرضية الأزرق في الزاوية العلوية اليسرى من الشاشة)، وانقر بزر الماوس الأيمن فوق شريط العناوين، ثم انقر على "لصق".

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

سيُطلب منك السماح لـ Google Cloud SDK بالوصول إلى حسابك على Google. انقر فوق الزر "السماح".

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

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

إذا طُلِب منك تفعيل واجهة Compute API، اضغط على الزر Enter لتفعيلها. بعد ذلك، سيُطلب منك ضبط إعدادات Google Compute Engine. اضغط على Enter. ستظهر لك قائمة بالمناطق المحتملة. اختَر منطقة قريبة منك وأدخِل الرقم المقابل لها واضغط على مفتاح Enter.

ستظهر لك بعض المعلومات الإضافية بعد قليل. اكتمل الآن إعداد حزمة تطوير البرامج (SDK) لخدمة Google Cloud. يمكنك إغلاق نافذة متصفّح الويب لأنّك لن تحتاج إليها من الآن فصاعدًا.

تثبيت برنامج الاستشعار والنص البرمجي للطقس

من سطر الأوامر على 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

أصبح لديك الآن أداة استشعار الطقس المتكاملة لتكنولوجيات إنترنت الأشياء (IoT) الجاهزة لإرسال البيانات إلى Google Cloud.

7- بدء مسار البيانات

قد تحتاج إلى تفعيل Compute API

بث البيانات من جهاز Raspberry Pi

إذا كنت قد أنشأت جهاز استشعار الطقس IoT من Raspberry Pi، ابدأ النص البرمجي الذي سيقرأ بيانات الطقس ويرسلها إلى Google Cloud Pub/Sub. إذا لم تكن في الدليل ‎/home/pi/iot-data-pipeline، انتقِل إليه أولاً.

  cd /home/pi/iot-data-pipeline

بدء نص الطقس

  python checkWeather.py

يُفترض أن تظهر لك نتائج بيانات الطقس من خلال نافذة المحطة الطرفية كل دقيقة. مع تدفّق البيانات، يمكنك التخطّي إلى القسم التالي (التحقّق من تدفّق البيانات).

البث المحاكي للبيانات

إذا لم تكن قد أنشأت أداة استشعار الطقس في إنترنت الأشياء (IoT)، يمكنك محاكاة تدفق البيانات باستخدام مجموعة بيانات عامة تم تخزينها على 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 to Cloud Pub/Sub
  • بالنسبة إلى ملفات Cloud Storage الإدخال، أدخِل gs://codelab-iot-data-pipeline-sampleweatherdata/*.json (هذه مجموعة بيانات عامة).
  • بالنسبة إلى موضوع Pub/Sub للإخراج، سيعتمد المسار الدقيق على اسم مشروعك وسيبدو على النحو التالي: "projects/yourProjectName/topics/weatherdata".
  • اضبط "الموقع الجغرافي المؤقت" على اسم حزمة Google Cloud Storage التي أنشأتها للتو مع بادئة اسم ملف "tmp". من المفترض أن يظهر بالتنسيق التالي: "gs://myStorageBucketName/tmp".

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

5f8ca16672f19d9b.png

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

e020015c369639ad.png

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

218a3ff7197dcf75.png

8. التحقق من تدفق البيانات

سجلّات Cloud Functions

تأكَّد من أنّ دالة السحابة الإلكترونية يتم تفعيلها من خلال خدمة 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...، ثم انقر على الزر "تنفيذ الاستعلام".

b3a001e11c2902f2.png

إذا طُلب منك ذلك، فانقر فوق الزر "Run query" (تشغيل الاستعلام)

2c894d091b789ca3.png

وإذا ظهرت لك نتائج، يعني ذلك أنّ البيانات تتدفق بشكل صحيح.

c8a061cebb7b528a.png

مع تدفق البيانات، أنت الآن جاهز لإنشاء لوحة معلومات تحليلات.

9. إنشاء لوحة بيانات في Data Studio

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

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

10f8c27060cd7430.png

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

df1404bc0047595e.png

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

55e91d3dd88b05ca.png

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

a22f3fac05774fc9.png

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

5ab03f341edc8964.png

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

22bcdbb5f5f1d30c.png

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

dc6b6b0ed9ced509.png

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

c60887e29c3bdf9b.png

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

5ec3888dfdd85095.png

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

7b8006a813b3defa.png

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

c7cd97354e1cde04.png

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

e0e82cb19921f835.png

على الجانب الأيسر من النافذة، حدد علامة التبويب "Style" (النمط). غيِّر البيانات غير المتوفّرة من "السطر إلى الصفر" إلى "فواصل الأسطر". في قسم "المحور العمودي الأيمن"، احذف القيمة 0 من Axis Min لتغييرها إلى (Auto).

c7620bfe734d546.png

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

9a7d3faa28996219.png

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

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

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

8f59e8f4d44b8552.png

10. تهانينا!

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

79cd6c68e83f7fea.png

الإزالة

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

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

  shutdown -h now

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

ae95f4f7178262e0.png

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

6fb0bba3163d9a32.png

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

9067fb2af9f907f4.png

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

a952dfeec49248c4.png

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

6310b1cc8da31a77.png