يمكن تنفيذ نوع جهاز Chime الأساسي باستخدام السمة المستندة إلى معيار Matter
com.google.home.matter.standard.Chime
أو باستخدام نسخة Google المخصّصة من السمة
com.google.home.google.Chime،
التي تتوافق مع أجراس خارجية بالإضافة إلى الإمكانات المحدّدة في معيار Matter.
قد يطبّق جهاز الرنين أيضًا السمة Identify، التي توفّر وسيلة للتعرّف على جهاز الرنين من خلال الرؤية أو الصوت.
يجب دائمًا التحقّق من توفّر السمات والأوامر لجهاز معيّن قبل استخدام أي ميزات أو محاولة تعديل السمات. لمزيد من المعلومات، يمكنك الاطّلاع على التحكّم في الأجهزة على Android.
| نوع الجهاز في Home APIs | السمات | نموذج تطبيق Kotlin | حالة الاستخدام |
|---|---|---|---|
|
رنين
جهاز يمكنه تشغيل مجموعة من الأصوات المثبّتة مسبقًا ويُستخدم عادةً مع جرس الباب أو جرس الباب الصوتي أو جرس الباب المزود بكاميرا فيديو |
السمات المطلوبة matter Chime |
جرس الباب |
الحصول على معلومات أساسية عن جهاز
تم التنفيذ في "تطبيق العيّنة" لنظام التشغيل Android
يتضمّن النوع BasicInformation معلومات، مثل اسم المورّد ومعرّف المورّد ومعرّف المنتج واسم المنتج (يتضمّن معلومات الطراز) وإصدار البرنامج للجهاز:
// Get device basic information. All general information traits are on the RootNodeDevice type. device.type(RootNodeDevice).first().standardTraits.basicInformation?.let { basicInformation -> println("vendorName ${basicInformation.vendorName}") println("vendorId ${basicInformation.vendorId}") println("productId ${basicInformation.productId}") println("productName ${basicInformation.productName}") println("softwareVersion ${basicInformation.softwareVersion}") }
التوافق مع الملفات المتعددة الأجزاء
قد يتألف الرنين من أنواع متعددة من الأجهزة، بما في ذلك جهاز Chime ومكبّر صوت اختياري. بالإضافة إلى ذلك، تتضمّن بعض الأجراس Thread Border Router (TBR). لضمان توفير أكبر قدر من التوافق، يجب تصميم تطبيقات واجهات برمجة التطبيقات الخاصة بمنصة Home التي تتحكّم في الأجراس لتتوافق مع أجهزة الأجراس المتعددة الأجزاء. لمزيد من المعلومات، يمكنك الاطّلاع على الأجهزة المتعددة الأجزاء.
يجب أن يتم تمثيل كل جهاز جرس متعدد الأجزاء في التطبيق بمربّع واحد. يجب أن يكون جهاز Chime هو الجهاز الأساسي، وأن يكون مكبّر صوت الطفل جزءًا من جهاز Chime.
يجب أن يظهر مستوى صوت مكبّر الصوت كإعداد أساسي لجهاز Chime.
OnOff mapping
بالنسبة إلى جرس الباب الذي يتضمّن نوعَي الجهازين "جرس الباب" و"مكبّر الصوت"، يجب ربط زر OnOff في تطبيق التحكّم بالسمة Enabled الخاصة بجرس الباب.
وفقًا لمواصفات "مكتبة أجهزة" Matter، قد يؤدي ضبط السمة Enabled الخاصة بميزة "الرنين" على القيمة False إلى إيقاف الرنين، كما قد يعمل كزر كتم صوت شامل يكتم جميع المؤشرات المسموعة والمرئية.
دعم التشغيل الآلي
كما ذكرنا سابقًا، بما أنّ ChimeDevice
قد يتضمّن أجزاءً متعددة، ننصح المطوّرين بالتعامل مع جميع الأجراس على أنّها أجهزة متعددة الأجزاء، ويبقى هذا صحيحًا في حالة عمليات التشغيل الآلي التي تستخدم الأجراس.
يمكن استخدام الرنين في إجراءات التفعيل التلقائي.
يجب الإشارة إلى أي جهاز فرعي ضمن جهاز Chime الرئيسي يتم استخدامه في عملية التشغيل الآلي باستخدام AutomationPartPath.
يوضّح عملية التشغيل الآلي التالية كيفية إنشاء عملية تشغيل آلي باستخدام رنين متعدد الأجزاء ينفّذ سمة Chime بالإضافة إلى سمة Speaker. يتم تشغيل عملية التشغيل الآلي عندما يتم فتح الباب الأمامي:
import com.google.home.automation.automation import com.google.home.automation.greaterThan import com.google.home.google.GoogleDoorDevice import com.google.home.google.OpenClose import com.google.home.matter.standard.ChimeDevice import com.google.home.matter.standard.Chime // ... // Fetch devices val devices = homeManager.devices() // Fetch devices using the multipart device model. val multipartDevices = homeManager.devices(enableMultipartDevices = true) val doorDevice = devices.first() { it.has(GoogleDoorDevice) && it.has(OpenClose) } // Obtain a reference to the chime device. val chime = multipartDevices.first() { it.has(ChimeDevice) && it.has(Chime) } // Extract the AutomationPartPath for the specific Chime part val chimePartPath = chime.automationPart(chime.part(ChimeDevice).first())!! // Build the automation val chimeAutomation = automation { sequential { val doorOpenClose = stateReader<_>(doorDevice, GoogleDoorDevice, OpenClose) // Starter: When the door state changes val starterNode = starter<_>(doorDevice, GoogleDoorDevice, OpenClose) condition { expression = doorOpenClose.openPercent greaterThan(0) } // Action: Play a chime sound action(chimePartPath) { command(Chime.playChimeSound()) } } }
لمزيد من المعلومات حول عمليات التشغيل الآلي التي تستخدم أجهزة متعددة الأجزاء، يمكنك الاطّلاع على عمليات التشغيل الآلي للأجهزة المتعددة الأجزاء.
التحقّق من إمكانية اتصال جهاز
يتم في الواقع التحقّق من إمكانية الاتصال بجهاز على مستوى نوع الجهاز، لأنّ بعض الأجهزة تتوافق مع أنواع أجهزة متعددة. الحالة التي يتم عرضها هي مزيج من حالات الاتصال لجميع السمات على هذا الجهاز.
تم التنفيذ في "تطبيق العيّنة" لنظام التشغيل Androidval lightConnectivity = dimmableLightDevice.metadata.sourceConnectivity.connectivityState
قد يتم رصد حالة PARTIALLY_ONLINE في حال
تضمين أنواع أجهزة مختلفة عند عدم توفّر اتصال بالإنترنت.
قد تظل سمات Matter العيّنات العشوائية متاحة على الإنترنت بسبب التوجيه المحلي، ولكن ستكون سمات العيّنات العشوائية المستندة إلى السحابة الإلكترونية غير متاحة.
الحصول على عنوان IP للجهاز
للعثور على عنوان IP الخاص بالجهاز، استخدِم السمة networkInterfaces الخاصة بالسمة GeneralDiagnostics. يتم عرض العناوين على شكل مصفوفات بايت، ويمكنك تنسيقها لتصبح سلاسل IPv4 أو IPv6 عادية:
val ipAddresses =
trait.networkInterfaces?.flatMap { networkInterface ->
(networkInterface.ipv4Addresses + networkInterface.ipv6Addresses).mapNotNull { bytes ->
try {
java.net.InetAddress.getByAddress(bytes).hostAddress
} catch (e: java.net.UnknownHostException) {
null
}
}
} ?: emptyList()