स्ट्रक्चर एपीआई को Android के लिए Home API के ज़रिए ऐक्सेस किया जा सकता है. अपने ऐप्लिकेशन में ये पैकेज इंपोर्ट करें:
import com.google.home.Home
import com.google.home.Id
import com.google.home.Structure
गड़बड़ी ठीक करना
Home API में मौजूद कोई भी तरीका,
HomeException
को ट्रिगर कर सकता है. इसलिए, हमारा सुझाव है कि सभी कॉल पर
HomeException
को पकड़ने के लिए, try-catch
ब्लॉक का इस्तेमाल करें.
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()
एपीआई एक ऐसा फ़्लो है जो शायद स्ट्रक्चर की मान्य सूची तुरंत न दिखाए. अगर आपका ऐप्लिकेशन रिएक्टिव है और यूज़र इंटरफ़ेस (यूआई) को चलाने के लिए उस फ़्लो की सदस्यता लेता है, तो आखिर में आपको स्ट्रक्चर की मान्य सूची मिलनी चाहिए.
कुछ अन्य स्थितियों में भी, खाली स्ट्रक्चर की सूची दिख सकती है. उदाहरण के लिए, अगर उपयोगकर्ता के फ़ोन की इंटरनेट कनेक्शन बंद हो जाता है या उपयोगकर्ता ने आपके ऐप्लिकेशन की अनुमतियां रद्द कर दी हैं. आपको अपने ऐप्लिकेशन में इन स्थितियों को मैनेज करना चाहिए.
इसके अलावा, अगर रिऐक्टिव प्रोग्रामिंग के बजाय, ज़रूरत पड़ने पर इम्पेरेटिव प्रोग्रामिंग का इस्तेमाल करना है, तो टर्मिनल फ़्लो ऑपरेटर का इस्तेमाल किया जा सकता है:
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!!)
सिर्फ़ आईडी की मदद से भी रूम मिटाया जा सकता है:
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 में ऑटोमेशन के बारे में ज़्यादा जानने के लिए, Android पर ऑटोमेशन एपीआई की खास जानकारी देखें.
एपीआई की सूची
Home
का एक इंस्टेंस बनने के बाद, इन स्ट्रक्चर एपीआई को इसके ज़रिए ऐक्सेस किया जा सकता है:
एपीआई | ब्यौरा |
---|---|
structures() |
Google खाते पर मौजूद सभी स्ट्रक्चर पाएं. यह एक HomeObjectsFlow दिखाता है, जो डेटा को वापस पाने और फ़िल्टर करने के अन्य विकल्प देता है. |
Structure
मिलने के बाद, इन एपीआई को ऐक्सेस किया जा सकता है:
एपीआई | ब्यौरा |
---|---|
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) |
ट्रैट एट्रिब्यूट का मौजूदा स्नैपशॉट पाएं. |
कुछ सामान्य एपीआई (जैसे, devices()
, id
, और name
) Room
के लिए भी उपलब्ध हैं.