लाइट डिवाइस गाइड

लाइट डिवाइस, फ़िक्सचर की पहचान करने, पावर स्टेट को टॉगल करने, और चमक के लेवल को अडजस्ट करने के लिए, स्टैंडर्ड Matter ट्रेट का इस्तेमाल करते हैं.

सबसे बुनियादी लाइट डिवाइस टाइप OnOffLightDeviceType है. इसे OnOffTrait और IdentifyTrait ट्रेट के साथ लागू किया जाता है. साथ ही, इसमें LevelControlTrait ट्रेट और LightEffectsTrait ट्रेट का इस्तेमाल किया जा सकता है.

अन्य तरह की लाइटें, अतिरिक्त सुविधाएं देती हैं और उन्हें अलग-अलग ट्रेट के साथ लागू किया जाता है:

Home APIs के लिए डिवाइस टाइप Traits Swift सैंपल ऐप्लिकेशन इस्तेमाल का उदाहरण

कलर टेंपरेचर लाइट

ColorTemperatureLightDeviceType

home.matter.0000.types.010c

रोशनी देने वाला ऐसा डिवाइस जिसे चालू या बंद किया जा सकता है. साथ ही, इसकी रोशनी की इंटेंसिटी और कलर टेंपरेचर को अडजस्ट किया जा सकता है.

Required Traits
     matter IdentifyTrait
     matter OnOffTrait
     matter LevelControlTrait
     matter ColorControlTrait

Optional Traits
     google LightEffectsTrait
     google ExtendedColorControlTrait
हल्की

Dimmable Light

DimmableLightDeviceType

home.matter.0000.types.0101

यह एक ऐसा लाइटिंग डिवाइस है जिसे चालू या बंद किया जा सकता है. साथ ही, इसकी रोशनी की इंटेंसिटी को अडजस्ट किया जा सकता है. इसके अलावा, इसे होम में लोगों की मौजूदगी का पता लगाने वाले सेंसर की मदद से चालू या बंद किया जा सकता है.

ज़रूरी Traits
     matter IdentifyTrait
     matter OnOffTrait
     matter LevelControlTrait

वैकल्पिक ट्रेट
     google LightEffectsTrait
हल्की

एक्सटेंडेड कलर लाइट

ExtendedColorLightDeviceType

home.matter.0000.types.010d

रोशनी देने वाला ऐसा डिवाइस जिसे चालू या बंद किया जा सकता है. साथ ही, इसकी रोशनी की तीव्रता और कलर टेंपरेचर को अडजस्ट किया जा सकता है. इसके अलावा, इसे होम में लोगों की मौजूदगी का पता लगाने वाले सेंसर की मदद से चालू या बंद किया जा सकता है.

Required Traits
     matter IdentifyTrait
     matter OnOffTrait
     matter LevelControlTrait
     matter ColorControlTrait

Optional Traits
     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 ट्रेट ज़रूरी है.

आइटम की पहचान करने की स्थिति शुरू करने के लिए, identify कमांड को कॉल करें. साथ ही, सेकंड में identifyTime अवधि सेट करें. 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 के स्टैंडर्ड ट्रेट अब भी ऑनलाइन हो सकते हैं. हालांकि, क्लाउड-आधारित ट्रेट ऑफ़लाइन होंगे.

डिवाइस का आईपी पता पाना

डिवाइस का आईपी पता ढूंढने के लिए, 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 ट्रेट का इस्तेमाल करते हैं.

लाइट चालू या बंद करना

OnOffTrait ट्रेट का इस्तेमाल करके, OnOffLight या DimmableLight के मौजूदा पावर स्टेट को जानें और लाइट को चालू या बंद करें.

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 के लिए यह ज़रूरी नहीं है. इस trait का इस्तेमाल करके, लाइट की चमक के लेवल को पढ़ा और कंट्रोल किया जा सकता है.

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
}

नीचे दिए गए उदाहरण में, चमक के मौजूदा लेवल को पढ़ा जाता है. साथ ही, moveToLevelWithOnOff() का इस्तेमाल करके, डिम की जा सकने वाली लाइट को 75% चमक (190) पर सेट किया जाता है. इसके लिए, एक सेकंड (10 सेकंड का दसवां हिस्सा) का ट्रांज़िशन इस्तेमाल किया जाता है:

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, दोनों पर उपलब्ध है.

इस trait की मदद से, कलर टेंपरेचर को माइक्रो-रेसिप्रोकल डिग्री या मायर्ड में अडजस्ट किया जा सकता है.

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 क्रोमैटिसिटी कोऑर्डिनेट और 16-बिट ह्यू और सैचुरेशन वैल्यू का इस्तेमाल करके भी रंग सेट किया जा सकता है.

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 की एक वैकल्पिक विशेषता है. इससे रंग को कंट्रोल करना आसान हो जाता है. इसके लिए, रंगों के नाम, आरजीबी वैल्यू या यूनिफ़ाइड फ़्लोटिंग-पॉइंट एचएसवी वैल्यू को स्वीकार किया जाता है. ये वैल्यू, रंग और चमक को एक ही यूनिट में जोड़ती हैं.

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 (CurveTimeOfDay, जिसमें hours की वैल्यू 0 से 23 और minutes की वैल्यू 0 से 59 तक हो), 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 एंट्री वाला LightingCurveConfig बनाएं. साथ ही, टारगेट लाइट (roomId या devices से तय की गई) और हफ़्ते के चालू दिन तय करें. इसके बाद, कॉन्फ़िगरेशन को createLightingCurveSetting() में पास करें. कमांड, नई लाइटिंग कर्व सेटिंग को असाइन किया गया यूनीक settingId दिखाता है.

इस उदाहरण में, किसी कमरे के लिए हफ़्ते के दिनों में रोशनी का कर्व बनाया गया है. इसमें रोशनी की चमक सुबह 7:00 बजे 30% से बढ़कर सुबह 9:00 बजे 80% हो जाती है और रात 9:00 बजे 20% हो जाती है:

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
  )
}

लाइटिंग कर्व की सेटिंग मिटाना

किसी होम से लाइटिंग कर्व की सेटिंग हटाने के लिए, deleteLightingCurveSetting() को कॉल करें. साथ ही, उस सेटिंग का settingId दें जिसे आपको मिटाना है.

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)
}