אפשר להטמיע את סוג המכשיר הבסיסי של Chime באמצעות הגרסה הרגילה של המאפיין Matter שמבוססת על Matter.ChimeTrait, או באמצעות הגרסה המותאמת אישית של Google למאפיין, Google.ChimeTrait, שתומכת בצלילי פעמון חיצוניים בנוסף ליכולות שמצוינות בתקן Matter.
יכול להיות שמכשיר הצלצול יטמיע גם את Matter.IdentifyTrait, שמאפשר לזהות את מכשיר הצלצול באמצעות ראייה או שמיעה.
לפני שמשתמשים בתכונות או מנסים לעדכן מאפיינים, תמיד צריך לבדוק אם המכשיר תומך במאפיינים ובפקודות. מידע נוסף זמין במאמר שליטה במכשירים ב-iOS.
| Home APIs Device Type | מאפיינים | אפליקציה לדוגמה של Swift | תרחיש לדוגמה |
|---|---|---|---|
|
צלצול פעמונים
מכשיר שיכול להשמיע מגוון צלילים שהותקנו מראש, ובדרך כלל משתמשים בו עם פעמון דלת, פעמון דלת קולי או פעמון עם וידאו. |
מאפיינים נדרשים matter ChimeTrait |
Doorbell |
קבלת מידע בסיסי על מכשיר
Implemented in Sample App for 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!
תמיכה בהודעות מרובות חלקים
אפשר להגדיר צליל פתיחה שיושמע בכמה סוגי מכשירים, כולל Chime ורמקול (אופציונלי). בנוסף, חלק מהצלילים כוללים Thread Border Router (TBR). כדי להבטיח תמיכה רחבה ככל האפשר, אפליקציות של Home APIs ששולטות במנגנוני צלצול צריכות להיות מותאמות למכשירים עם מנגנוני צלצול מרובי חלקים. מידע נוסף זמין במאמר בנושא מכשירים מרובי חלקים.
כל מכשיר עם מנגנון צלצול מורכב צריך להיות מיוצג באפליקציה על ידי משבצת אחת. מכשיר Chime צריך להיות המכשיר הראשי, ומכשיר Speaker לילדים צריך להיות חלק ממכשיר Chime.
עוצמת הקול של הרמקול צריכה להופיע כהגדרה ראשית במכשיר Chime.
מיפוי OnOff
במקרה של צלצול עם סוגי המכשירים Chime ו-Speaker, כפתור OnOff באפליקציית בקרה צריך להיות ממופה למאפיין Enabled של הצלצול.
בהתאם למפרט של Matter Device Library, הגדרת המאפיין Enabled של התכונה Chime לערך False עשויה, בנוסף להשבתת הצלצול, לפעול כמו מתג השתקה גלובלי שמשתיק את כל האינדיקטורים הקוליים והוויזואליים.
תמיכה בפעולות אוטומטיות
כמו שצוין קודם, מכיוון של-ChimeDeviceType יכולים להיות כמה חלקים, מומלץ למפתחים להתייחס לכל הצלצולים כמכשירים מרובי חלקים, וזה נכון גם במקרה של אוטומציות שמשתמשות בצלצולים.
אפשר להשתמש בצלילים בפעולות אוטומטיות ובסימנים לתחילת פעולה.
כל רכיב במכשיר Chime הראשי שמשמש באוטומציה צריך להיות מוזכר באמצעות AutomationPartPath.
הפעולות האוטומטיות הבאות מדגימות איך ליצור פעולות אוטומטיות עם מנגנון צלצול רב-חלקי שמיישם את מאפיין הצלצול וגם את הרמקול. האוטומציה מופעלת כשפותחים את דלת הכניסה:
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, שאפשר לעצב אותם למחרוזות 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
}