1. Trước khi bắt đầu
Là nhà phát triển Internet vạn vật (IoT), bạn có thể xây dựng các tính năng tích hợp đám mây với đám mây để giúp người dùng điều khiển thiết bị của họ thông qua các nút điều khiển cảm ứng trong ứng dụng Google Home và lệnh thoại thông qua Trợ lý Google.
Việc tìm hiểu các công cụ gỡ lỗi cho hoạt động tích hợp giữa đám mây với đám mây là một bước quan trọng để tích hợp chất lượng sản xuất với Trợ lý Google. Để dễ dàng giám sát và gỡ lỗi, bạn có thể sử dụng Chỉ số Google Cloud Platform (GCP), Ghi nhật ký và Bộ kiểm thử cho nhà thông minh để xác định và giải quyết các vấn đề về việc tích hợp.
Điều kiện tiên quyết
- Đọc hướng dẫn dành cho nhà phát triển về cách Tạo chế độ tích hợp đám mây với đám mây
- Chạy lớp học lập trình Kết nối thiết bị nhà thông minh với Trợ lý Google
Sản phẩm bạn sẽ tạo ra
Trong lớp học lập trình này, bạn sẽ triển khai một giải pháp tích hợp từ đám mây đến đám mây có 2 lỗi và kết nối giải pháp đó với Trợ lý, sau đó gỡ lỗi các lỗi của giải pháp tích hợp thông qua Bộ kiểm thử cho nhà thông minh và các chỉ số và nhật ký của Google Cloud Platform (GCP).
Kiến thức bạn sẽ học được
- Cách sử dụng tính năng Chỉ số và Nhật ký của GCP để xác định và giải quyết các vấn đề trong môi trường thực tế
- Cách sử dụng Bộ kiểm thử cho nhà thông minh để xác định các vấn đề về chức năng và API
Bạn cần có
- Một trình duyệt web, chẳng hạn như Google Chrome
- Thiết bị iOS hoặc Android đã cài đặt ứng dụng Google Home
- Node.js phiên bản 10.16 trở lên
- Tài khoản thanh toán Google Cloud
2. Chạy ứng dụng bị lỗi
Tải mã nguồn
Nhấp vào đường liên kết sau đây để tải mẫu cho lớp học lập trình này xuống máy phát triển:
...hoặc bạn có thể sao chép kho lưu trữ GitHub từ dòng lệnh:
$ git clone https://github.com/google-home/smarthome-debug.git
Giới thiệu về dự án
Ứng dụng máy giặt chứa các thư mục con sau:
public
: Giao diện người dùng phía trước để dễ dàng kiểm soát và theo dõi trạng thái của máy giặt thông minh.functions
: Dịch vụ đám mây được triển khai đầy đủ để quản lý máy giặt thông minh bằng Cloud Functions cho Firebase và Cơ sở dữ liệu theo thời gian thực của Firebase.
Kết nối với Firebase
Mở cửa sổ dòng lệnh trên máy phát triển. Chuyển đến thư mục washer-faulty
, sau đó thiết lập Firebase CLI bằng dự án tích hợp được tạo trong Lớp học lập trình về cách kết nối các thiết bị nhà thông minh với Trợ lý Google:
$ cd washer-faulty $ firebase use <firebase-project-id>
Triển khai lên Firebase
Chuyển đến thư mục functions
và cài đặt tất cả các phần phụ thuộc cần thiết bằng npm.
$ cd functions $ npm install
Lưu ý: Nếu thấy thông báo bên dưới, bạn có thể bỏ qua và tiếp tục. Cảnh báo này là do một số phần phụ thuộc cũ và bạn có thể xem thêm thông tin chi tiết tại đây.
found 5 high severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details
Giờ đây, bạn đã cài đặt các phần phụ thuộc và định cấu hình dự án, bạn đã sẵn sàng triển khai ứng dụng máy giặt bị lỗi.
$ firebase deploy
Đây là kết quả bạn sẽ thấy trên bảng điều khiển:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<Firebase-project-id>/overview Hosting URL: https://<Firebase-project-id>.firebaseapp.com
Cập nhật HomeGraph
Mở Hosting URL (URL lưu trữ) trong trình duyệt (https://<firebase-project-id>.firebaseapp.com
) để xem ứng dụng web. Trên giao diện người dùng web, hãy nhấp vào nút Refresh (Làm mới) để cập nhật HomeGraph thông qua Request Sync (Yêu cầu đồng bộ hoá) bằng siêu dữ liệu thiết bị mới nhất từ ứng dụng máy giặt bị lỗi:
Mở ứng dụng Google Home và xác minh rằng bạn có thể thấy thiết bị máy giặt có tên Faulty Washer (Máy giặt bị lỗi).
3. Kiểm thử quá trình tích hợp
Sau khi triển khai dự án, hãy kiểm tra để đảm bảo rằng tính năng tích hợp của bạn kiểm soát được máy giặt.
Kiểm thử máy giặt
Kiểm tra sự thay đổi về giá trị khi bạn thử bất kỳ lệnh thoại nào sau đây thông qua điện thoại:
"Ok Google, bật máy giặt."
"Ok Google, khởi động máy giặt."
"Ok Google, tạm dừng máy giặt."
"Ok Google, tiếp tục chu trình giặt."
"Ok Google, dừng máy giặt."
Bạn sẽ thấy Trợ lý phản hồi bằng giọng nói rằng có gì đó không ổn khi bạn tạm dừng / tiếp tục máy giặt:
"Rất tiếc, tôi không thể truy cập vào <tên hiển thị của dự án>."
Để gỡ lỗi vấn đề này, trước tiên, bạn cần có thêm thông tin về lỗi để thu hẹp và xác định nguyên nhân gốc rễ.
Trang tổng quan về Phân tích nhà thông minh
Trang tổng quan về Smarthome Analytics là nơi phù hợp để kiểm tra lỗi. Trang tổng quan này tổng hợp các biểu đồ về Chỉ số về mức sử dụng và tình trạng cho phương thức thực hiện đơn hàng trên đám mây:
- Chỉ số Mức sử dụng phản ánh xu hướng sử dụng của tính năng tích hợp từ đám mây sang đám mây, bao gồm số người dùng đang hoạt động hằng ngày và tổng số yêu cầu thực hiện đơn hàng.
- Chỉ số Tình trạng giúp bạn theo dõi sự xuất hiện của các trường hợp bất thường trong quá trình tích hợp Đám mây với đám mây, bao gồm độ trễ yêu cầu, tỷ lệ thành công và bảng chi tiết lỗi.
Để thu hẹp nguyên nhân gây ra lỗi, hãy làm theo các bước dưới đây để truy cập vào trang tổng quan của dự án.
- Trong Developer Console (Bảng điều khiển dành cho nhà phát triển), hãy chuyển đến trang Projects (Dự án).
- Chọn dự án nhà thông minh của bạn.
- Nhấp vào thẻ Số liệu phân tích trên trình đơn bên trái.
- Thao tác này sẽ đưa bạn đến danh sách trang tổng quan cho dự án của bạn trên Google Cloud. Chọn trang tổng quan Google Home Analytics – Tích hợp trên đám mây.
- Cuộn xuống biểu đồ Lỗi thực hiện đơn hàng trên đám mây – Bảng chi tiết về trạng thái để xem mã lỗi cho phạm vi thời gian được làm nổi bật.
Mã lỗi PARTNER_RESPONSE_MISSING_DEVICE
cung cấp gợi ý về nguyên nhân gốc rễ. Tiếp theo, hãy truy xuất nhật ký sự kiện dựa trên mã lỗi để biết thêm thông tin chi tiết.
Truy cập nhật ký sự kiện
Để biết thêm thông tin chi tiết về lỗi này, hãy truy cập vào nhật ký sự kiện cho hoạt động tích hợp Cloud-to-cloud thông qua tính năng Ghi nhật ký trên đám mây.
Mở Navigation Menu (Trình đơn điều hướng) trong Google Cloud Platform, rồi trong mục Operations (Thao tác), hãy chọn Logging (Ghi nhật ký) > Logs Explorer (Trình khám phá nhật ký) để truy cập vào nhật ký sự kiện cho dự án của bạn. Ngoài ra, bạn có thể tìm kiếm Trình khám phá nhật ký trong hộp tìm kiếm.
Trong trường nhập Search all fields (Tìm kiếm tất cả trường), hãy nhập truy vấn PARTNER_RESPONSE_MISSING_DEVICE
rồi nhấp vào Run Query (Chạy truy vấn). Các nhật ký khớp với truy vấn sẽ xuất hiện trong mục Kết quả.
Nhật ký lỗi cho thấy một sự kiện nhà thông minh có thông tin chi tiết về lỗi cho biết:
- Hành động mà người dùng thực hiện là "tiếp tục máy giặt" (
actionType:
"STARTSTOP_UNPAUSE
"), tương ứng với lệnh thoại gần đây không thành công. - Thông báo gỡ lỗi được liên kết là "
JSON response does not include device.
"
Dựa trên thông báo gỡ lỗi, bạn nên kiểm tra lý do ứng dụng máy giặt không đưa thiết bị chính xác vào phản hồi EXECUTE
.
Xác định nguyên nhân gốc rễ của lỗi
Trong functions/index.js
, hãy tìm trình xử lý EXECUTE
(trong mảng onExecute
) trả về trạng thái của từng lệnh và trạng thái thiết bị mới. Việc chèn mã thiết bị vào phản hồi EXECUTE
phụ thuộc vào việc phân giải hàm updateDevice
:
index.js
app.onExecute(async (body) => {
...
for (const command of intent.payload.commands) {
for (const device of command.devices) {
for (const execution of command.execution) {
executePromises.push(
updateDevice(execution, device.id)
.then((data) => {
result.ids.push(device.id);
Object.assign(result.states, data);
})
.catch((e) =>
functions.logger.error('EXECUTE',
device.id, e.message)));
}
}
}
Hãy kiểm tra thêm cách hàm updateDevice
xử lý việc tạm dừng / tiếp tục trên máy giặt và bạn sẽ thấy chuỗi cần so khớp cho lệnh tạm dừng / tiếp tục không chính xác:
index.js
const updateDevice = async (execution, deviceId) => {
const {params, command} = execution;
let state; let ref;
switch (command) {
...
case 'action.devices.commands.PauseUnpausePause':
state = {isPaused: params.pause};
if (params.pause) state.isRunning = false;
ref = firebaseRef.child(deviceId).child('StartStop');
break;
}
return ref.update(state)
.then(() => state);
};
Khắc phục lỗi
Giờ đây, khi đã xác định được nguyên nhân gốc rễ của lỗi, bạn có thể sửa chuỗi cho lệnh tạm dừng / tiếp tục:
index.js
const updateDevice = async (execution, deviceId) => {
const {params, command} = execution;
let state; let ref;
switch (command) {
...
case 'action.devices.commands.PauseUnpause':
state = {isPaused: params.pause};
if (params.pause) state.isRunning = false;
ref = firebaseRef.child(deviceId).child('StartStop');
break;
}
return ref.update(state)
.then(() => state);
};
Kiểm thử bản sửa lỗi
Triển khai mã đã cập nhật bằng Giao diện dòng lệnh (CLI) của Firebase:
firebase deploy --only functions
Hãy thử lại các lệnh thoại sau và bạn sẽ thấy Trợ lý phản hồi chính xác khi bạn tạm dừng / tiếp tục máy giặt.
"Ok Google, tạm dừng máy giặt."
=>
"Chắc chắn rồi, tôi sẽ tạm dừng máy giặt."
"Ok Google, tiếp tục chu trình giặt."
=>
"Tôi hiểu rồi, sẽ tiếp tục giặt."
Bạn cũng có thể kiểm tra trạng thái hiện tại của máy giặt bằng cách đặt câu hỏi.
"Này Google, máy giặt của tôi có đang bật không?"
"Ok Google, máy giặt của tôi có đang chạy không?"
"Ok Google, máy giặt của tôi đang ở chu kỳ nào?"
4. Kiểm thử quá trình tích hợp bằng Bộ kiểm thử
Ngoài việc kiểm thử thủ công, bạn có thể sử dụng Bộ kiểm thử tự động cho nhà thông minh để xác thực các trường hợp sử dụng dựa trên các loại thiết bị và đặc điểm liên kết với hoạt động tích hợp của bạn. Bộ kiểm thử chạy một loạt kiểm thử để phát hiện vấn đề trong quá trình tích hợp và hiển thị thông báo cho các trường hợp kiểm thử không thành công để đẩy nhanh quá trình gỡ lỗi trước khi đi sâu vào nhật ký sự kiện.
Chạy Bộ kiểm thử cho nhà thông minh
Hãy làm theo hướng dẫn sau để kiểm thử tính năng tích hợp giữa các đám mây bằng Bộ kiểm thử:
- Trong trình duyệt web, hãy mở Bộ kiểm thử cho nhà thông minh.
- Đăng nhập vào Google bằng nút ở góc trên cùng bên phải. Điều này cho phép Bộ kiểm thử gửi trực tiếp các lệnh đến Trợ lý Google.
- Trong trường Mã dự án, hãy nhập mã dự án của chế độ tích hợp từ đám mây sang đám mây. Sau đó, hãy nhấp vào TIẾP THEO để tiếp tục.
- Trong bước Test Settings (Cài đặt kiểm thử), bạn sẽ thấy Test Suite (Bộ kiểm thử) liệt kê loại thiết bị và các đặc điểm của máy giặt.
- Tắt tuỳ chọn Test Request Sync (Đồng bộ hoá yêu cầu kiểm thử) vì ứng dụng máy giặt mẫu không có giao diện người dùng để thêm / xoá / đổi tên máy giặt. Trong hệ thống phát hành chính thức, bạn phải kích hoạt Yêu cầu đồng bộ hoá mỗi khi người dùng thêm / xoá / đổi tên thiết bị.
- Nhấp vào TIẾP THEO để bắt đầu chạy kiểm thử.
Sau khi Bộ kiểm thử chạy xong, hãy xem kết quả của các trường hợp kiểm thử. Bạn sẽ thấy hai trường hợp kiểm thử không thành công cùng thông báo lỗi tương ứng:
Để gỡ lỗi cho lỗi tích hợp Cloud-to-cloud, trước tiên, bạn cần xác định nguyên nhân gốc rễ của lỗi bằng cách phân tích thông báo lỗi.
Phân tích thông báo lỗi
Để giúp nhà phát triển xác định nguyên nhân gốc rễ, Bộ kiểm thử sẽ hiển thị thông báo lỗi cho từng trường hợp kiểm thử không đạt, cho biết lý do kiểm thử không đạt.
Đối với trường hợp kiểm thử không thành công đầu tiên ở trên,
thông báo lỗi cho biết Bộ kiểm thử dự kiến "isPause": true
ở các trạng thái được báo cáo từ quá trình tích hợp Cloud-to-cloud, nhưng các trạng thái thực tế chỉ bao gồm "isPause": false
.
Ngoài ra, thông báo lỗi của trường hợp kiểm thử không thành công thứ hai cho biết các trạng thái trong phản hồi QUERY
từ quá trình tích hợp Cloud-to-cloud bao gồm "isPause": true
, khác với "isPause": false
trong các trạng thái được báo cáo từ quá trình tích hợp Cloud-to-cloud:
Theo cả hai thông báo lỗi, bạn nên kiểm tra xem báo cáo tích hợp có cho biết isPaused
có giá trị chính xác hay không.
Xác định nguyên nhân gốc rễ của lỗi
Mở functions/index.js
, chứa hàm reportstate
đăng các thay đổi về trạng thái lên Biểu đồ trang chủ thông qua Báo cáo trạng thái. Kiểm tra tải trọng Trạng thái báo cáo, bạn sẽ thấy tải trọng này thiếu trạng thái isPaused
, chính là điều mà Bộ kiểm thử đã kiểm tra trong các trường hợp kiểm thử không thành công.
index.js
exports.reportstate = functions.database.ref('{deviceId}').onWrite(
async (change, context) => {
...
const requestBody = {
requestId: 'ff36a3cc', /* Any unique ID */
agentUserId: USER_ID,
payload: {
devices: {
states: {
/* Report the current state of our washer */
[context.params.deviceId]: {
online: true,
on: snapshot.OnOff.on,
isRunning: snapshot.StartStop.isRunning,
currentRunCycle: [{
currentCycle: 'rinse',
nextCycle: 'spin',
lang: 'en',
}],
currentTotalRemainingTime: 1212,
currentCycleRemainingTime: 301,
},
},
},
},
};
const res = await homegraph.devices.reportStateAndNotification({
requestBody,
});
...
});
Khắc phục lỗi
Giờ đây, khi bạn đã xác định được nguyên nhân gốc rễ của lỗi, hãy sửa đổi functions/index.js
bằng cách thêm trạng thái isPaused
vào tải trọng Trạng thái báo cáo:
index.js
exports.reportstate = functions.database.ref('{deviceId}').onWrite(
async (change, context) => {
...
const requestBody = {
requestId: 'ff36a3cc', /* Any unique ID */
agentUserId: USER_ID,
payload: {
devices: {
states: {
/* Report the current state of our washer */
[context.params.deviceId]: {
online: true,
on: snapshot.OnOff.on,
isPaused: snapshot.StartStop.isPaused,
isRunning: snapshot.StartStop.isRunning,
currentRunCycle: [{
currentCycle: 'rinse',
nextCycle: 'spin',
lang: 'en',
}],
currentTotalRemainingTime: 1212,
currentCycleRemainingTime: 301,
},
},
},
},
};
...
});
Kiểm thử bản sửa lỗi
Triển khai mã đã cập nhật bằng Giao diện dòng lệnh (CLI) của Firebase:
$ firebase deploy --only functions
Chạy lại Bộ kiểm thử cho nhà thông minh và bạn sẽ thấy tất cả các trường hợp kiểm thử đều đạt.
5. Xin chúc mừng
Xin chúc mừng! Bạn đã tìm hiểu thành công cách khắc phục các vấn đề tích hợp đám mây với đám mây thông qua Bộ kiểm thử cho nhà thông minh và Chỉ số và ghi nhật ký GCP.
Tìm hiểu thêm
Dựa trên lớp học lập trình này, hãy thử các bài tập sau và khám phá các tài nguyên bổ sung:
- Thêm các trường hợp được hỗ trợ khác vào thiết bị và kiểm thử các trường hợp đó bằng Bộ kiểm thử.
- Tạo trang tổng quan, thiết lập cảnh báo và truy cập dữ liệu chỉ số theo phương thức lập trình để nhận các chỉ số hữu ích về mức sử dụng của chế độ tích hợp.
- Khám phá tính năng thực hiện đơn hàng tại địa phương cho nhà thông minh.
- Hãy xem mẫu GitHub của chúng tôi để khám phá thêm.
Bạn cũng có thể tìm hiểu thêm về cách kiểm thử và gửi một công cụ tích hợp để xem xét, bao gồm cả quy trình chứng nhận để phát hành công cụ tích hợp cho người dùng.