Gỡ lỗi Home cục bộ

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

Việc tích hợp nhà thông minh cho phép Trợ lý Google điều khiển các thiết bị thông minh trong nhà của người dùng. Để tạo Hành động trong nhà thông minh, bạn cần cung cấp một điểm cuối webhook trên đám mây có khả năng xử lý ý định của nhà thông minh. Ví dụ: khi người dùng nói: "Ok Google, bật đèn", Trợ lý sẽ gửi lệnh đến phương thức thực hiện của bạn trên đám mây để cập nhật trạng thái của thiết bị.

Local Home SDK giúp nâng cao khả năng tích hợp nhà thông minh bằng cách thêm một đường dẫn cục bộ để định tuyến ý định nhà thông minh trực tiếp đến thiết bị Google Home. Việc này giúp tăng cường độ tin cậy và giảm độ trễ khi xử lý lệnh của người dùng. AI của Google cho phép bạn viết và triển khai một ứng dụng thực hiện đơn hàng cục bộ bằng TypeScript hoặc JavaScript giúp nhận dạng thiết bị và thực thi lệnh trên bất kỳ loa thông minh Google Home hoặc màn hình thông minh Google Nest nào. Sau đó, ứng dụng của bạn sẽ giao tiếp trực tiếp với các thiết bị thông minh hiện có của người dùng qua mạng cục bộ bằng cách sử dụng các giao thức tiêu chuẩn hiện có để thực hiện các lệnh.

72ffb320986092c.png.

Gỡ lỗi Hành động cho nhà thông minh là một bước quan trọng để xây dựng Hành động sao cho phù hợp với chất lượng phát hành công khai. Tuy nhiên, việc gỡ lỗi cho Hành động trong nhà thông minh sẽ khó khăn và tốn thời gian nếu thiếu các công cụ kiểm tra và khắc phục sự cố dễ sử dụng và giàu thông tin. Để hỗ trợ việc gỡ lỗi các Hành động trong nhà thông minh, chúng tôi cung cấp các Chỉ số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 đề trong 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ẽ tạo một phương thức thực hiện cục bộ cho Hành động trong nhà thông minh và kết nối với Trợ lý, sau đó gỡ lỗi ứng dụng Local Home thông qua Bộ kiểm thử dành cho nhà thông minh cũng như tính năng Ghi nhật ký và chỉ số 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 quá trình sản xuất.
  • Cách sử dụng Bộ kiểm thử để xác định các vấn đề về chức năng và API.
  • Cách sử dụng Công cụ của Chrome cho nhà phát triển trong khi phát triển ứng dụng Local Home.

Bạn cần có

2. Chạy ứng dụng máy giặt

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-local.git

Giới thiệu về dự án phim

Ứng dụng khởi đầu có chứa các thư mục con và chức năng đám mây tương tự như lớp học lập trình Bật phương thức thực hiện cục bộ cho Hành động trong nhà thông minh. Nhưng thay vì app-start, chúng ta có app-faulty ở đây. Chúng ta sẽ bắt đầu với một ứng dụng địa phương trên trang chủ đang hoạt động nhưng không hiệu quả lắm.

Kết nối với Firebase

Chúng ta sẽ sử dụng chính dự án mà bạn đã tạo trong lớp học lập trình Bật phương thức thực hiện cục bộ cho Hành động trong nhà thông minh, nhưng chúng ta sẽ triển khai các tệp đã tải xuống trong lớp học lập trình này.

Chuyển đến thư mục app-faulty, sau đó thiết lập Giao diện dòng lệnh (CLI) của Firebase bằng dự án Hành động mà bạn đã tạo trong lớp học lập trình Bật phương thức thực hiện cục bộ cho Hành động trên nhà thông minh:

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

Triển khai cho Firebase

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

Chuyển đến thư mục app-faulty/local/ rồi chạy các lệnh sau để tải trình biên dịch TypeScript xuống và biên dịch ứng dụng:

$ cd ../local
$ npm install
$ npm run build

Thao tác này sẽ biên dịch nguồn index.ts (TypeScript) và đặt các nội dung sau vào thư mục app-faulty/public/local-home/:

  • bundle.js – Đầu ra JavaScript được biên dịch có chứa ứng dụng cục bộ và các phần phụ thuộc.
  • index.html—Trang lưu trữ cục bộ được dùng để phân phát ứng dụng cho việc kiểm thử trên thiết bị.

Bây giờ, khi đã cài đặt các phần phụ thuộc và định cấu hình dự án, bạn có thể chạy ứng dụng lần đầu tiên.

$ 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://<projectcd -id>.web.app

Lệnh này sẽ triển khai một ứng dụng web, cùng với một số Chức năng đám mây cho Firebase.

Cập nhật HomeGraph

Mở URL lưu trữ trong trình duyệt của bạn (https://<project-id>.web.app) để 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:

fa3c47f293cfe0b7.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 mới là "Máy giặt bị lỗi". Hãy nhớ chỉ định thiết bị cho một phòng có thiết bị Nest.

2a082ee11d47ad1a.png.

3. Khởi động máy giặt thông minh

Nếu đã chạy lớp học lập trình Bật phương thức thực hiện cục bộ cho hành động trong nhà thông minh, thì chắc hẳn bạn đã khởi động máy giặt thông minh ảo. Nếu thiết bị dừng lại, hãy nhớ khởi động lại thiết bị ảo.

Khởi động thiết bị

Chuyển đến thư mục virtual-device/ rồi chạy tập lệnh thiết bị, chuyển các tham số cấu hình dưới dạng đối số:

$ cd ../../virtual-device
$ npm install
$ npm start -- \
  --deviceId=deviceid123 --projectId=<project-id> \
  --discoveryPortOut=3311 --discoveryPacket=HelloLocalHomeSDK

Xác minh rằng tập lệnh thiết bị chạy với các tham số dự kiến:

(...): UDP Server listening on 3311
(...): Device listening on port 3388
(...): Report State successful

4. Kiểm thử ứng dụng Local Home

Gửi lệnh đến thiết bị của bạn thông qua lệnh thoại đến thiết bị Google Home, chẳng hạn 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, buộc sử dụng thiết bị cục bộ."

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

Bạn sẽ thấy Trợ lý Google trả lời với nội dung "Rất tiếc, có vẻ như Máy giặt lỗi hiện không hoạt động" khi bạn cố gắng điều khiển máy giặt sau khi "buộc phải cục bộ".

Điều này có nghĩa là không thể truy cập thiết bị thông qua một đường dẫn cục bộ. Chính sách này hoạt động trước khi đưa ra câu lệnh "Ok Google, buộc cục bộ" vì chúng ta sẽ quay lại sử dụng đường dẫn trên đám mây khi không thể truy cập vào thiết bị thông qua một đường dẫn cục bộ. Tuy nhiên, sau khi "bắt buộc cục bộ", lựa chọn quay lại đường dẫn trên đám mây sẽ bị tắt.

Để tìm hiểu vấn đề, hãy sử dụng các công cụ mà chúng tôi có: Chỉ số và tính năng Ghi nhật ký của Google Cloud Platform (GCP) và Công cụ cho nhà phát triển Chrome.

5. Gỡ lỗi ứng dụng Local Home

Trong phần sau, bạn sẽ sử dụng công cụ do Google cung cấp để tìm hiểu lý do tại sao không thể truy cập vào thiết bị thông qua đường dẫn cục bộ. Bạn có thể sử dụng Công cụ cho nhà phát triển Google Chrome để kết nối với thiết bị Google Home, xem nhật ký bảng điều khiển và gỡ lỗi ứng dụng Local Home. Bạn cũng có thể gửi nhật ký tuỳ chỉnh đến Cloud Logging để có thể nhận biết những lỗi hàng đầu mà người dùng tìm thấy trong ứng dụng Local Home.

Kết nối Công cụ cho nhà phát triển Chrome

Để kết nối trình gỡ lỗi với ứng dụng thực hiện đơn hàng cục bộ, hãy làm theo các bước sau:

  1. Đảm bảo rằng bạn đã liên kết thiết bị Google Home với người dùng có quyền truy cập vào dự án Actions Console.
  2. Khởi động lại thiết bị Google Home của bạn. Thao tác này sẽ cho phép thiết bị lấy URL của HTML cũng như cấu hình quét mà bạn đặt trong bảng điều khiển Actions.
  3. Chạy Chrome trên máy phát triển của bạn.
  4. Mở một thẻ Chrome mới rồi nhập chrome://inspect vào trường địa chỉ để khởi chạy trình kiểm tra.

Bạn sẽ thấy danh sách thiết bị trên trang và URL ứng dụng của bạn sẽ xuất hiện bên dưới tên của thiết bị Google Home.

567f97789a7d8846.pngs

Khởi động trình kiểm tra

Nhấp vào Kiểm tra trong URL ứng dụng của bạn để chạy Công cụ cho nhà phát triển Chrome. Chọn thẻ Console (Bảng điều khiển) rồi xác minh rằng bạn có thể xem được nội dung của ý định IDENTIFY mà ứng dụng TypeScript in.

774c460c59f9f84a.pngS

Kết quả này có nghĩa là trình xử lý IDENTIFY đã được kích hoạt thành công, nhưng verificationId trả về trong IdentifyResponse không khớp với bất kỳ thiết bị nào trong HomeGraph. Hãy thêm một số nhật ký tuỳ chỉnh để tìm hiểu lý do.

Thêm nhật ký tuỳ chỉnh

Mặc dù Local Home SDK in ra lỗi DEVICE_VERIFICATION_FAILED, nhưng lỗi này không giúp ích nhiều trong việc tìm ra nguyên nhân gốc. Hãy thêm một số nhật ký tuỳ chỉnh để đảm bảo chúng ta đọc và xử lý dữ liệu quét một cách chính xác. Xin lưu ý rằng nếu chúng ta từ chối lời hứa nhưng có lỗi, thì thông báo lỗi cũng sẽ được gửi đến Cloud Logging.

local/index.ts

identifyHandler(request: IntentFlow.IdentifyRequest):
    Promise<IntentFlow.IdentifyResponse> {
  console.log("IDENTIFY intent: " + JSON.stringify(request, null, 2));

  const scanData = request.inputs[0].payload.device.udpScanData;
  if (!scanData) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_request', 'Invalid scan data');
    return Promise.reject(err);
  }

  // In this codelab, the scan data contains only local device id.
  // Is there something wrong here?
  const localDeviceId = Buffer.from(scanData.data);
  console.log(`IDENTIFY handler: received local device id
      ${localDeviceId}`);

  // Add custom logs
  if (!localDeviceId.toString().match(/^deviceid[0-9]{3}$/gi)) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_device', 'Invalid device id from scan data ' +
        localDeviceId);
    return Promise.reject(err);
  }

  const response: IntentFlow.IdentifyResponse = {
    intent: Intents.IDENTIFY,
    requestId: request.requestId,
    payload: {
      device: {
        id: 'washer',
        verificationId: localDeviceId.toString(),
      }
    }
  };
  console.log("IDENTIFY response: " + JSON.stringify(response, null, 2));

  return Promise.resolve(response);
}

Ngoài ra, hãy thay đổi phiên bản ứng dụng cục bộ trên màn hình chính để chúng tôi có thể xác định xem mình có đang sử dụng đúng phiên bản hay không.

local/index.ts

const localHomeSdk = new App('1.0.1');

Sau khi thêm nhật ký tuỳ chỉnh, bạn cần biên dịch lại ứng dụng và triển khai lại lên Firebase.

$ cd ../app-faulty/local
$ npm run build
$ firebase deploy --only hosting

Bây giờ, hãy khởi động lại thiết bị Google Home để có thể tải ứng dụng Home cục bộ đã cập nhật. Bạn có thể biết liệu thiết bị Google Home có đang sử dụng phiên bản dự kiến hay không bằng cách xem nhật ký của Bảng điều khiển trong Công cụ cho nhà phát triển Chrome.

ecc56508ebcf9ab.png

Truy cập vào tính năng Ghi nhật ký trên đám mây

Hãy cùng xem cách sử dụng tính năng Ghi nhật ký trên đám mây để tìm lỗi. Cách sử dụng tính năng Ghi nhật ký trên đám mây cho dự án:

  1. Trong bảng điều khiển Cloud Platform, hãy chuyển đến trang Projects (Dự án).
  2. Chọn dự án nhà thông minh của bạn.
  3. Trong Hoạt động, chọn Ghi nhật ký > Trình khám phá nhật ký.

Quyền truy cập vào dữ liệu ghi nhật ký được quản lý thông qua giải pháp Quản lý danh tính và quyền truy cập (IAM) đối với người dùng trong dự án Actions của bạn. Để biết thêm chi tiết về vai trò và quyền đối với dữ liệu ghi nhật ký, hãy xem bài viết kiểm soát quyền truy cập vào tính năng Ghi nhật ký trên đám mây.

Sử dụng bộ lọc nâng cao

Chúng ta biết rằng lỗi đang xảy ra trong ý định IDENTIFY, vì đường dẫn cục bộ không hoạt động vì không xác định được thiết bị cục bộ. Tuy nhiên, chúng ta muốn biết chính xác vấn đề là gì, vì vậy trước tiên hãy lọc các lỗi xảy ra trong trình xử lý IDENTIFY.

Mở rộng hộp Xem trước truy vấn, hộp này sẽ chuyển thành hộp Trình tạo truy vấn. Nhập jsonPayload.intent="IDENTIFY" vào hộp Trình tạo truy vấn rồi nhấp vào nút Chạy truy vấn.

4c0b9d2828ee2447.png.

Do đó, bạn sẽ nhận được tất cả nhật ký lỗi được gửi vào trình xử lý IDENTIFY. Tiếp theo, hãy mở rộng lỗi cuối cùng. Bạn sẽ tìm thấy errorCodedebugString mà bạn vừa đặt khi từ chối lời hứa trong trình xử lý IDENTIFY.

71f2f156c6887496.pngs

Từ debugString, chúng ta có thể biết rằng mã nhận dạng thiết bị cục bộ không ở định dạng dự kiến. Ứng dụng Local Home dự kiến sẽ lấy mã thiết bị cục bộ ở dạng chuỗi bắt đầu bằng deviceid, theo sau là 3 chữ số, nhưng mã thiết bị cục bộ ở đây là một chuỗi hex.

Sửa lỗi

Quay lại mã nguồn nơi chúng ta phân tích cú pháp id thiết bị cục bộ từ dữ liệu quét, chúng ta nhận thấy rằng chúng ta đã không cung cấp mã hoá khi chuyển đổi chuỗi thành byte. Dữ liệu quét được nhận dưới dạng chuỗi hex, vì vậy, hãy truyền hex dưới dạng mã hoá ký tự khi gọi Buffer.from().

local/index.ts

identifyHandler(request: IntentFlow.IdentifyRequest):
    Promise<IntentFlow.IdentifyResponse> {
  console.log("IDENTIFY intent: " + JSON.stringify(request, null, 2));

  const scanData = request.inputs[0].payload.device.udpScanData;
  if (!scanData) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_request', 'Invalid scan data');
    return Promise.reject(err);
  }

  // In this codelab, the scan data contains only local device id.
  const localDeviceId = Buffer.from(scanData.data, 'hex');
  console.log(`IDENTIFY handler: received local device id
      ${localDeviceId}`);

  if (!localDeviceId.toString().match(/^deviceid[0-9]{3}$/gi)) {
    const err = new IntentFlow.HandlerError(request.requestId,
      'invalid_device', 'Invalid device id from scan data ' +
      localDeviceId);
    return Promise.reject(err);
  }

  const response: IntentFlow.IdentifyResponse = {
    intent: Intents.IDENTIFY,
    requestId: request.requestId,
    payload: {
      device: {
        id: 'washer',
        verificationId: localDeviceId.toString(),
      }
    }
  };
  console.log("IDENTIFY response: " + JSON.stringify(response, null, 2));

  return Promise.resolve(response);
}

Ngoài ra, hãy thay đổi phiên bản ứng dụng cục bộ trên màn hình chính để chúng tôi có thể xác định xem mình có đang sử dụng đúng phiên bản hay không.

local/index.ts

const localHomeSdk = new App('1.0.2');

Sau khi khắc phục lỗi, hãy biên dịch ứng dụng và triển khai lại lên Firebase. Trong app-faulty/local, hãy chạy:

$ npm run build
$ firebase deploy --only hosting

Kiểm tra kết quả sửa lỗi

Sau khi triển khai, hãy khởi động lại thiết bị Google Home để thiết bị có thể tải ứng dụng Home cục bộ đã cập nhật. Hãy đảm bảo phiên bản ứng dụng Home cục bộ là 1.0.2 và lần này bạn sẽ không thấy lỗi trong Bảng điều khiển Công cụ dành cho nhà phát triển của Chrome.

c8456f7b5f77f894.png

Bây giờ, bạn có thể thử gửi lại lệnh đến thiết bị của mình.

"Ok Google, buộc thiết lập trên thiết bị."

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

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

...

"Ok Google, buộc mặc định."

6. Chạy Bộ kiểm tra cho nhà thông minh

Sau khi xác minh thiết bị của mình bằng bộ điều khiển cảm ứng trong ứng dụng Google Home hoặc thông qua lệnh thoại, bạn có thể dùng Bộ kiểm tra tự động dành 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 liên quan đến 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 tra), bạn sẽ thấy Máy giặt lỗi trong mục Devices and Trais (Thiết bị và thương hiệu).
  5. 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ị.
  6. Bật tuỳ chọn Local Home SDK vì chúng ta sẽ kiểm thử cả đường dẫn cục bộ và đường dẫn trên đám mây.
  7. Nhấp vào TIẾP THEO để bắt đầu chạy kiểm thử.

67433d9190fa770e.png.

Khi hoạt động kiểm thử hoàn tất, bạn sẽ nhận thấy hoạt động kiểm thử Tạm dừng/Tiếp tục trong đường dẫn cục bộ không thành công trong khi hoạt động kiểm thử Tạm dừng/Tiếp tục trong đường dẫn đám mây đang trôi qua.

d1ebd5cfae2a2a47.png

Phân tích thông báo lỗi

Xem xét kỹ hơn các thông báo lỗi trong các trường hợp kiểm thử không thành công. Chúng cho bạn biết trạng thái dự kiến cho kiểm thử đó và trạng thái thực tế là gì. Trong trường hợp này, đối với "Tạm dừng máy giặt", trạng thái dự kiến sẽ là isPaused: true, nhưng trong trạng thái thực tế, chúng ta đã nhận được isPaused: false. Tương tự, đối với "Tạm dừng máy giặt", trạng thái dự kiến là isPaused: true, nhưng ở trạng thái thực tế, chúng ta nhận được isPaused: false.

6bfd3acef9c16b84.png.

Từ các thông báo lỗi, có vẻ như trong đường dẫn cục bộ, chúng ta đang đặt trạng thái isPaused ngược lại.

Xác định và khắc phục lỗi

Hãy tìm mã nguồn mà ứng dụng Local Home gửi lệnh thực thi đến thiết bị. getDataCommand() là hàm được executeHandler() gọi để đặt payload trong lệnh thực thi được gửi đến thiết bị.

local/index.ts

getDataForCommand(command: string, params: IWasherParams): unknown {
    switch (command) {
        case 'action.devices.commands.OnOff':
            return {
                on: params.on ? true : false
            };
        case 'action.devices.commands.StartStop':
            return {
                isRunning: params.start ? true : false
            };
        case 'action.devices.commands.PauseUnpause':
            return {
                // Is there something wrong here?
                isPaused: params.pause ? false : true
            };
        default:
            console.error('Unknown command', command);
            return {};
    }
}

Chúng ta thực sự đang thiết lập isPause ở trạng thái đảo ngược, nó phải được thiết lập thành true khi params.pausetruefalse. Vì vậy, hãy khắc phục vấn đề đó.

local/index.ts

getDataForCommand(command: string, params: IWasherParams): unknown {
    switch (command) {
        case 'action.devices.commands.OnOff':
            return {
                on: params.on ? true : false
            };
        case 'action.devices.commands.StartStop':
            return {
                isRunning: params.start ? true : false
            };
        case 'action.devices.commands.PauseUnpause':
            return {
                isPaused: params.pause ? true : false
            };
        default:
            console.error('Unknown command', command);
            return {};
    }
}

Hãy thay đổi phiên bản cục bộ của ứng dụng Home để chúng tôi có thể xác định xem mình có đang sử dụng đúng phiên bản hay không.

local/index.ts

const localHomeSdk = new App('1.0.3');

Hãy nhớ biên dịch lại ứng dụng và triển khai lại lên Firebase. Trong app-faulty/local, hãy chạy:

$ npm run build
$ firebase deploy --only hosting

Bây giờ, hãy khởi động lại thiết bị Google Home để có thể tải ứng dụng Home cục bộ đã cập nhật. Hãy đảm bảo phiên bản ứng dụng Home cục bộ là 1.0.3.

Kiểm tra kết quả sửa lỗi

Bây giờ, hãy chạy lại bộ Kiểm thử cho nhà thông minh có cùng cấu hình và bạn sẽ thấy rằng mọi trường hợp kiểm thử đã thành công.

b7fc8c5d3c727d8d.png

7. Xin chúc mừng

764dbc83b95782a.pngs

Xin chúc mừng! Bạn đã tìm hiểu thành công cách khắc phục sự cố cho ứng dụng Local Home thông qua Bộ thử nghiệm dành cho nhà thông minh và tính năng Ghi nhật ký trên đám mây.

Tìm hiểu thêm

Dưới đây là một số thao tác khác mà bạn có thể thử:

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.