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 chính của doanh nghiệp? Các vấn đề này cùng với nhu cầu của các ứng dụng quy mô Internet đã thúc đẩy nhu cầu về hệ thống nhắn tin phân tán và làm phát sinh mô hình kiến trúc sử dụng đường ống dữ liệu để có được các hệ thống có khả năng phục hồi và theo thời gian thực. Do đó, việc hiểu rõ cách xuất bản dữ liệu theo thời gian thực lên một hệ thống thông báo phân tán và 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 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 chức năng không máy chủ để di chuyển dữ liệu vào kho dữ liệu rồi tạo một trang tổng quan cho thấy thông tin đó. Một 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. Tuy rất hữu ích, việc xây dựng Raspberry Pi là một phần không bắt buộc trong lớp học lập trình này. 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 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à hộp đựng
  • Đầ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 bo mạch từ cái sang cái
  • Tiêu đề GPIO Hammer
  • Cảm biến BME280
  • Mỏ hàn có mối hàn

Ngoài ra, người dùng cũng có quyền 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 tiến độ riêng

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 đảm bảo tận dụng thời gian dùng thử miễn phí 300 đô la!

Đă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 phòng thí nghiệm này hoặc 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 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.png.

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à kho dữ liệu doanh nghiệp không máy chủ, có khả năng mở rộng cao và có chi phí thấp. BigQuery sẽ là lựa chọn lý tưởng để lưu trữ dữ liệu phát trực tuyến từ các thiết bị IoT, đồng thời cho phép trang tổng quan về số liệu 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 IoT. Chọn BigQuery trong 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 phải truy cập lại vào BigQuery).

12a838f78a10144a.pngS

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.pngS

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

62cfcbd1add830ea.png.

Nhấp vào biểu tượng "+" ký hiệu bên cạnh Tập dữ liệu của bạn để 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 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ư hiển thị 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.

Bây giờ, bạn đã thiết lập kho dữ liệu để nhận dữ liệu thời tiết của mình.

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, có thể mở rộng dành cho các hệ thống phân tích luồng dữ liệu và các 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 bảng điều khiển Cloud, 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ủ đề, sau đó nhấp vào nút 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 chủ đề này theo cách an toàn

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à Tài khoản quản trị viên rồi đến 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.pngS

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. Vì chỉ có một khoá nên bạn cần phải tránh bị mất. 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ã 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 Bộ nhớ rồi chọn 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ộ chứa lưu trữ (phải là tên duy nhất trên toàn cầu trên toàn bộ Google Cloud) rồi nhấp vào nút Tạo

28c10e41b401f479.pngS

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 lưu trữ và tên tệp khoá bảo mật để 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 API, hãy nhấp vào nút Bật API

40ba0a08430e0e8a.pngS

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

5d82d8faeffa55bf.png.

Trong trường Tên, nhập function-WeatherPubSubToBQ. Đối với Trình 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 dữ liệu thời tiết. Đố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 các hằng số cho projectId, publisherId 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 lên mã giữ chỗ đang 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 để thực thi được đặt thành "HelloWorld", hãy thay đổi thành "subscribe". Nhấp vào nút Tạo

3266d5268980a4db.pngS

Sẽ mất khoảng 2 phút để chức năng của bạn hiển thị là đã triển khai

26f45854948426d0.pngs

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 chân tiêu đề hình 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 và đặt Raspberry Pi vào hộp đựng.

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

Chân 1 (3,3V)

VIN

Mã PIN 3 (CPIO2)

Độ phân giải chuẩn (SDI)

Mã PIN 5 (GPIO3)

SCK

Ghim 9 (Mặt đất)

GND

44322e38d467d66a.pngS

Kết nối màn hình (bằng đầu nối HDMI mini), bàn phím/chuột (với bộ chia USB) và cuối cùng là bộ sạc.

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

Sau khi khởi động xong Raspberry Pi, hãy 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.pngS

Nhấp vào biểu tượng mâm xôi (ở trên cùng bên trái của 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 đây để đả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ó thể sử dụng bằng 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 sẽ khớp 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í nơi 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 cậy 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 được nhắc "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 rằng bạn đã cài đặt và cập nhật các gói Google Cloud PubSub và OAuth2 dành 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 và đã xác thực vào Google Cloud. Đối với lớp học lập trình này, tài liệu này sẽ được dùng để truy cập vào bộ chứa lưu trữ để có thể dễ dàng tải khoá bảo mật xuống Raspberry Pi.

Từ dòng lệnh trên Raspberry Pi, 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 trong trình duyệt:" tiếp theo 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". Tiếp theo, mở trình duyệt web (biểu tượng đị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".

Sau khi bạn nhì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 và chọn Sao chép. Quay lại cửa sổ dòng lệnh, đảm bảo con trỏ ở bên phải tuỳ chọn "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 rồi nhấn phím Enter.

Nếu bạn được nhắc bật API tính toán, hãy nhấn nút Enter để bật. 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/khu vực tiềm năng. Hãy chọn một khu vực ở gần bạn, nhập số tương ứng rồi nhấn phím 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 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 ..

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à thay đổi chủ đề thành tên của chủ đề Pub/Sub (những điều này đã được trình bày trong các phần Thiết lập và tạo 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 mà bạn muốn. Bạn có thể tìm thấy các 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 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 androidx để sao chép khoá bảo mật. Lệnh này có thể truy cập Google Storage (tại sao lệnh được đặt 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 sao chép và sau đó thao tác đã hoàn tất.

Từ dòng lệnh trên Raspberry Pi, xuất một đường dẫn sang khoá bảo mật (thay đổi tên tệp để khớp với tên 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 chỉnh 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

Phát trực tuyến dữ liệu qua 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 Bộ nhớ rồi chọn 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ộ 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 trên toàn bộ Google Cloud) rồi nhấp vào nút Tạo. Ghi nhớ tên của bộ chứa lưu trữ này vì bạn sẽ sớm cần đến.

1dad4cfbccfc96b1.png.

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

43ec245b47ae2e78.pngs

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 chi tiết công việc như hướng dẫn dưới đây, chú ý đến những thông tin sau:

  • Nhập tên công việc của dataflow-gcs-to-pubsub
  • Khu vực của bạn sẽ được tự động chọn theo nơi lưu trữ dự án và không cần thay đổi.
  • Chọn một mẫu Cloud Dataflow để gửi văn bản GCS đến Cloud Pub/Sub
  • Đối với(các) Tệp Input Cloud Storage, 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ẽ phụ 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

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

218a3ff7197dcf75.png.

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

Nhật ký chức năng đá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ý phải cho thấy hàm đang thực thi, dữ liệu đang được nhận và dữ liệu đang đượ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.pngS

Dưới tên dự án (ở phía 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ó nội dung SELECT * FROM... như minh hoạ dưới đây rồi nhấp vào nút RUN QUERY

b3a001e11c2902f2.png

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

2c894d091b789ca3.pngS

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

c8a061cebb7b528a.png

Với luồng dữ liệu, bây giờ bạn đã sẵn sàng xây dựng một trang tổng quan về số liệu 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 mục "Bắt đầu báo cáo mới", hãy nhấp vào 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 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 báo cáo mới", hãy nhấp vào 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 chính là tài khoản mà bạn đang sử dụng cho lớp học lập trình này).

5ab03f341edc8964.pngS

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 đó nhấp vào nút Kết nối.

dc6b6b0ed9ced509.png

Thay đổi các trường loại như minh hoạ dưới đây (mọi thông tin đều phải là số ngoại trừ trường đã thu thập thời gian và mã cảm biến). Lưu ý rằng thời gian đã thu thập được đượ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.pngS

Nếu được yêu cầu chọn Tài khoản Google của bạn, 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 canvas trống để tạo trang tổng quan. Ở 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. Tệp này nên chiếm khoảng 1⁄4 tổng trang tính 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ừ "Dòng thành số 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 và sao chép/dán (Ctrl-C/Ctrl-V) nó 3 lần. Căn chỉnh các biểu đồ để mỗi biểu đồ chỉ chiếm 1⁄4 bố cục.

9a7d3faa28996219.pngS

Nhấp vào mỗi biểu đồ và trong phần 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 sẽ được hiển thị cho đến khi cả bốn 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 đã biết 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, giờ đây bạn đã có một số trải nghiệm thực tế với 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ì khả năng sử dụ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 Ctrl-C trong cửa sổ dòng lệnh để dừng tập lệnh rồi nhập nội dung sau để tắt nguồn 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-Thời tiếtPubSubToBQ, sau đó nhấp vào Xoá

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 bộ chứa lưu trữ rồi nhấp vào Xoá

9067fb2af9f907f4.pngs

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 của tập dữ liệu weatherData, rồi nhấp vào Xóa tập dữ liệu.

a952dfeec49248c4.png

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

6310b1cc8da31a77.pngS