iOS-এর জন্য Chime ডিভাইস গাইড

মৌলিক Chime ডিভাইসের ধরন স্ট্যান্ডার্ড Matter-ভিত্তিক Matter.ChimeTrait অথবা Google-এর নিজস্ব কাস্টম ভার্সন অফ দ্য ট্রেট, Google.ChimeTrait, ব্যবহার করে প্রয়োগ করা যেতে পারে, যা Matter স্ট্যান্ডার্ডে নির্দিষ্ট করা ক্ষমতা ছাড়াও, এক্সটার্নাল চিমকে সাপোর্ট করে। এছাড়াও, চিম ডিভাইস Matter.IdentifyTrait, ইমপ্লিমেন্ট করতে পারে, যা দেখে বা শুনে চিম ডিভাইস শনাক্ত করার একটি উপায় প্রদান করে।

কোনও ফিচার ব্যবহার করার আগে বা অ্যাট্রিবিউট আপডেট করার চেষ্টা করার আগে সবসময় ডিভাইসের জন্য অ্যাট্রিবিউট ও কমান্ড কাজ করে কিনা তা চেক করে নিন। আরও তথ্যের জন্য iOS-এ ডিভাইস কন্ট্রোল করুন লিঙ্ক দেখুন।

Home API ডিভাইসের ধরন বৈশিষ্ট্য Swift Sample App ব্যবহারের ক্ষেত্র

চাইম

ChimeDeviceType

home.matter.0000.types.0146

এমন একটি ডিভাইস যা আগে থেকে ইনস্টল করা বিভিন্ন ধরনের সাউন্ড চালাতে পারে এবং সাধারণত কলিং বেল, অডিও কলিং বেল বা ভিডিও কলিং বেলের সাথে ব্যবহার করা হয়।

প্রয়োজনীয় ট্রেট
     matter ChimeTrait

ঐচ্ছিক ট্রেট
     matter IdentifyTrait
ডোরবেল

ডিভাইস সম্পর্কে প্রাথমিক তথ্য পাওয়া

   iOS-এর জন্য Sample অ্যাপে প্রয়োগ করা হয়েছে   

BasicInformation ট্রেটে ভেন্ডরের নাম, ভেন্ডর আইডি, প্রোডাক্ট আইডি, প্রোডাক্টের নাম (মডেল সংক্রান্ত তথ্য সহ) এবং ডিভাইসের সফ্টওয়্যার ভার্সনের মতো তথ্য থাকে:

let vendorName = basicInfoTrait.attributes.vendorName!
let vendorID = basicInfoTrait.attributes.vendorID!
let productID = basicInfoTrait.attributes.productID!
let productName = basicInfoTrait.attributes.productName!
let softwareVersion = basicInfoTrait.attributes.softwareVersion!

মাল্টিপার্ট সহায়তা

চIME-এ একাধিক ধরনের ডিভাইস থাকতে পারে, যার মধ্যে একটি Chime ও ঐচ্ছিকভাবে একটি স্পিকার অন্তর্ভুক্ত। এছাড়াও, কিছু চিম Thread Border Router (TBR) অন্তর্ভুক্ত করে। সবচেয়ে বেশি ডিভাইসে কাজ করে তা নিশ্চিত করতে, Home API অ্যাপে চিম কন্ট্রোল করার সুবিধা থাকতে হবে এবং মাল্টিপার্ট চিম ডিভাইস যাতে কাজ করে সেইভাবে কোড লিখতে হবে। আরও তথ্যের জন্য মাল্টিপার্ট ডিভাইস দেখুন।

প্রতিটি মাল্টিপার্ট চিম ডিভাইসকে অ্যাপে একটি করে টাইলের মাধ্যমে দেখাতে হবে। Chime ডিভাইসটি প্রাথমিক ডিভাইস হতে হবে এবং Chime-এর অধীনে চাইল্ড স্পিকারকে একটি অংশ হতে হবে।

Chime ডিভাইসের প্রাথমিক সেটিং হিসেবে স্পিকারের ভলিউম দেখা যাবে।

OnOff ম্যাপিং

Chime ও স্পিকার, এই দুটি ডিভাইস টাইপ সহ কোনও চিমের ক্ষেত্রে, কন্ট্রোলিং অ্যাপে OnOff বোতামটি Chime-এর Enabled অ্যাট্রিবিউটের সাথে ম্যাপ করা উচিত।

Matter ডিভাইস লাইব্রেরি স্পেসিফিকেশন অনুযায়ী, Chime ট্রেটের Enabled অ্যাট্রিবিউটকে False হিসেবে সেট করলে, তা Chime বন্ধ করার পাশাপাশি, গ্লোবাল মিউট সুইচের মতো কাজ করতে পারে যা সব শ্রুতিগোচর ও দৃশ্যমান ইন্ডিকেটরকে দমন করে।

অটোমেশন সহায়তা

আগে বলা হয়েছে যে, ChimeDeviceType-এর একাধিক অংশ থাকতে পারে, তাই ডেভেলপারদের সব চিমকে মাল্টিপার্ট ডিভাইস হিসেবে বিবেচনা করতে উৎসাহিত করা হয় এবং চিম ব্যবহার করা অটোমেশনের ক্ষেত্রেও এটি প্রযোজ্য।

অটোমেশন স্টার্টার ও অ্যাকশনে চিম ব্যবহার করা যেতে পারে।

প্যারেন্ট Chime ডিভাইসের অধীনে থাকা যেকোনও কম্পোনেন্ট পার্ট ডিভাইস যা অটোমেশনে ব্যবহার করা হয়, সেটিকে অবশ্যই AutomationPartPath ব্যবহার করে রেফারেন্স করতে হবে।

নিম্নলিখিত অটোমেশন থেকে কীভাবে মাল্টিপার্ট চিমের মাধ্যমে অটোমেশন তৈরি করা যায় তা জানতে পারবেন। এই চিম স্পিকারের পাশাপাশি চিম ট্রেটও প্রয়োগ করে। সামনের দরজা খোলা হলে অটোমেশন ট্রিগার হয়:

import GoogleHomeSDK
import GoogleHomeTypes

typealias ChimeTrait = Matter.ChimeTrait
typealias OpenCloseTrait = Google.OpenCloseTrait

// Fetch devices using the multipart device model.
let multipartDevices = try await home.devices(enableMultipartDevices: true).list()

guard let chimeParentDevice = multipartDevices.first(where: {
  $0.types.contains(ChimeDeviceType.self)
}) else { return }

guard let doorDevice = multipartDevices.first(where: {
  $0.types.contains(GoogleDoorDeviceType.self)
}) else { return }

// Extract the AutomationPartPath for the specific Chime part
guard let chimeType = await chimeParentDevice.types.get(ChimeDeviceType.self),
  let chimePartPath = chimeParentDevice.automationPart(chimeType) else {
  return
}

let starterNode = starter(doorDevice, GoogleDoorDeviceType.self, OpenCloseTrait.self)

let doorOpenClose = stateReader(doorDevice, GoogleDoorDeviceType.self, OpenCloseTrait.self)

// Build the automation
let chimeAutomation = automation(
  name: "Multipart Chime Demo",
  description: "Activate the chime when the door is opened"
) {
starterNode
condition {
  starterNode.openPercent.unwrapOptional().greaterThan(0)
}
  // Action: Play a chime sound
  action(chimePartPath) {
    ChimeTrait.playChimeSound()
  }
}

মাল্টিপার্ট ডিভাইস ব্যবহার করে অটোমেশন সম্পর্কে অতিরিক্ত তথ্য পেতে মাল্টিপার্ট ডিভাইস অটোমেশন দেখুন।

কোনও ডিভাইসের কানেক্টিভিটি চেক করা

ডিভাইসের কানেক্টিভিটি আসলে ডিভাইসের ধরন লেভেলে চেক করা হয় কারণ কিছু ডিভাইস একাধিক ধরনের ডিভাইসে কাজ করে। রিটার্ন করা স্টেট হল সেই ডিভাইসের সব ট্রেটের কানেক্টিভিটি স্টেটের একটি কম্বিনেশন।

let lightConnectivity =
  dimmableLightDeviceType.metadata.sourceConnectivity
  .connectivityState

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

ডিভাইসের IP অ্যাড্রেস পাওয়া

ডিভাইসের IP অ্যাড্রেস খুঁজে পেতে, GeneralDiagnosticsTrait-এর networkInterfaces অ্যাট্রিবিউট ব্যবহার করুন। অ্যাড্রেসগুলি Data অবজেক্ট হিসেবে রিটার্ন করা হয়, যেগুলিকে আপনি Network ফ্রেমওয়ার্ক ব্যবহার করে স্ট্যান্ডার্ড IPv4 বা IPv6 স্ট্রিং হিসেবে ফর্ম্যাট করতে পারেন:

func getIpAddresses(trait: Matter.GeneralDiagnosticsTrait) -> [String] {
  let interfaces = trait.attributes.networkInterfaces ?? []
  var ipAddresses: [String] = []

  for interface in interfaces {
    for data in interface.iPv4Addresses {
      if let ipv4 = IPv4Address(data) {
        ipAddresses.append(String(describing: ipv4))
      }
    }
    for data in interface.iPv6Addresses {
      if let ipv6 = IPv6Address(data) {
        ipAddresses.append(String(describing: ipv6))
      }
    }
  }

  return ipAddresses
}