1. ก่อนเริ่มต้น
ในฐานะนักพัฒนาอินเทอร์เน็ตของสรรพสิ่ง (IoT) คุณสามารถสร้างการดำเนินการสำหรับบ้านอัจฉริยะที่ช่วยให้ผู้ใช้ควบคุมอุปกรณ์ของตนผ่านการควบคุมด้วยการสัมผัสในแอป Google Home และคำสั่งเสียงด้วย Assistant
การดำเนินการของสมาร์ทโฮมจะใช้กราฟของบ้านเพื่อให้ข้อมูลบริบทเกี่ยวกับบ้านและอุปกรณ์ในบ้าน เพื่อสร้างแผนที่เชิงตรรกะของบ้าน บริบทจะช่วยให้ Assistant เข้าใจคำขอของผู้ใช้ได้อย่างเป็นธรรมชาติมากขึ้น เมื่อเทียบกับตำแหน่งของผู้ใช้ในบ้าน เช่น Home Graph อาจจัดเก็บแนวคิดของห้องนั่งเล่นที่มีอุปกรณ์หลายประเภทจากผู้ผลิตรายต่างๆ เช่น ตัวควบคุมอุณหภูมิ โคมไฟ พัดลม และเครื่องดูดฝุ่น
ข้อกำหนดเบื้องต้น
- คู่มือนักพัฒนาซอฟต์แวร์สร้างการดำเนินการสำหรับสมาร์ทโฮม
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะได้เผยแพร่บริการระบบคลาวด์ที่จัดการเครื่องซักผ้าอัจฉริยะเสมือนจริง จากนั้นสร้างการดำเนินการสำหรับสมาร์ทโฮมและเชื่อมต่อกับ Assistant
สิ่งที่จะได้เรียนรู้
- วิธีทำให้บริการระบบคลาวด์สมาร์ทโฮมใช้งานได้
- วิธีเชื่อมต่อบริการกับ Assistant
- วิธีเผยแพร่การเปลี่ยนแปลงสถานะอุปกรณ์ไปยัง Google
สิ่งที่ต้องมี
- เว็บเบราว์เซอร์ เช่น Google Chrome
- อุปกรณ์ iOS หรือ Android ที่ติดตั้งแอป Google Home
- Node.js เวอร์ชัน 10.16 ขึ้นไป
- บัญชีสำหรับการเรียกเก็บเงินของ Google Cloud
2. เริ่มต้นใช้งาน
เปิดใช้ส่วนควบคุมกิจกรรม
คุณต้องแชร์ข้อมูลกิจกรรมบางอย่างกับ Google จึงจะใช้ Google Assistant ได้ Google Assistant ต้องการให้ข้อมูลนี้ทำงานอย่างถูกต้อง อย่างไรก็ตาม ข้อกำหนดในการแชร์ข้อมูลไม่ได้มีไว้สำหรับ SDK โดยเฉพาะ หากต้องการแชร์ข้อมูลนี้ ให้สร้างบัญชี Google (หากยังไม่มี) คุณจะใช้บัญชี Google ใดก็ได้ โดยไม่จำเป็นต้องเป็นบัญชีนักพัฒนาแอปของคุณ
เปิดหน้าส่วนควบคุมกิจกรรมของบัญชี Google ที่ต้องการใช้กับ Assistant
ตรวจสอบว่าสวิตช์สลับต่อไปนี้เปิดใช้อยู่
- กิจกรรมบนเว็บและแอป - นอกจากนี้ อย่าลืมเลือกช่องทำเครื่องหมายรวมประวัติการเข้าชมใน Chrome และกิจกรรมจากเว็บไซต์ แอป และอุปกรณ์ที่ใช้บริการต่างๆ ของ Google
- ข้อมูลอุปกรณ์
- กิจกรรมเสียงพูดและเสียง
สร้างโปรเจ็กต์ Actions
- ไปที่คอนโซล Actions on Google Developer
- คลิกโครงการใหม่ ป้อนชื่อโครงการแล้วคลิกสร้างโครงการ
เลือกแอปสมาร์ทโฮม
เลือกบ้านอัจฉริยะในหน้าจอภาพรวมในคอนโซลการดําเนินการ
เลือกการ์ดประสบการณ์การใช้งานสมาร์ทโฮม คลิกเริ่มสร้าง จากนั้นระบบจะนำคุณไปยังคอนโซลของโปรเจ็กต์
ติดตั้ง Firebase CLI
อินเทอร์เฟซบรรทัดคำสั่งของ Firebase (CLI) จะช่วยให้คุณแสดงเว็บแอปภายในเครื่องและทำให้เว็บแอปใช้งานได้กับโฮสติ้งของ Firebase
หากต้องการติดตั้ง CLI ให้เรียกใช้คำสั่ง npm ต่อไปนี้จากเทอร์มินัล:
npm install -g firebase-tools
หากต้องการยืนยันว่า CLI ได้รับการติดตั้งอย่างถูกต้อง ให้เรียกใช้:
firebase --version
ให้สิทธิ์ Firebase CLI ด้วยบัญชี Google โดยเรียกใช้
firebase login
3. เรียกใช้แอปเริ่มต้น
เมื่อตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์แล้ว คุณจะทำให้โปรเจ็กต์เริ่มต้นใช้งานได้เพื่อยืนยันว่าทุกอย่างมีการกำหนดค่าอย่างถูกต้อง
ดูซอร์สโค้ด
คลิกลิงก์ต่อไปนี้เพื่อดาวน์โหลดตัวอย่างสำหรับ Codelab นี้ในเครื่องการพัฒนาของคุณ
...หรือโคลนที่เก็บ GitHub จากบรรทัดคำสั่งก็ได้ ดังนี้
git clone https://github.com/google-home/smarthome-washer.git
เกี่ยวกับโปรเจ็กต์นี้
โปรเจ็กต์เริ่มต้นมีไดเรกทอรีย่อยต่อไปนี้
public:
UI ฟรอนท์เอนด์ที่ช่วยให้ควบคุมและตรวจสอบสถานะของเครื่องซักผ้าอัจฉริยะได้อย่างง่ายดายfunctions:
บริการระบบคลาวด์ที่ใช้งานอย่างเต็มรูปแบบ ซึ่งจัดการเครื่องซักผ้าอัจฉริยะด้วย Cloud Functions for Firebase และฐานข้อมูลเรียลไทม์ของ Firebase
เชื่อมต่อกับ Firebase
ไปที่ไดเรกทอรี washer-start
จากนั้นตั้งค่า Firebase CLI ด้วยโปรเจ็กต์ Actions ดังนี้
cd washer-start firebase use <project-id>
กำหนดค่าโปรเจ็กต์ Firebase
เริ่มต้นโปรเจ็กต์ Firebase
firebase init
เลือกฟีเจอร์ CLI, Realtime Database, ฟังก์ชัน และฟีเจอร์โฮสติ้งที่มีโฮสติ้งของ 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
การดำเนินการนี้จะเริ่มต้น API และฟีเจอร์ที่จำเป็นสำหรับโปรเจ็กต์ของคุณ
เมื่อมีข้อความแจ้ง ให้เริ่มต้น Realtime Database คุณใช้ตำแหน่งเริ่มต้นสำหรับอินสแตนซ์ฐานข้อมูลได้
? 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
เนื่องจากคุณใช้รหัสโปรเจ็กต์เริ่มต้นอยู่ ให้เลือกไฟล์เริ่มต้นสำหรับกฎความปลอดภัยและตรวจสอบว่าคุณไม่ได้เขียนทับไฟล์กฎฐานข้อมูลที่มีอยู่
? What file should be used for Realtime Database Security Rules? Database.rules.json ? 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
ในทำนองเดียวกัน ให้เลือกเขียนทับเมื่อระบบถามว่าคุณต้องการเริ่มต้นหรือเขียนทับโค้ดเบส
? Would you like to initialize a new codebase, or overwrite an existing one? Overwrite
เมื่อกำหนดค่าฟังก์ชัน คุณควรใช้ไฟล์เริ่มต้นและไม่เขียนทับไฟล์ index.js และ package.json ที่มีอยู่ในตัวอย่างโปรเจ็กต์
? What language would you like to use to write Cloud Functions? JavaScript ? File functions/package.json already exists. Overwrite? No ? File functions/index.js already exists. Overwrite? No ? Do you want to install dependencies with npm now? Yes
สุดท้าย ให้กำหนดการตั้งค่าโฮสติ้งเพื่อใช้ไดเรกทอรี public
ในรหัสโปรเจ็กต์ และใช้ไฟล์ index.html ที่มีอยู่ เลือกไม่ เมื่อระบบขอให้ใช้ ESLint
? What do you want to use as your public directory? public ? Do you want to use ESLint to catch probable bugs and enforce style? No ? 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
ถ้ามีการเปิดใช้ ESLint โดยไม่ได้ตั้งใจ คุณสามารถปิดใช้งานได้ 2 วิธีดังนี้
- ใช้ GUI ไปที่โฟลเดอร์
../functions
ภายใต้โปรเจ็กต์ จากนั้นเลือกไฟล์ที่ซ่อนไว้.eslintrc.js
แล้วลบออก อย่าเข้าใจผิดว่า.eslintrc.json
เป็นชื่อที่คล้ายกัน - กรณีที่ใช้บรรทัดคำสั่ง
cd functions rm .eslintrc.js
เพื่อให้แน่ใจว่าคุณกำหนดค่า Firebase ได้ถูกต้องและสมบูรณ์ ให้คัดลอกไฟล์ firebase.json
จากไดเรกทอรี app-done
ไปยังไดเรกทอรี app-start
โดยเขียนทับไฟล์ใน app-start
ในไดเรกทอรี app-start
:
cp -vp ../app-done/firebase.json .
ทำให้ใช้งานได้ใน Firebase
ไปที่โฟลเดอร์ functions
และติดตั้งทรัพยากร Dependency ที่จำเป็นทั้งหมดโดยใช้ npm.
cd functions npm install
เมื่อติดตั้งทรัพยากร Dependency และกำหนดค่าโปรเจ็กต์แล้ว คุณก็พร้อมที่จะเรียกใช้แอปเป็นครั้งแรก
firebase deploy
คุณจะเห็นเอาต์พุตของคอนโซลดังต่อไปนี้
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<project-id>/overview Hosting URL: https://<project-id>.web.app
คำสั่งนี้จะทำให้เว็บแอปใช้งานได้ พร้อมกับ Cloud Functions for Firebase หลายรายการ
เปิด Hosting URL ในเบราว์เซอร์ (https://<project-id>.web.app
) เพื่อดูเว็บแอป คุณจะเห็นอินเทอร์เฟซต่อไปนี้
UI บนเว็บนี้แสดงแพลตฟอร์มของบุคคลที่สามเพื่อดูหรือแก้ไขสถานะของอุปกรณ์ หากต้องการเริ่มสร้างฐานข้อมูลด้วยข้อมูลอุปกรณ์ ให้คลิกอัปเดต คุณจะไม่เห็นการเปลี่ยนแปลงใดๆ ในหน้านี้ แต่ระบบจะจัดเก็บสถานะปัจจุบันของเครื่องซักผ้าไว้ในฐานข้อมูล
ถึงเวลาเชื่อมต่อบริการระบบคลาวด์ที่ใช้กับ Google Assistant แล้วโดยใช้คอนโซล Actions
กำหนดค่าโปรเจ็กต์คอนโซล Actions
ในส่วนภาพรวม > สร้างการกระทำ ให้เลือกเพิ่มการดำเนินการ ป้อน URL สำหรับฟังก์ชันระบบคลาวด์ที่มี Fulfillment ของ Intent สมาร์ทโฮม แล้วคลิกบันทึก
https://us-central1-<project-id>.cloudfunctions.net/smarthome
ในแท็บพัฒนา > การเรียกใช้ ให้เพิ่มชื่อที่แสดงให้กับการดำเนินการ แล้วคลิกบันทึก ชื่อนี้จะปรากฏในแอป Google Home
หากต้องการเปิดใช้การลิงก์บัญชี ให้เลือกตัวเลือกพัฒนา > การลิงก์บัญชีในการนำทางด้านซ้าย ใช้การตั้งค่าการลิงก์บัญชีเหล่านี้
Client-ID |
|
รหัสลับไคลเอ็นต์ |
|
URL สำหรับการอนุญาต |
|
URL โทเค็น |
|
คลิกบันทึกเพื่อบันทึกการกำหนดค่าการลิงก์บัญชี แล้วคลิกทดสอบเพื่อเปิดใช้การทดสอบในโปรเจ็กต์
ระบบจะเปลี่ยนเส้นทางคุณไปยังเครื่องจำลอง หากคุณไม่เห็นข้อความ "เปิดใช้การทดสอบเลย" ให้คลิกรีเซ็ตการทดสอบเพื่อยืนยันว่าการทดสอบเปิดใช้อยู่
ตอนนี้คุณเริ่มติดตั้งเว็บฮุคที่จำเป็นต่อการเชื่อมต่อสถานะของอุปกรณ์กับ Assistant ได้แล้ว
4. สร้างเครื่องซักผ้า
เมื่อกำหนดค่าการดำเนินการแล้ว คุณสามารถเพิ่มอุปกรณ์และส่งข้อมูล บริการระบบคลาวด์ของคุณต้องจัดการ Intent ต่อไปนี้
- Intent
SYNC
จะเกิดขึ้นเมื่อ Assistant ต้องการทราบอุปกรณ์ที่ผู้ใช้เชื่อมต่อ โดยจะส่งไปยังบริการของคุณเมื่อผู้ใช้ลิงก์บัญชี คุณควรตอบกลับด้วยเพย์โหลด JSON ของอุปกรณ์ทั้งหมดและความสามารถของผู้ใช้ - Intent
QUERY
จะเกิดขึ้นเมื่อ Assistant ต้องการทราบสถานะปัจจุบันหรือสถานะของอุปกรณ์ คุณควรตอบกลับด้วยเพย์โหลด JSON พร้อมสถานะของอุปกรณ์แต่ละรายการที่ขอ - Intent
EXECUTE
เกิดขึ้นเมื่อ Assistant ต้องการควบคุมอุปกรณ์ในนามของผู้ใช้ คุณควรตอบกลับด้วยเพย์โหลด JSON พร้อมสถานะการดำเนินการของอุปกรณ์ที่ขอแต่ละเครื่อง - Intent
DISCONNECT
จะเกิดขึ้นเมื่อผู้ใช้ยกเลิกการลิงก์บัญชีกับ Assistant คุณควรหยุดส่งเหตุการณ์สำหรับอุปกรณ์ของผู้ใช้รายนี้ไปยัง Assistant
คุณจะอัปเดตฟังก์ชันที่เคยทำให้ใช้งานได้ก่อนหน้านี้เพื่อจัดการ Intent เหล่านี้ในส่วนต่อไปนี้
อัปเดตการตอบสนองการซิงค์
เปิด functions/index.js
ซึ่งมีรหัสสำหรับตอบกลับคำขอจาก Assistant
คุณจะต้องจัดการ SYNC
Intent โดยการแสดงข้อมูลเมตาและความสามารถของอุปกรณ์ อัปเดต JSON ในอาร์เรย์ onSync
ให้รวมข้อมูลอุปกรณ์และลักษณะที่แนะนำสำหรับเครื่องซักผ้า
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,
},
}],
},
};
});
ทำให้ใช้งานได้ใน Firebase
ทำให้ Fulfillment ระบบคลาวด์ที่อัปเดตใช้งานได้โดยใช้ Firebase CLI:
firebase deploy --only functions
ลิงก์กับ Google Assistant
คุณต้องลิงก์โปรเจ็กต์กับบัญชี Google จึงจะทดสอบการดำเนินการในบ้านอัจฉริยะได้ การดำเนินการนี้จะเปิดใช้การทดสอบผ่านแพลตฟอร์ม Google Assistant และแอป Google Home ที่ลงชื่อเข้าใช้บัญชีเดียวกัน
- เปิดการตั้งค่า Google Assistant ในโทรศัพท์ โปรดทราบว่าคุณควรลงชื่อเข้าสู่ระบบด้วยบัญชีเดียวกับในคอนโซล
- ไปที่ Google Assistant > การตั้งค่า > ระบบควบคุมอุปกรณ์ในบ้าน (ในส่วน Assistant)
- คลิกไอคอนค้นหาที่ด้านขวาบน
- ค้นหาแอปทดสอบโดยใช้คำนำหน้า [test] เพื่อหาแอปทดสอบที่ต้องการ
- ให้เลือกรายการนั้น จากนั้น Google Assistant จะตรวจสอบสิทธิ์กับบริการของคุณและส่งคำขอ
SYNC
เพื่อขอให้บริการของคุณมอบรายการอุปกรณ์ให้กับผู้ใช้
เปิดแอป Google Home และยืนยันว่าเห็นอุปกรณ์เครื่องซักผ้าของคุณ
5. จัดการคำสั่งและการค้นหา
เมื่อบริการระบบคลาวด์ของคุณรายงานอุปกรณ์เครื่องซักผ้าไปยัง Google ได้อย่างถูกต้องแล้ว คุณจะต้องเพิ่มความสามารถในการขอสถานะของอุปกรณ์และส่งคำสั่ง
จัดการ Intent ของ QUERY
QUERY
Intent ประกอบด้วยชุดอุปกรณ์ คุณควรตอบสนองต่อสถานะปัจจุบันของอุปกรณ์แต่ละเครื่อง
ใน functions/index.js
ให้แก้ไขเครื่องจัดการ QUERY
เพื่อประมวลผลรายการอุปกรณ์เป้าหมายซึ่งมีอยู่ในคำขอ Intent
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,
};
});
สำหรับอุปกรณ์แต่ละเครื่องที่อยู่ในคำขอ ให้แสดงสถานะปัจจุบันที่เก็บไว้ใน Realtime Database อัปเดตฟังก์ชัน queryFirebase
และ queryDevice
เพื่อแสดงข้อมูลสถานะของเครื่องซักผ้า
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,
};
};
จัดการเจตนารมณ์ของการกระทำ
Intent EXECUTE
จะจัดการคำสั่งเพื่ออัปเดตสถานะอุปกรณ์ การตอบกลับจะแสดงสถานะของคำสั่งแต่ละรายการ เช่น SUCCESS
, ERROR
หรือ PENDING
และสถานะอุปกรณ์ใหม่
ใน functions/index.js
ให้แก้ไขเครื่องจัดการ EXECUTE
เพื่อประมวลผลรายการลักษณะที่ต้องอัปเดตและชุดอุปกรณ์เป้าหมายสำหรับแต่ละคำสั่ง ดังนี้
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],
},
};
});
อัปเดตค่าใน Realtime Database ที่สอดคล้องกับลักษณะที่ขอสำหรับแต่ละคำสั่งและอุปกรณ์เป้าหมาย แก้ไขฟังก์ชัน updateDevice
เพื่ออัปเดตการอ้างอิง Firebase ที่เหมาะสมและส่งคืนสถานะอุปกรณ์ที่อัปเดตแล้ว
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 = {isRunning: params.start};
ref = firebaseRef.child(deviceId).child('StartStop');
break;
case 'action.devices.commands.PauseUnpause':
state = {isPaused: params.pause};
ref = firebaseRef.child(deviceId).child('StartStop');
break;
}
return ref.update(state)
.then(() => state);
};
6. ทดสอบการดำเนินการ
หลังจากใช้ Intent ทั้ง 3 รายการแล้ว คุณสามารถทดสอบว่าการดำเนินการของคุณควบคุมเครื่องซักผ้า
ทำให้ใช้งานได้ใน Firebase
ทำให้ Fulfillment ระบบคลาวด์ที่อัปเดตใช้งานได้โดยใช้ Firebase CLI:
firebase deploy --only functions
ทดสอบเครื่องซักผ้า
ตอนนี้คุณจะเห็นค่าเปลี่ยนไปเมื่อลองใช้คำสั่งเสียงต่อไปนี้ผ่านโทรศัพท์
"Ok Google เปิดเครื่องซักผ้า"
"Ok Google หยุดเครื่องซักผ้าชั่วคราว"
"Ok Google หยุดเครื่องซักผ้า"
นอกจากนี้ คุณยังดูสถานะปัจจุบันของเครื่องซักผ้าได้ด้วยการถามคำถาม
"Ok Google เครื่องซักผ้าเปิดอยู่ไหม"
"Ok Google เครื่องซักผ้าของฉันทำงานอยู่ไหม"
"Ok Google เครื่องซักผ้าอยู่ในโหมดไหน"
คุณดูคำค้นหาและคำสั่งเหล่านี้ได้ในบันทึกที่ปรากฏใต้ฟังก์ชันในส่วนฟังก์ชันของคอนโซล Firebase ดูข้อมูลเพิ่มเติมเกี่ยวกับบันทึก Firebase ในหัวข้อเขียนและดูบันทึก
คุณค้นหาการค้นหาและคำสั่งเหล่านี้ได้ใน Google Cloud Console โดยไปที่การบันทึก > เครื่องมือสำรวจบันทึก ดูข้อมูลเพิ่มเติมเกี่ยวกับการบันทึก Google Cloud ในเข้าถึงบันทึกเหตุการณ์ด้วย Cloud Logging
7. รายงานการอัปเดตไปยัง Google
คุณได้ผสานรวมบริการระบบคลาวด์เข้ากับ Intent ของสมาร์ทโฮมอย่างเต็มรูปแบบ ซึ่งช่วยให้ผู้ใช้ควบคุมและค้นหาสถานะปัจจุบันของอุปกรณ์ได้ อย่างไรก็ตาม การใช้งานยังไม่ช่วยให้บริการของคุณส่งข้อมูลกิจกรรมไปยัง Assistant ในเชิงรุกได้ เช่น การเปลี่ยนแปลงสถานะหรือสถานะของอุปกรณ์
เมื่อใช้คำขอซิงค์ คุณจะเรียกใช้คำขอซิงค์ใหม่เมื่อผู้ใช้เพิ่มหรือนำอุปกรณ์ออก หรือเมื่อความสามารถของอุปกรณ์มีการเปลี่ยนแปลง เมื่อใช้สถานะรายงาน บริการระบบคลาวด์จะส่งสถานะของอุปกรณ์ไปยัง Home Graph ได้ในเชิงรุกเมื่อผู้ใช้เปลี่ยนสถานะอุปกรณ์ เช่น เปิดสวิตช์ไฟ หรือเปลี่ยนสถานะโดยใช้บริการอื่น
ในส่วนนี้ คุณจะต้องเพิ่มโค้ดเพื่อเรียกใช้เมธอดเหล่านี้จากเว็บแอปฟรอนท์เอนด์
เปิดใช้ HomeGraph API
HomeGraph API ช่วยให้มีพื้นที่เก็บข้อมูลและการค้นหาอุปกรณ์และสถานะภายใน Home Graph ของผู้ใช้ หากต้องการใช้ API นี้ คุณต้องเปิดคอนโซล Google Cloud และเปิดใช้ HomeGraph API ก่อน
ในคอนโซล Google Cloud ให้เลือกโปรเจ็กต์ที่ตรงกับการดำเนินการของคุณ <project-id>.
จากนั้นคลิกเปิดใช้ในหน้าจอไลบรารี API ของ HomeGraph API
เปิดใช้งานสถานะรายงาน
การเขียนไปยัง Realtime Database จะทริกเกอร์ฟังก์ชัน reportstate
ในโปรเจ็กต์เริ่มต้น อัปเดตฟังก์ชัน reportstate
ใน functions/index.js
เพื่อบันทึกข้อมูลที่เขียนลงในฐานข้อมูลและโพสต์ลงใน Home Graph ผ่านสถานะรายงาน
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);
});
เปิดใช้การซิงค์คำขอ
การรีเฟรชไอคอนใน UI เว็บฟรอนท์เอนด์จะทริกเกอร์ฟังก์ชัน requestsync
ในโปรเจ็กต์เริ่มต้น ใช้ฟังก์ชัน requestsync
ใน functions/index.js
เพื่อเรียกใช้ HomeGraph API
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}`);
}
});
ทำให้ใช้งานได้ใน Firebase
ทำให้โค้ดที่อัปเดตใช้งานได้โดยใช้ Firebase CLI:
firebase deploy --only functions
ทดสอบการใช้งาน
คลิกปุ่มรีเฟรช ใน UI ของเว็บและยืนยันว่าคุณเห็นคำขอการซิงค์ในบันทึกคอนโซล Firebase
ถัดไป ให้ปรับแอตทริบิวต์ของอุปกรณ์เครื่องซักผ้าใน UI ของเว็บฟรอนท์เอนด์ แล้วคลิกอัปเดต ยืนยันว่าคุณดูการเปลี่ยนแปลงสถานะที่รายงานไปยัง Google ได้ในบันทึกคอนโซล Firebase
8. ขอแสดงความยินดี
ยินดีด้วย คุณผสานรวม Assistant กับบริการระบบคลาวด์ของอุปกรณ์โดยใช้การดำเนินการในบ้านอัจฉริยะเรียบร้อยแล้ว
ดูข้อมูลเพิ่มเติม
แนวคิดบางส่วนที่คุณสามารถนำไปปฏิบัติเพื่อให้ได้ข้อมูลลึกขึ้นมีดังนี้
- เพิ่มmodesและสลับลงในอุปกรณ์
- เพิ่มลักษณะที่รองรับลงในอุปกรณ์
- สำรวจการดำเนินการในพื้นที่สำหรับบ้านอัจฉริยะ
- ดูตัวอย่างของ GitHub เพื่อดูข้อมูลเพิ่มเติม
นอกจากนี้ คุณยังดูข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบและการส่งการดำเนินการเพื่อรับการตรวจสอบ รวมถึงขั้นตอนการรับรองเพื่อเผยแพร่การดำเนินการของคุณไปยังผู้ใช้ได้ด้วย