Leuchten verwenden standardmäßige Matter-Attribute, um Leuchten zu identifizieren, den Ein-/Aus-Zustand umzuschalten und die Helligkeit anzupassen.
Der einfachste Gerätetyp für Lampen ist OnOffLightDeviceType, der mit den Attributen OnOffTrait und IdentifyTrait implementiert wird und optional die Attribute LevelControlTrait und LightEffectsTrait unterstützt.
Andere Lampentypen bieten zusätzliche Funktionen und werden mit anderen Attributen implementiert:
| Gerätetyp für Home APIs | Merkmale | Swift-Beispiel-App | Anwendungsfall |
|---|---|---|---|
|
Farbtemperaturlicht
Ein Beleuchtungsgerät, das ein- oder ausgeschaltet werden kann und dessen Lichtintensität und Farbtemperatur angepasst werden können. |
Erforderliche Merkmale matter IdentifyTrait matter OnOffTrait matter LevelControlTrait matter ColorControlTrait |
Leicht | |
|
Dimmbare Lampe
Ein Beleuchtungsgerät, das ein- oder ausgeschaltet werden kann, dessen Lichtintensität angepasst werden kann und das über einen verknüpften Anwesenheitssensor geschaltet werden kann. |
Erforderliche Traits matter IdentifyTrait matter OnOffTrait matter LevelControlTrait |
Leicht | |
|
Erweiterte Farblichtquelle
Ein Beleuchtungsgerät, das ein- oder ausgeschaltet werden kann, dessen Lichtintensität und Farbtemperatur angepasst werden können und das über einen gebundenen Anwesenheitssensor geschaltet werden kann. |
Erforderliche Merkmale matter IdentifyTrait matter OnOffTrait matter LevelControlTrait matter ColorControlTrait |
Leicht | |
|
Licht ein/aus
Ein Beleuchtungsgerät, das ein- oder ausgeschaltet werden kann. |
Erforderliche Attribute matter IdentifyTrait matter OnOffTrait |
Leicht |
Prüfe immer, ob ein Gerät die Attribute und Befehle unterstützt, bevor du Funktionen verwendest oder versuchst, Attribute zu aktualisieren. Weitere Informationen findest du unter Geräte aufiOSsteuern.
Vorbereitung
Bevor du mit Beleuchtungsgeräten und Beleuchtungskurven arbeitest, musst du dafür sorgen, dass deine App das Home SDK initialisiert und die erforderlichen Importe enthält:
import Foundation import GoogleHomeSDK import GoogleHomeTypes import Network
Leuchten finden
Wenn du Beleuchtungsgeräte in einem Gebäude finden möchtest, filtere die Geräteliste nach Gerätetyp, z. B. OnOffLightDeviceType und 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)
Du kannst auch alle Beleuchtungsgeräte über mehrere Beleuchtungsgerätetypen hinweg in einem einzigen Filter abrufen:
// 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) }
Grundlegende Informationen zu einem Gerät abrufen
In der Beispiel-App für iOS implementiert
Das Attribut BasicInformation enthält Informationen wie den Namen des Anbieters, die Anbieter-ID, die Produkt-ID, den Produktnamen (einschließlich Modellinformationen) und die Softwareversion für ein Gerät:
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!
Beleuchtungsgerät identifizieren
Wenn ein Raum mehrere Lampen enthält, kannst du Nutzern helfen, eine bestimmte physische Leuchte zu finden, indem du einen visuellen Identifikationsstatus auslöst, z. B. indem du die Lampe einige Sekunden lang blinken lässt. Alle vier Gerätetypen für Lampen erfordern das Attribut Matter.IdentifyTrait.
Rufen Sie den Befehl identify mit einer identifyTime-Dauer in Sekunden auf, um den Identifikationsstatus zu starten. Wenn Sie 0 übergeben, wird der Identifikationsstatus sofort beendet. Sie können auch triggerEffect aufrufen, um einen bestimmten visuellen Effekt auszuführen, z. B. Blink oder 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
)
}
}
Verbindung eines Beleuchtungsgeräts prüfen
Die Konnektivität eines Geräts wird auf der Ebene des Gerätetyps geprüft, da einige Geräte mehrere Gerätetypen unterstützen. Der zurückgegebene Status ist eine Kombination der Verbindungsstatus aller Attribute auf diesem Gerät.
let lightConnectivity = dimmableLightDeviceType.metadata.sourceConnectivity .connectivityState
Der Status partiallyOnline kann bei gemischten Gerätetypen auftreten, wenn keine Internetverbindung besteht. Matter-Standard-Traits sind aufgrund des lokalen Routings möglicherweise noch online, cloudbasierte Traits sind jedoch offline.
IP-Adresse des Geräts abrufen
Verwenden Sie das Attribut networkInterfaces von GeneralDiagnosticsTrait, um die IP-Adresse des Geräts zu ermitteln.
Die Adressen werden als Data-Objekte zurückgegeben, die Sie mit dem Network-Framework in IPv4- oder IPv6-Standardstrings formatieren können:
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
}
Beleuchtungsgeräte steuern
Die Gerätetypen OnOffLight und DimmableLight verwenden Standard-Matter-Attribute, um Leuchten zu identifizieren, den Ein-/Aus-Zustand umzuschalten und die Helligkeit anzupassen.
Licht ein- oder ausschalten
Verwende das Attribut OnOffTrait, um den aktuellen Stromstatus einer OnOffLight oder DimmableLight auszulesen und das Licht ein- oder auszuschalten.
Bevor du das Attribut onOff liest, solltest du prüfen, ob es vom Gerät unterstützt wird. Einige Geräte funktionieren als reine Befehlsendpunkte und melden keinen Status.
// 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!") }
Wenn onOff true ist, ist das Licht an. Wenn onOff false ist, ist das Licht aus.
Wenn du den Betriebszustand der Lampe ändern möchtest, prüfe, ob das Attribut den gewünschten Befehl unterstützt, und rufe dann on(), off() oder toggle() auf.
// 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 }
Sie können auch on() und off() direkt aufrufen, um einen expliziten Status festzulegen:
do { try await onOffTraitTest.off() try await onOffTraitTest.on() } catch let _ as HomeError { // Code for handling the exception }
Wenn du eine Lampe mit einem allmählichen visuellen Übergang ausschalten möchtest, rufe offWithEffect() auf und gib einen EffectIdentifierEnum-Wert an:
// 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 }
Helligkeit anpassen
Für ein DimmableLight ist das Attribut LevelControlTrait erforderlich. Ein OnOffLight kann es optional unterstützen. Mit diesem Attribut kannst du die Helligkeit einer Lampe ablesen und steuern.
Das Attribut currentLevel gibt die aktuelle Helligkeit auf einer Skala von 0 bis 254 an. Du kannst auch minLevel und maxLevel prüfen, um den gültigen Helligkeitsbereich zu ermitteln, der von der Hardware unterstützt wird.
Wenn du die Helligkeit auf einen bestimmten Wert festlegen möchtest, rufe moveToLevel() auf. Beachte, dass moveToLevel() nur die aktuelle Stufe ändert, wenn das Licht bereits eingeschaltet ist, es sei denn, du konfigurierst optionsOverride mit executeIfOff. Wenn du möchtest, dass das Licht automatisch eingeschaltet wird, wenn du eine Helligkeit über null einstellst (oder ausgeschaltet wird, wenn du die Helligkeit auf das Minimum einstellst), verwende 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 }
Im folgenden Beispiel wird die aktuelle Helligkeit ausgelesen und mit moveToLevelWithOnOff() eine dimmbare Lampe auf 75% Helligkeit (190) über einen Übergang von 1 Sekunde (10 Zehntelsekunden) eingestellt:
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() ) } }
Du kannst die Helligkeit auch relativ zum aktuellen Wert erhöhen oder verringern, indem du stepWithOnOff() mit .up oder .down und einem stepSize aufrufst.
Farbe der Steuerelemente
Das AttributColorControlTrait ist sowohl für ColorTemperatureLightDeviceType als auch für ExtendedColorLightDeviceType verfügbar.
Mit diesem Attribut kannst du die Farbtemperatur in Mikro-Reziprokgrad oder Mired anpassen.
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() ) }
Du kannst die Farbe auch mit CIE 1931-Farbkoordinaten und 16-Bit-Farbton- und Sättigungswerten festlegen.
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 ist ein optionales Google-Attribut für ExtendedColorLightDevice, das die Farbsteuerung vereinfacht, indem es Farbnamen, RGB-Werte oder einheitliche HSV-Gleitkommawerte akzeptiert, die Farbe und Helligkeit in einer einzigen Einheit kombinieren.
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
Beleuchtungskurven verwalten
Eine Beleuchtungskurve definiert einen automatisierten Zeitplan, der die Helligkeit und optional die Farbtemperatur der Ziellampen im Laufe des Tages fließend anpasst. Mit einer Lichtkurve können Lampen beispielsweise morgens langsam heller und abends auf einen wärmeren Farbton gedimmt werden. Leuchtentypen, die nur die Helligkeit unterstützen, z. B. dimmbare Leuchten, folgen der Helligkeitskurve und ignorieren die Farbtemperatur.
Das Attribut Google.LightingCurveTrait ist ein Google Home platform (GHP)-Attribut auf Gebäudeebene. Sie greifen über eine Structure-Instanz darauf zu, nicht über ein einzelnes Beleuchtungsgerät.
Jedes Programm im Attribut wird durch ein LightingCurveSetting dargestellt, das eine eindeutige settingId mit einem LightingCurveConfig verknüpft. In der folgenden Tabelle werden die Konfigurationsfelder von LightingCurveConfig beschrieben:
| Feld | Beschreibung |
|---|---|
curvePointsArray |
Eine Abfolge von mindestens zwei CurvePoint-Elementen mit unterschiedlichen Zeiten. Jeder Punkt gibt eine time (CurveTimeOfDay mit hours von 0 bis 23 und minutes von 0 bis 59), eine brightnessPercent (0 bis 100) und eine optionale colorTemperature in Kelvin an. Wenn colorTemperature für einen Punkt angegeben ist, muss es für alle Punkte ein positiver Wert sein. |
roomId |
Die ID des Zielraums (z. B. room@{uuid}). Die Lichtkurve wird auf kompatible dimmbare Lampen und Lampen mit Farbtemperatur in diesem Raum angewendet. Geben Sie entweder roomId oder devices an. |
devices |
Ein TargetDevices-Objekt, das eine Liste von TargetDevice-Einträgen enthält, jeweils mit einem id und einer type-ID (z. B. home.matter.0000.types.0101 für DimmableLight oder home.matter.0000.types.010c für ColorTemperatureLight). Gib entweder devices oder roomId an. |
daysOfWeekArray |
Die Wochentage, an denen die Beleuchtungskurve ausgeführt wird (Locale.Weekday). Wenn die Liste leer ist, wird die Beleuchtungskurve täglich ausgeführt. |
adaptive |
Optionaler boolescher Wert, der angibt, ob die Beleuchtungskurve adaptiv ist. Das bedeutet, dass ein Ziellicht die aktive Kurvenstufe wieder aufnimmt, wenn es während des geplanten Zeitfensters eingeschaltet wird. Wenn false, wird eine Lampe durch eine manuelle Änderung für den Rest des Tages von der Lichtkurve getrennt. Wenn true, wird eine Lampe, die während des Zeitfensters für den Zeitplan aus- und wieder eingeschaltet wird, wieder in die Lichtkurve eingebunden. Sie passt sich dann der aktuellen Helligkeit und Farbtemperatur der Kurve an und folgt ihr von da an. |
enabled |
Optionaler boolescher Wert, der angibt, ob die Einstellung für die Beleuchtungskurve aktiv ist. Der Standardwert beim Erstellen einer neuen Einstellung ist true. Wenn enabled in einem Aktualisierungsbefehl weggelassen wird, ändert sich der Status von enabled nicht. |
Einstellungen für die Beleuchtungskurve abrufen
Wenn du die für ein Gebäude konfigurierten Lichtkurven prüfen möchtest, rufe das Attribut Google.LightingCurveTrait aus dem Structure ab und lies das Attribut 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"
)
}
}
}
Einstellung für die Beleuchtungskurve erstellen
Wenn du ein neues Beleuchtungskurvenprogramm für ein Gebäude erstellen möchtest, erstelle ein LightingCurveConfig mit mindestens zwei CurvePoint-Einträgen, den Ziellampen (angegeben durch roomId oder devices) und den aktiven Wochentagen. Übergeben Sie dann die Konfiguration an createLightingCurveSetting(). Der Befehl gibt die eindeutige settingId zurück, die der neuen Einstellung für die Beleuchtungskurve zugewiesen ist.
Im folgenden Beispiel wird eine Beleuchtungskurve für einen Raum an Wochentagen erstellt, bei der die Helligkeit von 30% um 7:00 Uhr auf 80% um 9:00 Uhr erhöht und um 21:00 Uhr auf 20% gedimmt wird:
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
}
Wenn du bestimmte Beleuchtungsgeräte anstelle eines ganzen Raums ansprechen möchtest, gib den Parameter devices mit Google.LightingCurveTrait.TargetDevices an:
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
Einstellung für die Beleuchtungskurve aktualisieren
Wenn du eine vorhandene Beleuchtungskurve ändern möchtest, z. B. die Kurvenpunkte ändern, die aktiven Wochentage aktualisieren oder den Zeitplan aktivieren oder deaktivieren, rufe updateLightingCurveSetting() mit dem Ziel settingId und einer aktualisierten LightingCurveConfig auf.
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
)
}
Einstellung für die Beleuchtungskurve löschen
Wenn du eine Einstellung für die Beleuchtungskurve aus einem Gebäude entfernen möchtest, rufe deleteLightingCurveSetting() mit der settingId der Einstellung auf, die du löschen möchtest.
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)
}