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