راهنمای دستگاه Chime برای Android

نوع دستگاه Chime بنیادی را می‌توان بااستفاده از ویژگی استاندارد Matter-محور com.google.home.matter.standard.Chime یا نسخه سفارشی خود Google از این ویژگی com.google.home.google.Chime پیاده‌سازی کرد که علاوه‌بر قابلیت‌های مشخص‌شده در استاندارد Matter، از زنگ‌های خارجی نیز پشتیبانی می‌کند. دستگاه زنگی ممکن است Identify مشخصه را نیز پیاده‌سازی کند که روشی برای شناسایی دستگاه زنگی ازطریق دید یا صدا ارائه می‌دهد.

همیشه قبل‌از استفاده از هر ویژگی یا تلاش برای به‌روزرسانی مشخصه‌ها، پشتیبانی از مشخصه و فرمان را برای دستگاه بررسی کنید. برای اطلاعات بیشتر، کنترل دستگاه‌ها در Android را ببینید.

نوع دستگاه Home APIs ویژگی‌ها برنامه نمونه Kotlin کاربرد

ناقوس

ChimeDevice

home.matter.0000.types.0146

دستگاهی که می‌تواند از طیف وسیعی از صداهای ازپیش نصب‌شده پخش کند و معمولاً با زنگ در، زنگ در صوتی، یا زنگ در تصویری استفاده می‌شود.

ویژگی‌های الزامی
     matter Chime

ویژگی‌های اختیاری
     matter شناسایی
زنگ در

دریافت اطلاعات پایه درباره دستگاه

   پیاده‌سازی‌شده در «برنامه نمونه برای 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}")
    }

پشتیبانی از چندبخشی

زنگ در می‌تواند از چند نوع دستگاه تشکیل شود، ازجمله «زنگ در» و به‌صورت اختیاری «بلندگو». علاوه‌براین، برخی‌از زنگ‌ها شامل Thread Border Router (TBR) می‌شوند. برای اطمینان از گسترده‌ترین پشتیبانی، برنامه‌های «میاناهای برنامه‌سازی کاربردی خانه» که زنگ‌ها را کنترل می‌کنند باید به‌گونه‌ای نوشته شوند که دستگاه‌های زنگ چندبخشی را دربر بگیرند. برای اطلاعات بیشتر، به دستگاه‌های چندبخشی مراجعه کنید.

هر دستگاه زنگ چندبخشی باید با یک کاشی در برنامه نشان داده شود. دستگاه Chime باید دستگاه اصلی باشد و «بلندگوی کودک» باید بخشی از Chime باشد.

میزان صدای بلندگو باید به‌عنوان تنظیم اصلی دستگاه «زنگ» نشان داده شود.

تخصیص روشن/خاموش

برای زنگی که هم نوع دستگاه «زنگ» و هم نوع دستگاه «بلندگو» را دارد، دکمه «روشن/خاموش» در برنامه کنترل‌کننده باید به مشخصه 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())
    }
  }
}

برای کسب اطلاعات بیشتر درباره خودکارسازی‌های چندبخشی دستگاه، به خودکارسازی‌های چندبخشی دستگاه مراجعه کنید.

بررسی اتصال‌پذیری دستگاه

اتصال‌پذیری برای دستگاه درواقع در سطح نوع دستگاه بررسی می‌شود زیرا برخی‌از دستگاه‌ها از چندین نوع دستگاه پشتیبانی می‌کنند. وضعیت برگشتی ترکیبی از وضعیت‌های اتصال‌پذیری برای همه مشخصه‌های آن دستگاه است.

   پیاده‌سازی‌شده در «برنامه نمونه برای Android»   
val 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()