نوع دستگاه Chime بنیادی را میتوان بااستفاده از
استاندارد Matter-مبنا
Matter.ChimeTrait
یا نسخه سفارشی خود Google از این مشخصه
Google.ChimeTrait
پیادهسازی کرد که علاوهبر قابلیتهای مشخصشده در
استاندارد Matter، از زنگهای خارجی نیز پشتیبانی میکند.
دستگاه زنگی ممکن است
Matter.IdentifyTrait را نیز پیادهسازی کند،
که روشی برای شناسایی دستگاه زنگی ازطریق دید یا صدا ارائه میدهد.
همیشه قبلاز استفاده از هر ویژگی یا تلاش برای بهروزرسانی مشخصهها، پشتیبانی از مشخصه و فرمان را برای دستگاه بررسی کنید. برای اطلاعات بیشتر، کنترل دستگاهها در iOS را ببینید.
| نوع دستگاه Home APIs | ویژگیها | برنامه نمونه Swift | کاربرد |
|---|---|---|---|
|
ناقوس
دستگاهی که میتواند از طیف وسیعی از صداهای ازپیش نصبشده پخش کند و معمولاً با زنگ در، زنگ در صوتی، یا زنگ در تصویری استفاده میشود. |
ویژگیهای الزامی matter ChimeTrait |
زنگ در |
دریافت اطلاعات پایه درباره دستگاه
در «برنامه نمونه برای 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!
پشتیبانی از چندبخشی
زنگ در میتواند از چند نوع دستگاه تشکیل شود، ازجمله «زنگ در» و بهصورت اختیاری «بلندگو». علاوهبراین، برخیاز زنگها شامل Thread Border Router (TBR) میشوند. برای اطمینان از گستردهترین پشتیبانی، برنامههای «میاناهای برنامهسازی کاربردی خانه» که زنگها را کنترل میکنند باید بهگونهای نوشته شوند که دستگاههای زنگ چندبخشی را دربر بگیرند. برای اطلاعات بیشتر، به دستگاههای چندبخشی مراجعه کنید.
هر دستگاه زنگ چندبخشی باید با یک کاشی در برنامه نشان داده شود. دستگاه Chime باید دستگاه اصلی باشد و «بلندگوی کودک» باید بخشی از Chime باشد.
میزان صدای بلندگو باید بهعنوان تنظیم اصلی دستگاه «زنگ» نشان داده شود.
تخصیص روشن/خاموش
برای زنگی که هم نوع دستگاه «زنگ» و هم نوع دستگاه «بلندگو» را دارد، دکمه «روشن/خاموش» در برنامه کنترلکننده باید به مشخصه Enabled «زنگ» تخصیص داده شود.
طبق مشخصات «کتابخانه دستگاه» Matter، تنظیم ویژگی Enabled «خصوصیت زنگ» روی False ممکن است علاوهبر غیرفعال کردن «زنگ»، مانند یک کلید بیصدا کردن جهانی عمل کند که همه نشانگرهای دیداری و شنیداری را سرکوب میکند.
پشتیبانی خودکارسازی
همانطور که قبلاً گفته شد، چون ChimeDeviceType ممکن است چند بخش داشته باشد،
توسعهدهندگان تشویق میشوند که با همه زنگها بهعنوان دستگاههای چندبخشی رفتار کنند، و این
در مورد خودکارسازیهایی که از زنگها استفاده میکنند نیز صادق است.
از زنگها میتوان در آغازگرها و کنشهای خودکارسازی استفاده کرد.
هر دستگاه جزء تشکیلدهنده تحت دستگاه Chime اصلی که در
خودکارسازی استفاده میشود باید بااستفاده از
AutomationPartPath ارجاع داده شود.
خودکارسازی زیر نشان میدهد که چگونه میتوان خودکارسازیای با زنگ چندبخشی ایجاد کرد که ویژگی Chime و همچنین Speaker را پیادهسازی میکند. وقتی در ورودی باز میشود، این خودکارسازی راهاندازی میشود:
import GoogleHomeSDK import GoogleHomeTypes typealias ChimeTrait = Matter.ChimeTrait typealias OpenCloseTrait = Google.OpenCloseTrait // Fetch devices using the multipart device model. let multipartDevices = try await home.devices(enableMultipartDevices: true).list() guard let chimeParentDevice = multipartDevices.first(where: { $0.types.contains(ChimeDeviceType.self) }) else { return } guard let doorDevice = multipartDevices.first(where: { $0.types.contains(GoogleDoorDeviceType.self) }) else { return } // Extract the AutomationPartPath for the specific Chime part guard let chimeType = await chimeParentDevice.types.get(ChimeDeviceType.self), let chimePartPath = chimeParentDevice.automationPart(chimeType) else { return } let starterNode = starter(doorDevice, GoogleDoorDeviceType.self, OpenCloseTrait.self) let doorOpenClose = stateReader(doorDevice, GoogleDoorDeviceType.self, OpenCloseTrait.self) // Build the automation let chimeAutomation = automation( name: "Multipart Chime Demo", description: "Activate the chime when the door is opened" ) { starterNode condition { starterNode.openPercent.unwrapOptional().greaterThan(0) } // Action: Play a chime sound action(chimePartPath) { ChimeTrait.playChimeSound() } }
برای کسب اطلاعات بیشتر درباره خودکارسازیهای چندبخشی دستگاه، به خودکارسازیهای چندبخشی دستگاه مراجعه کنید.
بررسی اتصالپذیری دستگاه
اتصالپذیری برای دستگاه درواقع در سطح نوع دستگاه بررسی میشود زیرا برخیاز دستگاهها از چندین نوع دستگاه پشتیبانی میکنند. وضعیت برگشتی ترکیبی از وضعیتهای اتصالپذیری برای همه مشخصههای آن دستگاه است.
let lightConnectivity = dimmableLightDeviceType.metadata.sourceConnectivity .connectivityState
درصورت وجود انواع دستگاه مختلط و عدم اتصال به اینترنت، ممکن است وضعیت partiallyOnline مشاهده شود. ممکن است ویژگیهای استاندارد Matter بهدلیل مسیریابی محلی همچنان آنلاین باشند، اما ویژگیهای مبتنی بر ابر آفلاین خواهند بود.
دریافت نشانی IP دستگاه
برای پیدا کردن نشانی IP دستگاه، از مشخصه networkInterfaces در
GeneralDiagnosticsTrait استفاده کنید.
نشانیها بهعنوان 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
}