מכשירי תאורה משתמשים בתכונות סטנדרטיות של Matter כדי לזהות גופי תאורה, להחליף בין מצבי הפעלה ולשנות את רמות הבהירות.
סוג המכשיר הבסיסי ביותר של תאורה הוא
OnOffLight
שמיושם עם התכונות
OnOff ו-
Identify
ותומך באופן אופציונלי בתכונה
LevelControl
ובתכונה
LightEffects.
סוגי תאורה אחרים מציעים יכולות נוספות ומוטמעים באמצעות תכונות שונות:
| סוג המכשיר ב-Home APIs | תכונות | אפליקציה לדוגמה ב-Kotlin | תרחיש לדוגמה |
|---|---|---|---|
|
טמפרטורת צבע בהירה
מכשיר תאורה שאפשר להדליק או לכבות, לכוונן את עוצמת האור שלו ולכוונן את טמפרטורת הצבע שלו. |
תכונות נדרשות matter זיהוי matter OnOff matter LevelControl matter ColorControl |
הפעלה וכיבוי, בהירות |
בהיר |
|
מנורה עם אפשרות עמעום
מכשיר תאורה שאפשר להדליק או לכבות, לכוון את עוצמת האור שלו ולהפעיל אותו באמצעות חיישן נוכחות מקושר. |
תכונות נדרשות matter זיהוי matter OnOff matter LevelControl |
הפעלה וכיבוי, בהירות |
בהיר |
|
תאורה עם מגוון צבעים רחב
מכשיר תאורה שאפשר להדליק או לכבות, לכוונן את עוצמת האור שלו, לכוונן את טמפרטורת הצבע שלו ולהפעיל אותו באמצעות חיישן נוכחות מקושר. |
תכונות נדרשות matter זיהוי 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, שאפשר להמיר למחרוזות IPv4 או IPv6 רגילות באמצעות מסגרת Network:
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() כדי להגדיר את הבהירות של נורה ניתנת לעמעום ל-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() ) } }
אפשר גם להגביר או להפחית את הבהירות ביחס לרמה הנוכחית, על ידי קריאה ל-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 וערכי גוון ורוויה של 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
היא תכונה אופציונלית של Google ב-
ExtendedColorLightDevice
שמפשטת את השליטה בצבע על ידי קבלת שמות צבעים, ערכי RGB או ערכי HSV מאוחדים של נקודה צפה (floating-point) שמשלבים צבע ובהירות ביחידה אחת.
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 שהוקצה להגדרה החדשה של עקומת התאורה.
בדוגמה הבאה נוצרת עקומת תאורה לחדר בימי חול. היא עולה מ-30% בהירות בגוון חם של 2,700K בשעה 7:00 ל-80% בגוון קר יותר של 4,000K בשעה 9:00, ואז מתעמעמת ל-20% בגוון חם מאוד של 2,200K עד השעה 21:00:
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)
}