1. Trước khi bắt đầu
Là một nhà phát triển Internet của vạn vật (IoT), bạn có thể xây dựng các Hành động thông minh trong nhà giúp người dùng có thể đ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à dùng lệnh thoại với Trợ lý Google.
Việc tìm hiểu các công cụ gỡ lỗi cho các Hành động trong nhà thông minh 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. Để tạo điều kiện cho việc giám sát và gỡ lỗi dễ dàng, chúng tôi cung cấp Các chỉ số của Google Cloud Platform (GCP), Ghi nhật ký và Bộ thử nghiệm dành cho nhà thông minh để giúp bạn xác định và giải quyết các vấn đề cho Hành động của mình.
Điều kiện tiên quyết
- Đọc hướng dẫn dành cho nhà phát triển Tạo một hành động trong nhà thông minh
- Chạy lớp học lập trình Kết nối các 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 Hành động nhà thông minh có 2 lỗi và kết nối hành động đó với Trợ lý, sau đó gỡ lỗi của Hành động đó thông qua Bộ thử nghiệm dành cho nhà thông minh và Ghi nhật ký và chỉ số của Google Cloud Platform (GCP).
Kiến thức bạn sẽ học được
- Cách sử dụng các chỉ số và tính năng ghi nhật ký của GCP để xác định và giải quyết các vấn đề liên quan đến bản phát hành công khai
- Cách sử dụng Bộ thử nghiệm dành 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
- Một tài khoản thanh toán Google Cloud
2. Chạy ứng dụng bị lỗi
Lấy mã nguồn
Nhấp vào đường liên kết sau đây để tải mẫu xuống cho lớp học lập trình này trên máy phát triển của bạ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 trên giao diện người dùng để 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
: Một dịch vụ đám mây được triển khai hoàn chỉnh, giúp quản lý máy giặt thông minh bằng Cloud Functions for 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 Giao diện dòng lệnh (CLI) của Firebase bằng dự án Actions (Hành động) được tạo trong bài viết Kết nối các thiết bị nhà thông minh với lớp học lập trình Trợ lý Google:
$ cd washer-faulty $ firebase use <project-id>
Triển khai cho Firebase
Chuyển đến thư mục functions
và cài đặt mọi 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 dưới đây, bạn có thể bỏ qua và tiếp tục. Cảnh báo này xuất phát từ một số phần phụ thuộc cũ. 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
Bây giờ, sau khi đã 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ả trên bảng điều khiển mà bạn sẽ thấy:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<project-id>/overview Hosting URL: https://<project-id>.firebaseapp.com
Cập nhật HomeGraph
Mở URL lưu trữ trong trình duyệt của bạn (https://<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 qua tính năng Request Sync (Yêu cầu đồng bộ hoá) với siêu dữ liệu mới nhất về thiết bị từ ứng dụng máy giặt bị lỗi:
Mở ứng dụng Google Home và xác nhận rằng bạn có thể nhìn thấy thiết bị máy giặt có tên là Faultywash (Máy giặt bị lỗi).
3. Kiểm thử Hành động
Sau khi bạn triển khai dự án, hãy kiểm tra để đảm bảo rằng Hành động của bạn điều khiển máy giặt.
Kiểm tra máy giặt
Kiểm tra sự thay đổi giá trị khi bạn thử bất kỳ lệnh thoại nào sau đây qua điện thoại:
"Ok Google, bật máy giặt cho tôi."
"Ok Google, bắt đầu máy giặt."
"Ok Google, tạm dừng máy giặt."
"Ok Google, tiếp tục máy giặt của tôi."
"Ok Google, dừng máy giặt."
Bạn sẽ thấy Trợ lý phản hồi rằng có vấn đề qua giọng nói khi bạn tạm dừng / tiếp tục máy giặt:
"Rất tiếc, tôi không kết nối được với <tên hiển thị dự án>."
Để gỡ lỗi vấn đề này, trước tiên bạn cần thêm thông tin về lỗi để thu hẹp và xác định nguyên nhân gốc.
Trang tổng quan Số liệu phân tích của Smarthome
Bạn nên kiểm tra lỗi trên trang tổng quan Smarthome Analytics. Trang tổng quan này tổng hợp các biểu đồ về Chỉ số mức sử dụng và sức khoẻ cho phương thức thực hiện của bạn trên đám mây:
- Chỉ số Mức sử dụng phản ánh xu hướng sử dụng Hành động trong nhà thông minh, bao gồm cả số người dùng hoạt động hằng ngày và tổng số yêu cầu cho đến khi thực hiện thành công ứng dụng của bạn.
- Các chỉ số về Sức khoẻ giúp bạn theo dõi những điểm bất thường đối với Hành động trên nhà thông minh, bao gồm độ trễ của yêu cầu, tỷ lệ phần trăm thành công và thông tin chi tiết về lỗi.
Để thu hẹp nguyên nhân gây ra lỗi, hãy làm theo các bước bên dưới để truy cập vào trang tổng quan về dự án.
- Trong Bảng điều khiển Actions, hãy chuyển đến trang Dự án.
- Chọn dự án nhà thông minh của bạn.
- Chọn thẻ Analytics rồi nhấp vào Chuyển đến Google Cloud Platform.
- 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 đám mây.
- Di chuyển xuống biểu đồ Lỗi thực hiện đơn hàng trên đám mây – Bảng chi tiết trạng thái để xem mã lỗi trong phạm vi thời gian được đánh dấu.
Mã lỗi PARTNER_RESPONSE_MISSING_DEVICE
cung cấp gợi ý về nguyên nhân gốc. 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 vào nhật ký sự kiện
Để biết thêm thông tin chi tiết về lỗi, hãy truy cập vào nhật ký sự kiện dành cho các Hành động trong nhà thông minh của bạn qua Cloud Logging.
Mở Trình đơn điều hướng trong Google Cloud Platform và trong phần Hoạt động, chọn 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 của dự án. Ngoài ra, bạn có thể tìm Trình khám phá nhật ký trong hộp tìm kiếm.
Trong phần Truy vấn, hãy nhập truy vấn PARTNER_RESPONSE_MISSING_DEVICE
rồi nhấp vào Chạy truy vấn. Các nhật ký phù hợp với truy vấn được hiển thị trong phần Kết quả truy vấn.
Nhật ký lỗi cho thấy một sự kiện nhà thông minh kèm theo thông tin chi tiết về lỗi cho biết:
- Hành động 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 không thực hiện được gần đây. - Thông báo gỡ lỗi được liên kết là "
JSON response does not include device.
"
Dựa vào 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 ra đúng thiết bị trong phản hồi EXECUTE
.
Xác định nguyên nhân gốc 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 mỗi lệnh và trạng thái mới của thiết bị. 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)));
}
}
}
Để 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, bạn sẽ thấy chuỗi cần khớp với lệnh tạm dừng / tiếp tục là 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);
};
Sửa lỗi
Bây giờ, bạn đã xác định được nguyên nhân gốc 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ử kết quả 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 đây, bạn sẽ thấy Trợ lý phản hồi chính xác ngay bây giờ 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."
=>
"Vâng, tạm dừng máy giặt."
"Ok Google, tiếp tục máy giặt của tôi."
=>
"Tôi hiểu rồi, tôi đang tiếp tục máy giặt."
Bạn cũng có thể kiểm tra tình trạng hiện tại của máy giặt bằng cách đặt câu hỏi.
"Ok 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 tra Hành động của bạn bằng Bộ kiểm thử
Ngoài việc kiểm tra theo cách thủ công, bạn có thể sử dụng Bộ kiểm tra dành cho nhà thông minh tự động để xác thực các trường hợp sử dụng dựa trên loại thiết bị và đặc điểm có liên quan đến Hành động của bạn. Bộ kiểm thử chạy một loạt các chương trình kiểm thử để phát hiện các vấn đề trong Hành động của bạn và hiển thị các thông báo cung cấp thông tin về 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 bạn tìm hiểu sâu về nhật ký sự kiện.
Chạy Bộ thử nghiệm cho nhà thông minh
Hãy làm theo các hướng dẫn sau để kiểm thử Hành động nhà thông minh bằng Bộ kiểm thử:
- Trong trình duyệt web, hãy mở Bộ thử nghiệm 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. Việc này cho phép Bộ thử nghiệm gửi các lệnh trực tiếp đến Trợ lý Google.
- Trong trường Mã dự án, hãy nhập mã dự án của Hành động trong nhà thông minh. 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 Bộ kiểm thử liệt kê loại thiết bị và đặc điểm của máy giặt.
- Tắt tuỳ chọn Kiểm tra yêu cầu đồng bộ hoá 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 tính năng Yêu cầu đồng bộ hoá bất cứ khi nào 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 phát hiện kèm theo thông báo lỗi tương ứng:
Để gỡ lỗi cho Hành động nhà thông minh và tìm ra lỗi, trước tiên, bạn cần xác định nguyên nhân gốc 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
Nhằm 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ông báo lỗi của từng trường hợp kiểm thử không thành công để cho biết nguyên nhân gây ra lỗi.
Đố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 của bộ thử nghiệm cho biết Bộ thử nghiệm dự kiến có "isPause": true
ở các trạng thái được báo cáo từ Hành động nhà thông minh của bạn, 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 thứ hai của trường hợp kiểm thử không thành công cho biết các trạng thái trong phản hồi của QUERY
từ Hành động nhà thông minh của bạn bao gồm "isPause": true
, khác với "isPause": false
ở các trạng thái được báo cáo từ Hành động nhà thông minh:
Theo cả hai thông báo lỗi, bạn nên kiểm tra xem báo cáo Hành động của bạn có nêu ra isPaused
có giá trị chính xác hay không.
Xác định nguyên nhân gốc 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 đồ trên Home thông qua Trạng thái báo cáo. Kiểm tra tải trọng Trạng thái báo cáo và bạn sẽ thấy tải trọng thiếu trạng thái isPaused
. Đây chính xác là những gì Bộ thử nghiệm đã 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,
});
...
});
Sửa lỗi
Bây giờ, bạn đã xác định được nguyên nhân gốc của lỗi, hãy sửa 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ử kết quả 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ộ thử nghiệm cho nhà thông minh và bạn sẽ thấy rằng tất cả các trường hợp thử nghiệm đều đã vượt qua.
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 sự cố Hành động của nhà thông minh thông qua Bộ thử nghiệm dành cho nhà thông minh và Ghi nhật ký và chỉ số GCP.
Tìm hiểu thêm
Để xây dựng lớp học lập trình này, hãy thử thực hiện các bài tập sau và khám phá các tài nguyên khác:
- Thêm các tính năng được hỗ trợ khác vào thiết bị và kiểm tra những tính năng đó bằng Bộ kiểm thử.
- Tạo trang tổng quan, thiết lập cảnh báo và truy cập vào dữ liệu chỉ số theo phương thức lập trình để nhận các chỉ số sử dụng hữu ích về Hành động của bạn.
- Khám phá phương thức thực hiện 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ề việc thử nghiệm và gửi một Hành động đi xem xét, bao gồm cả quy trình chứng nhận để xuất bản Hành động của bạn cho người dùng.