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

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

تمثيل مسطّح

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

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

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

    تمثيل مسطّح للوحة جدارية تتضمّن 4 مفاتيح

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

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

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

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

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

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

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

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

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

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

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

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

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

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

يمكن الوصول إلى الأجزاء مباشرةً إما على الجهاز الرئيسي أو على جزء بطريقة هرمية، باستخدام أنواع الأجهزة أو علامات Matter الدلالية. يتم تنفيذ العلامات الدلالية في Home APIs باستخدام 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)
}