স্ট্রাকচার API

স্ট্রাকচার এপিআই হোম এপিআই-এর মাধ্যমে অ্যাক্সেস করা যেতে পারে। আপনার অ্যাপে এই প্যাকেজগুলি আমদানি করুন:

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

ত্রুটি হ্যান্ডলিং

হোম এপিআই-এর যেকোন পদ্ধতি একটি 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() 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!!)

আপনি শুধুমাত্র একটি আইডি সহ একটি রুম মুছতে পারেন:

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")))

অটোমেশন

অটোমেশন এপিআই-এর এন্ট্রি পয়েন্ট একটি কাঠামোর মাধ্যমে। হোম API-এ অটোমেশন সম্পর্কে আরও জানতে, একটি অটোমেশন ডিজাইন দেখুন।

API তালিকা

একবার Home একটি উদাহরণ তৈরি হয়ে গেলে, নিম্নলিখিত স্ট্রাকচার APIগুলি এর মাধ্যমে অ্যাক্সেসযোগ্য:

API বর্ণনা
structures() Google অ্যাকাউন্টে সমস্ত কাঠামো পান। একটি HomeObjectsFlow ফেরত দেয় যা আরও পুনরুদ্ধার এবং ফিল্টারিং বিকল্প প্রদান করে।

একবার আপনার একটি Structure হয়ে গেলে, নিম্নলিখিত APIগুলি এটির মাধ্যমে অ্যাক্সেসযোগ্য:

API বর্ণনা
automations() কাঠামোর অন্তর্গত সমস্ত অটোমেশনের তালিকা করুন। শুধুমাত্র হোম 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 জন্য উপলব্ধ।