Android এ স্ট্রাকচার API

স্ট্রাকচার API গুলি 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 পরিচালনা করার সময়, কী ভুল হয়েছে তা জানতে এর error.code এবং error.message ক্ষেত্রগুলি পরীক্ষা করুন। সাব-এরর কোডগুলিও থাকতে পারে, তাই getSubErrorCodes() পদ্ধতিতে কল করুন এবং ফলাফলটি পরীক্ষা করুন।

যেকোনো অপ্রয়োজনীয় ব্যতিক্রমের ফলে আপনার অ্যাপ ক্র্যাশ হয়ে যাবে।

আরও তথ্যের জন্য, ত্রুটি পরিচালনা দেখুন।

নমুনা কল

কাঠামোর একটি তালিকা পান

একবার শুরু হয়ে গেলে, একটি 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")))

ঘরের নাম পরিবর্তন করুন

একটি ঘরের নাম পরিবর্তন করতে setName() পদ্ধতিটি কল করুন:

livingRoom.setName("Living Room")

৬০ ইউনিকোড কোড পয়েন্ট (অক্ষর) সীমা অতিক্রম করলে নামগুলি ছোট করে ফেলা হবে এবং কোনও ত্রুটি করা হবে না। ডেভেলপাররা দীর্ঘ নাম পরিচালনা করার জন্য দায়ী এবং উদাহরণস্বরূপ, তারা সিদ্ধান্ত নিতে পারে যে তারা ব্যবহারকারীদের নাম ছোট করে ফেলা হবে কিনা তা জানাতে চায় কিনা।

অটোমেশন

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

API তালিকা

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

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

একবার আপনার একটি Structure হয়ে গেলে, নিম্নলিখিত 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 এর জন্যও উপলব্ধ।