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

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

সবচেয়ে সাধারণ লাইট ডিভাইসের ধরন হল OnOffLight যা OnOff এবং Identify ট্রেটের মাধ্যমে প্রয়োগ করা হয় এবং বিকল্প হিসেবে LevelControl ট্রেট এবং LightEffects ট্রেটে কাজ করে।

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

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

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

ColorTemperatureLightDevice

home.matter.0000.types.010c

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

প্রয়োজনীয় বৈশিষ্ট্য
     matter শনাক্ত করুন
     matter OnOff
     matter LevelControl
     matter ColorControl

ঐচ্ছিক বৈশিষ্ট্য
     google LightEffects
     google ExtendedColorControl

চালু ও বন্ধ করা, উজ্জ্বলতা
লাইট

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

DimmableLightDevice

home.matter.0000.types.0101

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

প্রয়োজনীয় বৈশিষ্ট্য
     matter Identify
     matter OnOff
     matter LevelControl

ঐচ্ছিক বৈশিষ্ট্য
     google LightEffects

চালু ও বন্ধ করা, উজ্জ্বলতা
লাইট

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

ExtendedColorLightDevice

home.matter.0000.types.010d

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

প্রয়োজনীয় বৈশিষ্ট্য
     matter শনাক্ত করুন
     matter OnOff
     matter LevelControl
     matter ColorControl

ঐচ্ছিক বৈশিষ্ট্য
     google LightEffects
     google ExtendedColorControl

চালু ও বন্ধ করা, উজ্জ্বলতা
লাইট

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

OnOffLightDevice

home.matter.0000.types.0100

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

প্রয়োজনীয় বৈশিষ্ট্য
     matter শনাক্ত করুন
     matter OnOff

ঐচ্ছিক বৈশিষ্ট্য
     matter LevelControl
     google LightEffects

চালু ও বন্ধ করা, উজ্জ্বলতা
লাইট

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

পূর্বশর্ত

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

import com.google.home.HomeDevice
import com.google.home.Structure
import com.google.home.google.DayOfWeek
import com.google.home.google.ExtendedColorControl
import com.google.home.google.ExtendedColorControlTrait
import com.google.home.google.LightingCurve
import com.google.home.google.LightingCurveTrait
import com.google.home.matter.standard.ColorControl
import com.google.home.matter.standard.ColorControlTrait
import com.google.home.matter.standard.ColorTemperatureLightDevice
import com.google.home.matter.standard.DimmableLightDevice
import com.google.home.matter.standard.ExtendedColorLightDevice
import com.google.home.matter.standard.GeneralDiagnostics
import com.google.home.matter.standard.Identify
import com.google.home.matter.standard.IdentifyTrait
import com.google.home.matter.standard.LevelControl
import com.google.home.matter.standard.LevelControlTrait
import com.google.home.matter.standard.OnOff
import com.google.home.matter.standard.OnOffLightDevice
import com.google.home.matter.standard.OnOffTrait
import com.google.home.matter.standard.RootNodeDevice
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.firstOrNull

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

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

// Get all On/Off Light devices in the structure
val onOffLights: List<HomeDevice> =
  home.devices().list().filter { it.has(OnOffLightDevice) }

// Get all Dimmable Light devices in the structure
val dimmableLights: List<HomeDevice> =
  home.devices().list().filter { it.has(DimmableLightDevice) }

// Retrieve a specific device type instance to access its traits
val onOffLightDevice: OnOffLightDevice? =
  onOffLights.firstOrNull()?.type(OnOffLightDevice)?.firstOrNull()

val dimmableLightDevice: DimmableLightDevice? =
  dimmableLights.firstOrNull()?.type(DimmableLightDevice)?.firstOrNull()

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

// Get a list of devices with similar device types (lights)
val lightDevices =
  home.devices().map { devices ->
    devices.filter {
      it.has(DimmableLightDevice) ||
        it.has(OnOffLightDevice) ||
        it.has(ColorTemperatureLightDevice) ||
        it.has(ExtendedColorLightDevice)
    }
  }

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

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

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

// Get device basic information. All general information traits are on the RootNodeDevice type.
    device.type(RootNodeDevice).first().standardTraits.basicInformation?.let { basicInformation ->
        println("vendorName ${basicInformation.vendorName}")
        println("vendorId ${basicInformation.vendorId}")
        println("productId ${basicInformation.productId}")
        println("productName ${basicInformation.productName}")
        println("softwareVersion ${basicInformation.softwareVersion}")
    }

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

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

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

suspend fun identifyLight(lightDevice: DimmableLightDevice) {
  val identifyTrait = lightDevice.standardTraits.identify ?: return

  // Blink the light for 10 seconds so the user can locate it
  if (identifyTrait.supports(Identify.Command.Identify)) {
    identifyTrait.identify(identifyTime = 10u)
  }

  // Or trigger a specific visual identification effect
  if (identifyTrait.supports(Identify.Command.TriggerEffect)) {
    identifyTrait.triggerEffect(
      effectIdentifier = IdentifyTrait.EffectIdentifierEnum.Blink,
      effectVariant = IdentifyTrait.EffectVariantEnum.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-এর বর্তমান পাওয়ার স্টেট জানতে এবং লাইট চালু বা বন্ধ করতে OnOff ট্রেড ব্যবহার করুন।

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

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

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

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

// Check if the OnOff trait supports the toggle command.
if (onOffTrait.supports(OnOff.Command.Toggle)) {
  println("onOffTrait supports toggle command")
} else {
  println("onOffTrait does not support stateful toggle command")
}
// Calling a command on a trait.
try {
  onOffTrait.toggle()
} catch (e: HomeException) {
  // Code for handling the exception
}

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

onOffTrait.off()
onOffTrait.on()

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

// Turn off the light using the DyingLight effect.
onOffTrait.offWithEffect(
  effectIdentifier = OnOffTrait.EffectIdentifierEnum.DyingLight,
  effectVariant = 0u,
)

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

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

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

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

// Change the brightness of the light to 50%
levelControlTrait.moveToLevel(
  level = 127u.toUByte(),
  transitionTime = null,
  optionsMask = LevelControlTrait.OptionsBitmap(),
  optionsOverride = LevelControlTrait.OptionsBitmap(),
)

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

suspend fun setLightBrightness(lightDevice: DimmableLightDevice) {
  val levelControl = lightDevice.standardTraits.levelControl ?: return

  // Read the current brightness level (0 to 254)
  val currentLevel: UByte? = levelControl.currentLevel
  println("Current brightness level: $currentLevel")

  // Move to ~75% brightness (190 out of 254) and turn on the light if it is off
  if (levelControl.supports(LevelControl.Command.MoveToLevelWithOnOff)) {
    levelControl.moveToLevelWithOnOff(
      level = 190u,
      transitionTime = 10u,
      optionsMask = LevelControlTrait.OptionsBitmap(),
      optionsOverride = LevelControlTrait.OptionsBitmap()
    )
  }
}

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

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

ColorControl বৈশিষ্ট্যটি ColorTemperatureLightDevice এবং ExtendedColorLightDevice, দুটিতেই উপলভ্য।

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

val colorControlTrait =
  colorTempLightDevice.standardTraits.colorControl ?: 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)
val currentMireds = colorControlTrait.colorTemperatureMireds
val minMireds = colorControlTrait.colorTempPhysicalMinMireds ?: 153u // ~6500K (coolest)
val maxMireds = colorControlTrait.colorTempPhysicalMaxMireds ?: 500u // 2000K (warmest)
// Clamp target (370 mireds ≈ 2700K) to the device's physical bounds
val targetMireds = 370u.toUShort().coerceIn(minMireds, maxMireds)
if (
  colorControlTrait.supports(
    ColorControl.Command.MoveToColorTemperature
  )
) {
  colorControlTrait.moveToColorTemperature(
    colorTemperatureMireds = targetMireds,
    transitionTime = 20u, // 2.0 seconds (in 0.1s units)
    optionsMask = ColorControlTrait.OptionsBitmap(),
    optionsOverride = ColorControlTrait.OptionsBitmap()
  )
}

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

val colorControlTrait =
  extendedColorLightDevice.standardTraits.colorControl ?: 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.supports(ColorControl.Command.MoveToColor)) {
  colorControlTrait.moveToColor(
    colorX = 20493u,
    colorY = 21561u,
    transitionTime = 10u, // 1.0 second (in 0.1s units)
    optionsMask = ColorControlTrait.OptionsBitmap(),
    optionsOverride = ColorControlTrait.OptionsBitmap()
  )
}
val currentX = colorControlTrait.currentX
val currentY = colorControlTrait.currentY
// 2. Move to 16-bit Enhanced Hue (0..65534) and 8-bit Saturation (0..254)
if (
  colorControlTrait.supports(
    ColorControl.Command.EnhancedMoveToHueAndSaturation
  )
) {
  colorControlTrait.enhancedMoveToHueAndSaturation(
    enhancedHue = 43690u, // ~240° (Blue) on the 0..65534 scale
    saturation = 254u,    // Full saturation
    transitionTime = 15u, // 1.5 seconds (in 0.1s units)
    optionsMask = ColorControlTrait.OptionsBitmap(),
    optionsOverride = ColorControlTrait.OptionsBitmap()
  )
}
// 3. Start a hardware color loop across the device's hue range
if (colorControlTrait.supports(ColorControl.Command.ColorLoopSet)) {
  colorControlTrait.colorLoopSet(
    updateFlags =
      ColorControlTrait.UpdateFlagsBitmap(
        updateAction = true,
        updateDirection = true,
        updateTime = true,
        updateStartHue = true
      ),
    action =
      ColorControlTrait.ColorLoopActionEnum
        .ActivateFromColorLoopStartEnhancedHue,
    direction = ColorControlTrait.ColorLoopDirectionEnum.Increment,
    time = 30u, // 30 seconds per full cycle
    startHue = 0u,
    optionsMask = ColorControlTrait.OptionsBitmap(),
    optionsOverride = ColorControlTrait.OptionsBitmap()
  )
}

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

val extendedColorControlTrait =
  extendedColorLightDevice.googleTraits.extendedColorControl ?: return
// 1. Set color by name
if (
  extendedColorControlTrait.supports(
    ExtendedColorControl.Command.MoveToColorName
  )
) {
  extendedColorControlTrait.moveToColorName(colorName = "Lavender")
}
val currentColorName = extendedColorControlTrait.currentName
// 2. Set color using 8-bit RGB values (0..255 per channel)
// Automatically coordinates brightness (LevelControl) and color (ColorControl)
if (
  extendedColorControlTrait.supports(
    ExtendedColorControl.Command.MoveToColorRgb
  )
) {
  extendedColorControlTrait.moveToColorRgb(
    red = 255u,
    green = 128u,
    blue = 0u
  )
}
val currentRed = extendedColorControlTrait.currentRed
val currentGreen = extendedColorControlTrait.currentGreen
val currentBlue = extendedColorControlTrait.currentBlue
// 3. Set color and brightness together using floating-point HSV
// hue: 0.0f..360.0f, saturation: 0.0f..1.0f, value (brightness): 0.0f..1.0f
if (
  extendedColorControlTrait.supports(
    ExtendedColorControl.Command.MoveToColorHsv
  )
) {
  extendedColorControlTrait.moveToColorHsv(
    hue = 210.0f,
    saturation = 0.85f,
    value = 0.75f
  )
}
val currentHue = extendedColorControlTrait.currentHue
val currentSaturation = extendedColorControlTrait.currentSaturation
val currentValue = extendedColorControlTrait.currentValue

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

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

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

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

ফিল্ড বিবরণ
curvePointsList আলাদা আলাদা সময় সহ অন্তত দুটি 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 উল্লেখ করুন।
daysOfWeekList সপ্তাহের যে দিনগুলিতে লাইটিং কার্ভ চলে (DayOfWeek)। তালিকাটি খালি থাকলে, লাইটিং কার্ভ প্রতিদিন চলে।
adaptive ঐচ্ছিক বুলিয়ান যা নির্দেশ করে যে লাইটিং কার্ভটি অ্যাডাপ্টিভ কিনা, যার অর্থ হল শিডিউল করা উইন্ডো চলাকালীন চালু করা হলে একটি টার্গেট লাইট অ্যাক্টিভ কার্ভ লেভেল আবার শুরু করে। false চালু থাকলে, লাইটে ম্যানুয়াল পরিবর্তন করা হলে, দিনের বাকি সময়ের জন্য লাইটিং কার্ভ থেকে লাইট ডিসএনগেজ হয়ে যায়। true-এর ক্ষেত্রে, শিডিউল উইন্ডো চলাকালীন কোনও আলো বন্ধ করে আবার চালু করা হলে, সেটি লাইটিং কার্ভের সাথে আবার যুক্ত হয়, যার ফলে এটি কার্ভের বর্তমান উজ্জ্বলতা এবং কালার টেম্পারেচারের সাথে মানানসই হয় এবং সেখান থেকে কার্ভ অনুসরণ করে।
enabled ঐচ্ছিক বুলিয়ান যা নির্দেশ করে যে লাইটিং কার্ভ সেটিং সক্রিয় আছে কিনা। নতুন সেটিং তৈরি করার সময় ডিফল্ট হিসেবে true সেট করা হয়। আপডেট কমান্ড থেকে enabled বাদ দেওয়া হলে, enabled-এর স্ট্যাটাস পরিবর্তন হয় না।

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

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

suspend fun readLightingCurves(structure: Structure) {
  val lightingCurve = structure.trait(LightingCurve).firstOrNull() ?: return

  for (setting in lightingCurve.lightingCurveSettingsList) {
    val settingId = setting.settingId
    val config = setting.config
    println("Setting ID: $settingId, enabled: ${config?.enabled}")
    config?.curvePointsList?.forEach { point ->
      println(
        "  Time: ${point.time?.hours}:${point.time?.minutes}, " +
          "Brightness: ${point.brightnessPercent}%, " +
          "ColorTemp: ${point.colorTemperature}K"
      )
    }
  }
}

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

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

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

suspend fun createRoomLightingCurve(
  structure: Structure,
  targetRoomId: String
): String? {
  val lightingCurve = structure.trait(LightingCurve).firstOrNull() ?: return null

  val curvePoints = listOf(
    LightingCurveTrait.CurvePoint(
      time = LightingCurveTrait.CurveTimeOfDay(hours = 7, minutes = 0),
      brightnessPercent = 30,
      colorTemperature = 2700
    ),
    LightingCurveTrait.CurvePoint(
      time = LightingCurveTrait.CurveTimeOfDay(hours = 9, minutes = 0),
      brightnessPercent = 80,
      colorTemperature = 4000
    ),
    LightingCurveTrait.CurvePoint(
      time = LightingCurveTrait.CurveTimeOfDay(hours = 21, minutes = 0),
      brightnessPercent = 20,
      colorTemperature = 2200
    )
  )

  val config = LightingCurveTrait.LightingCurveConfig(
    curvePointsList = curvePoints,
    roomId = targetRoomId,
    daysOfWeekList = listOf(
      DayOfWeek.MONDAY,
      DayOfWeek.TUESDAY,
      DayOfWeek.WEDNESDAY,
      DayOfWeek.THURSDAY,
      DayOfWeek.FRIDAY
    ),
    adaptive = true,
    enabled = true
  )

  // Returns the newly created settingId
  return lightingCurve.createLightingCurveSetting(config = config)
}

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

val targetDevices = LightingCurveTrait.TargetDevices(
  devicesList = listOf(
    LightingCurveTrait.TargetDevice(
      id = dimmableLight.id.id,
      type = DimmableLightDevice.TYPE_ID
    )
  )
)

val deviceCurveConfig = LightingCurveTrait.LightingCurveConfig(
  curvePointsList = curvePoints,
  devices = targetDevices,
  daysOfWeekList = listOf(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY),
  adaptive = true,
  enabled = true
)

val settingId = lightingCurve.createLightingCurveSetting(
  config = deviceCurveConfig
)

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

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

suspend fun updateLightingCurve(
  structure: Structure,
  settingId: String,
  updatedConfig: LightingCurveTrait.LightingCurveConfig
) {
  val lightingCurve = structure.trait(LightingCurve).firstOrNull() ?: return

  lightingCurve.updateLightingCurveSetting(
    settingId = settingId,
    config = updatedConfig
  )
}

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

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

suspend fun deleteLightingCurve(
  structure: Structure,
  settingId: String
) {
  val lightingCurve = structure.trait(LightingCurve).firstOrNull() ?: return

  lightingCurve.deleteLightingCurveSetting(settingId = settingId)
}