الأجهزة المتعددة الأجزاء على iOS

تتألف بعض أجهزة Matter من نقاط نهاية متعددة لها نوع الجهاز نفسه. أجهزة Matter الأخرى هي أجهزة هرمية، حيث تكون نقاط النهاية مضمّنة في نقاط نهاية أخرى. في واجهات برمجة التطبيقات لمنزل Google، يُشار إلى كلا النوعين من الأجهزة باسم الأجهزة المتعددة الأجزاء.

تمثيل مسطّح

قبل الإصدار 1.8 من واجهات برمجة التطبيقات لمنزل Google، كانت الأجهزة المتعددة الأجزاء ممثَّلة في واجهات برمجة التطبيقات لمنزل Google كمجموعة من الأجهزة المنفصلة وغير المرتبطة. ويُشار إلى ذلك باسم التمثيل المسطّح.

على سبيل المثال، يظهر جهاز واحد على شكل لوحة مثبتة على الحائط مع أربعة مفاتيح في واجهات برمجة تطبيقات Home على أنّه أربعة أجهزة مختلفة وغير مرتبطة. ويمكن تمثيل جهاز Matter هرمي، مثل الثلاجة، في واجهات برمجة التطبيقات لمنزل Google كمجموعة من الأجهزة، كل منها يتوافق مع إحدى نقاط النهاية.

  • مثال على لوحة حائط تتضمّن مفاتيح متعددة تعرض تمثيل Matter الأصلي وعرضًا مسطّحًا لواجهة برمجة التطبيقات Home

    تمثيل مسطّح للوحة حائط بأربعة مفاتيح

  • مثال على ثلاجة يعرض تمثيل Matter الأصلي وعرضًا مسطّحًا لواجهة برمجة التطبيقات Home API

    تمثيل مسطّح لثلاجة

الشكل 1: أمثلة على العرض المسطّح

تمثيل متعدد الأجزاء

بدءًا من الإصدار 1.8 من واجهات برمجة التطبيقات لمنزل Google، يمكن تمثيل الجهاز المتعدد الأجزاء في واجهة برمجة التطبيقات كجهاز واحد. لتفعيل هذا السلوك، استدعِ طريقة devices() على مثيل Home واضبط المَعلمة enableMultipartDevices على true:

let devices = try await self.home.devices(enableMultipartDevices: true).list()
    let device = devices.first { $0.id == powerStrip.device.id }
    let outlets = try await device.types.getAll(of: OnOffPluginUnitDeviceType.self)

توضّح المخطّطات التالية كيف يؤثّر الخيار enableMultipartDevices في طريقة عرض جهاز متعدّد الأجزاء في واجهات برمجة تطبيقات Home:

  • مثال على لوحة حائط تتضمّن مفاتيح متعددة تعرض تمثيل Matter الأصلي وعرض متعدد الأجزاء باستخدام Home API

    تمثيل متعدد الأجزاء للوحة جدارية

  • مثال على ثلاجة يعرض تمثيل Matter الأصلي وعرض Home API المتعدد الأجزاء

    تمثيل متعدد الأجزاء لثلاجة

الشكل 2: أمثلة على العرض المتعدد الأجزاء

يمكنك دائمًا الحصول على التمثيل المسطّح من خلال إغفال المَعلمة enableMultipartDevices أو ضبطها على false.

في الجهاز المتعدد الأجزاء، يُطلق على كل مثيل من مكونات نوع الجهاز اسم جزء.

يمكن الوصول إلى الأجزاء مباشرةً على الجهاز الرئيسي أو جزء بطريقة هرمية، باستخدام أنواع الأجهزة أو علامات Matter الدلالية. يتم تنفيذ العلامات الدلالية في واجهات برمجة التطبيقات الخاصة بمنصة Home باستخدام SemanticTag.

تتيح فئة DeviceType للمطوّرين التنقّل في شجرة الجهاز من خلال طريقة parts():

let outlet1 = await device.parts.getAll(of: OnOffPluginUnitDeviceType.self).first {
  $0.tags.contains(SemanticTag.CommonNumber.one)
}
let outlet3 = await device.parts.getAll(of: OnOffPluginUnitDeviceType.self).first {
  $0.tags.contains(SemanticTag.CommonNumber.three)
}

يوضّح المثال التالي كيفية الوصول إلى أجزاء جهاز الثلاجة:

let refrigerator: RefrigeratorDeviceType? =
   await home.devices(enableMultipartDevices: true).first { $0.id == FRIDGE_ID }
// Get different cabinets of the refrigerator
let freezer = refrigerator!.parts(type: TemperatureControlledCabinetDeviceType.self).first {
  $0.tags.contains(SemanticTag.Refrigerator.freezer)
}