تتكوّن بعض أجهزة "Matter" من عدة نقاط نهاية من نوع الجهاز نفسه. أما أجهزة Matter الأخرى، فهي هرمية، مع نقاط نهاية متداخلة داخل نقاط نهاية أخرى. في واجهات برمجة التطبيقات لمنزل Google، يُشار إلى كلا النوعَين من الأجهزة باسم الأجهزة المتعدّدة الأجزاء.
تمثيل مسطّح
قبل الإصدار 1.8 من واجهات برمجة التطبيقات لمنزل Google، يتم تمثيل الأجهزة المتعدّدة الأجزاء بواسطة واجهات برمجة التطبيقات لمنزل Google كمجموعة من الأجهزة المنفصلة وغير المرتبطة ببعضها. ويُشار إلى ذلك باسم التمثيل المسطّح.
على سبيل المثال، يظهر جهاز لوحة حائط واحد يتضمّن أربعة مفاتيح في Home APIs كأربعة أجهزة مختلفة وغير مرتبطة. ويمكن تمثيل جهاز Matter هرمي، مثل الثلاجة، في واجهات برمجة التطبيقات لمنزل Google كمجموعة من الأجهزة، يتوافق كل منها مع إحدى نقاط النهاية.
تمثيل مسطّح للوحة جدارية تتضمّن 4 مفاتيح
تمثيل مسطّح لثلاجة
تمثيل متعدد الأجزاء
بدءًا من الإصدار 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:
تمثيل متعدد الأجزاء للوحة حائط
تمثيل متعدد الأجزاء لثلاجة
يمكنك دائمًا الحصول على التمثيل المسطّح من خلال حذف المَعلمة 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) }