دستگاههای روشنایی از ویژگیهای استاندارد Matter برای شناسایی تجهیزات، تغییر وضعیتهای برق، و تنظیم سطوح روشنایی استفاده میکنند.
ابتداییترین نوع دستگاه روشنایی
OnOffLight
است که با ویژگیهای
OnOff و
Identify پیادهسازی میشود
و بهطور اختیاری از ویژگیهای
LevelControl
و
LightEffects
پشتیبانی میکند.
انواع دیگر چراغها قابلیتهای بیشتری ارائه میدهند و با مشخصههای متفاوتی پیادهسازی میشوند:
| نوع دستگاه Home APIs | ویژگیها | برنامه نمونه Kotlin | مورد استفاده |
|---|---|---|---|
|
دمای رنگ روشن
دستگاه روشنایی که میتوان آن را روشن یا خاموش کرد، شدت نور آن را تنظیم کرد، و دمای رنگ آن را تنظیم کرد. |
ویژگیهای الزامی matter Identify matter OnOff matter LevelControl matter ColorControl |
روشن و خاموش، روشنایی |
سبک |
|
چراغ با نور قابلتنظیم
دستگاه روشنایی که میتوان آن را روشن یا خاموش کرد، شدت نور آن را تنظیم کرد، و بااستفاده از حسگر حضور در خانه محدودشده آن را روشن یا خاموش کرد. |
ویژگیهای الزامی matter Identify matter OnOff matter LevelControl |
روشن و خاموش، روشنایی |
سبک |
|
رنگ روشن گسترشیافته
دستگاه روشنایی که میتوان آن را روشن یا خاموش کرد، شدت نور آن را تنظیم کرد، دمای رنگ آن را تنظیم کرد، و بااستفاده از حسگر حضور در خانه محدودشده آن را روشن یا خاموش کرد. |
ویژگیهای الزامی matter Identify matter OnOff matter LevelControl matter ColorControl |
روشن و خاموش، روشنایی |
سبک |
|
روشن/خاموش کردن چراغ
دستگاه روشنایی که میتوان آن را روشن یا خاموش کرد. |
ویژگیهای الزامی matter شناسایی 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 بهدلیل مسیریابی محلی همچنان آنلاین باشند، اما ویژگیهای مبتنی بر ابر آفلاین خواهند بود.
دریافت نشانی IP دستگاه
برای پیدا کردن نشانی IP دستگاه، از مشخصه networkInterfaces
GeneralDiagnosticsTrait استفاده کنید.
نشانیها بهعنوان اشیاء 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 میتواند بهصورت اختیاری از آن پشتیبانی کند. از این مشخصه برای خواندن و
کنترل سطح روشنایی چراغ استفاده کنید.
مشخصه 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() برای تنظیم روشنایی چراغ کمنورشدنی روی ۷۵٪ (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() ) } }
همچنین میتوانید با فراخوانی stepWithOnOff() با StepModeEnum.Up یا StepModeEnum.Down و stepSize، روشنایی را نسبتبه سطح فعلی افزایش یا کاهش دهید.
رنگ کنترل
ویژگی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
یک ویژگی اختیاری Google در
ExtendedColorLightDevice
است که کنترل رنگ را با پذیرش نام رنگها، مقادیر 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 (CurveTimeOfDay با hours از 0 تا 23 و minutes از 0 تا 59)، یک brightnessPercent (0 تا 100)، و یک colorTemperature اختیاری در کلوین را مشخص میکند. اگر colorTemperature برای هر نقطهای مشخص شده باشد، باید برای همه نقاط مقدار مثبتی باشد. |
roomId |
شناسه اتاق هدف (برای مثال، room@{uuid}). منحنی نورپردازی را برای چراغهای سازگار با قابلیت تنظیم نور و دمای رنگ در آن اتاق اعمال میکند. roomId یا devices را مشخص کنید. |
devices |
یک شیء TargetDevices حاوی فهرستی از ورودیهای TargetDevice، هرکدام با یک دستگاه id و شناسه دستگاه type (مانند home.matter.0000.types.0101 برای DimmableLight یا home.matter.0000.types.010c برای ColorTemperatureLight). devices یا roomId را مشخص کنید. |
daysOfWeekList |
روزهای هفتهای که منحنی روشنایی اجرا میشود (DayOfWeek). اگر فهرست خالی باشد، منحنی روشنایی روزانه اجرا میشود. |
adaptive |
بولی اختیاری که نشان میدهد آیا منحنی روشنایی تطبیقی است یا نه، به این معنی که چراغ هدف وقتی درطول پنجره زمانبندیشده روشن میشود، سطح منحنی فعال را ازسر میگیرد. وقتی false، تغییر دستی چراغ باعث میشود چراغ برای بقیه روز از منحنی نورپردازی جدا شود. وقتی true، چراغی که درطول پنجره زمانبندی خاموش و سپس دوباره روشن میشود، چراغ را با منحنی روشنایی دوباره درگیر میکند و باعث میشود با روشنایی و دمای رنگ فعلی منحنی مطابقت داشته باشد و از آنجا منحنی را دنبال کند. |
enabled |
بولی اختیاری که نشان میدهد آیا تنظیم منحنی نورپردازی فعال است یا نه. هنگام ایجاد تنظیم جدید، بهطور پیشفرض روی true تنظیم میشود. وقتی enabled از فرمان بهروزرسانی حذف شود، وضعیت enabled تغییر نمیکند. |
خواندن تنظیمات منحنی نورپردازی
برای بررسی منحنیهای روشنایی پیکربندیشده برای یک سازه، مشخصه
LightingCurve
را از Structure بازیابی کنید و ویژگی
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"
)
}
}
}
ایجاد تنظیم منحنی نورپردازی
برای ایجاد زمانبندی منحنی روشنایی جدید در ساختار،
LightingCurveConfig را با حداقل دو ورودی CurvePoint، چراغهای هدف
(مشخصشده با roomId یا devices)، و روزهای فعال هفته بسازید. سپس
پیکربندی را به createLightingCurveSetting() منتقل کنید. فرمان، settingId منحصربهفرد اختصاصدادهشده به تنظیم منحنی نورپردازی جدید را برمیگرداند.
مثال زیر یک منحنی روشنایی روزهای هفته را برای اتاق ایجاد میکند. این روال از روشنایی ۳۰٪ با دمای گرم ۲۷۰۰ کلوین در ساعت ۷:۰۰ صبح به ۸۰٪ با دمای سردتر ۴۰۰۰ کلوین در ساعت ۹:۰۰ صبح میرسد، سپس تا ساعت ۹:۰۰ شب به ۲۰٪ با دمای بسیار گرم ۲۲۰۰ کلوین کاهش مییابد:
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)
}
برای هدفیابی دستگاههای روشنایی خاص بهجای کل اتاق،
پارامتر devices را بااستفاده از LightingCurveTrait.TargetDevices ارائه دهید:
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
)
بهروزرسانی تنظیم منحنی نورپردازی
برای اصلاح منحنی روشنایی موجود (مثلاً تغییر دادن نقاط منحنی آن،
بهروزرسانی روزهای فعال هفته، یا فعال و غیرفعال کردن
برنامه زمانی)، updateLightingCurveSetting() را با settingId هدف و
LightingCurveConfig بهروزشده فراخوانی کنید.
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)
}