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" }
여기에서 각 구조물의 속성, 방, 기기에 액세스할 수 있습니다.
여러 구조 작업
두 개 이상의 구조를 사용하려면 각 구조에 대한 별도의 참조를 가져옵니다.
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!!)
ID만으로 방을 삭제할 수도 있습니다.
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!!))
기기 및 객실 ID만 있는 경우에도 기기를 이동할 수 있습니다.
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) |
ID로 자동화 인스턴스를 삭제합니다. |
deleteRoom(roomId) |
객실 ID로 객실을 삭제합니다. |
devices() |
구조의 모든 기기를 가져옵니다. HomeObjectsFlow 를 반환합니다. |
getAutomation(automationId) |
ID별로 자동화 인스턴스를 가져옵니다. |
getSourceConnectivity(trait) |
특정 트레잇의 메타데이터를 가져옵니다. SourceConnectivity 를 반환합니다. |
has(trait) |
현재 요청된 트레잇이 기기에서 지원되는지 확인합니다. |
id |
구조물의 고유 시스템 ID입니다. |
moveDevicesToRoom(roomId, deviceIds) |
구조에서 기기를 다른 방 ID로 이동합니다. |
name |
사용자가 제공한 구조의 이름입니다. |
rooms() |
구조물의 모든 방을 가져옵니다. HomeObjectsFlow 를 반환합니다. |
trait(trait) |
트레잇 속성의 현재 스냅샷을 가져옵니다. |
일부 일반적인 API (예: devices()
, id
, name
)도 Room
에 사용할 수 있습니다.