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.
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í.
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ó
- Tài khoản Google Cloud Platform. Người dùng mới của Google Cloud Platform đủ điều kiện nhận 300 USD dùng thử miễn phí.
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.
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ổ đó).
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"
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"
Nhấp vào dấu "+" bên cạnh Tập dữ liệu để tạo một bảng mới
Đố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.
Bạn sẽ thấy kết quả như sau...
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ủ đề.
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.
Nhấp vào nút Tạo chủ đề
Nhập "dữ liệu thời tiết" làm tên chủ đề rồi nhấp vào Tạo
Bạn sẽ thấy chủ đề mới tạo
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ụ)
Nhấp vào nút Tạo tài khoản dịch vụ
Trong trình đơn thả xuống Vai trò, hãy chọn vai trò Nhà xuất bản Pub/Sub
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"
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.
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 đó.
Để 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).
Nhấp vào nút Tạo bộ chứa
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
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ữ
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
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
Nếu bạn thấy thông báo về API, hãy nhấp vào nút Bật API
Nhấp vào nút Tạo hàm
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
Bạn sẽ mất khoảng 2 phút để hàm hiển thị là đã được triển khai
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.
Cẩn thận lắp các chân đầu búa vào Raspberry Pi.
Đị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.
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.
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 |
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ổ).
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).
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.
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.
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.
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).
Nhấp vào nút Tạo bộ chứa
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.
Trong Cloud Console, hãy chọn Dataflow.
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)
Đ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
Công việc Dataflow sẽ bắt đầu chạy.
Công việc Dataflow sẽ mất khoảng một phút để hoàn tất.
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
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).
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)
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)
Nếu được nhắc, hãy nhấp vào nút Run query (Chạy truy vấn)
Nếu bạn thấy kết quả thì dữ liệu đang lưu chuyển đúng cách.
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
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
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
Nhấp vào nút Tạo nguồn dữ liệu mới
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).
Nhấp vào nút Cho phép
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.
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.
Xác nhận bằng cách nhấp vào nút Thêm vào báo cáo
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.
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.
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.
Ở 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).
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.
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.
Giờ đây, bạn đã có một trang tổng quan cơ bản!
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.
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
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á
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á
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.
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.