تستخدم أجهزة الإضاءة سمات Matter العادية لتحديد تركيبات الإضاءة وتبديل حالات الطاقة وضبط مستويات السطوع.
إنّ نوع جهاز الإضاءة الأساسي هو
OnOffLight
الذي يتم تنفيذه باستخدام السمتَين
OnOff وIdentify
ويمكن أن يتوافق مع السمة
LevelControl
والسمة
LightEffects.
وتوفّر أنواع الإضاءة الأخرى إمكانات إضافية ويتم تنفيذها باستخدام سمات مختلفة:
| نوع الجهاز في Home APIs | السمات | نموذج تطبيق Kotlin | حالة الاستخدام |
|---|---|---|---|
|
درجة حرارة الألوان
جهاز إضاءة يمكن تشغيله أو إيقافه، وضبط مستوى سطوعه ودرجة حرارة ألوانه. |
السمات المطلوبة matter Identify matter OnOff matter LevelControl matter ColorControl |
التشغيل والإيقاف، السطوع |
خفيفة |
|
مصباح قابل للتعتيم
جهاز إضاءة يمكن تشغيله أو إيقافه، وضبط شدة إضاءته، وتبديله من خلال وحدة استشعار تواجد الأفراد في المنزل. |
السمات المطلوبة matter Identify matter OnOff matter LevelControl |
التشغيل والإيقاف، السطوع |
خفيفة |
|
مصباح ملوّن متقدّم
جهاز إضاءة يمكن تشغيله أو إيقافه، وضبط شدة إضاءته، وضبط درجة حرارة ألوانه، وتبديله من خلال وحدة استشعار تواجد الأفراد في المنزل. |
السمات المطلوبة matter Identify matter OnOff matter LevelControl matter ColorControl |
التشغيل والإيقاف، السطوع |
خفيفة |
|
تشغيل/إيقاف الإضاءة
جهاز إضاءة يمكن تشغيله أو إيقافه |
السمات المطلوبة matter التعرّف matter OnOff |
التشغيل والإيقاف، السطوع |
خفيفة |
يجب دائمًا التحقّق من توافق الجهاز مع السمات والأوامر قبل استخدام أي ميزات أو محاولة تعديل السمات. لمزيد من المعلومات، يُرجى الاطّلاع على التحكّم في الأجهزة على Android.
المتطلبات الأساسية
قبل العمل مع أجهزة الإضاءة ومنحنيات الإضاءة، تأكَّد من أنّ تطبيقك يُهيئ حزمة تطوير البرامج (SDK) لمنصة Home ويتضمّن عمليات الاستيراد المطلوبة:
import com.google.home.HomeDevice import com.google.home.Structure import com.google.home.google.DayOfWeek import com.google.home.google.ExtendedColorControl import com.google.home.google.ExtendedColorControlTrait import com.google.home.google.LightingCurve import com.google.home.google.LightingCurveTrait import com.google.home.matter.standard.ColorControl import com.google.home.matter.standard.ColorControlTrait import com.google.home.matter.standard.ColorTemperatureLightDevice import com.google.home.matter.standard.DimmableLightDevice import com.google.home.matter.standard.ExtendedColorLightDevice import com.google.home.matter.standard.GeneralDiagnostics import com.google.home.matter.standard.Identify import com.google.home.matter.standard.IdentifyTrait import com.google.home.matter.standard.LevelControl import com.google.home.matter.standard.LevelControlTrait import com.google.home.matter.standard.OnOff import com.google.home.matter.standard.OnOffLightDevice import com.google.home.matter.standard.OnOffTrait import com.google.home.matter.standard.RootNodeDevice import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.firstOrNull
العثور على الأجهزة الخفيفة
للعثور على أجهزة الإضاءة في مبنى، يمكنك فلترة قائمة الأجهزة حسب نوع الجهاز،
مثل
OnOffLightDevice
و
DimmableLightDevice
.
// Get all On/Off Light devices in the structure val onOffLights: List<HomeDevice> = home.devices().list().filter { it.has(OnOffLightDevice) } // Get all Dimmable Light devices in the structure val dimmableLights: List<HomeDevice> = home.devices().list().filter { it.has(DimmableLightDevice) } // Retrieve a specific device type instance to access its traits val onOffLightDevice: OnOffLightDevice? = onOffLights.firstOrNull()?.type(OnOffLightDevice)?.firstOrNull() val dimmableLightDevice: DimmableLightDevice? = dimmableLights.firstOrNull()?.type(DimmableLightDevice)?.firstOrNull()
يمكنك أيضًا استرداد جميع أجهزة الإضاءة من أنواع متعددة من أجهزة الإضاءة في فلتر واحد:
// Get a list of devices with similar device types (lights) val lightDevices = home.devices().map { devices -> devices.filter { it.has(DimmableLightDevice) || it.has(OnOffLightDevice) || it.has(ColorTemperatureLightDevice) || it.has(ExtendedColorLightDevice) } }
الحصول على معلومات أساسية عن جهاز
التنفيذ في نموذج التطبيق لنظام التشغيل Android
تتضمّن السمة BasicInformation معلومات مثل اسم المورّد ورقم تعريفه ورقم تعريف المنتج واسمه (بما في ذلك معلومات الطراز) وإصدار البرنامج الخاص بالجهاز:
// Get device basic information. All general information traits are on the RootNodeDevice type. device.type(RootNodeDevice).first().standardTraits.basicInformation?.let { basicInformation -> println("vendorName ${basicInformation.vendorName}") println("vendorId ${basicInformation.vendorId}") println("productId ${basicInformation.productId}") println("productName ${basicInformation.productName}") println("softwareVersion ${basicInformation.softwareVersion}") }
التعرّف على جهاز إضاءة
عندما تحتوي الغرفة على عدة مصابيح، يمكنك مساعدة المستخدمين في تحديد موقع مصباح
معيّن من خلال تفعيل حالة تحديد مرئية، مثل وميض
الضوء لبضع ثوانٍ. تتطلّب جميع أنواع أجهزة الإضاءة الأربعة السمة
Identify.
استخدِم الأمر identify مع تحديد مدة identifyTime بالثواني لبدء
حالة تحديد الموقع. يؤدي تمرير 0 إلى إيقاف حالة التعرّف على الفور. يمكنك أيضًا استدعاء triggerEffect لتشغيل تأثير بصري معيّن،
مثل Blink أو Breathe.
suspend fun identifyLight(lightDevice: DimmableLightDevice) {
val identifyTrait = lightDevice.standardTraits.identify ?: return
// Blink the light for 10 seconds so the user can locate it
if (identifyTrait.supports(Identify.Command.Identify)) {
identifyTrait.identify(identifyTime = 10u)
}
// Or trigger a specific visual identification effect
if (identifyTrait.supports(Identify.Command.TriggerEffect)) {
identifyTrait.triggerEffect(
effectIdentifier = IdentifyTrait.EffectIdentifierEnum.Blink,
effectVariant = IdentifyTrait.EffectVariantEnum.Default
)
}
}
التحقّق من إمكانية اتصال جهاز إضاءة
يتم التحقّق من إمكانية اتصال الجهاز على مستوى نوع الجهاز لأنّ بعض الأجهزة تتوافق مع أنواع متعددة من الأجهزة. الحالة التي يتم عرضها هي مزيج من حالات الاتصال لجميع السمات على هذا الجهاز.
let lightConnectivity = dimmableLightDeviceType.metadata.sourceConnectivity .connectivityState
قد تظهر حالة "partiallyOnline" في حال استخدام أنواع أجهزة مختلطة
عند عدم توفّر اتصال بالإنترنت. قد تظلّ سمات Matter العادية
متصلة بالإنترنت بسبب التوجيه المحلي، ولكنّ السمات المستندة إلى السحابة الإلكترونية ستكون
غير متصلة بالإنترنت.
الحصول على عنوان IP للجهاز
للعثور على عنوان IP الخاص بالجهاز، استخدِم السمة networkInterfaces في
GeneralDiagnosticsTrait.
يتم عرض العناوين كعناصر Data، والتي يمكنك تنسيقها إلى سلاسل IPv4 أو IPv6 عادية باستخدام إطار عمل Network:
func getIpAddresses(trait: Matter.GeneralDiagnosticsTrait) -> [String] {
let interfaces = trait.attributes.networkInterfaces ?? []
var ipAddresses: [String] = []
for interface in interfaces {
for data in interface.iPv4Addresses {
if let ipv4 = IPv4Address(data) {
ipAddresses.append(String(describing: ipv4))
}
}
for data in interface.iPv6Addresses {
if let ipv6 = IPv6Address(data) {
ipAddresses.append(String(describing: ipv6))
}
}
}
return ipAddresses
}
التحكّم في أجهزة الإضاءة
يستخدم نوعا الأجهزة OnOffLight وDimmableLight سمات Matter العادية لتحديد تركيبات الإضاءة وتبديل حالات الطاقة وضبط مستويات السطوع.
تشغيل مصباح أو إطفاؤه
استخدِم السمة
OnOff
لقراءة حالة الطاقة الحالية لـ OnOffLight أو DimmableLight
ولتشغيل الضوء أو إطفائه.
قبل قراءة السمة onOff، تأكَّد من أنّ الجهاز يتيح استخدامها. تعمل بعض الأجهزة كنقاط نهاية للأوامر فقط ولا تبلغ عن الحالة.
// Check if the OnOff trait supports the onOff attribute. if (onOffTrait.supports(OnOff.Attribute.onOff)) { println("onOffTrait supports onOff state") } else { println("onOffTrait is for a command only device!") }
عندما يكون onOff true، يكون الضوء مضاءً. عندما تكون قيمة onOff هي false، يكون الضوء
مطفأً.
لتغيير حالة الطاقة الخاصة بالمصباح، تأكَّد من أنّ السمة تتيح تنفيذ الأمر المطلوب، ثم استخدِم on() أو off() أو toggle().
// Check if the OnOff trait supports the toggle command. if (onOffTrait.supports(OnOff.Command.Toggle)) { println("onOffTrait supports toggle command") } else { println("onOffTrait does not support stateful toggle command") }
// Calling a command on a trait. try { onOffTrait.toggle() } catch (e: HomeException) { // Code for handling the exception }
يمكنك أيضًا استدعاء on() وoff() مباشرةً لضبط حالة صريحة:
onOffTrait.off() onOffTrait.on()
لإطفاء ضوء مع انتقال مرئي تدريجي، يمكنك استدعاء offWithEffect()
وتحديد قيمة EffectIdentifierEnum:
// Turn off the light using the DyingLight effect. onOffTrait.offWithEffect( effectIdentifier = OnOffTrait.EffectIdentifierEnum.DyingLight, effectVariant = 0u, )
ضبط مستويات السطوع
يتطلّب DimmableLight السمة
LevelControl،
ويمكن أن يتيحها OnOffLight اختياريًا. استخدِم هذه السمة لقراءة مستوى سطوع الضوء والتحكّم فيه.
تُبلغ السمة currentLevel عن مستوى السطوع الحالي على مقياس
من 0 إلى 254. يمكنك أيضًا فحص minLevel وmaxLevel لتحديد
نطاق السطوع الصالح الذي يتيحه الجهاز.
لضبط السطوع على قيمة معيّنة، يمكنك الاتصال بالرقم moveToLevel(). يُرجى العِلم أنّ
moveToLevel() يغيّر المستوى الحالي فقط عندما يكون الضوء مضاءً،
إلا إذا تم ضبط optionsOverride باستخدام executeIfOff. لتشغيل الضوء تلقائيًا عند ضبط مستوى سطوع غير صفري (أو إيقافه عند ضبط المستوى على الحد الأدنى)، استخدِم moveToLevelWithOnOff().
// Change the brightness of the light to 50% levelControlTrait.moveToLevel( level = 127u.toUByte(), transitionTime = null, optionsMask = LevelControlTrait.OptionsBitmap(), optionsOverride = LevelControlTrait.OptionsBitmap(), )
يقرأ المثال التالي مستوى السطوع الحالي ويستخدم
moveToLevelWithOnOff() لضبط ضوء قابل للتعتيم على سطوع بنسبة% 75 (190u) خلال
عملية انتقال مدتها ثانية واحدة (10u عُشر ثانية):
suspend fun setLightBrightness(lightDevice: DimmableLightDevice) { val levelControl = lightDevice.standardTraits.levelControl ?: return // Read the current brightness level (0 to 254) val currentLevel: UByte? = levelControl.currentLevel println("Current brightness level: $currentLevel") // Move to ~75% brightness (190 out of 254) and turn on the light if it is off if (levelControl.supports(LevelControl.Command.MoveToLevelWithOnOff)) { levelControl.moveToLevelWithOnOff( level = 190u, transitionTime = 10u, optionsMask = LevelControlTrait.OptionsBitmap(), optionsOverride = LevelControlTrait.OptionsBitmap() ) } }
يمكنك أيضًا زيادة مستوى السطوع أو خفضه مقارنةً بالمستوى الحالي من خلال
استدعاء stepWithOnOff() مع StepModeEnum.Up أو StepModeEnum.Down و
stepSize.
التحكّم في اللون
تتوفّر السمةColorControl
على كلّ من
ColorTemperatureLightDevice
وExtendedColorLightDevice.
تتيح لك هذه السمة ضبط درجة حرارة الألوان بالدرجات المتبادلة الدقيقة أو المايرد.
val colorControlTrait = colorTempLightDevice.standardTraits.colorControl ?: return // Read the current color temperature and hardware limits in mireds // (Mireds = 1,000,000 / Kelvin; e.g., 370 mireds ≈ 2700K warm white, 250 mireds = 4000K cool white) val currentMireds = colorControlTrait.colorTemperatureMireds val minMireds = colorControlTrait.colorTempPhysicalMinMireds ?: 153u // ~6500K (coolest) val maxMireds = colorControlTrait.colorTempPhysicalMaxMireds ?: 500u // 2000K (warmest) // Clamp target (370 mireds ≈ 2700K) to the device's physical bounds val targetMireds = 370u.toUShort().coerceIn(minMireds, maxMireds) if ( colorControlTrait.supports( ColorControl.Command.MoveToColorTemperature ) ) { colorControlTrait.moveToColorTemperature( colorTemperatureMireds = targetMireds, transitionTime = 20u, // 2.0 seconds (in 0.1s units) optionsMask = ColorControlTrait.OptionsBitmap(), optionsOverride = ColorControlTrait.OptionsBitmap() ) }
يمكنك أيضًا ضبط اللون باستخدام إحداثيات اللونية CIE 1931 وقيم تدرج اللون والتشبع 16 بت.
val colorControlTrait = extendedColorLightDevice.standardTraits.colorControl ?: return // 1. Move to CIE 1931 xy chromaticity coordinates (scaled 0..65279) // Example: x = 0.3127 (20493), y = 0.3290 (21561) for D65 white point if (colorControlTrait.supports(ColorControl.Command.MoveToColor)) { colorControlTrait.moveToColor( colorX = 20493u, colorY = 21561u, transitionTime = 10u, // 1.0 second (in 0.1s units) optionsMask = ColorControlTrait.OptionsBitmap(), optionsOverride = ColorControlTrait.OptionsBitmap() ) } val currentX = colorControlTrait.currentX val currentY = colorControlTrait.currentY // 2. Move to 16-bit Enhanced Hue (0..65534) and 8-bit Saturation (0..254) if ( colorControlTrait.supports( ColorControl.Command.EnhancedMoveToHueAndSaturation ) ) { colorControlTrait.enhancedMoveToHueAndSaturation( enhancedHue = 43690u, // ~240° (Blue) on the 0..65534 scale saturation = 254u, // Full saturation transitionTime = 15u, // 1.5 seconds (in 0.1s units) optionsMask = ColorControlTrait.OptionsBitmap(), optionsOverride = ColorControlTrait.OptionsBitmap() ) } // 3. Start a hardware color loop across the device's hue range if (colorControlTrait.supports(ColorControl.Command.ColorLoopSet)) { colorControlTrait.colorLoopSet( updateFlags = ColorControlTrait.UpdateFlagsBitmap( updateAction = true, updateDirection = true, updateTime = true, updateStartHue = true ), action = ColorControlTrait.ColorLoopActionEnum .ActivateFromColorLoopStartEnhancedHue, direction = ColorControlTrait.ColorLoopDirectionEnum.Increment, time = 30u, // 30 seconds per full cycle startHue = 0u, optionsMask = ColorControlTrait.OptionsBitmap(), optionsOverride = ColorControlTrait.OptionsBitmap() ) }
ExtendedColorControl
هي سمة اختيارية من Google على
ExtendedColorLightDevice
تسهّل التحكّم في الألوان من خلال قبول أسماء الألوان أو قيم RGB أو قيم HSV الموحّدة
ذات الفاصلة العائمة التي تجمع بين اللون والسطوع في وحدة واحدة.
val extendedColorControlTrait = extendedColorLightDevice.googleTraits.extendedColorControl ?: return // 1. Set color by name if ( extendedColorControlTrait.supports( ExtendedColorControl.Command.MoveToColorName ) ) { extendedColorControlTrait.moveToColorName(colorName = "Lavender") } val currentColorName = extendedColorControlTrait.currentName // 2. Set color using 8-bit RGB values (0..255 per channel) // Automatically coordinates brightness (LevelControl) and color (ColorControl) if ( extendedColorControlTrait.supports( ExtendedColorControl.Command.MoveToColorRgb ) ) { extendedColorControlTrait.moveToColorRgb( red = 255u, green = 128u, blue = 0u ) } val currentRed = extendedColorControlTrait.currentRed val currentGreen = extendedColorControlTrait.currentGreen val currentBlue = extendedColorControlTrait.currentBlue // 3. Set color and brightness together using floating-point HSV // hue: 0.0f..360.0f, saturation: 0.0f..1.0f, value (brightness): 0.0f..1.0f if ( extendedColorControlTrait.supports( ExtendedColorControl.Command.MoveToColorHsv ) ) { extendedColorControlTrait.moveToColorHsv( hue = 210.0f, saturation = 0.85f, value = 0.75f ) } val currentHue = extendedColorControlTrait.currentHue val currentSaturation = extendedColorControlTrait.currentSaturation val currentValue = extendedColorControlTrait.currentValue
إدارة منحنيات الإضاءة
يحدّد منحنى الإضاءة جدولاً زمنيًا آليًا يغيّر بسلاسة سطوع المصابيح المستهدَفة ودرجة حرارة الألوان الاختيارية على مدار اليوم. على سبيل المثال، يمكن أن يزيد منحنى الإضاءة من سطوع المصابيح تدريجيًا في الصباح ويخفّف سطوعها إلى درجة لون أكثر دفئًا في المساء. تتّبع أنواع أجهزة الإضاءة التي تتيح ضبط السطوع فقط، مثل "مصباح قابل للتعتيم"، منحنى السطوع وتتجاهل درجة حرارة الألوان.
السمة
LightingCurve
هي سمة Google Home platform على مستوى البنية. ويمكنك الوصول إليه
من مثيل Structure
بدلاً من جهاز إضاءة فردي.
يتم تمثيل كل جدول زمني في السمة من خلال LightingCurveSetting، والذي
يقرن settingId فريدًا مع LightingCurveConfig. يوضّح الجدول التالي حقول إعداد LightingCurveConfig:
| الحقل | الوصف |
|---|---|
curvePointsList |
تسلسل يتألف من عنصرَين على الأقل من النوع CurvePoint بأوقات مختلفة. تحدّد كل نقطة time (CurveTimeOfDay مع hours من 0 إلى 23 وminutes من 0 إلى 59) وbrightnessPercent (من 0 إلى 100) وcolorTemperature اختياري بالكلفن. إذا تم تحديد السمة colorTemperature لأي نقطة، يجب أن تكون قيمة موجبة لجميع النقاط. |
roomId |
معرّف الغرفة المستهدَفة (مثلاً، room@{uuid}) لتطبيق منحنى الإضاءة على المصابيح المتوافقة القابلة للتعتيم والتي تتيح ضبط درجة حرارة الألوان في تلك الغرفة حدِّد إما roomId أو devices. |
devices |
عنصر TargetDevices يحتوي على قائمة بإدخالات TargetDevice، لكل منها id للجهاز ورقم تعريف type للجهاز (مثل home.matter.0000.types.0101 لـ DimmableLight أو home.matter.0000.types.010c لـ ColorTemperatureLight). حدِّد إما devices أو roomId. |
daysOfWeekList |
أيام الأسبوع التي يتم فيها تشغيل منحنى الإضاءة (DayOfWeek). إذا كانت القائمة فارغة، يتم تشغيل منحنى الإضاءة يوميًا. |
adaptive |
قيمة منطقية اختيارية تشير إلى ما إذا كان منحنى الإضاءة تكيُّفيًا، أي أنّ الإضاءة المستهدَفة تستأنف مستوى المنحنى النشط عند تشغيلها خلال مهلة تحديد المواعيد. عند تفعيل ميزة "false"، يؤدي إجراء تغيير يدوي على أحد المصابيح إلى فصله عن منحنى الإضاءة لبقية اليوم. عند تفعيل ميزة "true"، فإنّ المصباح الذي يتم إطفاؤه ثم إعادة تشغيله خلال مهلة تحديد المواعيد يعيد تفعيل المصباح باستخدام منحنى الإضاءة، ما يجعله يتوافق مع مستوى السطوع ودرجة حرارة الألوان الحاليين للمنحنى، ويتّبع المنحنى من هناك. |
enabled |
قيمة منطقية اختيارية تشير إلى ما إذا كان إعداد منحنى الإضاءة نشطًا أم لا. يتم ضبطه تلقائيًا على true عند إنشاء إعداد جديد. عند حذف enabled من أمر تحديث، لا تتغير حالة enabled. |
قراءة إعدادات منحنى الإضاءة
لفحص منحنيات الإضاءة التي تم ضبطها لبنية معيّنة، يمكنك استرداد السمة
LightingCurve
من Structure وقراءة السمة
lightingCurveSettingsList.
suspend fun readLightingCurves(structure: Structure) {
val lightingCurve = structure.trait(LightingCurve).firstOrNull() ?: return
for (setting in lightingCurve.lightingCurveSettingsList) {
val settingId = setting.settingId
val config = setting.config
println("Setting ID: $settingId, enabled: ${config?.enabled}")
config?.curvePointsList?.forEach { point ->
println(
" Time: ${point.time?.hours}:${point.time?.minutes}, " +
"Brightness: ${point.brightnessPercent}%, " +
"ColorTemp: ${point.colorTemperature}K"
)
}
}
}
إنشاء إعداد لمنحنى الإضاءة
لإنشاء جدول زمني جديد لمنحنى الإضاءة في منشأة، أنشِئ
LightingCurveConfig يتضمّن إدخالَين على الأقل من النوع CurvePoint، ومصابيح مستهدَفة
(محدّدة من خلال roomId أو devices)، وأيام الأسبوع النشطة. بعد ذلك،
مرِّر الإعدادات إلى createLightingCurveSetting(). يعرض الأمر settingId الفريد الذي تم تعيينه لإعداد منحنى الإضاءة الجديد.
ينشئ المثال التالي منحنى إضاءة لأيام الأسبوع في غرفة. تزداد الإضاءة من% 30 بدرجة حرارة دافئة تبلغ 2,700 كلفن عند الساعة 7:00 صباحًا إلى% 80 بدرجة حرارة باردة تبلغ 4,000 كلفن عند الساعة 9:00 صباحًا، ثم تنخفض إلى% 20 بدرجة حرارة دافئة جدًا تبلغ 2,200 كلفن بحلول الساعة 9:00 مساءً:
suspend fun createRoomLightingCurve(
structure: Structure,
targetRoomId: String
): String? {
val lightingCurve = structure.trait(LightingCurve).firstOrNull() ?: return null
val curvePoints = listOf(
LightingCurveTrait.CurvePoint(
time = LightingCurveTrait.CurveTimeOfDay(hours = 7, minutes = 0),
brightnessPercent = 30,
colorTemperature = 2700
),
LightingCurveTrait.CurvePoint(
time = LightingCurveTrait.CurveTimeOfDay(hours = 9, minutes = 0),
brightnessPercent = 80,
colorTemperature = 4000
),
LightingCurveTrait.CurvePoint(
time = LightingCurveTrait.CurveTimeOfDay(hours = 21, minutes = 0),
brightnessPercent = 20,
colorTemperature = 2200
)
)
val config = LightingCurveTrait.LightingCurveConfig(
curvePointsList = curvePoints,
roomId = targetRoomId,
daysOfWeekList = listOf(
DayOfWeek.MONDAY,
DayOfWeek.TUESDAY,
DayOfWeek.WEDNESDAY,
DayOfWeek.THURSDAY,
DayOfWeek.FRIDAY
),
adaptive = true,
enabled = true
)
// Returns the newly created settingId
return lightingCurve.createLightingCurveSetting(config = config)
}
لاستهداف أجهزة إضاءة معيّنة بدلاً من غرفة كاملة، أدخِل المَعلمة devices باستخدام LightingCurveTrait.TargetDevices:
val targetDevices = LightingCurveTrait.TargetDevices(
devicesList = listOf(
LightingCurveTrait.TargetDevice(
id = dimmableLight.id.id,
type = DimmableLightDevice.TYPE_ID
)
)
)
val deviceCurveConfig = LightingCurveTrait.LightingCurveConfig(
curvePointsList = curvePoints,
devices = targetDevices,
daysOfWeekList = listOf(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY),
adaptive = true,
enabled = true
)
val settingId = lightingCurve.createLightingCurveSetting(
config = deviceCurveConfig
)
تعديل إعدادات منحنى الإضاءة
لتعديل منحنى إضاءة حالي، مثل تغيير نقاط المنحنى أو
تعديل أيام الأسبوع النشطة أو تفعيل الجدول الزمني وإيقافه،
يمكنك استدعاء updateLightingCurveSetting() باستخدام الهدف settingId وLightingCurveConfig
معدَّل.
suspend fun updateLightingCurve(
structure: Structure,
settingId: String,
updatedConfig: LightingCurveTrait.LightingCurveConfig
) {
val lightingCurve = structure.trait(LightingCurve).firstOrNull() ?: return
lightingCurve.updateLightingCurveSetting(
settingId = settingId,
config = updatedConfig
)
}
حذف إعداد منحنى الإضاءة
لإزالة إعداد منحنى الإضاءة من مبنى، يمكنك استدعاء
deleteLightingCurveSetting() مع settingId الإعداد الذي تريد
حذفه.
suspend fun deleteLightingCurve(
structure: Structure,
settingId: String
) {
val lightingCurve = structure.trait(LightingCurve).firstOrNull() ?: return
lightingCurve.deleteLightingCurveSetting(settingId = settingId)
}