راهنمای دستگاه Chime برای iOS

نوع دستگاه Chime بنیادی را می‌توان بااستفاده از استاندارد Matter-مبنا Matter.ChimeTrait یا نسخه سفارشی خود Google از این مشخصه Google.ChimeTrait پیاده‌سازی کرد که علاوه‌بر قابلیت‌های مشخص‌شده در استاندارد Matter، از زنگ‌های خارجی نیز پشتیبانی می‌کند. دستگاه زنگی ممکن است Matter.IdentifyTrait را نیز پیاده‌سازی کند، که روشی برای شناسایی دستگاه زنگی ازطریق دید یا صدا ارائه می‌دهد.

همیشه قبل‌از استفاده از هر ویژگی یا تلاش برای به‌روزرسانی مشخصه‌ها، پشتیبانی از مشخصه و فرمان را برای دستگاه بررسی کنید. برای اطلاعات بیشتر، کنترل دستگاه‌ها در iOS را ببینید.

نوع دستگاه Home APIs ویژگی‌ها برنامه نمونه Swift کاربرد

ناقوس

ChimeDeviceType

home.matter.0000.types.0146

دستگاهی که می‌تواند از طیف وسیعی از صداهای ازپیش نصب‌شده پخش کند و معمولاً با زنگ در، زنگ در صوتی، یا زنگ در تصویری استفاده می‌شود.

ویژگی‌های الزامی
     matter ChimeTrait

ویژگی‌های اختیاری
     matter IdentifyTrait
زنگ در

دریافت اطلاعات پایه درباره دستگاه

   در «برنامه نمونه برای 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
}