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