Perangkat lampu menggunakan karakteristik Matter standar untuk mengidentifikasi perabot, mengalihkan status daya, dan menyesuaikan tingkat kecerahan.
Jenis perangkat lampu paling dasar adalah
OnOffLight
yang diimplementasikan dengan trait
OnOff dan
Identify
serta secara opsional mendukung trait
LevelControl
dan trait
LightEffects.
Jenis lampu lainnya menawarkan kemampuan tambahan dan diimplementasikan dengan ciri yang berbeda:
| Jenis Perangkat Home API | Sifat | Aplikasi Contoh Kotlin | Kasus Penggunaan |
|---|---|---|---|
|
Lampu Suhu Warna
Perangkat pencahayaan yang dapat dinyalakan atau dimatikan, intensitas cahayanya disesuaikan, dan suhu warnanya disesuaikan. |
Karakteristik yang Diperlukan matter Identify matter OnOff matter LevelControl matter ColorControl |
nyala dan mati, kecerahan |
Terang |
|
Lampu yang Dapat Diredupkan
Perangkat pencahayaan yang dapat dinyalakan atau dimatikan, intensitas cahayanya disesuaikan, dan dinyalakan atau dimatikan melalui sensor kehadiran yang terikat. |
Karakteristik yang Diperlukan matter Identify matter OnOff matter LevelControl |
nyala dan mati, kecerahan |
Terang |
|
Lampu Warna yang Diperluas
Perangkat pencahayaan yang dapat dinyalakan atau dimatikan, intensitas cahayanya disesuaikan, suhu warnanya disesuaikan, dan dinyalakan/dimatikan melalui sensor kehadiran yang terikat. |
Karakteristik yang Diperlukan matter Identify matter OnOff matter LevelControl matter ColorControl |
nyala dan mati, kecerahan |
Terang |
|
Lampu On/Off
Perangkat pencahayaan yang dapat dinyalakan atau dimatikan. |
Karakteristik yang Diperlukan matter Identify matter OnOff |
nyala dan mati, kecerahan |
Terang |
Selalu periksa dukungan atribut dan perintah untuk perangkat sebelum menggunakan fitur apa pun atau mencoba memperbarui atribut. Lihat Mengontrol perangkat di Android untuk mengetahui informasi selengkapnya.
Prasyarat
Sebelum menggunakan perangkat pencahayaan dan kurva pencahayaan, pastikan aplikasi Anda menginisialisasi Home SDK dan menyertakan impor yang diperlukan:
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
Menemukan perangkat lampu
Untuk menemukan perangkat pencahayaan dalam struktur, filter daftar perangkat berdasarkan jenis perangkat,
seperti
OnOffLightDevice
dan
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()
Anda juga dapat mengambil semua perangkat pencahayaan di beberapa jenis perangkat lampu dalam satu filter:
// 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) } }
Mendapatkan informasi dasar tentang perangkat
Diimplementasikan di Aplikasi Contoh untuk Android
Karakteristik BasicInformation
mencakup informasi seperti nama vendor, ID vendor, ID produk,
nama produk (termasuk informasi model), dan versi software untuk perangkat:
// 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}") }
Mengidentifikasi perangkat pencahayaan
Jika sebuah ruangan berisi beberapa lampu, Anda dapat membantu pengguna menemukan perlengkapan fisik tertentu dengan memicu status identifikasi visual, seperti mengedipkan lampu selama beberapa detik. Keempat jenis perangkat lampu memerlukan
ciri Identify.
Panggil perintah identify dengan durasi identifyTime dalam detik untuk memulai
status identifikasi. Meneruskan 0 akan segera menghentikan status identifikasi. Anda juga dapat memanggil triggerEffect untuk menjalankan efek visual tertentu,
seperti Blink atau 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
)
}
}
Memeriksa konektivitas perangkat pencahayaan
Konektivitas untuk perangkat sebenarnya diperiksa di tingkat jenis perangkat karena beberapa perangkat mendukung beberapa jenis perangkat. Status yang ditampilkan adalah kombinasi status konektivitas untuk semua karakteristik di perangkat tersebut.
let lightConnectivity = dimmableLightDeviceType.metadata.sourceConnectivity .connectivityState
Status partiallyOnline dapat diamati dalam kasus jenis perangkat campuran
saat tidak ada konektivitas internet. Karakteristik standar Matter
mungkin masih online karena perutean lokal, tetapi karakteristik berbasis cloud akan
offline.
Mendapatkan alamat IP perangkat
Untuk menemukan alamat IP perangkat, gunakan atribut networkInterfaces dari
GeneralDiagnosticsTrait.
Alamat ditampilkan sebagai objek Data, yang dapat Anda format ke string IPv4 atau IPv6 standar menggunakan framework 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
}
Mengontrol perangkat pencahayaan
Jenis perangkat OnOffLight dan DimmableLight menggunakan karakteristik
Matter standar untuk mengidentifikasi perlengkapan, mengalihkan status daya,
dan menyesuaikan tingkat kecerahan.
Menyalakan atau mematikan lampu
Gunakan karakteristik
OnOff
untuk membaca status daya saat ini dari OnOffLight atau DimmableLight dan
untuk menyalakan atau mematikan lampu.
Sebelum membaca atribut onOff, pastikan perangkat mendukungnya. Beberapa
perangkat beroperasi sebagai endpoint khusus perintah dan tidak melaporkan status.
// 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!") }
Jika onOff adalah true, lampu akan menyala. Jika onOff adalah false, lampu akan
mati.
Untuk mengubah status daya lampu, pastikan karakteristik mendukung
perintah yang diinginkan, lalu panggil on(), off(), atau 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 }
Anda juga dapat memanggil on() dan off() secara langsung untuk menetapkan status eksplisit:
onOffTrait.off() onOffTrait.on()
Untuk mematikan lampu dengan transisi visual bertahap, panggil offWithEffect()
dan tentukan nilai EffectIdentifierEnum:
// Turn off the light using the DyingLight effect. onOffTrait.offWithEffect( effectIdentifier = OnOffTrait.EffectIdentifierEnum.DyingLight, effectVariant = 0u, )
Atur tingkat kecerahan
DimmableLight memerlukan
trait LevelControl, dan OnOffLight dapat mendukungnya secara opsional. Gunakan karakteristik ini untuk membaca dan
mengontrol tingkat kecerahan lampu.
Atribut currentLevel melaporkan tingkat kecerahan saat ini dalam skala
dari 0 hingga 254. Anda juga dapat memeriksa minLevel dan maxLevel untuk menentukan
rentang kecerahan valid yang didukung oleh hardware.
Untuk menyetel kecerahan ke nilai tertentu, panggil moveToLevel(). Perhatikan bahwa
moveToLevel() hanya mengubah level saat ini jika lampu sudah menyala,
kecuali jika Anda mengonfigurasi optionsOverride dengan executeIfOff. Untuk otomatis
menyalakan lampu saat menyetel tingkat kecerahan bukan nol (atau mematikannya saat
menyetel tingkat ke minimum), gunakan moveToLevelWithOnOff().
// Change the brightness of the light to 50% levelControlTrait.moveToLevel( level = 127u.toUByte(), transitionTime = null, optionsMask = LevelControlTrait.OptionsBitmap(), optionsOverride = LevelControlTrait.OptionsBitmap(), )
Contoh berikut membaca tingkat kecerahan saat ini dan menggunakan
moveToLevelWithOnOff() untuk menyetel lampu yang dapat diredupkan ke kecerahan 75% (190u) selama
transisi 1 detik (10u persepuluh detik):
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() ) } }
Anda juga dapat menambah atau mengurangi kecerahan secara relatif terhadap tingkat saat ini dengan
memanggil stepWithOnOff() dengan StepModeEnum.Up atau StepModeEnum.Down dan
stepSize.
Warna kontrol
SifatColorControl
tersedia di
ColorTemperatureLightDevice
dan
ExtendedColorLightDevice.
Sifat ini memungkinkan Anda menyesuaikan suhu warna dalam derajat mikro-timbal balik atau mired.
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() ) }
Anda juga dapat menetapkan warna menggunakan koordinat kromatisitas CIE 1931 serta nilai hue dan saturasi 16-bit.
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
adalah karakteristik Google opsional di
ExtendedColorLightDevice
yang menyederhanakan kontrol warna dengan menerima nama warna, nilai RGB, atau nilai HSV
floating point terpadu yang menggabungkan warna dan kecerahan dalam satu unit.
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
Mengelola kurva pencahayaan
Kurva pencahayaan menentukan jadwal otomatis yang mentransisikan kecerahan dan suhu warna opsional lampu target dengan lancar sepanjang hari. Misalnya, kurva pencahayaan dapat meningkatkan kecerahan lampu secara bertahap di pagi hari dan meredupkannya ke nuansa yang lebih hangat di malam hari. Jenis perangkat lampu yang hanya mendukung kecerahan, seperti Lampu yang Dapat Diredupkan, mengikuti kurva kecerahan dan mengabaikan suhu warna.
Karakteristik
LightingCurve
adalah karakteristik Google Home platform
tingkat struktur. Anda mengaksesnya
dari instance Structure,
bukan dari perangkat pencahayaan individual.
Setiap jadwal pada karakteristik diwakili oleh LightingCurveSetting, yang
menyandingkan settingId unik dengan LightingCurveConfig. Tabel berikut
menjelaskan kolom konfigurasi LightingCurveConfig:
| Kolom | Deskripsi |
|---|---|
curvePointsList |
Urutan minimal dua item CurvePoint dengan waktu yang berbeda. Setiap titik menentukan time (CurveTimeOfDay dengan hours dari 0 hingga 23 dan minutes dari 0 hingga 59), brightnessPercent (0 hingga 100), dan colorTemperature opsional dalam Kelvin. Jika colorTemperature ditentukan untuk titik mana pun, nilainya harus positif untuk semua titik. |
roomId |
ID ruangan target (misalnya, room@{uuid}). Menerapkan kurva pencahayaan ke lampu yang kompatibel dengan fitur peredupan dan suhu warna di ruangan tersebut. Tentukan roomId atau devices. |
devices |
Objek TargetDevices yang berisi daftar entri TargetDevice, masing-masing dengan id perangkat dan ID type perangkat (seperti home.matter.0000.types.0101 untuk DimmableLight atau home.matter.0000.types.010c untuk ColorTemperatureLight). Tentukan devices atau roomId. |
daysOfWeekList |
Hari dalam seminggu saat kurva pencahayaan berjalan (DayOfWeek). Jika daftar kosong, kurva pencahayaan akan berjalan setiap hari. |
adaptive |
Boolean opsional yang menunjukkan apakah kurva pencahayaan bersifat adaptif, yang berarti lampu target melanjutkan tingkat kurva aktif saat dinyalakan selama periode penjadwalan. Jika false, perubahan manual pada lampu akan melepaskan lampu dari kurva pencahayaan selama sisa hari itu. Jika true, lampu yang dimatikan lalu dinyalakan kembali selama periode penjadwalan akan mengaktifkan kembali lampu dengan kurva pencahayaan, sehingga lampu akan menyesuaikan dengan kecerahan dan color temperature kurva saat ini, dan mengikuti kurva dari sana. |
enabled |
Boolean opsional yang menunjukkan apakah setelan kurva pencahayaan aktif. Setelan defaultnya adalah true saat membuat setelan baru. Jika enabled dihilangkan dari perintah update, status enabled tidak akan berubah. |
Membaca setelan kurva pencahayaan
Untuk memeriksa kurva pencahayaan yang dikonfigurasi untuk struktur, ambil karakteristik
LightingCurve
dari Structure dan baca atribut
lightingCurveSettingsList-nya.
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"
)
}
}
}
Membuat setelan kurva pencahayaan
Untuk membuat jadwal kurva pencahayaan baru pada struktur, buat
LightingCurveConfig dengan setidaknya dua entri CurvePoint, lampu target
(ditentukan oleh roomId atau devices), dan hari aktif dalam seminggu. Kemudian, teruskan konfigurasi ke createLightingCurveSetting(). Perintah ini menampilkan
settingId unik yang ditetapkan ke setelan kurva pencahayaan baru.
Contoh berikut membuat kurva pencahayaan hari kerja untuk sebuah ruangan. Kecerahan akan meningkat dari 30% pada suhu hangat 2.700 K pukul 07.00 menjadi 80% pada suhu lebih dingin 4.000 K pukul 09.00, lalu meredup menjadi 20% pada suhu sangat hangat 2.200 K pukul 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)
}
Untuk menargetkan perangkat pencahayaan tertentu, bukan seluruh ruangan, berikan parameter devices menggunakan 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
)
Memperbarui setelan kurva pencahayaan
Untuk mengubah kurva pencahayaan yang ada—seperti mengubah titik kurvanya,
memperbarui hari aktif dalam seminggu, atau mengaktifkan dan menonaktifkan
jadwal—panggil updateLightingCurveSetting() dengan settingId target dan
LightingCurveConfig yang diperbarui.
suspend fun updateLightingCurve(
structure: Structure,
settingId: String,
updatedConfig: LightingCurveTrait.LightingCurveConfig
) {
val lightingCurve = structure.trait(LightingCurve).firstOrNull() ?: return
lightingCurve.updateLightingCurveSetting(
settingId = settingId,
config = updatedConfig
)
}
Menghapus setelan kurva pencahayaan
Untuk menghapus setelan kurva pencahayaan dari struktur, panggil
deleteLightingCurveSetting() dengan settingId setelan yang ingin Anda
hapus.
suspend fun deleteLightingCurve(
structure: Structure,
settingId: String
) {
val lightingCurve = structure.trait(LightingCurve).firstOrNull() ?: return
lightingCurve.deleteLightingCurveSetting(settingId = settingId)
}