Gỡ lỗi nhà thông minh

1. Trước khi bắt đầu

Là 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 trong nhà thông minh để người dùng có thể điều khiển thiết bị của họ thông qua các tính năng điều khiển cảm ứng trong ứng dụng Google Home và dùng lệnh thoại bằng Trợ lý Google.

a4657871181b5ad2.gif

Việc tìm hiểu các công cụ gỡ lỗi cho nhà thông minh Actions 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. Để giúp bạn dễ dàng theo dõi và gỡ lỗi, chúng tôi cung cấp Các chỉ số, tính năng ghi nhật kýBộ kiểm thử cho nhà thông minh của Google Cloud Platform (GCP) để giúp bạn xác định và giải quyết các vấn đề liên quan đến Hành động của mình.

Điều kiện tiên quyết

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 trong nhà thông minh với 2 khiếm khuyết và kết nối hành động này với Trợ lý, sau đó gỡ lỗi các lỗi của Hành động đó thông qua Bộ kiểm thử dành cho nhà thông minh và các Chỉ số và Ghi nhật ký Google Cloud Platform (GCP).

Kiến thức bạn sẽ học được

  • Cách sử dụng tính năng ghi nhật ký và các chỉ số GCP để xác định và giải quyết các vấn đề trong thực tế
  • Cách sử dụng Bộ thử nghiệm cho nhà thông minh để xác định các vấn đề về chức năng và API

Bạn cần

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 cho lớp học lập trình này xuống 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:

Kết nối với Firebase

Mở cửa sổ dòng lệnh trên máy phát triển của bạ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 Hành động được tạo trong phần Kết nối thiết bị nhà thông minh với lớp học lập trình có Trợ lý Google:

$ cd washer-faulty
$ firebase use <project-id>

Triển khai cho Firebase

Chuyển đến thư mục functions rồi 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 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ũ hơn 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

Bây giờ, bạn đã cài đặt các phần phụ thuộc và định cấu hình dự án, bạn có thể 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, nhấp vào nút Làm mới ae8d3b25777a5e30.png để cập nhật biểu đồ HomeGraph thông qua tính năng Yêu cầu đồng bộ hoá với siêu dữ liệu mới nhất của thiết bị từ ứng dụng máy giặt bị lỗi:

6f2b1344179977cf.png.

Mở ứng dụng Google Home và xác minh rằng bạn có thể nhìn thấy thiết bị máy giặt tên là Máy giặt lỗi.

e357de6a7faff925.png

3. Kiểm thử Hành động của bạn

Sau khi 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 thông qua điện thoại:

"Ok Google, bật máy giặt của tôi."

"Ok Google, khởi động máy giặt của tôi."

"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ý trả lời rằng có gì đó không ổ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 thể truy cập vào <project display name>."

Để gỡ lỗi này, trước tiên, bạn cần có thêm thông tin về lỗi để thu hẹp lại và xác định nguyên nhân gốc rễ.

Trang tổng quan Analytics của Smarthome

Bạn nên kiểm tra lỗi bằng trang tổng quan Smarthome Analytics. Trang tổng quan này tổng hợp các biểu đồ về các chỉ số về mức sử dụng và tình trạng để 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 Hành động trong nhà thông minh, bao gồm số người dùng hoạt động hằng ngày và tổng số yêu cầu đối với việc thực hiện hành động.
  • Các chỉ số Sức khoẻ giúp bạn theo dõi mức độ xuất hiện bất thường của Hành động trong 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à 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 về dự án.

  1. Trong Bảng điều khiển Actions, hãy chuyển đến trang Dự án.
  2. Chọn dự án nhà thông minh của bạn.
  3. Chọn thẻ Analytics rồi nhấp vào Chuyển đến Google Cloud Platform.

b1735bbe11a7aff8.png

  1. Thao tác này sẽ chuyển bạn đến danh sách các 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.

5edd3751323176dd.png.

  1. Di chuyển xuống biểu đồ Lỗi thực hiện đơn hàng trên đám mây – Phân tích trạng thái để xem các mã lỗi trong phạm vi thời gian được đánh dấu.

c468743c20a11c15.png

Mã lỗi PARTNER_RESPONSE_MISSING_DEVICE cung cấp gợi ý cho 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 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, hãy truy cập vào nhật ký sự kiện cho các Hành động trong nhà thông minh của bạn thông qua tính năng Ghi nhật ký trên đám mây.

Mở Trình đơn điều hướng trong Google Cloud Platform và trong phần Thao tác, hãy chọn Ghi nhật ký > 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. Hoặc, bạn có thể tìm kiếm Logs Explorer (Trình khám phá nhật ký) trong hộp tìm kiếm.

Trong phần Query (Truy vấn), 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ý phù hợp với truy vấn sẽ hiển thị trong phần Kết quả truy vấn.

747cca0f1249a5a.png.

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 lỗi cho biết:

  • Thao tác 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 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 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 đúng thiết bị vào 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 từng 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 quá trình phân giải của 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ý thao tá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 khớp với 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);
};

Sửa lỗi

Bây giờ, khi đã 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 tra 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

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 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, đang 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, tôi đang tiếp tục máy giặt."

Bạn cũng có thể đặt câu hỏi để kiểm tra trạng thái hiện tại của máy giặt.

"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 thực hiện chu kỳ nào?"

4. Kiểm thử hành động bằng Bộ kiểm thử

Ngoài việc kiểm thử theo cách thủ công, bạn có thể sử dụng Bộ kiểm tra tự động cho nhà thông minh để 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 kết với Hành động của bạn. Bộ kiểm thử chạy một loạt kiểm thử để phát hiện vấn đề trong Hành động của bạn và hiển thị các thông báo hữu ích 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ộ 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 trong nhà thông minh của bạn bằng Bộ thử nghiệm:

  1. Trên trình duyệt web, hãy mở Bộ thử nghiệm cho nhà thông minh.
  2. Đăng nhập vào Google bằng cách sử dụng nút ở góc trên cùng bên phải. Việc này cho phép Bộ kiểm thử gửi các lệnh trực tiếp đến Trợ lý Google.
  3. Trong trường Mã dự án, hãy nhập mã dự án của Hành động cho nhà thông minh. Rồi nhấp vào TIẾP THEO để tiếp tục.
  4. 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.

78ed6a1ebdb581bf.png.

  1. 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 công khai, 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ị.
  2. 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 bị phát hiện cùng thông báo lỗi tương ứng:

5838d10631c98ed2.pngs

Để gỡ lỗi Hành động trong nhà thông minh cho lỗi này, 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

Để 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 mỗi trường hợp kiểm thử không thành công cho biết lý do không thành công.

Đối với trường hợp kiểm thử không thành công đầu tiên ở trên,

99e4e5d06965a8a7.pngS

thông báo lỗi của nó cho biết Bộ kiểm thử dự kiến có "isPause": true ở các trạng thái được báo cáo từ Hành động trong 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 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 của nhà thông minh Hành động 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 cho nhà thông minh:

fdb5124102e3a37.png

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ó trạng thái isPaused với 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 Home Graph 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, bạn sẽ thấy tải trọng đang thiếu trạng thái isPaused. Đây chính xác là những gì 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,
      });
      ...
    });

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 đổ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 tra 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ộ kiểm thử cho nhà thông minh, bạn sẽ thấy rằng tất cả các trường hợp kiểm thử đã đạt.

148837f85d377dd6.pngs

5. Xin chúc mừng

17d485868a6771bc.png.

Xin chúc mừng! Bạn đã tìm hiểu thành công cách khắc phục sự cố về Hành động cho nhà thông minh thông qua Bộ thử nghiệm cho nhà thông minh, cũng như các 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 khác:

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 để Google xem xét, bao gồm cả quy trình chứng nhận để xuất bản Hành động đó cho người dùng.