Işık cihazı kılavuzu

Işık cihazları, armatürleri tanımlamak, güç durumlarını değiştirmek ve parlaklık seviyelerini ayarlamak için standart Matter özelliklerini kullanır.

En temel ışık cihazı türü, OnOff ve Identify özellikleriyle uygulanan ve isteğe bağlı olarak LevelControl ile LightEffects özelliklerini destekleyen OnOffLight türüdür.

Diğer ışık türleri ek özellikler sunar ve farklı özelliklerle uygulanır:

Home API'leri Cihaz Türü Özellikler Kotlin Örnek Uygulaması Kullanım Örneği

Renk Sıcaklığı Işığı

ColorTemperatureLightDevice

home.matter.0000.types.010c

Açılıp kapatılabilen, ışık yoğunluğu ve renk sıcaklığı ayarlanabilen bir aydınlatma cihazı.

Gerekli Özellikler
     matter Identify
     matter OnOff
     matter LevelControl
     matter ColorControl

İsteğe Bağlı Özellikler
     google LightEffects
     google ExtendedColorControl

açma ve kapatma, parlaklık
Açık

Parlaklığı Ayarlanabilir Işık

DimmableLightDevice

home.matter.0000.types.0101

Açılıp kapatılabilen, ışığının yoğunluğu ayarlanabilen ve bağlı bir varlık sensörü aracılığıyla açılıp kapatılabilen bir aydınlatma cihazı.

Gerekli Özellikler
     matter Identify
     matter OnOff
     matter LevelControl

İsteğe Bağlı Özellikler
     google LightEffects

açma ve kapatma, parlaklık
Açık

Genişletilmiş Renkli Işık

ExtendedColorLightDevice

home.matter.0000.types.010d

Açılıp kapatılabilen, ışık yoğunluğu ve renk sıcaklığı ayarlanabilen ve bağlı bir varlık sensörü aracılığıyla açılıp kapatılabilen aydınlatma cihazı.

Gerekli Özellikler
     matter Identify
     matter OnOff
     matter LevelControl
     matter ColorControl

İsteğe Bağlı Özellikler
     google LightEffects
     google ExtendedColorControl

açma ve kapatma, parlaklık
Açık

Açma/Kapama Işığı

OnOffLightDevice

home.matter.0000.types.0100

Açılıp kapatılabilen bir aydınlatma cihazı.

Gerekli Özellikler
     matter Tanımlama
     matter OnOff

İsteğe Bağlı Özellikler
     matter LevelControl
     google LightEffects

açma ve kapatma, parlaklık
Açık

Herhangi bir özelliği kullanmadan veya özellikleri güncellemeye çalışmadan önce her zaman cihazın özellik ve komut desteğini kontrol edin. Daha fazla bilgi için Androidcihazlarını kontrol etme başlıklı makaleyi inceleyin.

Ön koşullar

Aydınlatma cihazları ve aydınlatma eğrileriyle çalışmadan önce uygulamanızın Home SDK'yı başlattığından ve gerekli içe aktarma işlemlerini içerdiğinden emin olun:

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

Işık cihazlarını bulma

Bir yapıdaki aydınlatma cihazlarını bulmak için cihaz listesini cihaz türüne göre filtreleyin. Örneğin, OnOffLightDevice ve 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()

Ayrıca, tek bir filtrede birden fazla ışık cihazı türündeki tüm aydınlatma cihazlarını alabilirsiniz:

// 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)
    }
  }

Cihaz hakkında temel bilgileri alma

   Android için örnek uygulamada uygulanır   

BasicInformation özelliği; cihazın tedarikçi adı, tedarikçi kimliği, ürün kimliği, ürün adı (model bilgilerini içerir) ve yazılım sürümü gibi bilgileri içerir:

// 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}")
    }

Aydınlatma cihazını tanımlama

Bir odada birden fazla ışık varsa görsel bir tanımlama durumu (ör. ışığı birkaç saniye boyunca yanıp söndürme) tetikleyerek kullanıcıların belirli bir fiziksel armatürü bulmasına yardımcı olabilirsiniz. Dört ışık cihazı türünün tümü Identify özelliğini gerektirir.

Tanımlama durumunu başlatmak için identify komutunu saniye cinsinden identifyTime süresiyle çağırın. 0 değerini iletmek, tanımlama durumunu hemen durdurur. Blink veya Breathe gibi belirli bir görsel efekti çalıştırmak için triggerEffect işlevini de çağırabilirsiniz.

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
    )
  }
}

Işıklandırma cihazının bağlantısını kontrol etme

Bazı cihazlar birden fazla cihaz türünü desteklediğinden, bir cihazın bağlantısı aslında cihaz türü düzeyinde kontrol edilir. Döndürülen durum, söz konusu cihazdaki tüm özelliklerin bağlantı durumlarının birleşimidir.

let lightConnectivity =
  dimmableLightDeviceType.metadata.sourceConnectivity
  .connectivityState

İnternet bağlantısı olmadığında karma cihaz türleri için partiallyOnline durumu görülebilir. Matter standart özellikleri, yerel yönlendirme nedeniyle hâlâ online olabilir ancak bulut tabanlı özellikler çevrimdışı olur.

Cihazın IP adresini alma

Cihazın IP adresini bulmak için GeneralDiagnosticsTrait'nin networkInterfaces özelliğini kullanın. Adresler Data nesneleri olarak döndürülür. Network çerçevesini kullanarak bunları standart IPv4 veya IPv6 dizeleri olarak biçimlendirebilirsiniz:

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
}

Aydınlatma cihazlarını kontrol etme

OnOffLight ve DimmableLight cihaz türleri, armatürleri tanımlamak, güç durumlarını değiştirmek ve parlaklık seviyelerini ayarlamak için standart Matter özelliklerini kullanır.

Işığı açma veya kapatma

Bir OnOffLight veya DimmableLight cihazının mevcut güç durumunu okumak ve ışığı açıp kapatmak için OnOff özelliğini kullanın.

onOff özelliğini okumadan önce cihazın bu özelliği desteklediğini doğrulayın. Bazı cihazlar yalnızca komut uç noktaları olarak çalışır ve durum bildirmez.

// 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 olduğunda ışık yanar. onOff, false olduğunda ışık kapalıdır.

Işığın güç durumunu değiştirmek için özelliğin istenen komutu desteklediğini doğrulayın ve ardından on(), off() veya toggle() komutunu çağırın.

// 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
}

Ayrıca, açık bir durum ayarlamak için doğrudan on() ve off() işlevlerini de çağırabilirsiniz:

onOffTrait.off()
onOffTrait.on()

Bir ışığı kademeli görsel geçişle kapatmak için offWithEffect() işlevini çağırın ve bir EffectIdentifierEnum değeri belirtin:

// Turn off the light using the DyingLight effect.
onOffTrait.offWithEffect(
  effectIdentifier = OnOffTrait.EffectIdentifierEnum.DyingLight,
  effectVariant = 0u,
)

Parlaklık düzeylerini ayarlayın

DimmableLight için LevelControl özelliği gerekir. OnOffLight ise bu özelliği isteğe bağlı olarak destekleyebilir. Bu özelliği kullanarak bir ışığın parlaklık seviyesini okuyabilir ve kontrol edebilirsiniz.

currentLevel özelliği, mevcut parlaklık seviyesini 0 ile 254 arasında bir ölçekte bildirir. Donanım tarafından desteklenen geçerli parlaklık aralığını belirlemek için minLevel ve maxLevel değerlerini de inceleyebilirsiniz.

Parlaklığı belirli bir değere ayarlamak için moveToLevel() yöntemini çağırın. moveToLevel(), optionsOverride'i executeIfOff ile yapılandırmadığınız sürece yalnızca ışık açıkken mevcut seviyeyi değiştirir. Sıfır olmayan bir parlaklık seviyesi ayarlarken ışığı otomatik olarak açmak (veya seviyeyi minimuma ayarlarken kapatmak) için moveToLevelWithOnOff() kullanın.

// Change the brightness of the light to 50%
levelControlTrait.moveToLevel(
  level = 127u.toUByte(),
  transitionTime = null,
  optionsMask = LevelControlTrait.OptionsBitmap(),
  optionsOverride = LevelControlTrait.OptionsBitmap(),
)

Aşağıdaki örnekte mevcut parlaklık seviyesi okunur ve kısılabilir bir ışığı 1 saniyelik (10u saniyenin onda biri) geçişle% 75 parlaklığa (190u) ayarlamak için moveToLevelWithOnOff() kullanılır:

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()
    )
  }
}

Ayrıca stepWithOnOff() komutunu StepModeEnum.Up veya StepModeEnum.Down ve bir stepSize ile çağırarak parlaklığı mevcut seviyeye göre artırabilir veya azaltabilirsiniz.

Kontrol rengi

ColorControl özelliği hem ColorTemperatureLightDevice hem de ExtendedColorLightDevice üzerinde kullanılabilir.

Bu özellik, renk sıcaklığını mikro karşılıklı derece veya mired cinsinden ayarlamanıza olanak tanır.

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()
  )
}

Ayrıca CIE 1931 renk koordinatlarını ve 16 bit renk tonu ve doygunluk değerlerini kullanarak rengi ayarlayabilirsiniz.

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 üzerinde isteğe bağlı bir Google özelliğidir. Renk adlarını, RGB değerlerini veya renk ile parlaklığı tek bir birimde birleştiren birleşik kayan nokta HSV değerlerini kabul ederek renk kontrolünü basitleştirir.

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

Işık eğrilerini yönetme

Aydınlatma eğrisi, gün boyunca hedef ışıkların parlaklığını ve isteğe bağlı renk sıcaklığını sorunsuz bir şekilde değiştiren otomatik bir program tanımlar. Örneğin, bir aydınlatma eğrisi sabahları ışıkları kademeli olarak açabilir ve akşamları daha sıcak bir tona kısabilir. Yalnızca parlaklığı destekleyen ışık cihazı türleri (ör. kısılabilir ışık), parlaklık eğrisini takip eder ve renk sıcaklığını yok sayar.

LightingCurve özelliği, yapı düzeyinde bir Google Home platform özelliğidir. Bu özelliğe tek bir aydınlatma cihazından değil, Structure örneğinden erişirsiniz.

Özellikteki her program, benzersiz bir settingId ile LightingCurveConfig değerini eşleyen bir LightingCurveSetting ile temsil edilir. Aşağıdaki tabloda LightingCurveConfig aracının yapılandırma alanları açıklanmaktadır:

Alan Açıklama
curvePointsList Farklı zamanlara sahip en az iki CurvePoint öğesinden oluşan bir dizi. Her nokta bir time (0 ile 23 arasında hours ve 0 ile 59 arasında minutes içeren CurveTimeOfDay), bir brightnessPercent (0 ile 100 arasında) ve Kelvin cinsinden isteğe bağlı bir colorTemperature belirtir. Herhangi bir nokta için colorTemperature belirtilirse tüm noktalar için pozitif bir değer olmalıdır.
roomId Hedef odanın kimliği (ör. room@{uuid}). Aydınlatma eğrisini, o odadaki uyumlu, kısılabilir ve renk sıcaklığı ışıklarına uygular. roomId veya devices değerlerinden birini belirtin.
devices Her biri bir cihaz id ve cihaz type kimliği (DimmableLight için home.matter.0000.types.0101 veya ColorTemperatureLight için home.matter.0000.types.010c gibi) içeren TargetDevice girişlerinin listesini içeren bir TargetDevices nesnesi. devices veya roomId değerini belirtin.
daysOfWeekList Işıklandırma eğrisinin çalıştığı haftanın günleri (DayOfWeek). Liste boşsa ışıklandırma eğrisi her gün çalışır.
adaptive Işık eğrisinin uyarlanabilir olup olmadığını belirten isteğe bağlı Boole değeri. Uyarlanabilir ışık eğrisi, hedef ışığın planlanan zaman aralığında açıldığında etkin eğri seviyesine devam ettiği anlamına gelir. false etkin olduğunda, bir ışıkta manuel olarak yapılan değişiklik, günün geri kalanında ışığı aydınlatma eğrisinden ayırır. true olduğunda, planlama zaman aralığı sırasında kapatılıp tekrar açılan bir ışık, ışık eğrisiyle yeniden etkileşime girerek eğrinin mevcut parlaklığına ve renk sıcaklığına uyar ve eğriyi oradan takip eder.
enabled Işık eğrisi ayarının etkin olup olmadığını gösteren isteğe bağlı boole değeri. Yeni bir ayar oluşturulurken varsayılan olarak true değerine ayarlanır. enabled, bir güncelleme komutundan çıkarıldığında enabled durumu değişmez.

Işık eğrisi ayarlarını okuma

Bir yapı için yapılandırılmış aydınlatma eğrilerini incelemek için Structure özelliğinden LightingCurve özelliğini alın ve lightingCurveSettingsList özelliğini okuyun.

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"
      )
    }
  }
}

Işıklandırma eğrisi ayarı oluşturma

Bir yapıda yeni bir aydınlatma eğrisi programı oluşturmak için en az iki CurvePoint girişi, hedef ışıklar (roomId veya devices ile belirtilir) ve haftanın etkin günlerini içeren bir LightingCurveConfig oluşturun. Ardından yapılandırmayı createLightingCurveSetting() öğesine iletin. Komut, yeni ışıklandırma eğrisi ayarına atanan benzersiz settingId değerini döndürür.

Aşağıdaki örnekte, bir oda için hafta içi aydınlatma eğrisi oluşturulmaktadır. Sabah 07:00'de 2.700 K sıcaklıkta% 30 parlaklıktan sabah 09:00'da 4.000 K daha soğuk bir sıcaklıkta% 80 parlaklığa yükselir, ardından akşam 21:00'de 2.200 K çok sıcak bir sıcaklıkta% 20 parlaklığa düşer:

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)
}

Tüm oda yerine belirli aydınlatma cihazlarını hedeflemek için LightingCurveTrait.TargetDevices kullanarak devices parametresini sağlayın:

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
)

Işık eğrisi ayarını güncelleme

Mevcut bir aydınlatma eğrisini değiştirmek (ör. eğri noktalarını değiştirmek, haftanın etkin günlerini güncellemek veya programı etkinleştirip devre dışı bırakmak) için hedef settingId ve güncellenmiş LightingCurveConfig ile updateLightingCurveSetting() yöntemini çağırın.

suspend fun updateLightingCurve(
  structure: Structure,
  settingId: String,
  updatedConfig: LightingCurveTrait.LightingCurveConfig
) {
  val lightingCurve = structure.trait(LightingCurve).firstOrNull() ?: return

  lightingCurve.updateLightingCurveSetting(
    settingId = settingId,
    config = updatedConfig
  )
}

Işıklandırma eğrisi ayarını silme

Bir yapıdan ışıklandırma eğrisi ayarını kaldırmak için silmek istediğiniz ayarın settingId değeriyle deleteLightingCurveSetting() yöntemini çağırın.

suspend fun deleteLightingCurve(
  structure: Structure,
  settingId: String
) {
  val lightingCurve = structure.trait(LightingCurve).firstOrNull() ?: return

  lightingCurve.deleteLightingCurveSetting(settingId = settingId)
}