O tipo de dispositivo Chime fundamental pode ser implementado usando o
padrão Matter-based
Matter.ChimeTrait
ou a versão personalizada do Google do traço,
Google.ChimeTrait,
que, além dos recursos especificados no padrão
Matter, oferece suporte a campainhas externas.
Um dispositivo de campainha também pode implementar o
Matter.IdentifyTrait,
que oferece uma maneira de identificar o dispositivo de campainha por visão ou som.
Sempre verifique se um dispositivo é compatível com atributos e comandos antes de usar qualquer recurso ou tentar atualizar atributos. Consulte Controlar dispositivos no iOS para mais informações.
| Tipo de dispositivo das APIs do Home | Características | App de exemplo em Swift | Caso de uso |
|---|---|---|---|
|
Campainha
Um dispositivo que pode tocar uma variedade de sons pré-instalados e geralmente é usado com uma campainha, uma campainha de áudio ou uma campainha com vídeo. |
Traços obrigatórios matter ChimeTrait |
Campainha |
Receber informações básicas sobre um dispositivo
Implementado no app de exemplo para iOS
O traço BasicInformation
inclui informações como nome do fornecedor, ID do fornecedor, ID do produto,
nome do produto (inclui informações do modelo) e versão do software de um dispositivo:
let vendorName = basicInfoTrait.attributes.vendorName! let vendorID = basicInfoTrait.attributes.vendorID! let productID = basicInfoTrait.attributes.productID! let productName = basicInfoTrait.attributes.productName! let softwareVersion = basicInfoTrait.attributes.softwareVersion!
Suporte a várias partes
Um toque pode ser composto de vários tipos de dispositivos, incluindo um Chime e, opcionalmente, um alto-falante. Além disso, alguns sinos incorporam um Thread Border Router (TBR). Para garantir a maior compatibilidade possível, os apps de APIs Home que controlam campainhas precisam ser programados para acomodar dispositivos de campainha multipartes. Consulte Dispositivos multipartes para mais informações.
Cada dispositivo de campainha multipartes precisa ser representado no app por um único bloco. O dispositivo Chime precisa ser o principal, e um alto-falante infantil precisa ser uma parte do Chime.
O volume do alto-falante aparece como uma configuração principal de um dispositivo Chime.
Mapeamento OnOff
Para um toque com um tipo de dispositivo Chime e Speaker, um botão OnOff em um
app de controle precisa ser mapeado para o atributo Enabled do Chime.
De acordo com a especificação da biblioteca de dispositivos Matter, definir o atributo Enabled da característica Chime como False pode, além de desativar o Chime, agir como um interruptor de mudo global que suprime todos os indicadores audíveis e visuais.
Suporte para automação
Como mencionado anteriormente, um ChimeDeviceType pode ter várias partes. Por isso, os desenvolvedores são incentivados a tratar todos os sinos como dispositivos multipartes, e isso continua sendo válido no caso de automações que usam sinos.
Os toques podem ser usados em ativações e ações de automação.
Qualquer dispositivo componente usado na automação e conectado ao dispositivo Chime principal precisa ser referenciado usando um AutomationPartPath.
A automação a seguir demonstra como criar uma automação com um toque multipart que implementa a característica Chime e um alto-falante. A automação é acionada quando a porta da frente é aberta:
import GoogleHomeSDK import GoogleHomeTypes typealias ChimeTrait = Matter.ChimeTrait typealias OpenCloseTrait = Google.OpenCloseTrait // Fetch devices using the multipart device model. let multipartDevices = try await home.devices(enableMultipartDevices: true).list() guard let chimeParentDevice = multipartDevices.first(where: { $0.types.contains(ChimeDeviceType.self) }) else { return } guard let doorDevice = multipartDevices.first(where: { $0.types.contains(GoogleDoorDeviceType.self) }) else { return } // Extract the AutomationPartPath for the specific Chime part guard let chimeType = await chimeParentDevice.types.get(ChimeDeviceType.self), let chimePartPath = chimeParentDevice.automationPart(chimeType) else { return } let starterNode = starter(doorDevice, GoogleDoorDeviceType.self, OpenCloseTrait.self) let doorOpenClose = stateReader(doorDevice, GoogleDoorDeviceType.self, OpenCloseTrait.self) // Build the automation let chimeAutomation = automation( name: "Multipart Chime Demo", description: "Activate the chime when the door is opened" ) { starterNode condition { starterNode.openPercent.unwrapOptional().greaterThan(0) } // Action: Play a chime sound action(chimePartPath) { ChimeTrait.playChimeSound() } }
Consulte Automações de dispositivos multipartes para mais informações sobre automações usando dispositivos multipartes.
Verificar a conectividade de um dispositivo
A conectividade de um dispositivo é verificada no nível do tipo de dispositivo, porque alguns dispositivos são compatíveis com vários tipos. O estado retornado é uma combinação dos estados de conectividade de todas as características do dispositivo.
let lightConnectivity = dimmableLightDeviceType.metadata.sourceConnectivity .connectivityState
Um estado de partiallyOnline pode ser observado no caso de tipos de dispositivos mistos
quando não há conectividade com a Internet. As características padrão do Matter ainda podem estar on-line devido ao roteamento local, mas as características baseadas na nuvem vão ficar off-line.
Receber o endereço IP do dispositivo
Para encontrar o endereço IP do dispositivo, use o atributo networkInterfaces do
GeneralDiagnosticsTrait.
Os endereços são retornados como objetos Data, que podem ser formatados em strings IPv4 ou IPv6 padrão usando a estrutura Network:
func getIpAddresses(trait: Matter.GeneralDiagnosticsTrait) -> [String] {
let interfaces = trait.attributes.networkInterfaces ?? []
var ipAddresses: [String] = []
for interface in interfaces {
for data in interface.iPv4Addresses {
if let ipv4 = IPv4Address(data) {
ipAddresses.append(String(describing: ipv4))
}
}
for data in interface.iPv6Addresses {
if let ipv6 = IPv6Address(data) {
ipAddresses.append(String(describing: ipv6))
}
}
}
return ipAddresses
}