iOS-এ Home API ব্যবহার করে একটি মোবাইল অ্যাপ তৈরি করুন

1. ভূমিকা

f154e30306882c74.png সম্পর্কে

হোম এপিআইগুলি কী কী?

গুগল হোম এপিআই ডেভেলপারদের গুগল হোম ইকোসিস্টেমে প্রবেশের জন্য একগুচ্ছ লাইব্রেরি প্রদান করে। হোম এপিআই ব্যবহার করে, ডেভেলপাররা এমন অ্যাপ তৈরি করতে পারে যা নির্বিঘ্নে স্মার্ট হোম ডিভাইসগুলিকে কমিশন এবং নিয়ন্ত্রণ করে।

3e11583c779a2cec.png সম্পর্কে

এই ভিডিওটিতে আপনি যে মোবাইল অ্যাপটি তৈরি করবেন তার একটি সংক্ষিপ্ত ওয়াকথ্রু প্রদান করা হয়েছে, তাই কোডল্যাবটি করার সময় ভিডিওটি অনুসরণ করুন।

হোম এপিআই-এর উপাদানসমূহ

হোম এপিআইগুলি গঠিত:

  • ডিভাইস এবং স্ট্রাকচার API: ব্যবহারকারীর বাড়ির সাথে ইন্টারঅ্যাক্ট করে। অ্যাপগুলি এই API ব্যবহার করে ডিভাইস, ঘর এবং স্ট্রাকচার সম্পর্কে তথ্য পড়তে পারে (উদাহরণস্বরূপ, বর্তমান থার্মোস্ট্যাট তাপমাত্রা দেখুন) এবং ডিভাইসগুলি নিয়ন্ত্রণ করতে পারে (উদাহরণস্বরূপ, থার্মোস্ট্যাট সেটপয়েন্ট পরিবর্তন করুন)।
  • API কমিশনিং : ন্যূনতম প্রচেষ্টায় ফ্যাব্রিকের মধ্যে নতুন ম্যাটার ডিভাইস কমিশন (সেট আপ) করুন।
  • অটোমেশন API : ব্যবহারকারীর বাড়ির মধ্যে চলমান অটোমেশন তৈরি করুন, মুছুন এবং কোয়েরি করুন।

পূর্বশর্ত

তুমি কি শিখবে

  • সেরা অনুশীলন সহ হোম এপিআই ব্যবহার করে কীভাবে একটি iOS অ্যাপ তৈরি করবেন।
  • একটি স্মার্ট হোম উপস্থাপন এবং নিয়ন্ত্রণ করতে ডিভাইস এবং স্ট্রাকচার API কীভাবে ব্যবহার করবেন।
  • গুগল হোম ইকোসিস্টেমে ডিভাইস যোগ করার জন্য কমিশনিং এপিআই কীভাবে ব্যবহার করবেন।
  • একটি মৌলিক অটোমেশন তৈরি করতে অটোমেশন API কীভাবে ব্যবহার করবেন।

2. আপনার বাড়ি সেট আপ করুন

ডিভাইসগুলি প্রস্তুত করুন

গুগল হোম প্লেগ্রাউন্ড বিভিন্ন ধরণের প্রি-বিল্ট এমুলেটেড স্মার্ট হোম ডিভাইস অফার করে এবং হোম এপিআই-এর পূর্ণ সম্ভাবনা অন্বেষণের জন্য এটি সুপারিশ করা হয়, বিশেষ করে যদি আপনার বাড়িতে সীমিত সংখ্যক ডিভাইস থাকে।

গুগল হোম প্লেগ্রাউন্ডে সাইন ইন করতে এবং গুগল হোম অ্যাপে অ্যাকাউন্ট লিঙ্কিং সম্পূর্ণ করতে নির্দেশাবলী অনুসরণ করুন। এটি সম্পন্ন করার পরে, আপনি গুগল হোম অ্যাপের "ডিভাইস" ট্যাবে ডিভাইসগুলি দেখতে সক্ষম হবেন।

c892afce113abe8f.png

৩. সেট আপ করা

নমুনা অ্যাপের কোডটি পান

GitHub থেকে সোর্স কোড ক্লোন করে শুরু করুন:

git clone https://github.com/google-home/google-home-api-sample-app-ios.git

এই কোডল্যাবের জন্য নমুনা ডিরেক্টরিতে দুটি শাখা রয়েছে, start এবং finished

  • start : এই প্রকল্পের জন্য স্টার্টার কোড যেখানে আপনি কোডল্যাব সম্পূর্ণ করার জন্য পরিবর্তন করবেন।
  • finished : এই কোডল্যাবের জন্য সম্পূর্ণ কোড, আপনার কাজ পরীক্ষা করতে ব্যবহৃত।

'শুরু' কোডটি অন্বেষণ করুন

আপনার ক্লোন করা রিপোজিটরির start ব্রাঞ্চে স্যুইচ করে এই কোডল্যাবটি শুরু করুন:

git checkout start

এই শাখায় প্রকল্পের জন্য স্টার্টার কোড রয়েছে। সম্পূর্ণ কার্যকারিতা বাস্তবায়নের জন্য আপনাকে কোডল্যাব জুড়ে এই কোডটি পরিবর্তন করতে হবে। কোডল্যাব নমুনা অ্যাপটি হোম APIs iOS SDK এর সাথে ইন্টারঅ্যাক্ট করার জন্য সুইফটে নির্মিত একটি মৌলিক কাঠামো প্রদান করে। আসুন start প্রকল্পের মূল উপাদানগুলি একবার দেখে নেওয়া যাক:

  • Main Entry (GoogleHomeAPISampleIOSApp) : GoogleHomeAPISampleIOS/Main/GoogleHomeAPISampleIOS.swift এ অবস্থিত, এটি হল প্রধান অ্যাপ এন্ট্রি পয়েন্ট। এটি SDK কনফিগার এবং আরম্ভ করে এবং প্রাথমিক ব্যবহারকারী ইন্টারফেস সেট আপ করে।
  • Core Views (View/) :
    • MainView.swift : লঞ্চের পরে রুট ভিউ, যেখানে প্রধান NavigationView থাকে। এটি সক্রিয় Google Home কাঠামো নির্বাচন করে এবং সংশ্লিষ্ট StructureView প্রদর্শন করে।
    • StructureView.swift : বর্তমানে নির্বাচিত কাঠামোর বিষয়বস্তু প্রদর্শন করে, ট্যাব ব্যবহার করে ডিভাইসের গ্রিড এবং অটোমেশন তালিকার মধ্যে স্যুইচ করে। এটি রুম বা ডিভাইস যোগ করার জন্য মেনুও প্রদান করে।
    • DeviceView.swift : StructureView গ্রিডের মধ্যে একটি একক ডিভাইসের জন্য ইন্টারেক্টিভ টাইল উপস্থাপন করে।
    • AutomationsView.swift : কাঠামোর জন্য বিদ্যমান অটোমেশনের তালিকা দেখায় এবং অটোমেশনের বিবরণ তৈরি বা দেখার জন্য নেভিগেশন প্রদান করে।
  • ViewModels (ViewModel/) : এই ক্লাসগুলি ভিউগুলির অবস্থা এবং যুক্তি পরিচালনা করে।
    • AccountViewModel.swift : Home অবজেক্টের সাথে সংযোগ পরিচালনা করে এবং প্রমাণীকরণ অবস্থা পরিচালনা করে।
    • MainViewModel.swift : উপলব্ধ Structure অবজেক্টের তালিকা পরিচালনা করে এবং নির্বাচিত স্ট্রাকচারের উপর নজর রাখে।
    • StructureViewModel.swift : নির্বাচিত কাঠামোর মধ্যে রুম এবং DeviceControl অবজেক্টের প্রদর্শন পরিচালনা করে।
    • AutomationList.swift , AutomationViewModel.swift , এবং আরও অনেক কিছু: অটোমেশন আনা, প্রদর্শন, তৈরি এবং পরিচালনা পরিচালনা করে।
  • Device Controls (ViewModel/Device/) :
    • DeviceControl.swift : UI-তে নিয়ন্ত্রণযোগ্য ডিভাইসগুলি উপস্থাপনের জন্য একটি বেস ক্লাস।
    • নির্দিষ্ট উপশ্রেণী ( LightControl.swift , FanControl.swift , OnOffPlugInUnitControl.swift , ইত্যাদি): বিভিন্ন ধরণের ডিভাইসের বৈশিষ্ট্যের উপর ভিত্তি করে UI লজিক, ডিভাইস নিয়ন্ত্রণ এবং স্টেট ম্যাপিং বাস্তবায়ন করুন।
    • DeviceControlFactory.swift : একটি প্রদত্ত HomeDevice এর জন্য উপযুক্ত DeviceControl সাবক্লাস তৈরির জন্য দায়ী।
  • Commissioning (Commissioning/) :
    • CommissioningManager.swift : ম্যাটার ডিভাইস কমিশনিং ফ্লো পরিচালনার যুক্তি ধারণ করে।
  • Utilities & UX (Utils/, UX/, Storage/) : এতে ইউআই উপাদান (রঙ, মাত্রা), ত্রুটি পরিচালনা, ডেটা স্টোরেজ ( SelectedStructureStorage.swift ) এবং অন্যান্য ইউটিলিটিগুলির জন্য সহায়ক কোড রয়েছে।

এই কোডল্যাব জুড়ে, আপনি start প্রজেক্টের মধ্যে TODO বা মন্তব্য-আউট কোড ব্লক এবং সতর্কতার মতো মন্তব্য পাবেন। এগুলি সেই বিভাগগুলিকে চিহ্নিত করে যেখানে আপনি প্রদত্ত পদক্ষেপগুলি অনুসরণ করে প্রয়োজনীয় কার্যকারিতা বাস্তবায়নের জন্য কোড যোগ করবেন বা মন্তব্য মুক্ত করবেন।

অ্যাপল ডিপ্লয়মেন্ট কনফিগারেশন ফাইল তৈরি করুন

অ্যাপ অ্যাটেস্ট কনফিগার করতে, অ্যাপল ডিপ্লয়মেন্ট কনফিগারেশন ফাইল তৈরির নির্দেশাবলী অনুসরণ করুন। মনে রাখবেন যে সেটআপের পরে, অ্যাপটি কেবল একটি বাস্তব ডিভাইসে স্থাপন করা যেতে পারে, সিমুলেটরে নয়।

প্রমাণীকরণ সেট আপ করুন

OAuth ক্লায়েন্ট আইডি পেতে এবং হোম এপিআই সক্ষম করতে, প্রথমে গুগল ক্লাউডে সাইন ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন অথবা বিদ্যমান একটি নির্বাচন করুন। তারপর, OAuth ক্লায়েন্ট আইডি তৈরি করতে এবং হোম এপিআই সক্ষম করতে প্রদত্ত পদক্ষেপগুলি অনুসরণ করুন এবং আপনার অ্যাকাউন্টটি অনুমতি তালিকায় যুক্ত করুন।

SDK সেট আপ করুন

Home APIs iOS SDK পান এবং Set up the SDK এ প্রদত্ত সেটআপ নির্দেশাবলী উল্লেখ করে এটি কনফিগার করুন। HOME_API_TODO_ADD_APP_GROUP আপনার নিজস্ব অ্যাপ গ্রুপ দিয়ে প্রতিস্থাপন করতে ভুলবেন না।

প্রকল্পটি তৈরি এবং পরিচালনা করুন

start ব্রাঞ্চ দিয়ে প্রজেক্ট তৈরি এবং চালানোর পর, একটি TODO ডায়ালগ এবং "সাইন ইন প্রয়োজন" লেখা একটি স্ক্রিন প্রদর্শিত হবে। হোম এপিআই ইন্টারঅ্যাকশন নিম্নলিখিত বিভাগগুলিতে বাস্তবায়িত করা হবে।

bd56b7080037e38a.png9c0f08a3f4197a77.png

দ্রষ্টব্য : ডায়ালগে প্রদর্শিত টেক্সটের জন্য প্রকল্পটি অনুসন্ধান করে যে কোডটি পরিবর্তন করতে হবে তা সনাক্ত করুন। উদাহরণস্বরূপ, "TODO: initialize Home" অনুসন্ধান করুন।

৪. আরম্ভকরণ

হোমটি শুরু করুন

iOS-এর জন্য যেকোনো Home API ব্যবহার করার আগে, আপনার অ্যাপে Home ইনিশিয়ালাইজ করতে হবে। Home হল SDK-এর শীর্ষ-স্তরের এন্ট্রি এবং ব্যবহারকারীর কাঠামোর সমস্ত সত্তার অ্যাক্সেস প্রদান করে। একটি নির্দিষ্ট ধরণের সমস্ত সত্তার অনুরোধ করার সময়, API একটি Query অবজেক্ট ফেরত দেয় যা আপনাকে ফলাফল কীভাবে পাবেন তা বেছে নিতে দেয়। GoogleHomeAPISampleIOS/Accounts/AccountViewModel.swift এ, মন্তব্যটি সরিয়ে দিন এবং home ইনিশিয়ালাইজেশন বাস্তবায়নের জন্য connect() এ সতর্কতা পাঠান।

  /// TODO: initialize Home
  /// Remove comments to initialize Home and handling permission.
  private func connect() {
    Task {
      do {
        self.home = try await Home.connect()
      } catch {
        Logger().error("Auth error: \(error).")
      }
    }
  }

হোম এপিআই ব্যবহারের অনুমতি

অ্যাপটি চালানোর সময় সম্মতি স্ক্রিনটি প্রদর্শিত হবে। গুগল হোম স্ট্রাকচারটি বেছে নিন এবং আপনার গুগল ক্লাউড প্রোজেক্টের অ্যালাউলিস্টে থাকা অ্যাকাউন্টটি নির্বাচন করুন।

47310f458c0094d9.png সম্পর্কে4a571dbd9979a88c.png সম্পর্কেe29c75891a3a67af.png

৫. ডিভাইস এবং কাঠামো

রুম এবং ডিভাইস পান

GoogleHomeAPISampleIOS/ViewModel/StructureViewModel.swift এ, মন্তব্যটি সরিয়ে getRoomsAndDevices() এ সতর্কতা দিন যাতে নির্বাচিত কাঠামোর মধ্যে যথাক্রমে home.rooms() এবং home.devices() সহ রুম এবং ডিভাইসগুলি পাওয়া যায়।

  /// TODO: get rooms and devices
  /// Remove comments to get the rooms and devices from home entry
  private func getRoomsAndDevices(){
    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 { [weak self] rooms, devices in
        guard let self = self else { return [] }
        self.hasLoaded = true
        return self.process(rooms: rooms, devices: devices)
      }
      /// receive from .map and .assign() to publisher entries
      .assign(to: &self.$entries)
  }

process() ফাংশনটি প্রথমে নিশ্চিত করে যে ডিভাইসগুলি একই ঘরে আছে এবং তারপর DeviceControl এবং DeviceControlFactory ব্যবহার করে HomeDevices হিসাবে ইন্টারঅ্যাক্ট করে।

4c677c4c294e67ca.png সম্পর্কে

দ্রষ্টব্য : যদি আপনার ডিভাইসটি DeviceControlFactory তে তালিকাভুক্ত না থাকে, তাহলে এটি "Unsupported" হিসেবে প্রদর্শিত হবে। কোন ডিভাইসগুলি সমর্থিত সে সম্পর্কে আরও জানতে, iOS পৃষ্ঠায় সমর্থিত ডিভাইসের প্রকারগুলি দেখুন।

একটি ডিভাইসের সাথে ইন্টারঅ্যাক্ট করুন

ডিভাইসে ট্যাপ বা স্লাইড করার সময় প্লাগ outlet1 প্রাথমিকভাবে নিষ্ক্রিয় থাকে। এর সাথে ইন্টারঅ্যাকশন সক্ষম করতে, GoogleHomeAPISampleIOS/ViewModel/Device/OnOffPlugInUnitControl.swift সনাক্ত করুন এবং primaryAction() ফাংশনের মধ্যে মন্তব্য এবং সতর্কতাটি সরিয়ে দিন।

  /// TODO: primary action of OnOffPlug
  /// Toggles the plug; usually provided as the `action` callback on a Button.
  public override func primaryAction() {
    self.updateTileInfo(isBusy: true)
    Task { @MainActor [weak self] in
      guard
        let self = self,
        let onOffPluginUnitDeviceType = self.onOffPluginUnitDeviceType,
        let onOffTrait = onOffPluginUnitDeviceType.matterTraits.onOffTrait
      else { return }

      do {
        try await onOffTrait.toggle()
      } catch {
        Logger().error("Failed to to toggle OnOffPluginUnit on/off trait: \(error)")
        self.updateTileInfo(isBusy: false)
      }
    }
  }

OnOffPlugInUnitControl ক্লাসের মধ্যে পাওয়া primaryAction() ফাংশনটি একটি স্মার্ট প্লাগ বা OnOffPluginUnitDeviceType দ্বারা উপস্থাপিত যেকোনো ডিভাইসের চালু/বন্ধ অবস্থা টগল করে।

অতিরিক্ত ডিভাইস নিয়ন্ত্রণের উদাহরণগুলি GoogleHomeAPISampleIOS/ViewModel/Device এ উপলব্ধ।

একটি নতুন রুম তৈরি করুন

স্ট্রাকচার এপিআই রুম তৈরি এবং মুছে ফেলার পাশাপাশি রুমগুলির মধ্যে ডিভাইস স্থানান্তর সক্ষম করে।

GoogleHomeAPISampleIOS/ViewModel/StructureViewModel.swift এ, মন্তব্যটি সরিয়ে addRoom() এ সতর্কতা দিন।

  /// TODO: add room
  /// Add a new room in a given structure.
  func addRoom(name: String, structure: Structure) {
    Task {
      do {
        // The view will be updated with the values from the devices publisher.
        _ = try await structure.createRoom(name: name)
      } catch {
        Logger().error("Failed to create room: \(error)")
      }
    }
  }

structure.createRoom() দিয়ে একটি নতুন রুম তৈরি করতে, উপরের বাম কোণে নেভিগেট করুন এবং "+" আইকন > রুম যোগ করুন নির্বাচন করুন। আপনার নতুন রুমের নাম লিখুন এবং "রুম তৈরি করুন" এ ক্লিক করুন। কয়েক সেকেন্ড পরে নতুন রুমটি প্রদর্শিত হবে।

b122ae6642b7da1c.pnga45f785e1d51938e.png7753b56cbdcff8d6.png

ডিভাইসটি অন্য ঘরে সরান

GoogleHomeAPISampleIOS/ViewModel/StructureViewModel.swift এ, মন্তব্যটি সরিয়ে moveDevice() এ সতর্কতা দিন।

  /// TODO: move device
  /// Move a device into a different room.
  func moveDevice(device deviceID: String, to roomID: String, structure: Structure) {
    Task {
      do {
        _ = try await structure.move(device: deviceID, to: roomID)
      } catch {
        Logger().error("Failed to move to room: \(error)")
      }
    }
  }

structure.move() দিয়ে ডিভাইসটি স্থানান্তর করতে, এটি দীর্ঘক্ষণ টিপুন, "অন্য ঘরে সরান" নির্বাচন করুন এবং নতুন ঘরটি নির্বাচন করুন।

f9627592af44163d.pngfd126fabb454f2bf.png813e1e23e50cd9f6.png

একটি খালি ঘর মুছুন

GoogleHomeAPISampleIOS/ViewModel/StructureViewModel.swift এ, মন্তব্যটি সরিয়ে দিন এবং removeRoom() এ সতর্কতা দিন।

  /// TODO: delete room
  /// Delete an empty room in a given structure.
  func removeRoom(id: String, structure: Structure) {
    Task {
      do {
        // The view will be updated with the values from the devices publisher.
        _ = try await structure.deleteRoom(id: id)
      } catch {
        Logger().error("Failed to remove room: \(error)")
      }
    }
  }

structure.deleteRoom() সহ একটি খালি ঘর মুছে ফেলতে, ঘরের নামের ডানদিকে ট্র্যাশ আইকনে ক্লিক করুন এবং ক্রিয়াটি নিশ্চিত করুন। মনে রাখবেন যে শুধুমাত্র খালি ঘরগুলি মুছে ফেলা যেতে পারে।

4f129262ad67f564.png

দ্রষ্টব্য : একটি খালি ঘর তৈরি করতে ডিভাইসটি পিছনে সরান।

৬. কমিশনিং

দ্রষ্টব্য : এই বিভাগে একটি গুগল হাব এবং একটি ম্যাটার ডিভাইস প্রয়োজন। নিশ্চিত করুন যে আপনার কাঠামোর গুগল হাবটি অনলাইনে এবং পৌঁছানো যায়। যদি আপনার কাছে ম্যাটার ডিভাইস না থাকে, তাহলে ম্যাটার ভার্চুয়াল ডিভাইস অ্যাপটি ব্যবহার করে দেখুন।

একটি ম্যাটার ডিভাইস যোগ করুন

কমিশনিং এপিআই আপনার অ্যাপকে ব্যবহারকারীর হোম এবং গুগল অ্যাকাউন্টে নতুন ম্যাটার ডিভাইস যুক্ত করতে সক্ষম করে। এটি সরাসরি আপনার অ্যাপের মধ্যেই একটি নিরবচ্ছিন্ন সেটআপ অভিজ্ঞতা প্রদান করে।

GoogleHomeAPISampleIOS/Commissioning/CommissioningManager.swift ফাইলে, মন্তব্যটি সরিয়ে addMatterDevice() ফাইলে সতর্ক করুন।

  /// TODO: add Matter Device
  /// Starts the Matter device commissioning flow to add the device to the user's home.
  /// - Parameters:
  ///   - structure: The structure to add the device to.
  ///   - add3PFabricFirst: Whether to add the device to a third party fabric first.
  public func addMatterDevice(to structure: Structure, add3PFabricFirst: Bool) {
    self.isCommissioning = true

    /// pass if it's 1p or 3p commissioning
    let userDefaults = UserDefaults(
      suiteName: CommissioningManager.appGroup)
    userDefaults?.set(
    add3PFabricFirst, forKey: CommissioningUserDefaultsKeys.shouldPerform3PFabricCommissioning)

    Task {
      do {
        try await structure.prepareForMatterCommissioning()
      } catch {
        Logger().error("Failed to prepare for Matter Commissioning: \(error).")
        self.isCommissioning = false
        return
      }

      // Prepare the Matter request by providing the ecosystem name and home to be added to.
      let topology = MatterAddDeviceRequest.Topology(
        ecosystemName: "Google Home",
        homes: [MatterAddDeviceRequest.Home(displayName: structure.name)]
      )
      let request = MatterAddDeviceRequest(topology: topology)

      do {
        Logger().info("Starting MatterAddDeviceRequest.")
        try await request.perform()
        Logger().info("Completed MatterAddDeviceRequest.")
        let commissionedDeviceIDs = try structure.completeMatterCommissioning()
        Logger().info("Commissioned device IDs: \(commissionedDeviceIDs).")
      } catch let error {
        structure.cancelMatterCommissioning()
        Logger().error("Failed to complete MatterAddDeviceRequest: \(error).")
      }

      self.isCommissioning = false
    }
  }

structure.prepareForMatterCommissioning() দিয়ে একটি নতুন রুম তৈরি করতে, উপরের বাম কোণে নেভিগেট করুন এবং "+" আইকন > Google Fabric এ ডিভাইস যোগ করুন নির্বাচন করুন। এটি MatterAddDeviceRequest ব্যবহার করে আপনার রুমে Matter ডিভাইস যোগ করে। রুম এবং ডিভাইসের নাম নির্বাচন করার পরে, ডিভাইসটি "Devices" স্ক্রিনে প্রদর্শিত হয়।

adf6cbb531787aaf.pngf002bd6320bc480d.png

৭. অটোমেশন

কাঠামোর সমস্ত অটোমেশন দেখুন

নীচের নেভিগেশন বারে Automations- এ ট্যাপ করুন। এটি structure.listAutomations() সহ আপনার কাঠামোর সমস্ত অটোমেশন তালিকাভুক্ত করবে।

cc6d50f72f812c24.png

দ্রষ্টব্য : যদি আপনার কোনও হোম অটোমেশন সেট আপ না থাকে, তাহলে আপনি "শুরু করতে একটি অটোমেশন যোগ করুন" বার্তাটি দেখতে পাবেন।

একটি অটোমেশন তৈরি করুন

এখন যেহেতু আপনি ডিভাইস এবং স্ট্রাকচার API গুলির সাথে পরিচিত এবং একটি নতুন ডিভাইস যুক্ত করছেন, তাই অটোমেশন API ব্যবহার করে একটি নতুন অটোমেশন তৈরি করার সময় এসেছে।

GoogleHomeAPISampleIOS/ViewModel/Automation/AutomationsRepository.swift এ, lightAutomation() এ মন্তব্য, সতর্কতা এবং খালি অটোমেশনটি সরিয়ে ফেলুন।

  /// TODO: create automation
  /// - Parameter devices: devices in current selected structure
  /// - Returns: the automation object to be created
  /// This automation will turn off the light after 5 seconds.
  public func lightAutomation(devices: Set<HomeDevice>) async throws -> any DraftAutomation {
    let light = devices.first { $0.name == "light2" }
    
    guard let light else {
      Logger().error("Unable to find light device with name light2")
      throw HomeError.notFound("No devices support OnOffLightDeviceType")
    }
    
    return automation(
      name: "Turn off light after 5 seconds",
      description:
        """
        Turns off light2 after it has been on for 5 seconds.
        """
    ) {
      let onOffStarter = starter(light, OnOffLightDeviceType.self, OnOffTrait.self)
      onOffStarter
      condition {
        onOffStarter.onOff.equals(true)
      }
      delay(for: Duration.seconds(5))
      action(light, OnOffLightDeviceType.self) {
        OnOffTrait.off()
      }
    }
  }

এমন একটি অটোমেশন তৈরি করতে যা চালু হওয়ার পাঁচ সেকেন্ড পরে আলো বন্ধ করে দেবে, অটোমেশন ভিউতে যান এবং " + যোগ করুন " বোতামে ক্লিক করুন। তারপর, " ৫ সেকেন্ড পরে আলো বন্ধ করুন " নির্বাচন করুন। starter , condition এবং action সহ অটোমেশনের বিবরণ প্রদর্শিত হবে। structure.createAutomation() দ্বারা অটোমেশন তৈরি করতে " সংরক্ষণ করুন " এ ক্লিক করুন।

21c1f8ea2a29134b.png4bd36f6ed9c5f6e9.png

দ্রষ্টব্য : উপলব্ধ অটোমেশনগুলি আপনার বাড়ির ডিভাইসের উপর নির্ভর করে। যদি আপনি কোনও উপলব্ধ অটোমেশন দেখতে না পান, তাহলে আপনার লাইট ডিভাইসের নাম পরিবর্তন করে "light2" রাখার চেষ্টা করুন।

"ডিভাইস" ট্যাবে ফিরে যান এবং "light2" নামক আলোটি চালু করুন। পাঁচ সেকেন্ড পরে এটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে।

অটোমেশনের উপাদানগুলি হল:

  • স্টার্টার: এটি এমন একটি ইভেন্ট যা অটোমেশন শুরু করে। এই উদাহরণে, OnOffTrait এ কোনও পরিবর্তন হলে অটোমেশন শুরু হবে।
  • অবস্থা: এটি পরীক্ষা করে যে স্টার্টার ডিভাইসটি নির্দিষ্ট প্রয়োজনীয়তা পূরণ করে কিনা। এই ক্ষেত্রে, আলো জ্বললে অটোমেশন কার্যকর করা হবে।
  • কর্ম: এটি হল সেই অটোমেশন যা আপনি করতে চান, তবে শুধুমাত্র যদি স্টার্টার প্রয়োজনীয়তা পূরণ করে। শর্ত পূরণ হলে, আলো বন্ধ করে দেওয়া হবে।

আরও উদাহরণের জন্য, উদাহরণ অটোমেশন পৃষ্ঠাটি দেখুন।

একটি অটোমেশন মুছে ফেলুন

যখন আপনি একটি বিদ্যমান অটোমেশনের বাম দিকে সোয়াইপ করেন এবং আপনার কাঠামো থেকে এটি সরাতে ট্র্যাশ আইকনে ট্যাপ করেন তখন structure.deleteAutomation() পদ্ধতিটি চালু হয়।

dc678cd9e16f89a5.png সম্পর্কে

৮. অভিনন্দন

অভিনন্দন! আপনি iOS এর জন্য Home API ব্যবহার করে একটি মৌলিক স্মার্ট হোম অ্যাপ সফলভাবে তৈরি করেছেন।

তুমি যা অর্জন করেছো :

  • ইনিশিয়ালাইজেশন : Home.connect() ব্যবহার করে আপনার অ্যাপটিকে Google Home ইকোসিস্টেমের সাথে সংযুক্ত করা হয়েছে।
  • অনুমতি : হোম ডেটা অ্যাক্সেসের জন্য ব্যবহারকারীর প্রমাণীকরণ এবং অনুমোদন পরিচালনা করা হয়েছে।
  • ডিভাইস এবং কাঠামো : home.rooms() এবং home.devices() ব্যবহার করে রুম এবং ডিভাইসগুলি আনা এবং প্রদর্শন করা হয়েছে।
  • ডিভাইস নিয়ন্ত্রণ : বাস্তবায়িত ডিভাইস ইন্টারঅ্যাকশন, যেমন একটি OnOffPluginUnitDeviceType এর বৈশিষ্ট্যগুলিতে কমান্ড কল করে তার অবস্থা টগল করা।
  • স্ট্রাকচার ম্যানেজমেন্ট : নতুন রুম তৈরি করার জন্য কার্যকারিতা যুক্ত করা হয়েছে ( structure.createRoom() ), রুমের মধ্যে ডিভাইস স্থানান্তর ( structure.move() ), এবং খালি রুম মুছে ফেলার জন্য ( structure.deleteRoom() )।
  • কমিশনিং : নতুন ম্যাটার ডিভাইস ( MatterAddDeviceRequest ) যোগ করার জন্য SDK এর কমিশনিং ফ্লোকে একীভূত করা হয়েছে।
  • অটোমেশন : একটি কাঠামোর মধ্যে কীভাবে ( structure.createAutomation() ) অটোমেশন তালিকাভুক্ত করতে হয়, তৈরি করতে হয় এবং ( structure.deleteAutomation() ) মুছে ফেলতে হয় তা অন্বেষণ করা হয়েছে।

iOS-এ সমৃদ্ধ স্মার্ট হোম কন্ট্রোল অভিজ্ঞতা তৈরি করতে হোম API-এর সুবিধা কীভাবে নেওয়া যায় সে সম্পর্কে এখন আপনার একটি মৌলিক ধারণা আছে।

পরবর্তী পদক্ষেপ :

  • নমুনা অ্যাপে দেওয়া অন্যান্য ডিভাইসের ধরণ (লাইট, ফ্যান, ব্লাইন্ড ইত্যাদি) কীভাবে নিয়ন্ত্রণ করা যায় তা অন্বেষণ করুন।
  • বিভিন্ন ডিভাইসের জন্য উপলব্ধ বিভিন্ন বৈশিষ্ট্য এবং কমান্ডের গভীরে ডুব দিন।
  • বিভিন্ন স্টার্টার, শর্ত এবং ক্রিয়া ব্যবহার করে আরও জটিল অটোমেশন তৈরির পরীক্ষা-নিরীক্ষা করুন।
  • আরও উন্নত বৈশিষ্ট্য এবং বিশদ বিবরণের জন্য হোম এপিআই ডকুমেন্টেশন দেখুন।

সাবাশ!