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 xuất phát cho nhiều trang web, nhưng thành công thường đi kèm với những thách thức về khả năng 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 cách nào để phân phối dữ liệu đó cho nhiều hệ thống kinh doanh chính? Những vấn đề này cùng với nhu cầu của các ứng dụng quy mô lớn trên 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 kiến trúc sử dụng các quy trình dữ liệu để đạt được các hệ thống có khả năng phục hồi theo thời gian thực. Do đó, việc hiểu cách xuất bản dữ liệu theo thời gian thực vào một hệ thống nhắn tin phân tán, sau đó là cách xây dựng một 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 của vạn vật (IoT), sử dụng hàng đợi tin nhắn để nhận và phân phối dữ liệu, tận dụng một hàm không máy chủ để di chuyển dữ liệu đến một 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 Google Cloud Platform sẽ tạo thành quy trình dữ liệu. Mặc dù việc xây dựng Raspberry Pi mang lại nhiều lợi ích, nhưng đây là phần không bắt buộc của lớp học lập trình này 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 liên tục cung cấp dữ liệu 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 một Google Cloud Function
  • 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ó

  • Tài khoản Google Cloud Platform. Người dùng mới của Google Cloud Platform đủ điều kiện dùng thử miễn phí trị giá 300 USD.

Nếu muốn tạo 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à một tập lệnh, bạn cũng cần có những thứ sau ( bạn có thể đặt hàng dưới dạng một bộ hoàn chỉnh hoặc dưới dạng các bộ phận riêng lẻ tại đây)...

  • Raspberry Pi Zero W kèm nguồn điện, thẻ nhớ SD và hộp đựng
  • Máy đọ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 cắm trên bảng mạch thử nghiệm (female-to-female)
  • Đầu búa GPIO
  • Cảm biến BME280
  • Mỏ hàn có chì hàn

Ngoài ra, bạn cần có quyền truy cập vào màn hình máy tính hoặc TV có cổng đầ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 gói dùng thử miễn phí trị giá 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 bài thực hành này hoặc bạn có thể 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à một tên duy nhất trên tất cả các dự án Google Cloud (mã dự án bên dưới đã được sử dụng và sẽ không hoạt động đối với bạn). Ghi lại mã dự án của bạn (ví dụ: Mã dự án của bạn sẽ là _____) vì bạn sẽ cần mã này sau.

f414a63d955621a7.png

3415e861c09cd06a.png

Việc chạy lớp học lập trình này sẽ không tốn quá vài đô la, nhưng có thể tốn nhiều 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 này chạy. Hãy nhớ xem phần Dọn dẹp ở cuối lớp học lập trình.

3. Tạo bảng BigQuery

BigQuery là một kho dữ liệu doanh nghiệp không 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 một trang tổng quan phân tích truy vấn thông tin.

Hãy tạo một bảng lưu trữ tất cả dữ liệu thời tiết của IoT. Chọn BigQuery trong bảng điều khiển Cloud. 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 của bạ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í lưu trữ rồi 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 đến, hãy nhập weatherDataTable. Trong phần Lược đồ, 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ạ bên dưới, đồng thời nhớ chọn Loại phù hợp cho từng 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 một 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ó khả năng mở rộng cho hệ thống phân tích dữ liệu truyền phát trực tuyến và hệ thống điện toán dựa trên sự kiện. Do đó, nó rất phù hợp để xử lý các thông báo IoT đến và sau đó cho phép các hệ thống hạ nguồn xử lý các thông báo đó.

Nếu bạn vẫn đang ở trong cửa sổ 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 Topics (Chủ đề).

331ad71e8a1ea7b.png

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

9f6fca9dc8684801.png

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

643670164e9fae12.png

Nhập "weatherdata" 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.png

Giờ đây, bạn đã có một chủ đề Pub/Sub để vừa đăng tin nhắn IoT lên vừa cho phép các quy trình khác truy cập vào những tin nhắn đó.

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

Nếu dự định xuất bản thông báo cho chủ đề Pub/Sub từ các tài nguyên bên ngoài Google Cloud Console (ví dụ: cảm biến IoT), bạn cần 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 & Admin (IAM và Quản trị) rồi 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), đánh dấu vào 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 rồi nhấp vào "Tạo"

7e3f9d7e56a44796.png

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

60a7da32dd85ba73.png

Bạn sẽ thấy rằng một tài khoản dịch vụ đã được tạo và có một Mã khoá được 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 ta 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 vùng chứa

cde91311b267fc65.png

Chọn tên cho bộ chứa lưu trữ (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 đã được tự động tải xuống rồi kéo/thả hoặc tải khoá đó lên vùng 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.png

Ghi lại tên của nhóm lưu trữ và tên tệp khoá bảo mật để sử dụng sau.

5. Tạo một Cloud Function

Điện toán đám mây đã tạo ra các mô hình điện toán hoàn toàn không máy chủ, trong đó logic có thể được tăng tốc theo yêu cầu để phản hồi các sự kiện bắt nguồn từ mọi nơi. Trong phòng thí nghiệm này, Cloud Functions sẽ bắt đầu mỗi khi một thông báo được xuất bản cho 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, hãy nhập function-weatherPubSubToBQ. Đối với Trình kích hoạt, hãy chọn chủ đề Cloud Pub/Sub và chọn weatherdata trong trình đơn thả xuống Chủ đề. Đối với mã nguồn, hãy chọn trình chỉnh sửa nội tuyến. Trong thẻ index.js, hãy dán mã sau vào nội dung hiện có để bắt đầu. Đảm bảo bạn thay đổi các hằng số cho projectId, datasetId và tableId để phù hợp với môi trường của mình.

/**
 * 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 đoạn mã sau vào đoạn mã 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

Sẽ mất khoảng 2 phút cho đến khi hàm của bạn cho thấy rằng hàm đã đượ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 Functions.

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ó hơn 7 ghim, hãy cắt bớt tiêu đề xuống chỉ còn 7 ghim. Hàn các chân cắm vào bảng cảm biến.

a162e24426118c97.png

Cẩn thận lắp các chân đầu giắc cắm 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 mới nguyên hộp) 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 trên bảng mạch thử để kết nối cảm biến với Raspberry Pi theo sơ đồ bên dưới.

392c2a9c85187094.png

Chân cắm Raspberry Pi

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

Chân 1 (3,3 V)

VIN

Chân 3 (CPIO2)

SDI

Chân 5 (GPIO3)

SCK

Chân 9 (Nối đấ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 cổng USB) và cuối cùng là bộ sạc.

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

Sau khi Raspberry Pi khởi động xong, hãy chọn Raspbian làm hệ điều hành mong muốn, đảm bảo ngôn ngữ bạn muốn là chính xác rồi nhấp vào Install (Cài đặt) (biểu tượng ổ 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ạng được bảo mật, hãy nhập mật khẩu (khoá dùng chung).

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 (Tuỳ chọn ưu tiên) rồi chọn Raspberry Pi Configuration (Cấu hình Raspberry Pi). Trong thẻ Giao diện, hãy bật I2C. Trong thẻ Bản địa hoá, hãy đặt Ngôn ngữ và Múi giờ. Sau khi thiết lập múi giờ, hãy cho phép Raspberry Pi khởi động lại.

14741a77fccdb7e7.png

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

9df6f228f6a31601.png

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 kết quả 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 nhiều ngôn ngữ lập trình.

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

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

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

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

Khi thấy lời nhắc "Bạn có muốn tiếp tục không?", hãy nhấn phím Enter.

Cài đặt gói tendo bằng trình quản lý gói Python. Gói này được 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 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, được xác thực vào Google Cloud. Đối với lớp học lập trình này, bạn sẽ dùng tài khoản dịch vụ để truy cập vào vùng lưu trữ, nhờ đó có thể dễ dàng tải khoá bảo mật xuống Raspberry Pi.

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

  gcloud init --console-only

Khi thấy lời nhắc "Bạn có muốn đăng nhập không (Y/n)?", hãy nhấn phím Enter.

Khi bạn thấy thông báo "Truy cập vào đường liên kết sau trong trình duyệt:" kèm theo một URL dài bắt đầu bằng https://accounts.google.com/o/oauth?..., hãy di chuột lên URL đó, nhấp chuột phải rồi 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 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 liên kết với tài khoản Google Cloud của bạn rồi nhấn Enter. Sau đó, hãy nhập mật khẩu rồi nhấp vào nút Tiếp theo.

Bạn sẽ nhận được lời nhắc cho biết 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. Dùng chuột để đánh dấu, sau đó nhấp chuột phải và chọn Sao chép. Quay lại cửa sổ thiết bị đầu cuối, đảm bảo con trỏ nằm ở bên phải "Enter verification code:" (Nhập mã xác minh:), nhấp chuột phải bằng chuột 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 dùng cho lớp học lập trình này, rồi nhấn Enter.

Nếu bạn được nhắc bật API tính toán, hãy nhấn nút Enter để bật API này. Sau đó, bạn sẽ được yêu cầu thiết lập chế độ cài đặt Google Compute Engine. Nhấn Enter. Bạn sẽ thấy một danh sách các khu vực/vùng có thể có – 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. Bạn có thể đóng cửa sổ trình duyệt web vì sẽ 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 sao chép 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 ..

Nhân bản mã dự án cho phép 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 kịch bản bằng cách nhập...

  nano checkWeather.py

Thay đổi dự án thành mã dự án của bạn và thay đổi 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ể tìm thấy giá trị Vĩ độ và Kinh độ cho một vị trí hoặc địa chỉ cụ thể tại đây.

Khi bạn đã hoàn tất việc thực hiện các thay đổi cần thiết, hãy nhấn Ctrl-X để bắt đầu thoát 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 vào một chủ đề") vào Raspberry Pi.

Nếu đã 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 sang bước xuất đường dẫn.

Nếu đã đặt khoá bảo mật vào một vùng lưu trữ, bạn cần nhớ tên của vùng lưu trữ và tên của tệp. 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 (đó là lý do lệnh này có tên là gsutil và đườ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 nhóm và tên tệp của bạn.

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

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

Trên dòng lệnh của Raspberry Pi, hãy xuất mộ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

Giờ đây, bạn đã hoàn thành việc tạo cảm biến thời tiết IoT và sẵn sàng truyền dữ liệu đến Google Cloud.

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

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

Truyền trực tuyến dữ liệu từ Raspberry Pi

Nếu bạn đã tạo một cảm biến thời tiết IoT Raspberry Pi, hãy bắt đầu tập lệnh sẽ đọc dữ liệu thời tiết và đẩy dữ liệu đó lên Google Cloud Pub/Sub. Nếu bạn không ở trong thư mục /home/pi/iot-data-pipeline, hãy di chuyển đến đó 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 lặp lại kết quả dữ liệu thời tiết mỗi phút. Khi dữ liệu đang truyền, bạn có thể chuyển sang phần tiếp theo (Kiểm tra xem dữ liệu có đang truyền hay không).

Phát trực tuyến dữ liệu mô phỏng

Nếu không tạo cảm biến thời tiết IoT, bạn có thể mô phỏng việc truyền phát 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à truyền dữ liệu đó vào chủ đề Pub/Sub hiện có. Google Dataflow sẽ được dùng cùng với một mẫu do Google cung cấp để đọc từ Cloud Storage và xuất bản lên Pub/Sub.

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 vùng chứa

cde91311b267fc65.png

Chọn tên cho bộ chứa lưu trữ (hãy nhớ rằng tên này phải là tên duy nhất trên toàn cầu trong tất cả các dịch vụ của Google Cloud) rồi nhấp vào nút Tạo. Hãy nhớ tên của bộ chứa lưu trữ 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 Create Job from Template (Tạo công việc từ mẫu) (phần 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, đồng thời lưu ý những điều sau:

  • Nhập tên của công việc dataflow-gcs-to-pubsub
  • Khu vực của bạn sẽ tự động chọn theo nơi dự án của bạn được lưu trữ và bạn không cần phải thay đổi.
  • Chọn một mẫu Cloud Dataflow của GCS Text to Cloud Pub/Sub
  • Đối với(các) tệp đầu vào trên Cloud Storage, hãy nhập gs://codelab-iot-data-pipeline-sampleweatherdata/*.json (đây là một tập dữ liệu công khai)
  • Đối với Chủ đề Pub/Sub đầu ra, đường dẫn chính xác sẽ phụ thuộc vào tên dự án của bạn và sẽ 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". Đường dẫn này sẽ có dạng "gs://myStorageBucketName/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 lệnh

5f8ca16672f19d9b.png

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 được truyền

Nhật ký Cloud Functions

Đảm bảo rằng Cloud Function đang được Pub/Sub kích hoạt

  gcloud beta functions logs read function-weatherPubSubToBQ

Nhật ký phải 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 dữ liệu đang được chuyển vào bảng BigQuery. Trên Cloud Console, hãy chuyển đến BigQuery (bigquery.cloud.google.com).

85627127d58f1d2e.png

Trong tên dự án (ở bên trái cửa sổ), hãy nhấp vào Tập dữ liệu (weatherData), sau đó nhấp vào bảng (weatherDataTable) rồi nhấp vào nút Bảng truy vấn

44dc0f765a69580c.png

Thêm dấu hoa thị vào câu lệnh SQL để câu lệnh đó có dạng SELECT * FROM... như minh hoạ bên dưới, rồi nhấp vào nút CHẠY CÂU HỎI

b3a001e11c2902f2.png

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

2c894d091b789ca3.png

Nếu bạn thấy kết quả, thì tức là dữ liệu đang được truyền đúng cách.

c8a061cebb7b528a.png

Khi dữ liệu đang 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.png

Trong mục "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

Nhấp vào hộp đánh dấu để 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 mà bạn muốn sử dụng với Data Studio (đây phải là tài khoản mà bạn đã sử dụng cho lớp học lập trình).

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 của bạn. Sau đó, hãy nhấp vào nút Kết nối.

dc6b6b0ed9ced509.png

Thay đổi các trường loại như minh hoạ bên dưới (mọi thứ phải là số, ngoại 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 thứ 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 để Data Studio lưu trữ báo cáo trong Google Drive.

7b8006a813b3defa.png

Bạn sẽ thấy một canvas trống để tạo trang tổng quan. Trong hàng biểu tượng trên cùng, hãy chọn Chuỗi 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 nên chiếm khoảng ¼ tổng diện tích của tờ giấy trắng.

e0e82cb19921f835.png

Ở bên phải cửa sổ, hãy chọn thẻ Style (Kiểu). Thay đổi "Dữ liệu bị thiếu" từ "Đường đến 0" 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 rồi sao chép/dán (Ctrl-C/Ctrl-V) biểu đồ đó 3 lần. Căn chỉnh các biểu đồ sao cho mỗi biểu đồ chiếm ¼ bố cục.

9a7d3faa28996219.png

Nhấp vào từng biểu đồ, rồi nhấp vào chỉ số hiện có (điểm sương) trong mục Thuộc tính và dữ liệu chuỗi thời gian. Chọn một chỉ số khác để hiển thị cho đến khi cả 4 chỉ số về 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ờ bạn đã có một trang tổng quan cơ bản!

8f59e8f4d44b8552.png

10. Xin chúc mừng!

Bạn đã tạo một quy trình dữ liệu hoàn chỉnh! Nhờ đó, bạn đã tìm hiểu được cách sử dụng Google Pub/Sub, cách triển khai một Hàm không máy chủ, cách tận dụng BigQuery và cách tạo một trang tổng quan phân tích bằng Data Studio. Ngoài ra, bạn đã thấy cách sử dụng Google Cloud SDK một cách an toàn để đư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ới một mẫu kiến trúc quan trọng có thể xử lý khối lượng lớn trong khi vẫn duy trì tính sẵn có.

79cd6c68e83f7fea.png

Dọn dẹp

Sau khi thử nghiệm xong với 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 đã lắp đặt cảm biến IoT, hãy tắt cảm biến đó. Nhấn 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

Chuyển đến Cloud Functions, nhấp vào hộp đánh dấu bên cạnh function-weatherPubSubToBQ rồi nhấp vào Xoá

ae95f4f7178262e0.png

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

6fb0bba3163d9a32.png

Chuyển đến Bộ nhớ, nhấp vào hộp đánh dấu bên cạnh các nhóm 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 của bạ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 mã nhận dạng tập dữ liệu (weatherData) để hoàn tất việc xoá dữ liệu.

6310b1cc8da31a77.png