Gỡ lỗi nhà thông minh

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

Là nhà phát triển Internet of Things (IoT), bạn có thể tạo các hoạt động tích hợp từ đám mây đến đám mây để cho phép người dùng điều khiển thiết bị của họ thông qua các chế độ điều khiển cảm ứng trong ứng dụng Google Home và lệnh thoại bằng Trợ lý Google.

a4657871181b5ad2.gif

Tìm hiểu các công cụ gỡ lỗi cho tích hợp Đám mây với đám mây là một bước quan trọng để xây dự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 giám sát và gỡ lỗi, Chỉ số của Google Cloud Platform (GCP), Nhật kýBộ thử nghiệm cho nhà thông minh có thể giúp bạn xác định và giải quyết các vấn đề cho hoạt động tích hợp.

Đ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 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 cho các lỗi của giải pháp tích hợp bằng Bộ kiểm thử cho nhà thông minh và Số liệu 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 chỉ số và nhật ký của GCP để xác định và giải quyết các vấn đề về 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 có

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 có 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. 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 Kết nối 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 cách sử dụ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ể tìm 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 có thể triển khai ứng dụng máy giặt bị lỗi.

$ firebase deploy

Đây là kết quả đầu ra của bảng điều khiển mà bạn sẽ thấy:

...

✔ 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ở 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 Làm mớiae8d3b25777a5e30.png để cập nhật HomeGraph 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 bằng cách sử dụng Yêu cầu đồng bộ hoá.

6f2b1344179977cf.png

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 là Máy giặt bị lỗi.

e357de6a7faff925.png

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 chế độ tích hợp của bạn kiểm soát được máy giặt.

Kiểm tra máy giặt

Kiểm tra sự thay đổi về giá trị khi bạn thử một trong các lệnh thoại 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 giặt."

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

Bạn sẽ nhận thấy Trợ lý phản hồi bằng giọng nói rằng có vấn đề khi bạn tạm dừng / tiếp tục hoạt động của máy giặt:

"Xin lỗi, tôi không thể truy cập vào <tên hiển thị dự án>."

Để 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 phạm vi và xác định nguyên nhân gốc rễ.

Trang tổng quan về số liệu phân tích nhà thông minh

Trang tổng quan về số liệu phân tích nhà thông minh 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 tính năng thực hiện qua đá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 đến đám mây, bao gồm cả số lượng người dùng hoạt động hằng ngày và tổng số yêu cầu đối với dịch vụ thực hiện đơn hàng của bạn.
  • Chỉ số Tình trạng giúp bạn theo dõi sự xuất hiện của điểm bất thường trong quá trình tích hợp Đám mây với đám mây, 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 phạm vi 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 dự án.

  1. Trong Developer Console, hãy chuyển đến trang Dự án.
  2. Chọn dự án nhà thông minh của bạn.
  3. Nhấp vào thẻ Số liệu phân tích trong trình đơn bên trái.

b1735bbe11a7aff8.png

  1. Thao tác này sẽ đưa 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 – Cloud Integration (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 qua đá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 ý 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 cho chế độ tích hợp Đám mây với đám mây bằng cách sử dụng Cloud Logging.

Mở 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 của dự án. Ngoài ra, 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 trường nhập Tìm kiếm tất cả các trường, 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ý khớp với truy vấn sẽ xuất hiện trong phần Kết quả.

747cca0f1249a5a.png

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 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 liên quan 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ã nhận dạng 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ý lệnh tạm dừng / tiếp tục trên máy giặt, 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':
      const data = await queryDevice(deviceId);
      state = (data.isPaused === false && data.isRunning === false)
        ? {isRunning: false, isPaused: false}
        : {isRunning: !params.pause, isPaused: params.pause};
      ref = getFirebaseRef().child(deviceId).child('StartStop');
      break;
 }

 return ref.update(state)
     .then(() => state);
};

Khắc phục lỗi

Giờ đây, bạn đã 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':
      const data = await queryDevice(deviceId);
      state = (data.isPaused === false && data.isRunning === false)
        ? {isRunning: false, isPaused: false}
        : {isRunning: !params.pause, isPaused: params.pause};
      ref = getFirebaseRef().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

Hãy thử lại các lệnh thoại sau. Bạn sẽ thấy Trợ lý hiện phản hồi chính xác khi bạn tạm dừng / tiếp tục hoạt động của 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 giặt."

=>

"Đã hiểu, tôi sẽ tiếp tục cho máy giặt hoạt động."

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 nhà tôi có đang hoạt động không?"

"Ok Google, máy giặt nhà tôi có đang chạy không?"

"Ok Google, máy giặt đang chạy ở chế độ nào?"

4. Kiểm thử chế độ tích hợp 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 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 quan đến hoạt động tích hợp của bạn. Bộ kiểm thử chạy một loạt các kiểm thử để phát hiện vấn đề trong quá trình tích hợp, đồng thời cho thấy các thông báo mang tính thông tin cho những 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 các hướng dẫn sau để kiểm thử chế độ tích hợp từ đám mây sang đám mây bằng Bộ thử nghiệm:

  1. Trong trình duyệt web, hãy mở Bộ kiểm thử cho nhà thông minh.
  2. Đă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 Test Suite gửi trực tiếp các lệnh đến Trợ lý Google.
  3. 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.
  4. Trong bước Test Settings (Chế độ cài đặt kiểm thử), bạn sẽ thấy danh sách Test Suite (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 lựa chọn Đồ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 Request Sync (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 thử nghiệm.

Sau khi Test Suite hoàn tất quá trình chạy, hãy xem kết quả của các trường hợp kiểm thử. Bạn sẽ nhận thấy 2 trường hợp kiểm thử không thành công được phát hiện cùng với thông báo lỗi tương ứng:

5838d10631c98ed2.png

Để gỡ lỗi tích hợp Cloud-to-cloud cho lỗi, 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 trước.

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, 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 không đạt.

Đối với trường hợp kiểm thử không thành công đầ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 trong các trạng thái được báo cáo từ chế độ tích hợp Đám mây với đám mây, 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ử thứ hai không thành công cho biết các trạng thái trong phản hồi QUERY từ chế độ tích hợp Đám mây với đám mây bao gồm "isPause": true, khác với "isPause": false trong các trạng thái được báo cáo từ chế độ tích hợp Đám mây với đám mây:

fdb5124102e3a37.png

Theo cả hai thông báo lỗi này, sau đó, bạn nên kiểm tra xem trạng thái isPaused trong báo cáo tích hợp 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. Tệp này chứa hàm reportstate đăng các thay đổi về trạng thái lên Home Graph bằng cách sử dụng Report State. Kiểm tra tải trọng Report State (Trạng thái báo cáo) và bạn sẽ thấy tải trọng này thiếu trạng thái isPaused. Đây chính xác là trạng thái mà Test Suite (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: snapshot.online,
                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, 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: snapshot.online,
                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ộ kiểm thử 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 đã vượt qua.

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 các vấn đề về tích hợp đám mây với đám mây bằng cách sử dụng Bộ thử nghiệm cho nhà thông minh và Chỉ số cũng như 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:

Bạn cũng có thể tìm hiểu thêm về cách kiểm thử và gửi một cấu hình tích hợp để xem xét, bao gồm cả quy trình chứng nhận để xuất bản cấu hình tích hợp cho người dùng.