লাইট ডিভাইস গাইড

লাইট ডিভাইস স্ট্যান্ডার্ড Matter বৈশিষ্ট্য ব্যবহার করে ফিক্সচার শনাক্ত করে, পাওয়ার স্টেট টগল করে এবং উজ্জ্বলতার লেভেল অ্যাডজাস্ট করে।

সবচেয়ে সাধারণ লাইট ডিভাইসের ধরন হল OnOffLightDeviceType যা OnOffTrait এবং IdentifyTrait ট্রেটের মাধ্যমে প্রয়োগ করা হয় এবং বিকল্প হিসেবে LevelControlTrait ট্রেট এবং LightEffectsTrait ট্রেটে কাজ করে।

অন্যান্য ধরনের লাইট অতিরিক্ত ক্ষমতা অফার করে এবং বিভিন্ন বৈশিষ্ট্যের সাথে প্রয়োগ করা হয়:

Home API ডিভাইসের ধরন বৈশিষ্ট্য Swift স্যাম্পেল অ্যাপ ব্যবহারিক ক্ষেত্র

কালার টেম্পারেচার লাইট

ColorTemperatureLightDeviceType

home.matter.0000.types.010c

এমন একটি লাইটিং ডিভাইস যা চালু বা বন্ধ করা, এর আলোর তীব্রতা অ্যাডজাস্ট করা এবং এর কালার টেম্পারেচার অ্যাডজাস্ট করা যায়।

প্রয়োজনীয় বৈশিষ্ট্য
     matter IdentifyTrait
     matter OnOffTrait
     matter LevelControlTrait
     matter ColorControlTrait

ঐচ্ছিক বৈশিষ্ট্য
     google LightEffectsTrait
     google ExtendedColorControlTrait
লাইট

ডিম করা যায় এমন আলো

DimmableLightDeviceType

home.matter.0000.types.0101

এমন একটি লাইটিং ডিভাইস যা চালু বা বন্ধ করা যায়, এর আলোর তীব্রতা অ্যাডজাস্ট করা যায় এবং বাউন্ড অকুপেন্সি সেন্সরের মাধ্যমে সুইচ করা যায়।

প্রয়োজনীয় বৈশিষ্ট্য
     matter IdentifyTrait
     matter OnOffTrait
     matter LevelControlTrait

ঐচ্ছিক বৈশিষ্ট্য
     google LightEffectsTrait
লাইট

এক্সটেন্ডেড কালার লাইট

ExtendedColorLightDeviceType

home.matter.0000.types.010d

এমন একটি লাইটিং ডিভাইস যা চালু বা বন্ধ করা, আলোর তীব্রতা অ্যাডজাস্ট করা, কালার টেম্পারেচার অ্যাডজাস্ট করা এবং বাউন্ড অকুপেন্সি সেন্সরের মাধ্যমে সুইচ করা যায়।

প্রয়োজনীয় বৈশিষ্ট্য
     matter IdentifyTrait
     matter OnOffTrait
     matter LevelControlTrait
     matter ColorControlTrait

ঐচ্ছিক বৈশিষ্ট্য
     google LightEffectsTrait
     google ExtendedColorControlTrait
লাইট

লাইট চালু/বন্ধ করা

OnOffLightDeviceType

home.matter.0000.types.0100

একটি আলো জ্বালানোর ডিভাইস যা চালু বা বন্ধ করা যায়।

প্রয়োজনীয় বৈশিষ্ট্য
     matter IdentifyTrait
     matter OnOffTrait

ঐচ্ছিক বৈশিষ্ট্য
     matter LevelControlTrait
     google LightEffectsTrait
লাইট

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

পূর্বশর্ত

লাইটিং ডিভাইস ও লাইটিং কার্ভ নিয়ে কাজ করার আগে, আপনার অ্যাপ যাতে Home SDK ইনিশিয়ালাইজ করে এবং প্রয়োজনীয় ইমপোর্ট অন্তর্ভুক্ত করে তা নিশ্চিত করুন:

import Foundation
import GoogleHomeSDK
import GoogleHomeTypes
import Network

লাইট ডিভাইস খুঁজুন

কোনও স্ট্রাকচারে লাইটিং ডিভাইস খুঁজতে, ডিভাইসের ধরন অনুযায়ী ডিভাইসের তালিকা ফিল্টার করুন, যেমন OnOffLightDeviceType এবং DimmableLightDeviceType ।

let allDevices = try await home.devices().list()

// Get all On/Off Light devices in the structure
let onOffLights = allDevices.filter {
  $0.types.contains(OnOffLightDeviceType.self)
}

// Get all Dimmable Light devices in the structure
let dimmableLights = allDevices.filter {
  $0.types.contains(DimmableLightDeviceType.self)
}

// Retrieve a specific device type instance to access its traits
let onOffLightDeviceType =
  await onOffLights.first?.types.get(OnOffLightDeviceType.self)

let dimmableLightDeviceType =
  await dimmableLights.first?.types.get(DimmableLightDeviceType.self)

এছাড়াও, আপনি একটি ফিল্টারে একাধিক লাইটিং ডিভাইসের ধরন জুড়ে সমস্ত লাইটিং ডিভাইস পুনরুদ্ধার করতে পারেন:

// Get a list of devices with similar device types (lights)
let lightDevices =
  try await self.home.devices().list().compactMap {
    $0.types.contains(DimmableLightDeviceType.self)
      || $0.types.contains(OnOffLightDeviceType.self)
      || $0.types.contains(ColorTemperatureLightDeviceType.self)
      || $0.types.contains(ExtendedColorLightDeviceType.self)
  }

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

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

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!

আলোর ডিভাইস শনাক্ত করুন

কোনও রুমে একাধিক আলো থাকলে, আপনি ব্যবহারকারীকে নির্দিষ্ট কোনও ফিজিক্যাল ফিক্সচার খুঁজে পেতে সাহায্য করতে পারেন। এর জন্য আপনাকে ভিজ্যুয়াল শনাক্তকরণ স্টেট ট্রিগার করতে হবে, যেমন কয়েক সেকেন্ডের জন্য আলো ব্লিঙ্ক করা। চারটি লাইট ডিভাইসের সবকটির জন্য Matter.IdentifyTrait ট্রেট প্রয়োজন।

শনাক্তকরণ অবস্থা শুরু করতে identifyTime সেকেন্ডের সময়সীমা সহ identify কমান্ড কল করুন। 0 পাস করলে শনাক্তকরণ অবস্থা অবিলম্বে বন্ধ হয়ে যায়। এছাড়াও, আপনি নির্দিষ্ট ভিজ্যুয়াল এফেক্ট রান করতে triggerEffect কল করতে পারেন, যেমন Blink বা Breathe।

func identifyLight(lightDeviceType: DimmableLightDeviceType) async throws {
  guard let identifyTrait = lightDeviceType.matterTraits.identifyTrait else {
    return
  }

  // Blink the light for 10 seconds so the user can locate it
  if identifyTrait.supportsIdentifyCommand {
    try await identifyTrait.identify(identifyTime: 10)
  }

  // Or trigger a specific visual identification effect
  if identifyTrait.supportsTriggerEffectCommand {
    try await identifyTrait.triggerEffect(
      effectIdentifier: .blink,
      effectVariant: .default
    )
  }
}

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

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

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
}

আলোর ডিভাইস কন্ট্রোল করুন

OnOffLight এবং DimmableLight ডিভাইসের ধরন ফিক্সচার শনাক্ত করতে, পাওয়ার স্টেট টগল করতে এবং উজ্জ্বলতার লেভেল অ্যাডজাস্ট করতে স্ট্যান্ডার্ড Matter ট্রেট ব্যবহার করে।

লাইট চালু বা বন্ধ করা

OnOffLight বা DimmableLight-এর বর্তমান পাওয়ার স্টেট জানতে এবং লাইট চালু বা বন্ধ করতে OnOffTrait ট্রেড ব্যবহার করুন।

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

// Check if the OnOff trait supports the onOff attribute.
if onOffTrait.attributes.$onOff.isSupported {
  print("onOffTrait supports onOff state")
} else {
  print("onOffTrait is for a command only device!")
}

onOff, true হলে, আলো জ্বলবে। onOff, false হলে, আলো বন্ধ থাকে।

লাইটের পাওয়ার স্টেট পরিবর্তন করতে, যাচাই করুন যে ট্রেটটি অভিপ্রেত কমান্ডকে সমর্থন করে এবং তারপর on(), off() বা toggle() কল করুন।

// Check if the OnOff trait supports the toggle command.
if onOffTraitTest.supportsToggleCommand {
  print("onOffTrait supports toggle command")
} else {
  print("onOffTrait does not support stateful toggle command")
}
// Calling a command on a trait.
do {
  try await onOffTraitTest.toggle()
} catch let _ as HomeError {
  // Code for handling the exception
}

এছাড়াও, আপনি সরাসরি on() এবং off() কল করে একটি এক্সপ্লিসিট স্টেট সেট করতে পারেন:

do {
  try await onOffTraitTest.off()
  try await onOffTraitTest.on()
} catch let _ as HomeError {
  // Code for handling the exception
}

ধীরে ধীরে ভিজ্যুয়াল ট্রানজিশনের মাধ্যমে আলো বন্ধ করতে, offWithEffect()-এ কল করুন এবং EffectIdentifierEnum ভ্যালু উল্লেখ করুন:

// Turn off the light using the DyingLight effect.
do {
  try await onOffTraitTest.offWithEffect(
    effectIdentifier: Matter.OnOffTrait.EffectIdentifierEnum.dyingLight,
    effectVariant: 0
  )
} catch let _ as HomeError {
  // Code for handling the exception
}

উজ্জ্বলতার লেভেল অ্যাডজাস্ট করা

DimmableLight-এর জন্য LevelControlTrait বৈশিষ্ট্য প্রয়োজন এবং OnOffLight ঐচ্ছিকভাবে এটি সাপোর্ট করতে পারে। আলোর উজ্জ্বলতার লেভেল পড়তে ও কন্ট্রোল করতে এই বৈশিষ্ট্য ব্যবহার করুন।

currentLevel অ্যাট্রিবিউট 0 থেকে 254 স্কেলে বর্তমান উজ্জ্বলতার লেভেল রিপোর্ট করে। হার্ডওয়্যার দ্বারা সমর্থিত সঠিক ব্রাইটনেস রেঞ্জ নির্ধারণ করতে আপনি minLevel এবং maxLevel পরীক্ষা করতে পারেন।

উজ্জ্বলতা নির্দিষ্ট ভ্যালুতে সেট করতে, moveToLevel()-এ কল করুন। মনে রাখবেন যে moveToLevel() শুধুমাত্র বর্তমান লেভেল পরিবর্তন করে যখন আলো আগে থেকেই চালু থাকে, যদি না আপনি optionsOverride-এর সাথে executeIfOff কনফিগার করেন। উজ্জ্বলতার লেভেল শূন্যের বেশি সেট করার সময় অটোমেটিক লাইট চালু করতে (অথবা লেভেল সর্বনিম্ন সেট করার সময় লাইট বন্ধ করতে), moveToLevelWithOnOff() ব্যবহার করুন।

// Change the brightness of the light to 50%
do {
  try await levelControlTraitTest.moveToLevel(
    level: UInt8(127),
    transitionTime: 0,
    optionsMask: Matter.LevelControlTrait.OptionsBitmap(),
    optionsOverride: Matter.LevelControlTrait.OptionsBitmap()
  )
} catch let _ as HomeError {
  // Code for handling the exception
}

নিম্নলিখিত উদাহরণটি বর্তমান উজ্জ্বলতার লেভেল পড়ে এবং ১ সেকেন্ডের (10 সেকেন্ডের দশমাংশ) ট্রানজিশনে moveToLevelWithOnOff() ব্যবহার করে ডিম করা যায় এমন লাইটকে ৭৫% উজ্জ্বলতায় (190) সেট করে:

func setLightBrightness(lightDeviceType: DimmableLightDeviceType) async throws {
  guard let levelControl = lightDeviceType.matterTraits.levelControlTrait else {
    return
  }

  // Read the current brightness level (0 to 254)
  let currentLevel: UInt8? = levelControl.attributes.currentLevel
  print("Current brightness level: \(String(describing: currentLevel))")

  // Move to ~75% brightness (190 out of 254) and turn on the light if it is off
  if levelControl.supportsMoveToLevelWithOnOffCommand {
    try await levelControl.moveToLevelWithOnOff(
      level: UInt8(190),
      transitionTime: 10,
      optionsMask: Matter.LevelControlTrait.OptionsBitmap(),
      optionsOverride: Matter.LevelControlTrait.OptionsBitmap()
    )
  }
}

এছাড়াও, আপনি .up বা .down এবং stepSize সহ stepWithOnOff()-কে কল করে বর্তমান লেভেলের সাপেক্ষে উজ্জ্বলতা বাড়াতে বা কমাতে পারেন।

কন্ট্রোল কালার

ColorControlTrait বৈশিষ্ট্যটি ColorTemperatureLightDeviceType এবং ExtendedColorLightDeviceType, দুটিতেই উপলভ্য।

এই বৈশিষ্ট্যের মাধ্যমে আপনি মাইক্রো-রেসিপ্রোকাল ডিগ্রি বা মায়ার্ডে কালার টেম্পারেচার অ্যাডজাস্ট করতে পারবেন।

guard let colorControlTrait =
  colorTempLightDeviceType.matterTraits.colorControlTrait
else {
  return
}
// Read the current color temperature and hardware limits in mireds
// (Mireds = 1,000,000 / Kelvin; e.g., 370 mireds ≈ 2700K warm white, 250 mireds = 4000K cool white)
let currentMireds = colorControlTrait.attributes.colorTemperatureMireds
let minMireds = colorControlTrait.attributes.colorTempPhysicalMinMireds ?? 153
let maxMireds = colorControlTrait.attributes.colorTempPhysicalMaxMireds ?? 500
// Clamp target (370 mireds ≈ 2700K) to the device's physical bounds
let targetMireds = min(max(UInt16(370), minMireds), maxMireds)
if colorControlTrait.supportsMoveToColorTemperatureCommand {
  try await colorControlTrait.moveToColorTemperature(
    colorTemperatureMireds: targetMireds,
    transitionTime: 20, // 2.0 seconds (in 0.1s units)
    optionsMask: Matter.ColorControlTrait.OptionsBitmap(),
    optionsOverride: Matter.ColorControlTrait.OptionsBitmap()
  )
}

এছাড়াও, আপনি CIE 1931 ক্রোমাটিসিটি কোঅর্ডিনেট এবং ১৬-বিট হিউ ও স্যাচুরেশন ভ্যালু ব্যবহার করে রঙ সেট করতে পারবেন।

guard let colorControlTrait =
  extendedColorLightDeviceType.matterTraits.colorControlTrait
else {
  return
}
// 1. Move to CIE 1931 xy chromaticity coordinates (scaled 0..65279)
// Example: x = 0.3127 (20493), y = 0.3290 (21561) for D65 white point
if colorControlTrait.supportsMoveToColorCommand {
  try await colorControlTrait.moveToColor(
    colorX: 20493,
    colorY: 21561,
    transitionTime: 10, // 1.0 second (in 0.1s units)
    optionsMask: Matter.ColorControlTrait.OptionsBitmap(),
    optionsOverride: Matter.ColorControlTrait.OptionsBitmap()
  )
}
let currentX = colorControlTrait.attributes.currentX
let currentY = colorControlTrait.attributes.currentY
// 2. Move to 16-bit Enhanced Hue (0..65534) and 8-bit Saturation (0..254)
if colorControlTrait.supportsEnhancedMoveToHueAndSaturationCommand {
  try await colorControlTrait.enhancedMoveToHueAndSaturation(
    enhancedHue: 43690, // ~240° (Blue) on the 0..65534 scale
    saturation: 254,    // Full saturation
    transitionTime: 15, // 1.5 seconds (in 0.1s units)
    optionsMask: Matter.ColorControlTrait.OptionsBitmap(),
    optionsOverride: Matter.ColorControlTrait.OptionsBitmap()
  )
}
// 3. Start a hardware color loop across the device's hue range
if colorControlTrait.supportsColorLoopSetCommand {
  try await colorControlTrait.colorLoopSet(
    updateFlags: [
      .updateAction,
      .updateDirection,
      .updateTime,
      .updateStartHue
    ],
    action: .activateFromColorLoopStartEnhancedHue,
    direction: .increment,
    time: 30, // 30 seconds per full cycle
    startHue: 0,
    optionsMask: Matter.ColorControlTrait.OptionsBitmap(),
    optionsOverride: Matter.ColorControlTrait.OptionsBitmap()
  )
}

Google.ExtendedColorControlTrait হল ExtendedColorLightDevice-এর একটি ঐচ্ছিক Google বৈশিষ্ট্য যা রঙের নাম, RGB ভ্যালু বা ইউনিফায়েড ফ্লোটিং-পয়েন্ট HSV ভ্যালু গ্রহণ করে রঙ নিয়ন্ত্রণ করা সহজ করে তোলে। এই ভ্যালু রঙ ও উজ্জ্বলতাকে একটি ইউনিটে একত্রিত করে।

guard let extendedColorControlTrait =
  extendedColorLightDeviceType.googleTraits.extendedColorControlTrait
else {
  return
}
// 1. Set color by name
if extendedColorControlTrait.supportsMoveToColorNameCommand {
  try await extendedColorControlTrait.moveToColorName(colorName: "Lavender")
}
let currentColorName = extendedColorControlTrait.attributes.currentName
// 2. Set color using 8-bit RGB values (0..255 per channel)
// Automatically coordinates brightness (LevelControl) and color (ColorControl)
if extendedColorControlTrait.supportsMoveToColorRGBCommand {
  try await extendedColorControlTrait.moveToColorRGB(
    red: 255,
    green: 128,
    blue: 0
  )
}
let currentRed = extendedColorControlTrait.attributes.currentRed
let currentGreen = extendedColorControlTrait.attributes.currentGreen
let currentBlue = extendedColorControlTrait.attributes.currentBlue
// 3. Set color and brightness together using floating-point HSV
// hue: 0.0...360.0, saturation: 0.0...1.0, value (brightness): 0.0...1.0
if extendedColorControlTrait.supportsMoveToColorHSVCommand {
  try await extendedColorControlTrait.moveToColorHSV(
    hue: 210.0,
    saturation: 0.85,
    value: 0.75
  )
}
let currentHue = extendedColorControlTrait.attributes.currentHue
let currentSaturation = extendedColorControlTrait.attributes.currentSaturation
let currentValue = extendedColorControlTrait.attributes.currentValue

লাইটিং কার্ভ ম্যানেজ করুন

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

Google.LightingCurveTrait বৈশিষ্ট্য হল স্ট্রাকচার-লেভেল Google Home platform (GHP) বৈশিষ্ট্য। আপনি এটি কোনও স্বতন্ত্র লাইটিং ডিভাইসের পরিবর্তে Structure ইনস্ট্যান্স থেকে অ্যাক্সেস করেন।

ট্রেইটের প্রতিটি শিডিউল LightingCurveSetting দ্বারা দেখানো হয়, যা একটি অনন্য settingId-কে LightingCurveConfig-এর সাথে পেয়ার করে। নিচে দেওয়া সারণীতে LightingCurveConfig-এর কনফিগারেশন ফিল্ড বর্ণনা করা হয়েছে:

ফিল্ড বিবরণ
curvePointsArray আলাদা আলাদা সময় সহ অন্তত দুটি CurvePoint আইটেমের একটি ক্রম। প্রতিটি পয়েন্টে একটি time (0 থেকে 23 পর্যন্ত hours সহ CurveTimeOfDay এবং 0 থেকে 59 পর্যন্ত minutes), একটি brightnessPercent (0 থেকে 100) এবং কেলভিনে একটি ঐচ্ছিক colorTemperature উল্লেখ করা থাকে। কোনও পয়েন্টের জন্য colorTemperature উল্লেখ করা থাকলে, সব পয়েন্টের জন্য এটি অবশ্যই একটি পজিটিভ ভ্যালু হতে হবে।
roomId টার্গেট রুমের আইডি (যেমন, room@{uuid})। সেই রুমের মানানসই ডিমেবল ও কালার টেম্পারেচার লাইটে লাইটিং কার্ভ প্রয়োগ করে। roomId অথবা devices উল্লেখ করুন।
devices TargetDevices অবজেক্টে TargetDeviceটি এন্ট্রির তালিকা আছে, প্রতিটিতে একটি ডিভাইস id এবং ডিভাইস type আইডি (যেমন DimmableLight-এর জন্য home.matter.0000.types.0101 বা ColorTemperatureLight-এর জন্য home.matter.0000.types.010c) আছে। devices বা roomId উল্লেখ করুন।
daysOfWeekArray সপ্তাহের যে দিনগুলিতে লাইটিং কার্ভ চলে (Locale.Weekday)। তালিকাটি খালি থাকলে, লাইটিং কার্ভ প্রতিদিন চলে।
adaptive ঐচ্ছিক বুলিয়ান যা নির্দেশ করে যে লাইটিং কার্ভটি অ্যাডাপ্টিভ কিনা, যার অর্থ হল শিডিউল করা উইন্ডো চলাকালীন চালু করা হলে একটি টার্গেট লাইট অ্যাক্টিভ কার্ভ লেভেল আবার শুরু করে। false চালু থাকলে, লাইটে ম্যানুয়াল পরিবর্তন করা হলে, দিনের বাকি সময়ের জন্য লাইটিং কার্ভ থেকে লাইট ডিসএনগেজ হয়ে যায়। true-এর ক্ষেত্রে, শিডিউল উইন্ডো চলাকালীন কোনও আলো বন্ধ করে আবার চালু করা হলে, সেটি লাইটিং কার্ভের সাথে আবার যুক্ত হয়, যার ফলে এটি কার্ভের বর্তমান উজ্জ্বলতা এবং কালার টেম্পারেচারের সাথে মানানসই হয় এবং সেখান থেকে কার্ভ অনুসরণ করে।
enabled ঐচ্ছিক বুলিয়ান যা নির্দেশ করে যে লাইটিং কার্ভ সেটিং সক্রিয় আছে কিনা। নতুন সেটিং তৈরি করার সময় ডিফল্ট হিসেবে true সেট করা হয়। আপডেট কমান্ড থেকে enabled বাদ দেওয়া হলে, enabled-এর স্ট্যাটাস পরিবর্তন হয় না।

লাইটিং কার্ভ সেটিংস পড়ুন

কোনও স্ট্রাকচারের জন্য কনফিগার করা লাইটিং কার্ভ পরীক্ষা করতে, Structure থেকে Google.LightingCurveTrait ট্রেইট ফিরিয়ে আনুন এবং এর lightingCurveSettingsArray অ্যাট্রিবিউট পড়ুন।

func readLightingCurves(structure: Structure) async {
  guard let lightingCurve = await structure.traits.get(
    Google.LightingCurveTrait.self
  ) else {
    return
  }

  for setting in lightingCurve.attributes.lightingCurveSettingsArray {
    let settingId = setting.settingId
    let config = setting.config
    print(
      "Setting ID: \(String(describing: settingId)), " +
        "enabled: \(String(describing: config?.enabled))"
    )
    for point in config?.curvePointsArray ?? [] {
      print(
        "  Time: \(point.time?.hours ?? 0):\(point.time?.minutes ?? 0), " +
          "Brightness: \(point.brightnessPercent ?? 0)%, " +
          "ColorTemp: \(point.colorTemperature ?? 0)K"
      )
    }
  }
}

লাইটিং কার্ভ সেটিং তৈরি করুন

কোনও স্ট্রাকচারে নতুন লাইটিং কার্ভ শিডিউল তৈরি করতে, কমপক্ষে দুটি CurvePoint এন্ট্রি, টার্গেট লাইট (roomId বা devices দ্বারা নির্দিষ্ট করা) এবং সপ্তাহের অ্যাক্টিভ দিন সহ একটি LightingCurveConfig তৈরি করুন। তারপর createLightingCurveSetting()-এ কনফিগারেশন পাস করুন। কমান্ডটি নতুন লাইটিং কার্ভ সেটিংয়ে অ্যাসাইন করা অনন্য settingId ফিরিয়ে দেয়।

নিম্নলিখিত উদাহরণটি একটি রুমের জন্য সপ্তাহের দিনের আলোর কার্ভ তৈরি করে যা সকাল ৭:০০ টায় ৩০% থেকে সকাল ৯:০০ টায় ৮০% পর্যন্ত উজ্জ্বলতা বাড়ায় এবং রাত ৯:০০ টায় ২০% পর্যন্ত কমিয়ে দেয়:

func createRoomLightingCurve(
  structure: Structure,
  targetRoomId: String
) async throws -> String? {
  guard let lightingCurve = await structure.traits.get(
    Google.LightingCurveTrait.self
  ) else {
    return nil
  }

  let curvePoints = [
    Google.LightingCurveTrait.CurvePoint(
      time: Google.LightingCurveTrait.CurveTimeOfDay(hours: 7, minutes: 0),
      brightnessPercent: 30,
      colorTemperature: 2700
    ),
    Google.LightingCurveTrait.CurvePoint(
      time: Google.LightingCurveTrait.CurveTimeOfDay(hours: 9, minutes: 0),
      brightnessPercent: 80,
      colorTemperature: 4000
    ),
    Google.LightingCurveTrait.CurvePoint(
      time: Google.LightingCurveTrait.CurveTimeOfDay(hours: 21, minutes: 0),
      brightnessPercent: 20,
      colorTemperature: 2200
    ),
  ]

  let config = Google.LightingCurveTrait.LightingCurveConfig(
    curvePointsArray: curvePoints,
    roomId: targetRoomId,
    daysOfWeekArray: [
      .monday,
      .tuesday,
      .wednesday,
      .thursday,
      .friday,
    ],
    adaptive: true,
    enabled: true
  )

  let response = try await lightingCurve.createLightingCurveSetting(
    config: config
  )
  return response.settingId
}

পুরো রুমের পরিবর্তে নির্দিষ্ট লাইটিং ডিভাইস টার্গেট করতে, Google.LightingCurveTrait.TargetDevices ব্যবহার করে devices প্যারামিটার প্রদান করুন:

let targetDevices = Google.LightingCurveTrait.TargetDevices(
  devicesArray: [
    Google.LightingCurveTrait.TargetDevice(
      id: dimmableLight.id,
      type: DimmableLightDeviceType.identifier
    )
  ]
)

let deviceCurveConfig = Google.LightingCurveTrait.LightingCurveConfig(
  curvePointsArray: curvePoints,
  devices: targetDevices,
  daysOfWeekArray: [.saturday, .sunday],
  adaptive: true,
  enabled: true
)

let response = try await lightingCurve.createLightingCurveSetting(
  config: deviceCurveConfig
)
let settingId = response.settingId

লাইটিং কার্ভ সেটিং আপডেট করুন

আগে থেকে থাকা লাইটিং কার্ভ পরিবর্তন করতে—যেমন, কার্ভ পয়েন্ট পরিবর্তন করা, সপ্তাহের অ্যাক্টিভ দিন আপডেট করা অথবা শিডিউল চালু বা বন্ধ করা—টার্গেট settingId এবং আপডেট করা LightingCurveConfig সহ updateLightingCurveSetting() কল করুন।

func updateLightingCurve(
  structure: Structure,
  settingId: String,
  updatedConfig: Google.LightingCurveTrait.LightingCurveConfig
) async throws {
  guard let lightingCurve = await structure.traits.get(
    Google.LightingCurveTrait.self
  ) else {
    return
  }

  _ = try await lightingCurve.updateLightingCurveSetting(
    settingId: settingId,
    config: updatedConfig
  )
}

লাইটিং কার্ভ সেটিং মুছে ফেলা

কোনও স্ট্রাকচার থেকে লাইটিং কার্ভ সেটিং সরাতে, আপনি যে সেটিং মুছতে চান তার settingId সহ deleteLightingCurveSetting() কল করুন।

func deleteLightingCurve(
  structure: Structure,
  settingId: String
) async throws {
  guard let lightingCurve = await structure.traits.get(
    Google.LightingCurveTrait.self
  ) else {
    return
  }

  _ = try await lightingCurve.deleteLightingCurveSetting(settingId: settingId)
}