Xây dựng quy trình dữ liệu không máy chủ: IoT cho Analytics

1. Tổng quan/Giới thiệu

Mặc dù các ứng dụng nhiều tầng bao gồm web, máy chủ ứng dụng và cơ sở dữ liệu là nền tảng cho việc phát triển web và là điểm khởi đầu cho nhiều trang web, nhưng thành công thường mang lại những thách thức về khả năng có thể mở rộng, tích hợp và tính linh hoạt. Ví dụ: Làm cách nào để xử lý dữ liệu theo thời gian thực và làm thế nào để phân phối dữ liệu cho nhiều hệ thống trọng yếu của doanh nghiệp? Những vấn đề này cùng với nhu cầu của các ứng dụng trên quy mô Internet đã thúc đẩy nhu cầu về một hệ thống nhắn tin phân tán và tạo ra một mẫu cấu trúc sử dụng quy trình dữ liệu để đạt được các hệ thống thời gian thực, linh hoạt. Do đó, việc hiểu cách phát hành dữ liệu theo thời gian thực cho một hệ thống nhắn tin phân tán, sau đó là cách xây dựng quy trình dữ liệu là những kỹ năng quan trọng đối với cả nhà phát triển và kiến trúc sư.

Sản phẩm bạn sẽ tạo ra

Trong lớp học lập trình này, bạn sẽ xây dựng một quy trình dữ liệu thời tiết bắt đầu bằng một thiết bị Internet vạn vật (IoT), sử dụng hàng đợi thông báo để nhận và phân phối dữ liệu, tận dụng một hàm không có máy chủ để di chuyển dữ liệu đến kho dữ liệu, sau đó tạo một trang tổng quan hiển thị thông tin. Raspberry Pi có cảm biến thời tiết sẽ được dùng cho thiết bị IoT và một số thành phần của Nền tảng Google Cloud sẽ tạo thành quy trình dữ liệu. Tuy rất hữu ích khi xây dựng Raspberry Pi, nhưng bạn không bắt buộc phải tham gia lớp học lập trình này để xây dựng và bạn có thể thay thế dữ liệu thời tiết truyền trực tuyến bằng một tập lệnh.

79cd6c68e83f7fea.png

Sau khi hoàn tất các bước trong lớp học lập trình này, bạn sẽ có một quy trình truyền dữ liệu cung cấp cho một trang tổng quan hiển thị nhiệt độ, độ ẩm, điểm sương và áp suất không khí.

e28ca9ea4abb1457.png

Kiến thức bạn sẽ học được

  • Cách sử dụng Google Pub/Sub
  • Cách triển khai Chức năng Google Cloud
  • Cách tận dụng Google BigQuery
  • Cách tạo trang tổng quan bằng Google Data Studio
  • Ngoài ra, nếu xây dựng cảm biến IoT, bạn cũng sẽ tìm hiểu cách sử dụng Google Cloud SDK và cách bảo mật các lệnh gọi truy cập từ xa đến Google Cloud Platform

Bạn cần có

Nếu muốn xây dựng phần cảm biến IoT của lớp học lập trình này thay vì tận dụng dữ liệu mẫu và tập lệnh, bạn cũng cần có những yếu tố sau ( bạn có thể đặt hàng dưới dạng một bộ hoàn chỉnh hoặc thành từng phần tại đây)...

  • Raspberry Pi Zero W có nguồn điện, thẻ nhớ SD và vỏ
  • Đầu đọc thẻ USB
  • Bộ chia USB (để cho phép kết nối bàn phím và chuột vào cổng USB duy nhất trên Raspberry Pi)
  • Dây breadboard từ đầu cắm cái đến đầu cắm cái
  • Tiêu đề búa GPIO
  • Cảm biến BME280
  • Mỏ hàn có chì hàn

Ngoài ra, người dùng cũng có thể sử dụng màn hình máy tính hoặc TV có đầu vào HDMI, cáp HDMI, bàn phím và chuột.

2. Thiết lập

Thiết lập môi trường theo tốc độ của riêng bạn

Nếu chưa có Tài khoản Google (Gmail hoặc G Suite), bạn phải tạo một tài khoản. Bất kể bạn đã có Tài khoản Google hay chưa, hãy nhớ tận dụng ưu đãi dùng thử miễn phí 300 USD!

Đăng nhập vào bảng điều khiển Google Cloud Platform ( console.cloud.google.com). Bạn có thể sử dụng dự án mặc định ("Dự án đầu tiên của tôi") cho lớp học này hoặc chọn tạo một dự án mới. Nếu muốn tạo một dự án mới, bạn có thể sử dụng trang Quản lý tài nguyên. Mã dự án phải là tên riêng biệt trong tất cả các dự án trên Google Cloud (tên hiển thị bên dưới đã được sử dụng và sẽ không phù hợp với bạn). Ghi lại mã dự án của bạn (ví dụ: Mã dự án của bạn là _____) vì mã này sẽ cần đến sau này.

f414a63d955621a7.png

3415e861c09cd06a.pngS

Khi tham gia lớp học lập trình này, bạn sẽ không mất quá vài đô la, nhưng có thể sẽ cao hơn nếu bạn quyết định sử dụng nhiều tài nguyên hơn hoặc nếu bạn để các tài nguyên đó chạy. Hãy nhớ xem phần Làm sạch ở cuối lớp học lập trình này.

3. Tạo bảng BigQuery

BigQuery là một kho dữ liệu doanh nghiệp không có máy chủ, có khả năng mở rộng cao và chi phí thấp. Đây sẽ là lựa chọn lý tưởng để lưu trữ dữ liệu được truyền trực tuyến từ các thiết bị IoT, đồng thời cho phép trang tổng quan phân tích truy vấn thông tin.

Hãy tạo một bảng chứa tất cả dữ liệu thời tiết IoT. Chọn BigQuery trên Cloud Console. Thao tác này sẽ mở BigQuery trong một cửa sổ mới (đừng đóng cửa sổ ban đầu vì bạn sẽ cần truy cập lại vào cửa sổ đó).

12a838f78a10144a.png

Nhấp vào biểu tượng mũi tên xuống bên cạnh tên dự án, rồi chọn "Tạo tập dữ liệu mới"

27616683b64ce34a.png

Nhập "WeatherData" cho Tập dữ liệu, chọn vị trí sẽ lưu trữ tập dữ liệu và nhấp vào "OK"

62cfcbd1add830ea.png.

Nhấp vào dấu "+" bên cạnh Tập dữ liệu để tạo một bảng mới

3d7bff6f9843fa3c.png.

Đối với Dữ liệu nguồn, hãy chọn Tạo bảng trống. Đối với Tên bảng đích, hãy nhập weatherDataTable. Trong Giản đồ, hãy nhấp vào nút Thêm trường cho đến khi có tổng cộng 9 trường. Điền vào các trường như minh hoạ dưới đây, nhớ chọn Loại thích hợp cho mỗi trường. Khi mọi thứ đã hoàn tất, hãy nhấp vào nút Tạo bảng.

eef352614a5696a7.png

Bạn sẽ thấy kết quả như sau...

7d10e5ab8c6d6a0d.png

Giờ đây, bạn đã thiết lập kho dữ liệu để nhận dữ liệu thời tiết.

4. Tạo một chủ đề Pub/Sub

Cloud Pub/Sub là một nền tảng đơn giản, đáng tin cậy và có thể mở rộng cho các hệ thống phân tích dữ liệu truyền phát và hệ thống điện toán dựa trên sự kiện. Vì vậy, đây là giải pháp hoàn hảo để xử lý các thông báo IoT đến, sau đó cho phép các hệ thống hạ nguồn xử lý chúng.

Nếu bạn vẫn đang ở chế độ cửa sổ cho BigQuery, hãy chuyển về Cloud Console. Nếu bạn đã đóng Cloud Console, hãy truy cập vào https://console.cloud.google.com

Trong Cloud Console, hãy chọn Pub/Sub rồi chọn Chủ đề.

331ad71e8a1ea7b.png.

Nếu bạn nhìn thấy lời nhắc Bật API, hãy nhấp vào nút Bật API.

9f6fca9dc8684801.pngS

Nhấp vào nút Tạo chủ đề

643670164e9fae12.pngs

Nhập "dữ liệu thời tiết" làm tên chủ đề rồi nhấp vào Tạo

d7b049bc66a34db6.png

Bạn sẽ thấy chủ đề mới tạo

7c385759f65a1031.pngS

Giờ đây, bạn đã có chủ đề Pub/Sub để xuất bản thông báo IoT lên và cho phép các quy trình khác truy cập vào những thông báo đó.

Xuất bản an toàn cho chủ đề

Nếu dự định xuất bản thông báo về chủ đề Pub/Sub từ các tài nguyên bên ngoài Google Cloud Console (ví dụ như cảm biến IoT), thì bạn cần phải kiểm soát chặt chẽ hơn quyền truy cập bằng tài khoản dịch vụ và để đảm bảo tính bảo mật của kết nối bằng cách tạo chứng chỉ tin cậy.

Trong Cloud Console, hãy chọn IAM và Admin (Quản trị), sau đó chọn Service accounts (Tài khoản dịch vụ)

8e2f8a1428d0feca.png

Nhấp vào nút Tạo tài khoản dịch vụ

60892b564e0ac140.png

Trong trình đơn thả xuống Vai trò, hãy chọn vai trò Nhà xuất bản Pub/Sub

31f8c944af11270e.png.

Nhập tên tài khoản dịch vụ (iotWeatherPublisher), chọn hộp kiểm Cung cấp khoá riêng tư mới, đảm bảo rằng loại Khoá được đặt thành JSON và nhấp vào "Tạo"

7e3f9d7e56a44796.pngS

Khoá bảo mật sẽ tự động tải xuống. Chỉ có một khoá, vì vậy, bạn cần phải giữ cẩn thận khoá này. Nhấp vào Đóng.

60a7da32dd85ba73.png

Bạn sẽ thấy một tài khoản dịch vụ đã được tạo và có một Mã khoá liên kết với tài khoản đó.

b25f6f5629fe8fd7.png

Để dễ dàng truy cập vào khoá sau này, chúng tôi sẽ lưu trữ khoá trong Google Cloud Storage. Trong Cloud Console, hãy chọn Storage (Bộ nhớ) rồi chọn Browser (Trình duyệt).

c4414fe61be320a9.png

Nhấp vào nút Tạo bộ chứa

cde91311b267fc65.png

Chọn tên cho bộ nhớ (tên này phải là tên duy nhất trên toàn bộ Google Cloud) rồi nhấp vào nút Tạo

28c10e41b401f479.png

Tìm khoá bảo mật đã tự động tải xuống rồi kéo/thả hoặc tải khoá đó lên bộ chứa lưu trữ

a0f6d069d42cec4b.png

Sau khi quá trình tải khoá lên hoàn tất, khoá sẽ xuất hiện trong trình duyệt Cloud Storage

55b25c8b9d73ec19.pngS

Ghi lại tên bộ chứa và tên tệp khoá bảo mật để sử dụng sau.

5. Tạo một hàm đám mây

Điện toán đám mây đã tạo ra các mô hình điện toán không máy chủ hoàn toàn, trong đó logic có thể được tạo ra theo yêu cầu để phản hồi các sự kiện bắt nguồn từ mọi nơi. Đối với phòng thí nghiệm này, một Chức năng đám mây sẽ khởi động mỗi khi có một thông báo được xuất bản lên chủ đề thời tiết, sẽ đọc thông báo rồi lưu trữ thông báo đó trong BigQuery.

Trong Cloud Console, hãy chọn Cloud Functions

a14ac2e4f03bf831.png

Nếu bạn thấy thông báo về API, hãy nhấp vào nút Bật API

40ba0a08430e0e8a.png

Nhấp vào nút Tạo hàm

5d82d8faeffa55bf.png

Trong trường Tên, nhập function-WeatherPubSubToBQ. Đối với điều kiện kích hoạt, hãy chọn chủ đề Cloud Pub/Sub và trong trình đơn thả xuống Chủ đề, hãy chọn weatherdata. Đối với mã nguồn, chọn trình chỉnh sửa cùng dòng. Trong thẻindex.js, hãy dán mã sau lên phần bắt đầu của thẻ. Hãy nhớ thay đổi hằng số cho projectId, unitId và bảngId để phù hợp với môi trường của bạn.

/**
 * 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();
};

Trong thẻ package.json, hãy dán mã sau đây lên mã phần giữ chỗ hiện có

{
  "name": "function-weatherPubSubToBQ",
  "version": "0.0.1",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google Inc.",
  "dependencies": {
    "@google-cloud/bigquery": "^0.9.6"
  }
}

Nếu Hàm cần thực thi được đặt thành "HelloWorld", hãy thay đổi thành "subscribe". Nhấp vào nút Tạo

3266d5268980a4db.png

Bạn sẽ mất khoảng 2 phút để hàm hiển thị là đã được triển khai

26f45854948426d0.png

Xin chúc mừng! Bạn vừa kết nối Pub/Sub với BigQuery thông qua Hàm.

6. Thiết lập phần cứng IoT (không bắt buộc)

Lắp ráp Raspberry Pi và cảm biến

Nếu có nhiều hơn 7 chân, hãy cắt bớt tiêu đề xuống chỉ còn 7 chân. Hàn các chân tiêu đề vào bảng cảm biến.

a162e24426118c97.png

Cẩn thận lắp các chân đầu búa vào Raspberry Pi.

a3a697907fe3c9a9.png

Định dạng thẻ SD và cài đặt trình cài đặt NOOBS (Phần mềm ngoài hộp mới) bằng cách làm theo các bước tại đây. Lắp thẻ SD vào Raspberry Pi rồi đặt Raspberry Pi vào hộp.

1e4e2459cd3333ec.png

Sử dụng dây của bảng mạch khung để kết nối cảm biến với Raspberry Pi theo sơ đồ dưới đây.

392c2a9c85187094.pngS

Mã pin Raspberry Pi

Kết nối cảm biến

Pin 1 (3,3 V)

VIN

Pin 3 (CPIO2)

SDI

Đinh 5 (GPIO3)

SCK

Pin 9 (Đất)

GND

44322e38d467d66a.png

Kết nối màn hình (bằng đầu nối mini-HDMI), bàn phím/chuột (bằng bộ chia USB) và cuối cùng là bộ chuyển đổi nguồn.

Định cấu hình Raspberry Pi và cảm biến

Sau khi khởi động xong Raspberry Pi, chọn Raspbian cho hệ điều hành mong muốn, chắc chắn ngôn ngữ mong muốn của bạn là chính xác rồi nhấp vào Install (biểu tượng ổ đĩa cứng ở phần trên bên trái của cửa sổ).

a16f0da19b93126.png

Nhấp vào biểu tượng Wi-Fi (ở trên cùng bên phải màn hình) rồi chọn một mạng. Nếu đó là một mạng bảo mật, hãy nhập mật khẩu (khoá dùng chung trước).

17f380b2d41751a8.png

Nhấp vào biểu tượng quả mâm xôi (ở trên cùng bên trái màn hình), chọn Preferences (Lựa chọn ưu tiên) rồi chọn Raspberry Pi Configuration (Cấu hình Raspberry Pi). Từ thẻ Giao diện, bật I2C. Trong thẻ Bản địa hoá, hãy đặt Ngôn ngữ và Múi giờ. Sau khi đặt Múi giờ, hãy cho phép Raspberry Pi khởi động lại.

14741a77fccdb7e7.pngs

Sau khi khởi động lại xong, hãy nhấp vào biểu tượng dòng lệnh để mở cửa sổ dòng lệnh.

9df6f228f6a31601.pngS

Nhập lệnh sau để đảm bảo cảm biến được kết nối đúng cách.

  sudo i2cdetect -y 1

Kết quả sẽ có dạng như sau – hãy đảm bảo giá trị là 77.

cd35cd97bee8085a.png

Cài đặt Google Cloud SDK

Để tận dụng các công cụ trên nền tảng Google Cloud, bạn cần cài đặt Google Cloud SDK trên Raspberry Pi. SDK này bao gồm các công cụ cần thiết để quản lý và tận dụng Google Cloud Platform, đồng thời có sẵn cho một số ngôn ngữ lập trình.

Mở cửa sổ dòng lệnh trên Raspberry Pi nếu chưa mở và đặt biến môi trường sao cho khớp với phiên bản SDK với hệ điều hành trên Raspberry Pi.

  export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"

Bây giờ, hãy thêm vị trí lưu trữ các gói SDK Google Cloud để các công cụ cài đặt biết nơi tìm khi được yêu cầu cài đặt 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

Thêm khoá công khai từ kho lưu trữ gói của Google để Raspberry Pi xác minh tính bảo mật và tin tưởng nội dung trong quá trình cài đặt

  curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

Đảm bảo rằng tất cả phần mềm trên Raspberry Pi đều được cập nhật và cài đặt SDK Google Cloud cốt lõi

  sudo apt-get update && sudo apt-get install google-cloud-sdk

Khi thấy thông báo "Bạn có muốn tiếp tục không?", hãy nhấn Enter.

Cài đặt gói xu hướng bằng trình quản lý gói Python. Gói này dùng để kiểm tra xem một tập lệnh có đang chạy nhiều lần hay không và có đang được cài đặt cho ứng dụng của tập lệnh đó vào tập lệnh thời tiết hay không.

  pip install tendo

Đảm bảo bạn đã cài đặt và cập nhật các gói Google Cloud PubSub và OAuth2 cho Python bằng trình quản lý gói Python

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

Khởi chạy Google Cloud SDK

SDK này cho phép truy cập từ xa, đã xác thực vào Google Cloud. Trong lớp học lập trình này, ứng dụng này sẽ được dùng để truy cập vào bộ chứa bộ nhớ để có thể dễ dàng tải khoá bảo mật xuống Raspberry Pi.

Trên dòng lệnh trên Raspberry Pi, hãy nhập

  gcloud init --console-only

Khi được nhắc "Bạn có muốn đăng nhập (Y/n) không?", hãy nhấn Enter.

Khi bạn thấy thông báo "Truy cập vào đường liên kết sau đây trong trình duyệt của bạn:", sau đó là một URL dài bắt đầu bằng https://accounts.google.com/o/oauth?..., hãy di chuột qua URL đó, nhấp chuột phải và chọn "Sao chép URL". Sau đó, hãy mở trình duyệt web (biểu tượng quả địa cầu màu xanh dương ở góc trên cùng bên trái của màn hình), nhấp chuột phải vào thanh địa chỉ rồi nhấp vào "Dán".

Khi bạn thấy màn hình Đăng nhập, hãy nhập địa chỉ email được liên kết với tài khoản Google Cloud của bạn rồi nhấn Enter. Sau đó, nhập mật khẩu của bạn rồi nhấp vào nút Tiếp theo.

Bạn sẽ được nhắc rằng Google Cloud SDK muốn truy cập vào Tài khoản Google của bạn. Nhấp vào nút Cho phép.

Bạn sẽ thấy mã xác minh. Sử dụng chuột để đánh dấu, sau đó nhấp chuột phải rồi chọn Sao chép. Quay lại cửa sổ dòng lệnh, đảm bảo con trỏ nằm ở bên phải của "Enter verification code:" (Nhập mã xác minh:), nhấp chuột phải rồi chọn Dán. Nhấn nút Enter.

Nếu bạn được yêu cầu "Chọn dự án trên đám mây để sử dụng:", hãy nhập số tương ứng với tên dự án mà bạn đang sử dụng cho lớp học lập trình này, sau đó nhấn Enter.

Nếu bạn được nhắc bật API điện toán, hãy nhấn nút Enter để bật API đó. Sau đó, bạn sẽ được yêu cầu định cấu hình các chế độ cài đặt của Google Compute Engine. Nhấn Enter. Bạn sẽ thấy danh sách các khu vực/vùng có thể chọn – hãy chọn một khu vực/vùng gần bạn, nhập số tương ứng rồi nhấn Enter.

Trong giây lát, bạn sẽ thấy một số thông tin bổ sung xuất hiện. Google Cloud SDK hiện đã được định cấu hình. Từ giờ trở đi, bạn có thể đóng cửa sổ trình duyệt web vì không cần dùng đến nữa.

Cài đặt phần mềm cảm biến và tập lệnh thời tiết

Từ dòng lệnh trên Raspberry Pi, hãy nhân bản các gói cần thiết để đọc thông tin từ các chân đầu vào/đầu ra.

  git clone https://github.com/adafruit/Adafruit_Python_GPIO

Cài đặt các gói đã tải xuống

  cd Adafruit_Python_GPIO

  sudo python setup.py install

  cd ..

Sao chép mã dự án bật cảm biến thời tiết

  git clone https://github.com/googlecodelabs/iot-data-pipeline

Sao chép trình điều khiển cảm biến vào cùng thư mục với phần còn lại của phần mềm đã tải xuống.

  cd iot-data-pipeline/third_party/Adafruit_BME280

  mv Adafruit_BME280.py ../..

  cd ../..

Chỉnh sửa tập lệnh bằng cách nhập...

  nano checkWeather.py

Thay đổi dự án thành mã dự án và chủ đề thành tên chủ đề Pub/Sub (những thông tin này đã được ghi chú trong phần Thiết lập và Tạo chủ đề Pub/Sub của lớp học lập trình này).

Thay đổi các giá trị sensorID, sensorZipCode, sensorLat và sensorLong thành bất kỳ giá trị nào bạn muốn. Bạn có thể xem giá trị Vĩ độ và Kinh độ của một địa điểm hoặc địa chỉ cụ thể tại đây.

Khi bạn đã hoàn tất những thay đổi cần thiết, nhấn Ctrl-X để bắt đầu thoát khỏi trình chỉnh sửa nano. Nhấn Y để xác nhận.

# 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"

Cài đặt khoá bảo mật

Sao chép khoá bảo mật (trong phần "Xuất bản an toàn tới một chủ đề") vào Raspberry Pi.

Nếu đã sử dụng SFTP hoặc SCP để sao chép khoá bảo mật từ máy cục bộ sang Raspberry Pi (vào thư mục /home/pi), thì bạn có thể bỏ qua bước tiếp theo và chuyển xuống để xuất đường dẫn.

Nếu đã đặt khoá bảo mật vào một bộ chứa lưu trữ, bạn sẽ cần ghi nhớ tên của bộ chứa lưu trữ và tên của tệp. Sử dụng lệnh gsutil để sao chép khoá bảo mật. Lệnh này có thể truy cập vào Google Storage (tại sao lệnh này có tên là GCR và tại sao đường dẫn đến tệp bắt đầu bằng gs://). Hãy nhớ thay đổi lệnh bên dưới để có tên bộ chứa và tên tệp.

  gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .

Bạn sẽ thấy một thông báo cho biết tệp đang được sao chép và sau đó thao tác đã hoàn tất.

Trên dòng lệnh của Raspberry Pi, hãy xuất đường dẫn đến khoá bảo mật (thay đổi tên tệp cho phù hợp với tên tệp bạn có)

  export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json

Bây giờ, bạn đã có một cảm biến thời tiết IoT đã hoàn thiện và đã sẵn sàng để truyền dữ liệu đến Google Cloud.

7. Bắt đầu quy trình dữ liệu

Có thể cần bật Compute API

Luồng dữ liệu từ Raspberry Pi

Nếu bạn đã chế tạo một cảm biến thời tiết Raspberry Pi IoT, hãy khởi động tập lệnh sẽ đọc dữ liệu thời tiết và đẩy tập lệnh đó lên Google Cloud Pub/Sub. Nếu bạn không ở trong thư mục /home/pi/iot-data-pipeline, hãy chuyển đến thư mục đó trước

  cd /home/pi/iot-data-pipeline

Bắt đầu tập lệnh thời tiết

  python checkWeather.py

Bạn sẽ thấy cửa sổ dòng lệnh đọc to kết quả dữ liệu thời tiết mỗi phút. Với luồng dữ liệu, bạn có thể chuyển sang phần tiếp theo (Kiểm tra để đảm bảo rằng Dữ liệu đang tự chạy).

Luồng dữ liệu được mô phỏng

Nếu không xây dựng cảm biến thời tiết IoT, bạn có thể mô phỏng hoạt động truyền dữ liệu bằng cách sử dụng một tập dữ liệu công khai đã được lưu trữ trong Google Cloud Storage và cấp dữ liệu vào chủ đề Pub/Sub hiện có. Google Dataflow cùng với mẫu do Google cung cấp để đọc từ Cloud Storage và xuất bản lên Pub/Sub sẽ được sử dụng.

Trong quá trình này, Dataflow sẽ cần một vị trí lưu trữ tạm thời, vì vậy, hãy tạo một bộ chứa lưu trữ cho mục đích này.

Trong Cloud Console, hãy chọn Storage (Bộ nhớ) rồi chọn Browser (Trình duyệt).

c4414fe61be320a9.png

Nhấp vào nút Tạo bộ chứa

cde91311b267fc65.png

Chọn tên cho bộ nhớ (hãy nhớ rằng tên này phải là tên duy nhất trên toàn bộ Google Cloud) rồi nhấp vào nút Tạo. Hãy nhớ tên của bộ nhớ này vì bạn sẽ cần đến nó trong thời gian ngắn.

1dad4cfbccfc96b1.png.

Trong Cloud Console, hãy chọn Dataflow.

43ec245b47ae2e78.png

Nhấp vào Tạo công việc từ mẫu (phần phía trên của màn hình)

da55aaf2a1b0a0d0.png

Điền thông tin chi tiết về công việc như minh hoạ bên dưới, chú ý đến những điều sau:

  • Nhập tên công việc là dataflow-gcs-to-pubsub
  • Khu vực của bạn sẽ tự động chọn theo vị trí lưu trữ dự án và bạn không cần thay đổi.
  • Chọn một mẫu Cloud Dataflow cho Cloud Pub/Sub
  • Đối với (các) tệp Cloud Storage đầu vào, hãy nhập gs://codelab-iot-data-pipeline-sampleweatherdata/*.json (đây là tập dữ liệu công khai)
  • Đối với chủ đề Output Pub/Sub, đường dẫn chính xác sẽ tuỳ thuộc vào tên dự án và có dạng như "projects/yourProjectName/topics/Weatherdata"
  • Đặt Vị trí tạm thời thành tên của bộ chứa Google Cloud Storage mà bạn vừa tạo cùng với tiền tố tên tệp là "tmp". Mã này sẽ có dạng như "gs://myStorageName/tmp".

Khi bạn đã điền tất cả thông tin (xem bên dưới), hãy nhấp vào nút Chạy công việc

5f8ca16672f19d9b.pngS

Công việc Dataflow sẽ bắt đầu chạy.

e020015c369639ad.png

Công việc Dataflow sẽ mất khoảng một phút để hoàn tất.

218a3ff7197dcf75.png

8. Kiểm tra để đảm bảo dữ liệu đang lưu chuyển

Nhật ký của Hàm trên đám mây

Đảm bảo rằng Pub/Sub đang kích hoạt Chức năng đám mây

  gcloud beta functions logs read function-weatherPubSubToBQ

Nhật ký sẽ cho thấy hàm đang thực thi, dữ liệu đang được nhận và được chèn vào BigQuery

d88f7831dabc8b3f.png

Dữ liệu BigQuery

Kiểm tra để đảm bảo rằng dữ liệu đang được chuyển vào bảng BigQuery. Từ Bảng điều khiển Cloud, hãy truy cập vào BigQuery (bigquery.cloud.google.com).

85627127d58f1d2e.png

Dưới tên dự án (ở bên trái của cửa sổ), hãy nhấp vào Tập dữ liệu (WeatherData), sau đó nhấp vào nút Bảng truy vấn trên bảng (WeatherDataTable)

44dc0f765a69580c.png.

Thêm dấu hoa thị vào câu lệnh SQL để câu lệnh đó đọc là SELECT * FROM... như minh hoạ bên dưới, sau đó nhấp vào nút RUN QUERY (CHẠY TRUY VẤN)

b3a001e11c2902f2.png

Nếu được nhắc, hãy nhấp vào nút Run query (Chạy truy vấn)

2c894d091b789ca3.png

Nếu bạn thấy kết quả thì dữ liệu đang lưu chuyển đúng cách.

c8a061cebb7b528a.png

Khi dữ liệu đã được truyền, bạn đã sẵn sàng tạo một trang tổng quan phân tích.

9. Tạo trang tổng quan Data Studio

Google Data Studio hiển thị dữ liệu của bạn dưới dạng các bảng tổng hợp và báo cáo chứa nhiều thông tin, dễ đọc, dễ chia sẻ, đồng thời hoàn toàn có thể tùy chỉnh.

Trên trình duyệt web, hãy truy cập vào https://datastudio.google.com

10f8c27060cd7430.pngS

Trong phần "Bắt đầu một báo cáo mới", hãy nhấp vào biểu tượng Trống, rồi nhấp vào nút Bắt đầu

df1404bc0047595e.png

Hãy đánh dấu vào hộp để chấp nhận các điều khoản, nhấp vào nút Tiếp theo, chọn những email bạn muốn nhận rồi nhấp vào nút Xong. Một lần nữa, trong phần "Bắt đầu một báo cáo mới", hãy nhấp vào biểu tượng Trống

55e91d3dd88b05ca.png.

Nhấp vào nút Tạo nguồn dữ liệu mới

a22f3fac05774fc9.png

Nhấp vào BigQuery, sau đó nhấp vào nút Uỷ quyền rồi chọn Tài khoản Google bạn muốn dùng với Data Studio (tài khoản này phải giống với tài khoản mà bạn đang sử dụng cho lớp học lập trình này).

5ab03f341edc8964.png

Nhấp vào nút Cho phép

22bcdbb5f5f1d30c.png

Chọn tên dự án, tập dữ liệu và bảng. Sau đó, hãy nhấp vào nút Kết nối.

dc6b6b0ed9ced509.png

Thay đổi các trường type như minh hoạ dưới đây (mọi thứ phải là số trừ timecollected và sensorID). Xin lưu ý rằng timecollected được đặt thành Ngày giờ (chứ không chỉ là Ngày). Thay đổi các trường Tổng hợp như minh hoạ bên dưới (điểm sương, nhiệt độ, độ ẩm và áp suất phải là giá trị trung bình và mọi giá trị khác phải được đặt thành "Không có"). Nhấp vào nút Tạo báo cáo.

c60887e29c3bdf9b.png

Xác nhận bằng cách nhấp vào nút Thêm vào báo cáo

5ec3888dfdd85095.png

Nếu được yêu cầu chọn Tài khoản Google, hãy chọn rồi nhấp vào nút Cho phép để cho phép Data Studio lưu trữ báo cáo trong Google Drive.

7b8006a813b3defa.png.

Bạn sẽ thấy một trang tổng quan trống để tạo trang tổng quan. Trong hàng biểu tượng trên cùng, hãy chọn Dòng thời gian.

c7cd97354e1cde04.png

Vẽ một hình chữ nhật ở góc trên cùng bên trái của trang tính trống. Hình ảnh này sẽ chiếm khoảng ¼ tổng số trang trống.

e0e82cb19921f835.png

Ở bên phải cửa sổ, hãy chọn thẻ Kiểu. Thay đổi dữ liệu bị thiếu từ "Điểm ngắt dòng" thành "Ngắt dòng". Trong phần Trục Y bên trái, hãy xoá số 0 khỏi Trục tối thiểu để thay đổi thành (Tự động).

c7620bfe734d546.png

Nhấp vào biểu đồ trên trang tính và sao chép/dán (Ctrl-C/Ctrl-V) nó 3 lần. Căn chỉnh các biểu đồ sao cho mỗi biểu đồ có ¼ bố cục.

9a7d3faa28996219.png

Nhấp vào từng biểu đồ rồi trong mục Thuộc tính và dữ liệu của chuỗi thời gian, hãy nhấp vào chỉ số hiện có (điểm sương), chọn một chỉ số khác để hiển thị cho đến khi cả 4 chỉ số thời tiết (điểm sương, nhiệt độ, độ ẩm và áp suất) đều có biểu đồ riêng.

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

Giờ đây, bạn đã có một trang tổng quan cơ bản!

8f59e8f4d44b8552.pngS

10. Xin chúc mừng!

Bạn đã tạo toàn bộ một quy trình dữ liệu! Trong quá trình này, bạn đã tìm hiểu cách sử dụng Google Pub/Sub, cách triển khai Hàm không máy chủ, cách tận dụng BigQuery và cách tạo trang tổng quan về số liệu phân tích bằng Data Studio. Ngoài ra, bạn đã thấy cách sử dụng an toàn SDK Google Cloud để đưa dữ liệu vào Google Cloud Platform. Cuối cùng, bạn đã có một số kinh nghiệm thực tế về một mẫu cấu trúc quan trọng có thể xử lý số lượng lớn trong khi vẫn duy trì khả năng sẵn sàng.

79cd6c68e83f7fea.png

Dọn dẹp

Sau khi thử nghiệm xong dữ liệu thời tiết và quy trình phân tích, bạn có thể xoá các tài nguyên đang chạy.

Nếu bạn đã tạo cảm biến IoT, hãy tắt cảm biến đó. Nhấn tổ hợp phím Ctrl-C trong cửa sổ dòng lệnh để dừng tập lệnh, sau đó nhập nội dung sau để tắt Raspberry Pi

  shutdown -h now

Truy cập Cloud Functions, nhấp vào hộp đánh dấu bên cạnh hàm function-WeatherPubSubToBQ rồi nhấp vào Delete

ae95f4f7178262e0.png

Chuyển đến Pub/Sub, nhấp vào Chủ đề, nhấp vào hộp đánh dấu bên cạnh chủ đề dữ liệu thời tiết rồi nhấp vào Xoá

6fb0bba3163d9a32.pngs

Chuyển đến phần Bộ nhớ, nhấp vào hộp đánh dấu bên cạnh các bộ chứa lưu trữ rồi nhấp vào Xoá

9067fb2af9f907f4.png

Truy cập vào bigquery.cloud.google.com, nhấp vào mũi tên xuống bên cạnh tên dự án, nhấp vào mũi tên xuống bên phải tập dữ liệu weatherData, rồi nhấp vào Xoá tập dữ liệu.

a952dfeec49248c4.png

Khi được nhắc, hãy nhập ID tập dữ liệu (WeatherData) để hoàn tất việc xoá dữ liệu.

6310b1cc8da31a77.png