लाइट डिवाइस, फ़िक्सचर की पहचान करने, पावर स्टेट को टॉगल करने, और चमक के लेवल को अडजस्ट करने के लिए, स्टैंडर्ड Matter ट्रेट का इस्तेमाल करते हैं.
सबसे बुनियादी लाइट डिवाइस टाइप
OnOffLightDeviceType
है. इसे
OnOffTrait और
IdentifyTrait ट्रेट
के साथ लागू किया जाता है. साथ ही, इसमें
LevelControlTrait
ट्रेट और
LightEffectsTrait
ट्रेट का इस्तेमाल किया जा सकता है.
अन्य तरह की लाइटें, अतिरिक्त सुविधाएं देती हैं और उन्हें अलग-अलग ट्रेट के साथ लागू किया जाता है:
| Home APIs के लिए डिवाइस टाइप | Traits | Swift सैंपल ऐप्लिकेशन | इस्तेमाल का उदाहरण |
|---|---|---|---|
|
कलर टेंपरेचर लाइट
रोशनी देने वाला ऐसा डिवाइस जिसे चालू या बंद किया जा सकता है. साथ ही, इसकी रोशनी की इंटेंसिटी और कलर टेंपरेचर को अडजस्ट किया जा सकता है. |
Required Traits matter IdentifyTrait matter OnOffTrait matter LevelControlTrait matter ColorControlTrait |
हल्की | |
|
Dimmable Light
यह एक ऐसा लाइटिंग डिवाइस है जिसे चालू या बंद किया जा सकता है. साथ ही, इसकी रोशनी की इंटेंसिटी को अडजस्ट किया जा सकता है. इसके अलावा, इसे होम में लोगों की मौजूदगी का पता लगाने वाले सेंसर की मदद से चालू या बंद किया जा सकता है. |
ज़रूरी Traits matter IdentifyTrait matter OnOffTrait matter LevelControlTrait |
हल्की | |
|
एक्सटेंडेड कलर लाइट
रोशनी देने वाला ऐसा डिवाइस जिसे चालू या बंद किया जा सकता है. साथ ही, इसकी रोशनी की तीव्रता और कलर टेंपरेचर को अडजस्ट किया जा सकता है. इसके अलावा, इसे होम में लोगों की मौजूदगी का पता लगाने वाले सेंसर की मदद से चालू या बंद किया जा सकता है. |
Required Traits matter IdentifyTrait matter OnOffTrait matter LevelControlTrait matter ColorControlTrait |
हल्की | |
|
लाइट चालू/बंद करना
रोशनी करने वाला ऐसा डिवाइस जिसे चालू या बंद किया जा सकता है. |
ज़रूरी विशेषताएं matter IdentifyTrait matter OnOffTrait |
हल्की |
किसी भी सुविधा का इस्तेमाल करने या एट्रिब्यूट को अपडेट करने से पहले, हमेशा यह देख लें कि डिवाइस के लिए एट्रिब्यूट और निर्देश काम करते हैं या नहीं. ज़्यादा जानकारी के लिए, iOSपर डिवाइसों को कंट्रोल करना लेख पढ़ें.
ज़रूरी शर्तें
रोशनी वाले डिवाइसों और लाइटिंग कर्व के साथ काम करने से पहले, पक्का करें कि आपका ऐप्लिकेशन, Home SDK टूल को शुरू करता हो और उसमें ज़रूरी इंपोर्ट शामिल हों:
import Foundation import GoogleHomeSDK import GoogleHomeTypes import Network
लाइट डिवाइसों को ढूंढना
किसी स्ट्रक्चर में मौजूद लाइट वाले डिवाइसों को ढूंढने के लिए, डिवाइसों की सूची को डिवाइस के टाइप के हिसाब से फ़िल्टर करें. जैसे,
OnOffLightDeviceType
और
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)
एक ही फ़िल्टर में, कई तरह के लाइट डिवाइसों से सभी लाइटिंग डिवाइसों की जानकारी भी वापस पाई जा सकती है:
// 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) }
किसी डिवाइस के बारे में बुनियादी जानकारी पाना
iOS के लिए सैंपल के तौर पर मिले ऐप्लिकेशन में लागू किया गया
BasicInformation ट्रेट में, किसी डिवाइस के लिए वेंडर का नाम, वेंडर आईडी, प्रॉडक्ट आईडी, प्रॉडक्ट का नाम (इसमें मॉडल की जानकारी शामिल होती है), और सॉफ़्टवेयर के वर्शन जैसी जानकारी शामिल होती है:
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!
लाइटिंग डिवाइस की पहचान करना
जब किसी कमरे में कई लाइटें हों, तो विज़ुअल आइडेंटिफ़िकेशन स्टेट को ट्रिगर करके, उपयोगकर्ताओं को किसी खास फ़िज़िकल फ़िक्सचर का पता लगाने में मदद की जा सकती है. जैसे, कुछ सेकंड के लिए लाइट को ब्लिंक करना. चारों तरह के लाइट डिवाइसों के लिए, Matter.IdentifyTrait ट्रेट ज़रूरी है.
आइटम की पहचान करने की स्थिति शुरू करने के लिए, identify कमांड को कॉल करें. साथ ही, सेकंड में identifyTime अवधि सेट करें. 0 पास करने पर, पहचान करने की प्रोसेस तुरंत बंद हो जाती है. किसी खास विज़ुअल इफ़ेक्ट को चालू करने के लिए, triggerEffect को भी कॉल किया जा सकता है. जैसे, Blink या 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
)
}
}
लाइटिंग डिवाइस की कनेक्टिविटी की जांच करना
किसी डिवाइस की कनेक्टिविटी की जांच, डिवाइस टाइप के लेवल पर की जाती है. ऐसा इसलिए, क्योंकि कुछ डिवाइसों पर कई तरह के डिवाइस टाइप काम करते हैं. डिवाइस की स्थिति, उस डिवाइस पर मौजूद सभी विशेषताओं के लिए कनेक्टिविटी की स्थितियों का कॉम्बिनेशन होती है.
let lightConnectivity = dimmableLightDeviceType.metadata.sourceConnectivity .connectivityState
इंटरनेट कनेक्शन न होने पर, अलग-अलग तरह के डिवाइसों के मामले में partiallyOnline की स्थिति देखी जा सकती है. लोकल रूटिंग की वजह से, Matter के स्टैंडर्ड ट्रेट अब भी ऑनलाइन हो सकते हैं. हालांकि, क्लाउड-आधारित ट्रेट ऑफ़लाइन होंगे.
डिवाइस का आईपी पता पाना
डिवाइस का आईपी पता ढूंढने के लिए, GeneralDiagnosticsTrait के networkInterfaces एट्रिब्यूट का इस्तेमाल करें.
पते, Data ऑब्जेक्ट के तौर पर दिखाए जाते हैं. इन्हें Network फ़्रेमवर्क का इस्तेमाल करके, स्टैंडर्ड IPv4 या IPv6 स्ट्रिंग में फ़ॉर्मैट किया जा सकता है:
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 ट्रेट का इस्तेमाल करते हैं.
लाइट चालू या बंद करना
OnOffTrait
ट्रेट का इस्तेमाल करके, OnOffLight या DimmableLight के मौजूदा पावर स्टेट को जानें और लाइट को चालू या बंद करें.
onOff एट्रिब्यूट को पढ़ने से पहले, पुष्टि करें कि डिवाइस पर यह काम करता है या नहीं. कुछ डिवाइस, सिर्फ़ निर्देश देने वाले एंडपॉइंट के तौर पर काम करते हैं और स्थिति की जानकारी नहीं देते.
// 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!") }
जब onOff, true पर सेट हो, तो लाइट चालू रहती है. जब onOff false हो, तो लाइट बंद रहती है.
लाइट को चालू या बंद करने के लिए, पुष्टि करें कि ट्रेट में वह कमांड काम करता हो जो आपको देना है. इसके बाद, on(), off() या toggle() को कॉल करें.
// 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 }
साफ़ तौर पर कोई स्थिति सेट करने के लिए, on() और off() को सीधे तौर पर भी कॉल किया जा सकता है:
do { try await onOffTraitTest.off() try await onOffTraitTest.on() } catch let _ as HomeError { // Code for handling the exception }
लाइट को धीरे-धीरे बंद करने के लिए, offWithEffect() को कॉल करें और EffectIdentifierEnum वैल्यू तय करें:
// 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 }
स्क्रीन की रोशनी का लेवल अडजस्ट करना
DimmableLight के लिए, LevelControlTrait ट्रेट ज़रूरी है. हालांकि, OnOffLight के लिए यह ज़रूरी नहीं है. इस trait का इस्तेमाल करके, लाइट की चमक के लेवल को पढ़ा और कंट्रोल किया जा सकता है.
currentLevel एट्रिब्यूट, 0 से 254 के स्केल पर, मौजूदा ब्राइटनेस लेवल की जानकारी देता है. हार्डवेयर के साथ काम करने वाली मान्य ब्राइटनेस रेंज का पता लगाने के लिए, minLevel और maxLevel की जांच भी की जा सकती है.
चमक को किसी खास वैल्यू पर सेट करने के लिए, moveToLevel() को कॉल करें. ध्यान दें कि
moveToLevel() सिर्फ़ मौजूदा लेवल को बदलता है, जब लाइट पहले से चालू हो.
ऐसा तब तक होता है, जब तक optionsOverride को executeIfOff के साथ कॉन्फ़िगर न किया जाए. रोशनी के लेवल को शून्य से ज़्यादा पर सेट करने पर, लाइट को अपने-आप चालू करने के लिए 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 }
नीचे दिए गए उदाहरण में, चमक के मौजूदा लेवल को पढ़ा जाता है. साथ ही, moveToLevelWithOnOff() का इस्तेमाल करके, डिम की जा सकने वाली लाइट को 75% चमक (190) पर सेट किया जाता है. इसके लिए, एक सेकंड (10 सेकंड का दसवां हिस्सा) का ट्रांज़िशन इस्तेमाल किया जाता है:
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() ) } }
मौजूदा लेवल के हिसाब से रोशनी को बढ़ाया या घटाया भी जा सकता है. इसके लिए, .up या .down और stepSize के साथ stepWithOnOff() को कॉल करें.
कंट्रोल का रंग
ColorControlTrait
ट्रेट,
ColorTemperatureLightDeviceType
और
ExtendedColorLightDeviceType, दोनों पर उपलब्ध है.
इस trait की मदद से, कलर टेंपरेचर को माइक्रो-रेसिप्रोकल डिग्री या मायर्ड में अडजस्ट किया जा सकता है.
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() ) }
CIE 1931 क्रोमैटिसिटी कोऑर्डिनेट और 16-बिट ह्यू और सैचुरेशन वैल्यू का इस्तेमाल करके भी रंग सेट किया जा सकता है.
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
ExtendedColorLightDevice
पर Google की एक वैकल्पिक विशेषता है. इससे रंग को कंट्रोल करना आसान हो जाता है. इसके लिए, रंगों के नाम, आरजीबी वैल्यू या यूनिफ़ाइड फ़्लोटिंग-पॉइंट एचएसवी वैल्यू को स्वीकार किया जाता है. ये वैल्यू, रंग और चमक को एक ही यूनिट में जोड़ती हैं.
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
लाइटिंग कर्व मैनेज करना
लाइटिंग कर्व, एक ऑटोमेटेड शेड्यूल तय करता है. इससे टारगेट की गई लाइटों की चमक और कलर टेंपरेचर (ज़रूरी नहीं) को पूरे दिन आसानी से बदला जा सकता है. उदाहरण के लिए, लाइटिंग कर्व की मदद से, सुबह के समय लाइटों की रोशनी को धीरे-धीरे बढ़ाया जा सकता है और शाम को उन्हें कम करके वॉर्म टोन में बदला जा सकता है. रोशनी वाले ऐसे डिवाइस जो सिर्फ़ रोशनी को कम या ज़्यादा करने की सुविधा देते हैं, जैसे कि डिम होने वाली लाइट, वे रोशनी के कर्व के हिसाब से काम करते हैं और कलर टेंपरेचर को अनदेखा करते हैं.
Google.LightingCurveTrait ट्रेट, स्ट्रक्चर-लेवल का Google Home platform (GHP) ट्रेट है. इसे किसी एक लाइटिंग डिवाइस के बजाय, Structure इंस्टेंस से ऐक्सेस किया जाता है.
ट्रेट पर मौजूद हर शेड्यूल को LightingCurveSetting से दिखाया जाता है. यह यूनीक settingId को LightingCurveConfig के साथ जोड़ता है. नीचे दी गई टेबल में, LightingCurveConfig के कॉन्फ़िगरेशन फ़ील्ड के बारे में बताया गया है:
| फ़ील्ड | ब्यौरा |
|---|---|
curvePointsArray |
कम से कम दो CurvePoint आइटम का क्रम, जिसमें हर आइटम का समय अलग-अलग हो. हर पॉइंट, time (CurveTimeOfDay, जिसमें hours की वैल्यू 0 से 23 और minutes की वैल्यू 0 से 59 तक हो), brightnessPercent (0 से 100 तक), और केल्विन में colorTemperature की वैल्यू के बारे में बताता है. हालांकि, की वैल्यू देना ज़रूरी नहीं है. अगर किसी पॉइंट के लिए colorTemperature की वैल्यू तय की गई है, तो सभी पॉइंट के लिए इसकी वैल्यू पॉज़िटिव होनी चाहिए. |
roomId |
टारगेट रूम का आईडी (उदाहरण के लिए, room@{uuid}). यह उस कमरे में मौजूद, रोशनी कम या ज़्यादा करने की सुविधा वाली और कलर टेंपरेचर वाली लाइटों पर लाइटिंग कर्व लागू करता है. roomId या devices की वैल्यू दें. |
devices |
TargetDevices ऑब्जेक्ट, जिसमें TargetDevice एंट्री की सूची होती है. हर एंट्री में डिवाइस id और डिवाइस type आईडी होता है. जैसे, DimmableLight के लिए home.matter.0000.types.0101 या ColorTemperatureLight के लिए home.matter.0000.types.010c. devices या roomId में से कोई एक डालें. |
daysOfWeekArray |
हफ़्ते के वे दिन जब लाइटिंग कर्व चलता है (Locale.Weekday). अगर सूची खाली है, तो लाइटिंग कर्व रोज़ चलता है. |
adaptive |
यह वैकल्पिक बूलियन वैल्यू है. इससे पता चलता है कि लाइटिंग कर्व अडैप्टिव है या नहीं. इसका मतलब है कि शेड्यूल की गई विंडो के दौरान, टारगेट लाइट चालू होने पर, वह ऐक्टिव कर्व लेवल को फिर से शुरू कर देती है. false होने पर, लाइट में मैन्युअल तरीके से बदलाव करने पर, वह लाइट दिन के बाकी समय के लिए लाइटिंग कर्व से अलग हो जाती है. true चालू होने पर, अगर शेड्यूल की गई समयावधि के दौरान किसी लाइट को बंद करके फिर से चालू किया जाता है, तो वह लाइट फिर से लाइटिंग कर्व के साथ जुड़ जाती है. इससे वह कर्व की मौजूदा चमक और कलर टेंपरेचर के हिसाब से काम करती है. साथ ही, वह कर्व के हिसाब से काम करती है. |
enabled |
ज़रूरी नहीं है. बूलियन से पता चलता है कि लाइटिंग कर्व की सेटिंग चालू है या नहीं. नई सेटिंग बनाते समय, डिफ़ॉल्ट रूप से true पर सेट होती है. जब अपडेट कमांड से enabled को हटा दिया जाता है, तो enabled की स्थिति नहीं बदलती. |
लाइटिंग कर्व की सेटिंग देखना
किसी स्ट्रक्चर के लिए कॉन्फ़िगर किए गए लाइटिंग कर्व की जांच करने के लिए, Structure से Google.LightingCurveTrait ट्रेट को वापस पाएं और उसका 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"
)
}
}
}
लाइटिंग कर्व की सेटिंग बनाना
किसी स्ट्रक्चर पर लाइटिंग कर्व का नया शेड्यूल बनाने के लिए, कम से कम दो CurvePoint एंट्री वाला LightingCurveConfig बनाएं. साथ ही, टारगेट लाइट (roomId या devices से तय की गई) और हफ़्ते के चालू दिन तय करें. इसके बाद, कॉन्फ़िगरेशन को createLightingCurveSetting() में पास करें. कमांड, नई लाइटिंग कर्व सेटिंग को असाइन किया गया यूनीक settingId दिखाता है.
इस उदाहरण में, किसी कमरे के लिए हफ़्ते के दिनों में रोशनी का कर्व बनाया गया है. इसमें रोशनी की चमक सुबह 7:00 बजे 30% से बढ़कर सुबह 9:00 बजे 80% हो जाती है और रात 9:00 बजे 20% हो जाती है:
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
}
पूरे कमरे के बजाय, रोशनी करने वाले चुनिंदा डिवाइसों को टारगेट करने के लिए, Google.LightingCurveTrait.TargetDevices का इस्तेमाल करके devices पैरामीटर दें:
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
लाइटिंग कर्व की सेटिंग अपडेट करना
किसी मौजूदा लाइटिंग कर्व में बदलाव करने के लिए, जैसे कि उसके कर्व पॉइंट बदलना, हफ़्ते के चालू दिनों को अपडेट करना या शेड्यूल को चालू और बंद करना—टारगेट settingId और अपडेट किए गए LightingCurveConfig के साथ updateLightingCurveSetting() को कॉल करें.
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
)
}
लाइटिंग कर्व की सेटिंग मिटाना
किसी होम से लाइटिंग कर्व की सेटिंग हटाने के लिए, deleteLightingCurveSetting() को कॉल करें. साथ ही, उस सेटिंग का settingId दें जिसे आपको मिटाना है.
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)
}