API ของโครงสร้าง

คุณเข้าถึง Structure API ได้ผ่าน Home API นําเข้าแพ็กเกจเหล่านี้ลงในแอป

import com.google.home.Home
import com.google.home.Id
import com.google.home.Structure

การจัดการข้อผิดพลาด

เมธอดใดก็ตามใน Home API อาจแสดง HomeException เราจึงขอแนะนำให้คุณใช้บล็อก try-catch เพื่อจับ HomeException ในการเรียกใช้ทั้งหมด

เมื่อจัดการ HomeException ให้ตรวจสอบฟิลด์ code และ message เพื่อดูว่าเกิดข้อผิดพลาดอะไรขึ้น

ข้อยกเว้นที่ไม่ได้รับการจัดการจะทำให้แอปขัดข้อง

ดูข้อมูลเพิ่มเติมได้ที่การจัดการข้อผิดพลาด

การโทรตัวอย่าง

ดูรายการโครงสร้าง

เมื่อเริ่มต้นแล้ว การเรียก structures() จะแสดงผลลัพธ์เป็นลําดับโครงสร้างที่เข้าถึงได้ ดังนี้

// Get a flow of all structures accessible to the user
val allStructuresFlow: HomeObjectsFlow<Structure> = home.structures()

// Calling list() on a HomeObjectsFlow returns the first Set of elements.
val allStructures: Set<Structure> = allStructuresFlow.list()

structures() API เป็นขั้นตอนที่อาจไม่แสดงรายการโครงสร้างที่ถูกต้องในทันที หากแอปของคุณเป็นแบบเรียลไทม์และสมัครใช้บริการขั้นตอนดังกล่าวเพื่อขับเคลื่อน UI ระบบจะแสดงรายการโครงสร้างที่ถูกต้องในท้ายที่สุด นอกจากนี้ยังมีสถานการณ์อื่นๆ ที่ระบบอาจแสดงรายการโครงสร้างว่าง เช่น หากโทรศัพท์ของผู้ใช้ขาดการเชื่อมต่อ หรือหากผู้ใช้เพิกถอนสิทธิ์เข้าถึงแอปของคุณ คุณควรจัดการกับกรณีเหล่านี้ในแอป

หรือหากจำเป็นต้องใช้การเขียนโปรแกรมแบบบังคับแทนการเขียนโปรแกรมแบบปฏิกิริยา คุณก็ใช้โอเปอเรเตอร์โฟลว์เทอร์มินัลได้ ดังนี้

val everyStructure = withTimeout(5000) { home.structures().first { it.isNotEmpty() } }

การเรียกนี้รอรายการโครงสร้างที่ถูกต้องที่จะส่งผ่านขั้นตอน และจะหมดเวลาหากไม่ได้รับการตอบกลับภายในระยะหมดเวลาที่แอปกำหนด

รับพร็อพเพอร์ตี้โครงสร้าง

เมื่อมีรายการโครงสร้างแล้ว คุณจะเข้าถึงพร็อพเพอร์ตี้ของโครงสร้างได้ดังนี้

// Get a flow on a structure. Flow emits new values on structure metadata changes: name.
val structureFlow: Flow<Structure> = home.structures().itemFlow(myStructureId)

// Get a snapshot of the structure.
val structure: Structure = structureFlow.first()

// Get structure properties
println("id ${structure.id}")
println("name ${structure.name}")

ค้นหาโครงสร้างตามชื่อ

หากทราบชื่อโครงสร้าง คุณจะเข้าถึงโครงสร้างนั้นโดยใช้พร็อพเพอร์ตี้ name ได้เช่นกัน โดยทำดังนี้

val myHome = home.structures().list().first { it.name == "My home" }

จากตรงนั้น คุณจะเข้าถึงที่พัก ห้อง และอุปกรณ์ของแต่ละโครงสร้างได้

ทำงานกับโครงสร้างหลายรายการ

หากต้องการใช้โครงสร้างมากกว่า 1 รายการ ให้รับการอ้างอิงแยกกันสำหรับแต่ละโครงสร้าง ดังนี้

var structure1: Structure? = null
var structure2: Structure? = null

try {
  structure1 = home.structures().list().firstOrNull { it.name == "Main House" }
} catch (e: HomeException) {
  // Code for handling the exception
}
try {
  structure2 = home.structures().list().firstOrNull { it.name == "Guest Cottage" }
} catch (e: HomeException) {
  // Code for handling the exception
}

ดูรายการห้อง

เมื่อสร้างโครงสร้างแล้ว คุณจะได้รับรายการห้องและเข้าถึงพร็อพเพอร์ตี้ของห้องได้ ดังนี้

val allRoomsFlow: HomeObjectsFlow<Room> = structure.rooms()
val allRooms: Set<Room> = allRoomsFlow.list()
val room: Room = allRooms.first()

println("id ${room.id}")
println("name ${room.name}")

สร้างห้องแชท

วิธีสร้างห้องใหม่

val testName = "Test Room Name"
val newRoom: Room = structure.createRoom(testName)

ลบห้อง

หรือจะลบห้องแชทก็ได้โดยทำดังนี้

val roomToDelete = structure.rooms().list().filter { it.name == "room_id1" }.firstOrNull()
    structure.deleteRoom(roomToDelete!!)

นอกจากนี้ คุณยังลบห้องโดยใช้รหัสเพียงอย่างเดียวได้ด้วย โดยทำดังนี้

val roomToDelete1 = allRooms.filter { it.id == testRoomId }.firstOrNull()
structure.deleteRoom(roomToDelete1!!)

หากลบห้องที่มีอุปกรณ์ออก อุปกรณ์จะยังคงอยู่ในโครงสร้าง แต่จะไม่ได้กำหนดให้กับห้องอีกต่อไป

ย้ายอุปกรณ์ไปห้องอื่น

เมื่อสร้างโครงสร้างแล้ว คุณจะย้ายอุปกรณ์ไปยังห้องอื่นภายในโครงสร้างนั้นได้ โดยทำดังนี้

val room2 = structure.rooms().get(Id("room_id_other_structure"))
    val device1 = structure.devices().get(Id("device_id1"))
    structure.moveDevicesToRoom(room2!!, listOf(device1!!))

หากมีเพียงรหัสอุปกรณ์และรหัสห้อง คุณก็สามารถย้ายอุปกรณ์ได้เช่นกัน โดยทำดังนี้

structure.moveDevicesToRoom(Id("room_id_other_structure"), listOf(Id("device_id1")))

ระบบอัตโนมัติ

จุดแรกเข้า Automation API คือผ่านโครงสร้าง ดูข้อมูลเพิ่มเติมเกี่ยวกับการทำงานอัตโนมัติใน Home API ได้ที่ออกแบบการทำงานอัตโนมัติ

รายการ API

เมื่อสร้างอินสแตนซ์ของ Home แล้ว คุณจะสามารถเข้าถึง Structure API ต่อไปนี้ผ่านอินสแตนซ์ดังกล่าว

API คำอธิบาย
structures() รับโครงสร้างทั้งหมดในบัญชี Google แสดงผล HomeObjectsFlow ที่มีตัวเลือกการดึงข้อมูลและการกรองเพิ่มเติม

เมื่อคุณมี Structure แล้ว คุณจะสามารถเข้าถึง API ต่อไปนี้ได้

API คำอธิบาย
automations() แสดงรายการการทำงานอัตโนมัติทั้งหมดที่เป็นของโครงสร้าง ระบบจะแสดงเฉพาะการทำงานอัตโนมัติที่สร้างผ่าน Home API เท่านั้น
createAutomation(automation) สร้างอินสแตนซ์การทำงานอัตโนมัติสำหรับโครงสร้าง
createRoom(name) สร้างห้องด้วยชื่อที่ผู้ใช้ระบุ
deleteAutomation(automationId) ลบอินสแตนซ์การทำงานอัตโนมัติตามรหัส
deleteRoom(roomId) ลบห้องด้วยรหัสห้อง
devices() รับอุปกรณ์ทั้งหมดในโครงสร้าง แสดงผล HomeObjectsFlow
getAutomation(automationId) รับอินสแตนซ์การทำงานอัตโนมัติตามรหัส
getSourceConnectivity(trait) รับข้อมูลเมตาของลักษณะหนึ่งๆ แสดงผล SourceConnectivity
has(trait) ตรวจสอบว่าอุปกรณ์รองรับลักษณะที่ขอในปัจจุบันหรือไม่
id รหัสระบบที่ไม่ซ้ำกันของโครงสร้าง
moveDevicesToRoom(roomId, deviceIds) ย้ายอุปกรณ์ไปยังรหัสห้องอื่นในโครงสร้าง
name ชื่อโครงสร้างที่ผู้ใช้ระบุ
rooms() รับข้อมูลห้องทั้งหมดในโครงสร้าง แสดงผล HomeObjectsFlow
trait(trait) ดูภาพรวมปัจจุบันของแอตทริบิวต์ลักษณะ

นอกจากนี้ API ทั่วไปบางรายการ (เช่น devices(), id และ name) ยังมีให้บริการสำหรับ Room ด้วย