लाइट डिवाइस, फ़िक्सचर की पहचान करने, पावर स्टेट को टॉगल करने, और चमक के लेवल को अडजस्ट करने के लिए, स्टैंडर्ड Matter ट्रेट का इस्तेमाल करते हैं.
सबसे बुनियादी लाइट डिवाइस टाइप
OnOffLight
है. इसे
OnOff और
Identify ट्रेट
के साथ लागू किया जाता है. साथ ही, इसमें
LevelControl
ट्रेट और
LightEffects
ट्रेट का इस्तेमाल किया जा सकता है.
अन्य तरह की लाइटें, अतिरिक्त सुविधाएं देती हैं और उन्हें अलग-अलग ट्रेट के साथ लागू किया जाता है:
| Home APIs के लिए डिवाइस टाइप | Traits | Kotlin सैंपल के तौर पर मिला ऐप्लिकेशन | इस्तेमाल का उदाहरण |
|---|---|---|---|
|
कलर टेंपरेचर लाइट
रोशनी देने वाला ऐसा डिवाइस जिसे चालू या बंद किया जा सकता है. साथ ही, इसकी रोशनी की इंटेंसिटी और कलर टेंपरेचर को अडजस्ट किया जा सकता है. |
ज़रूरी Traits matter Identify matter OnOff matter LevelControl matter ColorControl |
चालू और बंद करना, रोशनी |
हल्की |
|
Dimmable Light
यह एक ऐसा लाइटिंग डिवाइस है जिसे चालू या बंद किया जा सकता है. साथ ही, इसकी रोशनी की इंटेंसिटी को अडजस्ट किया जा सकता है. इसके अलावा, इसे होम में लोगों की मौजूदगी का पता लगाने वाले सेंसर की मदद से चालू या बंद किया जा सकता है. |
ज़रूरी विशेषताएं matter Identify matter OnOff matter LevelControl |
चालू और बंद करना, रोशनी |
हल्की |
|
एक्सटेंडेड कलर लाइट
रोशनी देने वाला ऐसा डिवाइस जिसे चालू या बंद किया जा सकता है. साथ ही, इसकी रोशनी की तीव्रता और कलर टेंपरेचर को अडजस्ट किया जा सकता है. इसके अलावा, इसे होम में लोगों की मौजूदगी का पता लगाने वाले सेंसर की मदद से चालू या बंद किया जा सकता है. |
ज़रूरी Traits matter Identify matter OnOff matter LevelControl matter ColorControl |
चालू और बंद करना, रोशनी |
हल्की |
|
लाइट चालू/बंद करना
रोशनी करने वाला ऐसा डिवाइस जिसे चालू या बंद किया जा सकता है. |
ज़रूरी एट्रिब्यूट matter Identify matter OnOff |
चालू और बंद करना, रोशनी |
हल्की |
किसी भी सुविधा का इस्तेमाल करने या एट्रिब्यूट को अपडेट करने से पहले, हमेशा यह देख लें कि डिवाइस के लिए एट्रिब्यूट और निर्देश काम करते हैं या नहीं. ज़्यादा जानकारी के लिए, 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 ट्रेट ज़रूरी है.
आइटम की पहचान करने की स्थिति शुरू करने के लिए, identify कमांड को कॉल करें. साथ ही, सेकंड में identifyTime अवधि सेट करें. 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 के स्टैंडर्ड ट्रेट अब भी ऑनलाइन हो सकते हैं. हालांकि, क्लाउड-आधारित ट्रेट ऑफ़लाइन होंगे.
डिवाइस का आईपी पता पाना
डिवाइस का आईपी पता ढूंढने के लिए, 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 ट्रेट का इस्तेमाल करते हैं.
लाइट चालू या बंद करना
OnOff
ट्रेट का इस्तेमाल करके, OnOffLight या DimmableLight के मौजूदा पावर स्टेट को जानें और लाइट को चालू या बंद करें.
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 के लिए यह ज़रूरी नहीं है. इस trait का इस्तेमाल करके, लाइट की चमक के लेवल को पढ़ा और कंट्रोल किया जा सकता है.
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(), )
नीचे दिए गए उदाहरण में, चमक के मौजूदा लेवल को पढ़ा जाता है. साथ ही, moveToLevelWithOnOff() का इस्तेमाल करके, डिम की जा सकने वाली लाइट को 75% चमक (190u) पर सेट किया जाता है. इसके लिए, एक सेकंड (10u सेकंड का दसवां हिस्सा) का ट्रांज़िशन इस्तेमाल किया जाता है:
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, दोनों पर उपलब्ध है.
इस trait की मदद से, कलर टेंपरेचर को माइक्रो-रेसिप्रोकल डिग्री या मायर्ड में अडजस्ट किया जा सकता है.
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 क्रोमैटिसिटी कोऑर्डिनेट और 16-बिट ह्यू और सैचुरेशन वैल्यू का इस्तेमाल करके भी रंग सेट किया जा सकता है.
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 की एक वैकल्पिक विशेषता है. इससे रंग को कंट्रोल करना आसान हो जाता है. इसके लिए, रंगों के नाम, आरजीबी वैल्यू या यूनिफ़ाइड फ़्लोटिंग-पॉइंट एचएसवी वैल्यू को स्वीकार किया जाता है. ये वैल्यू, रंग और चमक को एक ही यूनिट में जोड़ती हैं.
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 (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 में से कोई एक डालें. |
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 एंट्री वाला LightingCurveConfig बनाएं. साथ ही, टारगेट लाइट (roomId या devices से तय की गई) और हफ़्ते के चालू दिन तय करें. इसके बाद, कॉन्फ़िगरेशन को createLightingCurveSetting() में पास करें. कमांड, नई लाइटिंग कर्व सेटिंग को असाइन किया गया यूनीक settingId दिखाता है.
नीचे दिए गए उदाहरण में, किसी कमरे के लिए हफ़्ते के दिनों में रोशनी के कर्व को बनाया गया है. यह सुबह 7:00 बजे 2,700K की वॉर्म लाइट पर 30% ब्राइटनेस से शुरू होती है और सुबह 9:00 बजे 4,000K की कूलर लाइट पर 80% तक पहुंच जाती है. इसके बाद, रात 9:00 बजे तक 2,200K की वेरी वॉर्म लाइट पर 20% तक कम हो जाती है:
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
)
}
लाइटिंग कर्व की सेटिंग मिटाना
किसी होम से लाइटिंग कर्व की सेटिंग हटाने के लिए, deleteLightingCurveSetting() को कॉल करें. साथ ही, उस सेटिंग का settingId दें जिसे आपको मिटाना है.
suspend fun deleteLightingCurve(
structure: Structure,
settingId: String
) {
val lightingCurve = structure.trait(LightingCurve).firstOrNull() ?: return
lightingCurve.deleteLightingCurveSetting(settingId = settingId)
}