Gỡ lỗi Nhà thông minh

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

Là nhà phát triển Internet kết nối vạn vật (IoT), bạn có thể xây dựng Hành động nhà thông minh để giúp người dùng điều khiển thiết bị 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.

a4657871181b5ad2.gif

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

Đ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 nhà thông minh với 2 khiếm khuyết và kết nối Hành động đó với Trợ lý, sau đó gỡ lỗi cho Hành động thông qua Bộ thử nghiệm cho ngôi nhà thông minh, Chỉ số và nhật ký Google Cloud Platform (GCP).

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

  • Cách sử dụng Chỉ số và ghi nhật ký GCP để xác định và giải quyết các vấn đề sản xuất
  • Cách sử dụng Test Suite 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 để tải mẫu dành 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:

Kết nối với Firebase

Mở thiết bị đầu cuối 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ích hợp trong Lớp học lập trình về việc kết nối các thiết bị thông minh trong nhà với 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 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 là do một số phần phụ thuộc cũ hơn và bạn có thể tìm thêm chi tiết tại đây.

found 5 high severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

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ả của 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 Làm mới ae8d3b25777a5e30.png. để cập nhật HomeGraph qua Yêu cầu đồng bộ hóa 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ể thấy thiết bị giặt có tên Faulty Washer.

e357de6a7faff925.png.

3. Thử nghiệm tác vụ của bạn

Sau khi triển khai dự án, hãy kiểm tra để đảm bảo Hành động điều khiển máy giặt.

Kiểm tra máy giặt

Kiểm tra thay đổi giá trị khi bạn thử bất kỳ lệnh thoại nào sau đây qua điện thoại của mình:

"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 của tôi."

"Ok Google, tiếp tục máy giặt cho tôi."

"Ok Google, dừng máy giặt đi."

Bạn sẽ thấy Trợ lý phản hồi rằng đã xảy ra lỗi 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 liên hệ được với <tên hiển thị của dự án>."

Để khắc phục sự cố 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 của Smarthome Analytics

Bạn nên kiểm tra lỗi trong trang tổng quan Smarthome Analytics. Trang này tổng hợp các biểu đồ về chỉ số Mức sử dụng và trạng thái cho hoạt động thực hiện đám mây của bạn:

  • Chỉ số Sử dụng phản ánh xu hướng sử dụng của Hành động dành cho 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 cần thực hiện.
  • Các chỉ số Tình trạng giúp bạn theo dõi sự xuất hiện bất thường của Hành động nhà thông minh, bao gồm thời gian chờ yêu cầu, tỷ lệ phần trăm thành công và thông tin phân tích 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, chuyển đến trang Dự án.
  2. Chọn dự án nhà thông minh của bạn.
  3. Chọn tab Analytics và nhấp vào Chuyển đến Google Cloud Platform.

b1735bbe11a7aff8.png.

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

5edd3751323176dd.png.

  1. Cuộn xuống biểu đồ Lỗi thực hiện đám mây - Phân tích trạng thái để xem mã lỗi cho 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 rễ. Tiếp theo, 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 của các Hành động dành cho nhà thông minh 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. Trong phần Operations (Hoạt động), hãy chọn Logging > Logs Explorer để ghi nhật ký sự kiện cho dự án của bạn. Ngoài ra, bạn có thể tìm kiếm Logs Explorer trong hộp tìm kiếm.

Trong mục 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. Nhật ký phù hợp với truy vấn được hiển thị trong phần Kết quả truy vấn.

747cca0f1249a5a.png.

Nhật ký lỗi hiển thị một sự kiện nhà thông minh với thông tin chi tiết về lỗi cho biết:

  • Tác vụ 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ành công 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 thêm đúng thiết bị trong phản hồi EXECUTE.

Xác định nguyên nhân gây ra 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 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 kỹ hơn 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 phù hợ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

Giờ đây, bạn đã xác định được nguyên nhân chính gây ra 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 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

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 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 của tôi."

=>

"Chắc chắn rồi, tạm dừng máy giặt."

"Ok Google, tiếp tục máy giặt của tôi."

=>

"Đã hiểu, tôi đang tiếp tục máy 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.

"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. Thử nghiệm Hành động bằng Bộ thử nghiệm

Ngoài việc thử nghiệm theo cách thủ công, bạn có thể sử dụng Bộ thử nghiệm 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 liên quan đến Hành động của bạn. Bộ thử nghiệm chạy một loạt các thử nghiệm để phát hiện sự cố trong Hành động của bạn và hiển thị thông báo cung cấp thông tin cho các trường hợp thử nghiệm 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 tra Hành động cho nhà thông minh của bạn bằng Bộ thử nghiệm:

  1. Trong 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. Điều này cho phép Bộ thử nghiệm gửi lệnh trực tiếp đến Trợ lý Google.
  3. Trong trường Mã dự án, hãy nhập mã dự án cho Hành động nhà thông minh của bạn. Sau đó, nhấp vào TIẾP THEO để tiếp tục.
  4. Ở bước Test Settings (Cài đặt thử nghiệm), bạn sẽ thấy Test Suite liệt kê loại thiết bị và các đặc điểm của máy giặt.

78ed6a1ebdb581bf.png.

  1. Tắt tùy chọn Thử nghiệm yêu cầu đồng bộ hóa vì ứng dụng máy giặt mẫu không có giao diện người dùng để thêm / xóa / đổi tên máy giặt. Trong hệ thống sản xuất, bạn phải kích hoạt Yêu cầu đồng bộ hóa bất cứ khi nào người dùng thêm / xóa / đổ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ộ thử nghiệm chạy xong, hãy xem kết quả của các trường hợp kiểm thử. Bạn sẽ nhận thấy hai trường hợp kiểm thử không đạt, kèm theo thông báo lỗi tương ứng:

5838d10631c98ed2.png.

Để gỡ lỗi cho Hành động nhà thông minh của bạn để phát hiện lỗi, trước tiên, bạn cần xác định nguyên nhân gây ra 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ộ công cụ kiểm tra sẽ hiển thị thông báo lỗi cho từng trường hợp kiểm thử không thành công cho biết lý do lỗi.

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

99e4e5d06965a8a7.png.

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

fdb5124102e3a37.png.

Theo cả hai thông báo lỗi, bạn nên kiểm tra xem Hành động của bạn có báo cáo isPaused với giá trị chính xác hay không.

Xác định nguyên nhân gây ra lỗi

Mở functions/index.js, có chứa hàm reportstate đăng các thay đổi về trạng thái đối với Sơ đồ trang chủ 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, chính xác là những gì Bộ thử nghiệm kiểm tra được trong các trường hợp thử nghiệm 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

Hiện bạn đã xác định được nguyên nhân cốt lõi gây ra lỗi, hãy sửa đổi functions/index.js bằng cách thêm trạng thái isPaused vào gói dữ liệu Báo cáo trạng thái:

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

148837f85d377dd6.png.

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ác chỉ số và tính năng ghi nhật ký của 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 dưới đây 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ề cách thử nghiệm và gửi một Hành động để chúng tôi xem xét, bao gồm cả quy trình cấp giấy chứng nhận để phát hành Hành động đó cho người dùng.