iOS-এর জন্য হোম API-এর মাধ্যমে স্ট্রাকচার API-গুলি অ্যাক্সেস করা যেতে পারে।
স্ট্রাকচার এপিআইগুলির সাথে কাজ করার জন্য, প্রথমে আপনার অ্যাপে GoogleHomeSDK প্যাকেজটি আমদানি করুন:
import GoogleHomeSDK
ত্রুটি পরিচালনা
Home API-এর কিছু পদ্ধতিতে HomeError ধরা পড়ে, তাই আমরা আপনাকে সেই কলগুলিতে HomeError ধরার জন্য একটি do-catch ব্লক ব্যবহার করার পরামর্শ দিচ্ছি।
HomeError পরিচালনা করার সময়, কী ভুল হয়েছে তা জানতে এর code এবং message ক্ষেত্রগুলি পরীক্ষা করুন।
যেকোনো অ-পরিচালিত ত্রুটির ফলে আপনার অ্যাপটি ক্র্যাশ হয়ে যাবে।
আরও তথ্যের জন্য, ত্রুটি পরিচালনা দেখুন।
স্ট্রাকচার এপিআই
Home হল Home গ্রাফ, এবং এটি Structure API-এর প্রবেশ বিন্দু। এটি স্ট্রাকচার, রুম এবং ডিভাইসের রেফারেন্স প্রদান করে।
Structure আপনার হোম গ্রাফের একটি স্ট্রাকচারকে প্রতিনিধিত্ব করে। এটি id এবং name এর মতো স্ট্রাকচার মেটাডেটাতে অ্যাক্সেস প্রদান করে।
আপনার অ্যাকাউন্টে সমস্ত স্ট্রাকচার পেতে structures() ব্যবহার করুন। স্ট্রাকচারগুলি একটি Query আকারে ফেরত পাঠানো হয়, যা এর ডেটা ব্যবহারের বিভিন্ন উপায় অফার করে:
| এপিআই | বিবরণ |
|---|---|
stream() | পরিবর্তনগুলি সংঘটিত হওয়ার সাথে সাথে প্রতিটি বস্তুকে পৃথকভাবে নির্গত করে এমন একটি Publisher প্রদান করে। |
batched() | একটি Publisher প্রদান করে যা বর্তমান ফলাফলকে বস্তুর একটি Set হিসেবে নির্গত করে। প্রতিটি নির্গত Set বস্তুর গ্রাফের বর্তমান অবস্থা উপস্থাপন করে। |
list() | বর্তমান ফলাফলকে বস্তুর Set হিসেবে প্রদান করে। |
structures().list() কলটি তাৎক্ষণিকভাবে একটি বৈধ কাঠামোর সেট ফেরত নাও দিতে পারে। যদি আপনার অ্যাপটি প্রতিক্রিয়াশীল হয় এবং UI চালানোর জন্য সমস্ত কাঠামোর পরিবর্তনগুলিতে সাবস্ক্রাইব করার জন্য stream() কল করে, তাহলে অবশেষে কাঠামোর একটি বৈধ তালিকা ফেরত দেওয়া উচিত। অন্যান্য পরিস্থিতিতেও একটি খালি কাঠামোর তালিকা ফেরত দেওয়া যেতে পারে, উদাহরণস্বরূপ যদি ব্যবহারকারীর ফোন সংযোগ হারিয়ে ফেলে বা ব্যবহারকারী আপনার অ্যাপের অনুমতি প্রত্যাহার করে নেয়। আপনার অ্যাপে এই ক্ষেত্রেগুলি পরিচালনা করা উচিত।
@Published public private(set) var structures: [Structure] = []
private var structuresCancellable: AnyCancellable?
self.structuresCancellable = home
.structures()
.batched()
.receive(on: DispatchQueue.main)
.map { Array($0) }
.catch {
Logger.error("Failed to load structures: \($0)")
return Just([Structure]())
}
.assign(to: \.structures, on: self)
নমুনা কাঠামো কল
কাঠামোর একটি সেট পান
একটি Query<Structure> এ কলিং list() সাম্প্রতিকতম উপাদানের সেট ফেরত দেয়:
// Get a stream of all structures accessible to the user let allStructuresChanges = try await self.home.structures() let allStructures = try? await allStructuresChanges.list()
একটি প্রতিক্রিয়াশীল অ্যাপ ডিজাইন করার সময়, আপনাকে list() এর পরিবর্তে batched() এবং stream() কল ব্যবহার করতে হবে, কারণ হোম গ্রাফ পরিবর্তন হলে এগুলি স্বয়ংক্রিয়ভাবে ডেটা তৈরি করে।
কাঠামোর বৈশিষ্ট্যগুলি পান
হাতে থাকা কাঠামোর তালিকার মাধ্যমে, আপনি তাদের বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারবেন:
// Get a stream of changes taking place on a structure. let structureChanges = try await home.structures().list().filter { $0.id == structureID } // Get a snapshot of the structure. let structure = try await structureChanges.first! // Get structure properties print("id \(structure.id) ") print("name \(structure.name) ")
নাম অনুসারে একটি কাঠামো খুঁজুন
যদি আপনি কোন কাঠামোর নাম জানেন, তাহলে name প্রপার্টি ব্যবহার করেও এটি অ্যাক্সেস করতে পারেন:
do { structure1 = try await home.structures().list().first(where: { $0.name == "Main House" }) } catch let error as HomeError { // Code for handling the exception }
সেখান থেকে, প্রতিটি কাঠামোর জন্য সম্পত্তি, কক্ষ এবং ডিভাইসগুলি অ্যাক্সেসযোগ্য।
একাধিক কাঠামোর সাথে কাজ করুন
একাধিক কাঠামো ব্যবহার করতে, প্রতিটি কাঠামোর জন্য আলাদা রেফারেন্স পান:
var structure1: Structure! var structure2: Structure! do { structure1 = try await home.structures().list().first(where: { $0.name == "Main House" }) } catch let error as HomeError { // Code for handling the exception } do { structure2 = try await home.structures().list().first(where: { $0.name == "Guest Cottage" }) } catch let error as HomeError { // Code for handling the exception }
রুম
একটি ঘরে একগুচ্ছ ডিভাইস থাকে। একটি রুম সর্বদা একটি কাঠামোর অংশ এবং একটি কাঠামোতে একাধিক রুম থাকতে পারে। একটি কাঠামো থেকে একটি রুম সরিয়ে দিলে সেই রুমের ডিভাইসগুলি কাঠামো থেকে সরানো হয় না। তবে, যদি ঘরটি মুছে ফেলা হয়, তাহলে সেই রুমের ডিভাইসগুলি অনির্ধারিত হয়ে যায়।
অ্যাকাউন্টের সমস্ত রুম পুনরুদ্ধার করতে Home.rooms() ব্যবহার করুন, তারপর প্রতিটি রুমে সংশ্লিষ্ট ডিভাইসগুলি প্রদর্শন করতে roomID = device.roomID ব্যবহার করুন।
self.home.rooms().batched()
.combineLatest(self.home.devices().batched())
.receive(on: DispatchQueue.main)
.catch { error in
Logger.error("Failed to load rooms and devices: \(error)")
return Just((Set<Room>(), Set<HomeDevice>()))
}
.map { rooms, devices in
var devicesByRoom = [Room: [HomeDevice]]()
for room in rooms where room.structureID == currentStructureID {
devicesByRoom[room] = devices.filter { $0.roomID == room.id }
}
return devicesByRoom
}.assign(to: &self.$devicesByRoom)
নমুনা রুম কল
রুমের একটি তালিকা পান
Home ক্লাস ব্যবহার করে, আপনি কক্ষগুলির একটি তালিকা পেতে পারেন এবং তাদের জন্য সম্পত্তিগুলি অ্যাক্সেস করতে পারেন:
let allRoomsChanges = self.home.rooms() let allRooms = try await allRoomsChanges.list() let room = allRooms.first! XCTAssertTrue(allRooms.contains(room)) print("id \(room.id) ") print("name \(room.name) ")
একটি রুম তৈরি করুন
একটি Structure একটি নতুন ঘর তৈরি করতে:
let testName = "Test Room Name" var newRoom: Room! do { newRoom = try await structure.createRoom(name: testName) XCTAssertNotNil(newRoom) } catch let error as HomeError { // Code for handling the exception }
একটি রুম মুছুন
অথবা, বিকল্পভাবে, আপনি একটি রুম মুছে ফেলতে পারেন:
val roomToDelete = structure.rooms().list().filter { it.name == "room_id1" }.firstOrNull() structure.deleteRoom(roomToDelete!!)
আপনি একটি রুমের আইডি ব্যবহার করেও মুছে ফেলতে পারেন:
let roomToDelete = allRooms.first(where: { $0.id == room.id }) if let roomToDelete1 = roomToDelete { do { try await structure.deleteRoom(roomToDelete1) } catch let error as HomeError { // Code for handling the exception } }
যদি ডিভাইস সহ একটি রুম মুছে ফেলা হয়, তাহলে ডিভাইসগুলি এখনও কাঠামোর মধ্যে থাকবে কিন্তু আর কোনও রুমে বরাদ্দ করা হবে না।
ডিভাইসগুলিকে অন্য ঘরে সরান
Structure আপনাকে একটি ডিভাইসকে অন্য ঘরে স্থানান্তর করতেও সাহায্য করে:
do { try await structure.move(device: light, to: room) } catch let error as HomeError { // Code for handling the exception }
ঘরের নাম পরিবর্তন করুন
ঘরের নাম পরিবর্তন করতে setName(_:) পদ্ধতিটি কল করুন:
let updatedRoom = try await theRoom.setName("new room name")
কোনও ঘরের নাম পরিবর্তন করার সময়, মূল Room স্ট্রাকচারটি একই থাকে এবং পরিবর্তনটি ফিরে আসা আপডেট করা Room অবজেক্টে প্রতিফলিত হয়।
৬০ ইউনিকোড কোড পয়েন্ট (অক্ষর) সীমা অতিক্রম করলে নামগুলি ছোট করে ফেলা হবে এবং কোনও ত্রুটি করা হবে না। ডেভেলপাররা দীর্ঘ নাম পরিচালনা করার জন্য দায়ী এবং উদাহরণস্বরূপ, তারা সিদ্ধান্ত নিতে পারে যে তারা ব্যবহারকারীদের নাম ছোট করে ফেলা হবে কিনা তা জানাতে চায় কিনা।
API তালিকা
একবার Home একটি ইনস্ট্যান্স তৈরি হয়ে গেলে, নিম্নলিখিত স্ট্রাকচার API গুলি এর মাধ্যমে অ্যাক্সেসযোগ্য হয়:
| এপিআই | বিবরণ |
|---|---|
devices() | এই অ্যাকাউন্টে সমস্ত ডিভাইস দৃশ্যমান করুন। |
device(id:) | একটি নির্দিষ্ট ডিভাইসের জন্য একটি Publisher পান যা বর্তমান অবস্থা এবং ভবিষ্যতের যেকোনো আপডেটের উপর আবার প্রকাশ করে। |
structures() | গুগল অ্যাকাউন্টে সমস্ত স্ট্রাকচার পান। একটি Query<Structure> ফেরত পাঠায় যা আরও পুনরুদ্ধার এবং ফিল্টারিং বিকল্প প্রদান করে। |
structure(id:) | ম্যাচিং আইডি সহ কাঠামোটি পান। |
rooms() | Google অ্যাকাউন্টে সমস্ত রুম পান। একটি Query<strRoom> যা আরও পুনরুদ্ধার এবং ফিল্টারিং বিকল্প প্রদান করে। |
room(id:) | একটি নির্দিষ্ট রুমের জন্য একটি Publisher পান যা বর্তমান অবস্থা এবং ভবিষ্যতের যেকোনো আপডেট সম্পর্কে তথ্য প্রকাশ করে। |
Structure নিম্নলিখিত API গুলি রয়েছে:
| এপিআই | বিবরণ |
|---|---|
deleteRoom(id:) | রুম আইডি সহ একটি রুম মুছুন। |
id | কাঠামোর অনন্য সিস্টেম আইডি। |
move(device:, to:) | কাঠামোর অন্য একটি ঘরে একটি ডিভাইস সরান। |
move(device:, to:) | প্রদত্ত আইডি সহ ডিভাইসটি প্রদত্ত আইডি সহ ঘরে নিয়ে যান। |
move(devices:, to:) | প্রদত্ত ডিভাইসগুলিকে প্রদত্ত ঘরে স্থানান্তর করে। |
move(devices:, to:) | প্রদত্ত আইডি সহ ডিভাইসগুলিকে প্রদত্ত আইডি সহ ঘরে স্থানান্তর করে। |
name | কাঠামোর ব্যবহারকারীর দেওয়া নাম। |
Room নিম্নলিখিত API গুলি রয়েছে:
| এপিআই | বিবরণ |
|---|---|
id | রুমের অনন্য সিস্টেম আইডি। |
name | ব্যবহারকারীর দেওয়া রুমের নাম। |
structureID | ঘরটি যে কাঠামোর অন্তর্গত তার অনন্য সিস্টেম আইডি। |