Panduan perangkat ringan

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

ColorTemperatureLightDevice

home.matter.0000.types.010c

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

Karakteristik Opsional
     google LightEffects
     google ExtendedColorControl

nyala dan mati, kecerahan
Terang

Lampu yang Dapat Diredupkan

DimmableLightDevice

home.matter.0000.types.0101

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

Karakteristik Opsional
     google LightEffects

nyala dan mati, kecerahan
Terang

Lampu Warna yang Diperluas

ExtendedColorLightDevice

home.matter.0000.types.010d

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

Karakteristik Opsional
     google LightEffects
     google ExtendedColorControl

nyala dan mati, kecerahan
Terang

Lampu On/Off

OnOffLightDevice

home.matter.0000.types.0100

Perangkat pencahayaan yang dapat dinyalakan atau dimatikan.

Karakteristik yang Diperlukan
     matter Identify
     matter OnOff

Karakteristik Opsional
     matter LevelControl
     google LightEffects

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

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