1. ก่อนเริ่มต้น
ในฐานะนักพัฒนาอินเทอร์เน็ตของสรรพสิ่ง (IoT) คุณสามารถสร้างการดำเนินการสำหรับบ้านอัจฉริยะที่ช่วยให้ผู้ใช้ควบคุมอุปกรณ์ของตนผ่านการควบคุมด้วยการสัมผัสในแอป Google Home และใช้คำสั่งเสียงกับ Assistant
การดำเนินการในบ้านอัจฉริยะอาศัยกราฟของ Home ในการให้ข้อมูลตามบริบทเกี่ยวกับบ้านและอุปกรณ์ในบ้าน เพื่อสร้างแผนที่เชิงตรรกะของบ้าน บริบทจะช่วยให้ 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 Command Line Interface (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
เนื่องจากคุณใช้รหัสโปรเจ็กต์เริ่มต้นอยู่ ให้เลือกไฟล์เริ่มต้นสำหรับกฎความปลอดภัย และตรวจสอบว่าคุณไม่ได้เขียนทับไฟล์กฎฐานข้อมูลที่มีอยู่
? 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 ? 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
หากคุณเริ่มต้นโปรเจ็กต์อีกครั้ง ให้เลือกไม่เมื่อระบบถามว่าคุณต้องการเริ่มต้นหรือเขียนทับฟังก์ชัน/.gitignore
? File functions/.gitignore 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 ? 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
เมื่อติดตั้งทรัพยากร 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 หลายรายการ
เปิด 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
ทำให้ Cloud 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 อย่างถูกต้องแล้ว คุณต้องเพิ่มความสามารถในการขอสถานะของอุปกรณ์และส่งคำสั่ง
ความตั้งใจในการจัดการ QUERY
Intent ของ QUERY
ประกอบด้วยชุดอุปกรณ์ สําหรับอุปกรณ์แต่ละเครื่อง คุณควรตอบกลับด้วยสถานะปัจจุบันของอุปกรณ์
ใน 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
ทำให้ Cloud Fulfillment ที่อัปเดตแล้วใช้งานได้โดยใช้ Firebase CLI
firebase deploy --only functions
ทดสอบเครื่องซักผ้า
ตอนนี้คุณจะเห็นว่ามูลค่าเปลี่ยนไปเมื่อลองใช้คำสั่งเสียงต่อไปนี้ผ่านโทรศัพท์
"Ok Google เปิดเครื่องซักผ้า"
"Ok Google ปิดเครื่องซักผ้าของฉันชั่วคราว"
"Ok Google ปิดเครื่องซักผ้า"
นอกจากนี้ คุณยังดูสถานะปัจจุบันของเครื่องซักผ้าได้ด้วยการถามคำถาม
"Ok Google เครื่องซักผ้าเปิดอยู่ไหม"
"Ok Google เครื่องซักผ้าของฉันทำงานอยู่ไหม"
"Ok Google เครื่องซักผ้าอยู่ในโหมดไหน"
คุณดูคำค้นหาและคำสั่งเหล่านี้ได้ในบันทึกที่ปรากฏภายใต้ฟังก์ชันของคุณในส่วนฟังก์ชันของคอนโซล Firebase ดูข้อมูลเพิ่มเติมเกี่ยวกับบันทึก Firebase ในหัวข้อเขียนและดูบันทึก
นอกจากนี้ คุณยังค้นหาการค้นหาและคำสั่งเหล่านี้ได้ในคอนโซล Google Cloud โดยไปที่การบันทึก > Logs Explorer ดูข้อมูลเพิ่มเติมเกี่ยวกับการบันทึก Google Cloud ได้ในเข้าถึงบันทึกเหตุการณ์ด้วย Cloud Logging
7. รายงานการอัปเดตไปยัง Google
คุณได้ผสานรวมบริการระบบคลาวด์เข้ากับ Intent ของสมาร์ทโฮมอย่างเต็มรูปแบบแล้ว ซึ่งช่วยให้ผู้ใช้ควบคุมและค้นหาสถานะปัจจุบันของอุปกรณ์ได้ อย่างไรก็ตาม การใช้งานดังกล่าวยังไม่มีวิธีที่จะทำให้บริการของคุณส่งข้อมูลเหตุการณ์ในเชิงรุกไปยัง Assistant ได้ เช่น การเปลี่ยนแปลงการแสดงข้อมูลหรือสถานะของอุปกรณ์
เมื่อใช้คำขอซิงค์ คุณจะเรียกใช้คำขอซิงค์ใหม่เมื่อผู้ใช้เพิ่มหรือนำอุปกรณ์ออก หรือเมื่อความสามารถของอุปกรณ์มีการเปลี่ยนแปลงได้ เมื่อใช้สถานะรายงาน บริการระบบคลาวด์จะส่งสถานะของอุปกรณ์ไปยัง Home Graph ได้ในเชิงรุกเมื่อผู้ใช้เปลี่ยนสถานะอุปกรณ์ เช่น เปิดสวิตช์ไฟ หรือเปลี่ยนสถานะโดยใช้บริการอื่น
ในส่วนนี้ คุณจะได้เพิ่มโค้ดเพื่อเรียกใช้เมธอดเหล่านี้จากเว็บแอปฟรอนท์เอนด์
เปิดใช้ HomeGraph API
HomeGraph API ช่วยให้มีพื้นที่เก็บข้อมูลและค้นหาข้อมูลของอุปกรณ์และสถานะภายใน Home Graph ของผู้ใช้ หากต้องการใช้ API นี้ คุณต้องเปิดคอนโซล Google Cloud และเปิดใช้ HomeGraph API ก่อน
ในคอนโซล Google Cloud ให้ตรวจสอบว่าคุณเลือกโปรเจ็กต์ที่ตรงกับ Actions ของคุณ <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
เพื่อเรียกใช้ Home Graph 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 เพื่อสำรวจเพิ่มเติม
นอกจากนี้ คุณยังดูข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบและส่งการดำเนินการเพื่อรับการตรวจสอบ รวมถึงขั้นตอนการรับรองเพื่อเผยแพร่การดำเนินการให้แก่ผู้ใช้ได้