1. Trước khi bắt đầu
Là nhà phát triển Internet vạn vật (IoT), bạn có thể xây dựng các tính năng tích hợp đám mây với đám mây để 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à lệnh thoại thông qua Trợ lý.
Các hoạt động tích hợp từ đám mây đến đám mây dựa vào Biểu đồ nhà để cung cấp dữ liệu theo bối cảnh về nhà và các thiết bị trong nhà, tạo bản đồ logic của nhà. Bối cảnh đó giúp Trợ lý hiểu rõ hơn về các yêu cầu của người dùng so với vị trí của họ trong nhà. Ví dụ: Biểu đồ nhà có thể lưu trữ khái niệm về một phòng khách chứa nhiều loại thiết bị của nhiều nhà sản xuất, chẳng hạn như máy điều nhiệt, đèn, quạt và máy hút bụi.
Điều kiện tiên quyết
- Hướng dẫn dành cho nhà phát triển về cách tạo chế độ tích hợp Cloud-to-cloud
Sản phẩm bạn sẽ tạo ra
Trong lớp học lập trình này, bạn sẽ phát hành một dịch vụ đám mây quản lý máy giặt thông minh ảo, sau đó xây dựng một dịch vụ tích hợp Cloud-to-cloud (Đám mây với đám mây) và kết nối dịch vụ đó với Trợ lý.
Kiến thức bạn sẽ học được
- Cách triển khai dịch vụ đám mây cho nhà thông minh
- Cách kết nối dịch vụ của bạn với Trợ lý
- Cách phát hành các thay đổi về trạng thái thiết bị cho Google
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
- Tài khoản thanh toán Google Cloud
2. Bắt đầu
Bật chế độ Kiểm soát hoạt động
Để sử dụng Trợ lý Google, bạn phải chia sẻ một số dữ liệu hoạt động nhất định với Google. Trợ lý Google cần dữ liệu này để hoạt động đúng cách; tuy nhiên, yêu cầu chia sẻ dữ liệu không dành riêng cho SDK. Để chia sẻ dữ liệu này, hãy tạo một Tài khoản Google nếu bạn chưa có. Bạn có thể sử dụng bất kỳ Tài khoản Google nào, không nhất thiết phải là tài khoản nhà phát triển của bạn.
Mở trang Kiểm soát hoạt động cho Tài khoản Google mà bạn muốn sử dụng với Trợ lý.
Đảm bảo bạn đã bật các nút bật/tắt sau:
- Hoạt động trên web và ứng dụng – Ngoài ra, hãy nhớ chọn hộp đánh dấu Bao gồm cả nhật ký duyệt web trên Chrome cũng như hoạt động trên những trang web, ứng dụng và thiết bị sử dụng các dịch vụ của Google.
- Thông tin thiết bị
- Hoạt động âm thanh và giọng nói
Tạo dự án Tích hợp đám mây với đám mây
- Chuyển đến Developer Console (Bảng điều khiển dành cho nhà phát triển).
- Nhấp vào Create Project (Tạo dự án), nhập tên cho dự án rồi nhấp vào Create Project (Tạo dự án).
Chọn chế độ tích hợp đám mây với đám mây
Trên trang Trang chủ dự án trong Developer Console, hãy chọn Thêm chế độ tích hợp đám mây với đám mây trong phần Đám mây với đám mây.
Cài đặt Giao diện dòng lệnh (CLI) của Firebase
Giao diện dòng lệnh (CLI) của Firebase sẽ cho phép bạn phân phát ứng dụng web trên máy và triển khai ứng dụng web lên dịch vụ lưu trữ Firebase.
Để cài đặt CLI, hãy chạy lệnh npm sau đây từ dòng lệnh:
npm install -g firebase-tools
Để xác minh rằng bạn đã cài đặt CLI đúng cách, hãy chạy:
firebase --version
Uỷ quyền cho Firebase CLI bằng Tài khoản Google của bạn bằng cách chạy:
firebase login
3. Chạy ứng dụng khởi động
Giờ đây, khi đã thiết lập môi trường phát triển, bạn có thể triển khai dự án ban đầu để xác minh rằng mọi thứ đã được định cấu hình đúng cách.
Tải 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:
Bạn cũng có thể sao chép kho lưu trữ GitHub từ dòng lệnh:
git clone https://github.com/google-home/smarthome-washer.git
Giới thiệu về dự án
Dự án khởi động chứa các thư mục con sau:
public:
Giao diện người dùng phía trước để 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 đầy đủ để quản lý máy giặt thông minh bằng Cloud Functions cho Firebase và Cơ sở dữ liệu theo thời gian thực của Firebase.
Tạo dự án Firebase
- Chuyển đến Firebase.
- Nhấp vào Tạo dự án rồi nhập tên dự án.
- Đánh dấu vào hộp đồng ý rồi nhấp vào Tiếp tục. Nếu không có hộp đánh dấu thoả thuận, bạn có thể bỏ qua bước này.
- Sau khi tạo dự án Firebase, hãy tìm mã dự án. Chuyển đến phần Tổng quan về dự án rồi nhấp vào biểu tượng cài đặt > Cài đặt dự án.
- Dự án của bạn được liệt kê trong thẻ Chung.
Kết nối với Firebase
Chuyển đến thư mục washer-start
, sau đó thiết lập Firebase CLI với dự án tích hợp:
cd washer-start firebase use <firebase-project-id>
Định cấu hình dự án Firebase
Khởi chạy dự án Firebase.
firebase init
Chọn các tính năng CLI, Cơ sở dữ liệu thời gian thực, Hàm và tính năng Lưu trữ bao gồm cả tính năng Lưu trữ Firebase.
? Which Firebase CLI features do you want to set up for this directory? Press Space to select features, then Enter to confirm your choices. ❯◉ Realtime Database: Configure a security rules file for Realtime Database and (optionally) provision default instance ◯ Firestore: Configure security rules and indexes files for Firestore ◉ Functions: Configure a Cloud Functions directory and its files ◉ Hosting: Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys ◯ Hosting: Set up GitHub Action deploys ◯ Storage: Configure a security rules file for Cloud Storage ◯ Emulators: Set up local emulators for Firebase products ◯ Remote Config: Configure a template file for Remote Config ◯ Extensions: Set up an empty Extensions manifest
Thao tác này sẽ khởi chạy các API và tính năng cần thiết cho dự án của bạn.
Khi được nhắc, hãy khởi chạy Cơ sở dữ liệu theo thời gian thực. Bạn có thể sử dụng vị trí mặc định cho thực thể cơ sở dữ liệu.
? It seems like you haven't initialized Realtime Database in your project yet. Do you want to set it up? Yes ? Please choose the location for your default Realtime Database instance: us-central1
Vì bạn đang sử dụng mã dự án ban đầu, hãy chọn tệp mặc định cho Quy tắc bảo mật và đảm bảo bạn không ghi đè tệp quy tắc cơ sở dữ liệu hiện có.
? File database.rules.json already exists. Do you want to overwrite it with the Realtime Database Security Rules for <project-ID>-default-rtdb from the Firebase Console? No
Nếu bạn đang khởi tạo lại dự án, hãy chọn Overwrite (Ghi đè) khi được hỏi xem bạn muốn khởi tạo hay ghi đè cơ sở mã.
? Would you like to initialize a new codebase, or overwrite an existing one? Overwrite
Khi định cấu hình Hàm, bạn nên sử dụng các tệp mặc định và đảm bảo không ghi đè các tệp index.js và package.json hiện có trong mẫu dự án.
? What language would you like to use to write Cloud Functions? JavaScript ? Do you want to use ESLint to catch probable bugs and enforce style? No ? File functions/package.json already exists. Overwrite? No ? File functions/index.js already exists. Overwrite? No
Nếu bạn đang khởi tạo lại dự án, hãy chọn No (Không) khi được hỏi xem bạn có muốn khởi tạo hay ghi đè các hàm/.gitignore hay không.
? File functions/.gitignore already exists. Overwrite? No
? Do you want to install dependencies with npm now? Yes
Cuối cùng, hãy định cấu hình chế độ thiết lập Lưu trữ để sử dụng thư mục public
trong mã dự án và sử dụng tệp index.html hiện có. Chọn Không khi được yêu cầu sử dụng ESLint.
? What do you want to use as your public directory? public ? Configure as a single-page app (rewrite all urls to /index.html)? Yes ? Set up automatic builds and deploys with GitHub? No ? File public/index.html already exists. Overwrite? No
Nếu ESLint vô tình được bật, bạn có thể tắt ESLint theo hai cách:
- Sử dụng giao diện người dùng, hãy chuyển đến thư mục
../functions
trong dự án, chọn tệp.eslintrc.js
ẩn rồi xoá tệp đó. Đừng nhầm lẫn với.eslintrc.json
có tên tương tự. - Sử dụng dòng lệnh:
cd functions rm .eslintrc.js
Trong tệp washer-done/firebase.json
, hãy hoàn tất mã bằng:
{
"database": {
"rules": "database.rules.json"
},
"hosting": {
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
},
"headers": [{
"source" : "**/*.@(js|html)",
"headers" : [ {
"key" : "Cache-Control",
"value" : "max-age=0"
} ]
}],
"functions": [
{
"source": "functions",
"codebase": "default",
"ignore": [
"node_modules",
".git",
"firebase-debug.log",
"firebase-debug.*.log",
"*.local"
]
}
]
}
Triển khai lên Firebase
Giờ đây, 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 chạy ứng dụng lần đầu tiên.
firebase deploy
Đây là kết quả bạn sẽ thấy trên bảng điều khiển:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<firebase-project-id>/overview Hosting URL: https://<firebase-project-id>.web.app
Lệnh này triển khai một ứng dụng web cùng với một số Cloud Functions cho Firebase.
Mở Hosting URL (URL lưu trữ) trong trình duyệt (https://
) để xem ứng dụng web. Bạn sẽ thấy giao diện sau:
Giao diện người dùng web này đại diện cho một nền tảng bên thứ ba để xem hoặc sửa đổi trạng thái thiết bị. Để bắt đầu điền thông tin thiết bị vào cơ sở dữ liệu, hãy nhấp vào CẬP NHẬT. Bạn sẽ không thấy thay đổi nào trên trang này, nhưng trạng thái hiện tại của máy giặt sẽ được lưu trữ trong cơ sở dữ liệu.
Bây giờ, bạn có thể kết nối dịch vụ đám mây mà bạn đã triển khai với Trợ lý Google bằng Google Home Developer Console.
Định cấu hình dự án trong Developer Console
Trên thẻ Develop (Phát triển), hãy thêm Display Name (Tên hiển thị) cho hoạt động tương tác. Tên này sẽ xuất hiện trong ứng dụng Google Home.
Trong phần Xây dựng thương hiệu ứng dụng, hãy tải tệp png
lên cho biểu tượng ứng dụng, có kích thước 144 x 144 px và tên là
.
Để bật tính năng Liên kết tài khoản, hãy sử dụng các chế độ cài đặt liên kết tài khoản sau:
ID khách hàng |
|
Mật khẩu ứng dụng khách |
|
URL Uỷ quyền |
|
URL mã thông báo |
|
Trong mục URL thực hiện trên đám mây, hãy nhập URL cho hàm trên đám mây của bạn để thực hiện các ý định về nhà thông minh.
https://us-central1-
Nhấp vào Lưu để lưu cấu hình dự án, sau đó nhấp vào Tiếp theo: Kiểm thử để bật tính năng kiểm thử trên dự án.
Giờ đây, bạn có thể bắt đầu triển khai các webhook cần thiết để kết nối trạng thái thiết bị với Trợ lý.
4. Tạo một vòng đệm
Giờ đây, khi đã định cấu hình chế độ tích hợp, bạn có thể thêm thiết bị và gửi dữ liệu. Dịch vụ đám mây của bạn cần xử lý các ý định sau:
- Ý định
SYNC
xảy ra khi Trợ lý muốn biết người dùng đã kết nối thiết bị nào. Thông báo này được gửi đến dịch vụ của bạn khi người dùng liên kết một tài khoản. Bạn nên phản hồi bằng một tải trọng JSON của tất cả thiết bị của người dùng và chức năng của các thiết bị đó. - Ý định
QUERY
xảy ra khi Trợ lý muốn biết trạng thái hiện tại của một thiết bị. Bạn nên phản hồi bằng một tải trọng JSON có trạng thái của từng thiết bị được yêu cầu. - Ý định
EXECUTE
xảy ra khi Trợ lý muốn thay mặt người dùng kiểm soát một thiết bị. Bạn nên phản hồi bằng một tải trọng JSON có trạng thái thực thi của từng thiết bị được yêu cầu. - Ý định
DISCONNECT
xảy ra khi người dùng huỷ liên kết tài khoản của họ với Trợ lý. Bạn nên ngừng gửi sự kiện cho các thiết bị của người dùng này đến Trợ lý.
Bạn sẽ cập nhật các hàm mà bạn đã triển khai trước đó để xử lý các ý định này trong các phần sau.
Cập nhật phản hồi SYNC
Mở functions/index.js
, chứa mã để phản hồi các yêu cầu của Trợ lý.
Bạn sẽ cần xử lý ý định SYNC
bằng cách trả về siêu dữ liệu và chức năng của thiết bị. Cập nhật JSON trong mảng onSync
để thêm thông tin về thiết bị và các đặc điểm được đề xuất cho máy giặt.
index.js
app.onSync((body) => {
return {
requestId: body.requestId,
payload: {
agentUserId: USER_ID,
devices: [{
id: 'washer',
type: 'action.devices.types.WASHER',
traits: [
'action.devices.traits.OnOff',
'action.devices.traits.StartStop',
'action.devices.traits.RunCycle',
],
name: {
defaultNames: ['My Washer'],
name: 'Washer',
nicknames: ['Washer'],
},
deviceInfo: {
manufacturer: 'Acme Co',
model: 'acme-washer',
hwVersion: '1.0',
swVersion: '1.0.1',
},
willReportState: true,
attributes: {
pausable: true,
},
}],
},
};
});
Triển khai lên Firebase
Triển khai phương thức thực hiện trên đám mây đã cập nhật bằng Firebase CLI:
firebase deploy --only functions
Liên kết với Trợ lý Google
Để kiểm thử tính năng tích hợp giữa các đám mây, bạn cần liên kết dự án của mình với một Tài khoản Google. Việc này cho phép kiểm thử thông qua các nền tảng Trợ lý Google và ứng dụng Google Home đã đăng nhập vào cùng một tài khoản.
- Trên điện thoại, hãy mở phần cài đặt Trợ lý Google. Xin lưu ý rằng bạn phải đăng nhập bằng chính tài khoản mà bạn dùng trong Search Console.
- Chuyển đến phần Trợ lý Google > Cài đặt > Điều khiển nhà (trong phần Trợ lý).
- Nhấp vào biểu tượng tìm kiếm ở phía trên bên phải.
- Tìm ứng dụng kiểm thử bằng tiền tố [test] để tìm ứng dụng kiểm thử cụ thể.
- Chọn mục đó. Sau đó, Trợ lý Google sẽ xác thực bằng dịch vụ của bạn và gửi yêu cầu
SYNC
, yêu cầu dịch vụ của bạn cung cấp danh sách thiết bị cho người dùng.
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.
5. Xử lý các lệnh và truy vấn
Giờ đây, khi dịch vụ đám mây của bạn báo cáo chính xác thiết bị máy giặt cho Google, bạn cần thêm khả năng yêu cầu trạng thái thiết bị và gửi lệnh.
Xử lý ý định QUERY
Ý định QUERY
bao gồm một nhóm thiết bị. Đối với mỗi thiết bị, bạn nên trả lời bằng trạng thái hiện tại của thiết bị đó.
Trong functions/index.js
, hãy chỉnh sửa trình xử lý QUERY
để xử lý danh sách thiết bị mục tiêu có trong yêu cầu ý định.
index.js
app.onQuery(async (body) => {
const {requestId} = body;
const payload = {
devices: {},
};
const queryPromises = [];
const intent = body.inputs[0];
for (const device of intent.payload.devices) {
const deviceId = device.id;
queryPromises.push(queryDevice(deviceId)
.then((data) => {
// Add response to device payload
payload.devices[deviceId] = data;
}
));
}
// Wait for all promises to resolve
await Promise.all(queryPromises);
return {
requestId: requestId,
payload: payload,
};
});
Đối với mỗi thiết bị có trong yêu cầu, hãy trả về trạng thái hiện tại được lưu trữ trong Cơ sở dữ liệu theo thời gian thực. Cập nhật hàm queryFirebase
và queryDevice
để trả về dữ liệu trạng thái của máy giặt.
index.js
const queryFirebase = async (deviceId) => {
const snapshot = await firebaseRef.child(deviceId).once('value');
const snapshotVal = snapshot.val();
return {
on: snapshotVal.OnOff.on,
isPaused: snapshotVal.StartStop.isPaused,
isRunning: snapshotVal.StartStop.isRunning,
};
};
const queryDevice = async (deviceId) => {
const data = await queryFirebase(deviceId);
return {
on: data.on,
isPaused: data.isPaused,
isRunning: data.isRunning,
currentRunCycle: [{
currentCycle: 'rinse',
nextCycle: 'spin',
lang: 'en',
}],
currentTotalRemainingTime: 1212,
currentCycleRemainingTime: 301,
};
};
Xử lý ý định EXECUTE
Ý định EXECUTE
xử lý các lệnh để cập nhật trạng thái thiết bị. Phản hồi trả về trạng thái của từng lệnh (ví dụ: SUCCESS
, ERROR
hoặc PENDING
) và trạng thái thiết bị mới.
Trong functions/index.js
, hãy chỉnh sửa trình xử lý EXECUTE
để xử lý danh sách các đặc điểm cần cập nhật và tập hợp thiết bị mục tiêu cho mỗi lệnh:
index.js
app.onExecute(async (body) => {
const {requestId} = body;
// Execution results are grouped by status
const result = {
ids: [],
status: 'SUCCESS',
states: {
online: true,
},
};
const executePromises = [];
const intent = body.inputs[0];
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(() => functions.logger.error('EXECUTE', device.id)));
}
}
}
await Promise.all(executePromises);
return {
requestId: requestId,
payload: {
commands: [result],
},
};
});
Đối với mỗi lệnh và thiết bị mục tiêu, hãy cập nhật các giá trị trong Cơ sở dữ liệu theo thời gian thực tương ứng với đặc điểm được yêu cầu. Sửa đổi hàm updateDevice
để cập nhật tệp tham chiếu Firebase thích hợp và trả về trạng thái thiết bị đã cập nhật.
index.js
const updateDevice = async (execution, deviceId) => {
const {params, command} = execution;
let state; let ref;
switch (command) {
case 'action.devices.commands.OnOff':
state = {on: params.on};
ref = firebaseRef.child(deviceId).child('OnOff');
break;
case 'action.devices.commands.StartStop':
state = params.start
? {isRunning: true, isPaused: false}
: {isRunning: false, isPaused: false};
ref = firebaseRef.child(deviceId).child('StartStop');
break;
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 = firebaseRef.child(deviceId).child('StartStop');
break;
}
return ref.update(state)
.then(() => state);
};
6. Kiểm thử quá trình tích hợp
Sau khi triển khai cả ba ý định, bạn có thể kiểm thử để đảm bảo rằng tính năng tích hợp của mình điều khiển được máy giặt.
Triển khai lên Firebase
Triển khai phương thức thực hiện trên đám mây đã cập nhật bằng Firebase CLI:
firebase deploy --only functions
Kiểm thử máy giặt
Bây giờ, bạn có thể thấy giá trị thay đổi khi 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."
"Ok Google, tạm dừng máy giặt."
"Ok Google, dừng máy giặt."
Bạn cũng có thể xem trạng thái hiện tại của máy giặt bằng cách đặt câu hỏi.
"Này 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?"
Bạn có thể xem các truy vấn và lệnh này trong nhật ký xuất hiện trong hàm của bạn trong phần Hàm của Bảng điều khiển Firebase. Tìm hiểu thêm về nhật ký Firebase trong phần Viết và xem nhật ký.
Bạn cũng có thể tìm thấy các truy vấn và lệnh này trong Google Cloud Console bằng cách chuyển đến phần Logging (Ghi nhật ký) > Logs Explorer (Trình khám phá nhật ký). Tìm hiểu thêm về tính năng ghi nhật ký của Google Cloud trong bài viết Truy cập nhật ký sự kiện bằng tính năng Ghi nhật ký trên đám mây.
7. Báo cáo nội dung cập nhật cho Google
Bạn đã tích hợp đầy đủ dịch vụ đám mây với ý định nhà thông minh, cho phép người dùng kiểm soát và truy vấn trạng thái hiện tại của thiết bị. Tuy nhiên, cách triển khai này vẫn thiếu một cách để dịch vụ của bạn chủ động gửi thông tin sự kiện (chẳng hạn như thay đổi trạng thái hoặc trạng thái hiện diện của thiết bị) đến Trợ lý.
Với tính năng Yêu cầu đồng bộ hoá, bạn có thể kích hoạt một yêu cầu đồng bộ hoá mới khi người dùng thêm hoặc xoá thiết bị hoặc khi chức năng của thiết bị thay đổi. Với tính năng Báo cáo trạng thái, dịch vụ đám mây của bạn có thể chủ động gửi trạng thái của thiết bị đến Biểu đồ nhà khi người dùng thay đổi trạng thái thiết bị theo cách thủ công (ví dụ: bật công tắc đèn) hoặc thay đổi trạng thái bằng một dịch vụ khác.
Trong phần này, bạn sẽ thêm mã để gọi các phương thức này từ ứng dụng web giao diện người dùng.
Bật HomeGraph API
HomeGraph API cho phép lưu trữ và truy vấn các thiết bị cũng như trạng thái của các thiết bị đó trong Biểu đồ nhà của người dùng. Để sử dụng API này, trước tiên, bạn phải mở Google Cloud Console và bật HomeGraph API.
Trong Google Cloud Console, hãy nhớ chọn dự án phù hợp với hoạt động tích hợp của bạn <project-id>.
. Sau đó, trong màn hình Thư viện API cho API HomeGraph, hãy nhấp vào Bật.
Bật Trạng thái báo cáo
Các hoạt động ghi vào Cơ sở dữ liệu theo thời gian thực sẽ kích hoạt hàm reportstate
trong dự án khởi động. Cập nhật hàm reportstate
trong functions/index.js
để ghi lại dữ liệu được ghi vào cơ sở dữ liệu và đăng dữ liệu đó lên Biểu đồ trang chủ thông qua Trạng thái báo cáo.
index.js
exports.reportstate = functions.database.ref('{deviceId}').onWrite(
async (change, context) => {
functions.logger.info('Firebase write event triggered Report State');
const snapshot = change.after.val();
const requestBody = {
requestId: 'ff36a3cc', /* Any unique ID */
agentUserId: USER_ID,
payload: {
devices: {
states: {
/* Report the current state of our washer */
[context.params.deviceId]: {
on: snapshot.OnOff.on,
isPaused: snapshot.StartStop.isPaused,
isRunning: snapshot.StartStop.isRunning,
},
},
},
},
};
const res = await homegraph.devices.reportStateAndNotification({
requestBody,
});
functions.logger.info('Report state response:', res.status, res.data);
});
Bật tính năng Đồng bộ hoá yêu cầu
Thao tác làm mới biểu tượng trong giao diện người dùng web phía trước sẽ kích hoạt hàm requestsync
trong dự án khởi động. Triển khai hàm requestsync
trong functions/index.js
để gọi API HomeGraph.
index.js
exports.requestsync = functions.https.onRequest(async (request, response) => {
response.set('Access-Control-Allow-Origin', '*');
functions.logger.info(`Request SYNC for user ${USER_ID}`);
try {
const res = await homegraph.devices.requestSync({
requestBody: {
agentUserId: USER_ID,
},
});
functions.logger.info('Request sync response:', res.status, res.data);
response.json(res.data);
} catch (err) {
functions.logger.error(err);
response.status(500).send(`Error requesting sync: ${err}`);
}
});
Triển khai lên Firebase
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
Kiểm tra kết quả triển khai
Nhấp vào nút Làm mới trong giao diện người dùng web và xác minh rằng bạn thấy yêu cầu đồng bộ hoá trong nhật ký bảng điều khiển Firebase.
Tiếp theo, hãy điều chỉnh các thuộc tính của thiết bị máy giặt trong giao diện người dùng web phía trước rồi nhấp vào Cập nhật. Xác minh rằng bạn có thể thấy thay đổi trạng thái được báo cáo cho Google trong nhật ký bảng điều khiển Firebase.
8. Xin chúc mừng
Xin chúc mừng! Bạn đã tích hợp thành công Trợ lý với một dịch vụ đám mây của thiết bị bằng cách sử dụng tính năng tích hợp đám mây với đám mây.
Tìm hiểu thêm
Sau đây là một số ý tưởng mà bạn có thể triển khai để tìm hiểu sâu hơn:
- Thêm chế độ và nút bật/tắt vào thiết bị.
- Thêm các trái tính được hỗ trợ khác vào thiết bị.
- Khám phá tính năng thực thi cục bộ 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ề cách kiểm thử và gửi một công cụ tích hợp để xem xét, bao gồm cả quy trình chứng nhận để phát hành công cụ tích hợp cho người dùng.