My matter accessory define an endpoint of type light, with a custom cluster.
if I connect my accessory using Home app, I'm I supposed to find HMService/HMCharacteristic corresponding to my custom matter cluster?
Is there any requirement on the custom cluster to have it visible in HomeKit ?
Thanks.
Matter
RSS for tagMatter is an IP-based, royalty-free connectivity protocol standard that enables communication among a wide range of smart devices.
Posts under Matter tag
34 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
Greetings!
I've added a Matter accessory via the Apple Home app. In my app, I'm attempting to commission this device and add it to my fabric. However, when I try to open the commissioning window, I receive an error stating, MTRBaseDevice doesn't support openCommissioningWindowWithDiscriminator over XPC.
It appears that opening a commissioning window via an XPC connection is not yet supported. Is there another method to commission the device? Can I retrieve the setup payload from the MTRBaseDevice object or the shared MTRDeviceController?
Here's the simplified version of my code:
var home: HMHome // HMHome received via HMHomeManager
var accessory: HMAccessory = home.accessory[0] // my Matter-supported accessory
let deviceController = MTRDeviceController.sharedController(
withID: home.matterControllerID as NSCopying,
xpcConnect: home.matterControllerXPCConnectBlock
)
let device = MTRBaseDevice(
nodeID: accessory.matterNodeID as NSNumber,
controller: deviceController
)
device.openCommissioningWindow(
withDiscriminator: 0,
duration: 900,
queue: .main) { payload, error in
if let payload {
// payload not received
} else if let error {
// I'm getting here "Error Domain=MTRErrorDomain Code=6 "(null)""
// and "MTRBaseDevice doesn't support openCommissioningWindowWithDiscriminator over XPC" logged in the console
print(error)
}
When the Homekit device is added to the home app and the device settings interface is opened, the supplier app will be displayed. We are currently developing a Matter product and would like to implement this feature. We consulted with the Matter testing agency and they said they need to communicate with Apple. However, they did not find a solution after consulting with Apple customer service. No one knows how to do it?
func perform() async throws
What are the abnormal errors thrown by the above ? Can you provide a clear list?
error:Error Domain=com.apple.MatterSupport Code=1 "(null)"
Where can I find the error information in the document?
MatterSupport / MatterAddDeviceRequest / perform()
What does this error mean: Error Domain=com.apple.MatterSupport Code=1
Reproduction steps
Xcode15.1
iPhone14Pro/iOS16.3
commission with MatterSupport
implementation
@objc class func commission(with setupPayload: MTRSetupPayload?) throws
{
MTRLog("MatterSupport start request")
let topology: MatterAddDeviceRequest.Topology = .init(
ecosystemName: "SmartHome",
homes: [
// .init(displayName: "smart office"),
// .init(displayName: "smart living"),
]
)
let request = MatterAddDeviceRequest(
topology: topology,
setupPayload: setupPayload
)
Task
{
do
{
try await request.perform()
} catch {
throw error
}
}
}
Always failed with
Error on commissioning step 'FindOperational': '../../../../../../../../Sources/CHIPFramework/connectedhomeip/src/credentials/CHIPCert.cpp:488: CHIP Error 0x0000004A: CA certificate not found'
relate issue: https://github.com/project-chip/connectedhomeip/issues/31309
I created a Matter device with a fan endpoint with fan_control attribute. When I setup this device via Google Home, I see the percent control for the fan. However, when I setup via the iOS Home app, I only see an on/off switch.
Is the fan_control.percent_current Matter attribute supported? Or any of the fan_control attributes?
I've been getting into Matter framework and succeeded to add a matter device into Apple Home app.
Then, I use a HomeKit base app to get that device and would like to control that device directly through Matter framework.
This is how I create a MTR Device Controller
static func create(withHmAccessory hmAccessory: HMAccessory, ofHome hmHome: HMHome) -> HomekitLockAccessory {
if #available(iOS 16.4, *) {
let matterNodeId = hmHome.matterControllerID as NSCopying
let controller = MTRDeviceController.sharedController(
withID: matterNodeId,
xpcConnect: hmHome.matterControllerXPCConnectBlock
)
return MatterHomekitLockAccessory(hmAccessory: hmAccessory, controller: controller)
}
return HomekitLockAccessory(hmAccessory: hmAccessory)
}
the controller never gets running and I'm not able to get that controllerNodeId from it.
Here is error log
How to set matter device endpoints default name?
eg. I have Light Panel with 2 endpoints.
endpoint 1 name: Open;
endpoint 2 name: Close;
I've tried FixedLabel, but it not work.
How to commission a device to our fabric after adding it using Matter.Support
We have the following configuration:
eero border router
our own thermostat device that we are developing
no home pod or home TV are used
We have followed this guide
https://developer.apple.com/documentation/mattersupport/adding-matter-support-to-your-ecosystem
and implemented Matter Extension, as Matter.Framework is no more allowed to pair device.
In Matter Extension the following callbacks are fired:
override func selectThreadNetwork(from threadScanResults: [MatterAddDeviceExtensionRequestHandler.ThreadScanResult]) async throws -> MatterAddDeviceExtensionRequestHandler.ThreadNetworkAssociation
override func commissionDevice(in home: MatterAddDeviceRequest.Home?, onboardingPayload: String, commissioningID: UUID) async throws
In our demo app the following function completes without errors
try await request.perform()
The thermostat device seems to be successfully commissioned.
In https://developer.apple.com/documentation/mattersupport/adding-matter-support-to-your-ecosystem there is a comment that says:
Use Matter.Framework APIs to pair the accessory to your application with the provided onboardingPayload.
How should this thing be done ?
We tried to start the matter controller in the old way:
func start() -> Bool
{
if (self.matterController == nil)
{
let storage = MatterStorage.shared
let factory = MTRDeviceControllerFactory.sharedInstance()
let factoryParams = MTRDeviceControllerFactoryParams(storage: storage)
do
{
try factory.start(factoryParams)
}
catch
{
return false
}
let keys = FabricKeys()
let params = MTRDeviceControllerStartupParams(signing: keys, fabricId: UInt64(fabricId), ipk: keys.ipk)
params.vendorID = NSNumber(value: self.vendorId)
self.matterController = try? factory.createController(onExistingFabric: params)
let controllerNid = self.matterController?.controllerNodeID
if (self.matterController == nil)
{
self.matterController = try? factory.createController(onNewFabric: params)
}
}
return (self.matterController != nil)
}
Certificate are generated locally as in Matter Darwin example.
We tried to call
let params = MTRCommissioningParameters()
matterController?.commissionNode(withID: NSNumber(value: self.deviceNid), commissioningParams: params)
in commissionDevice of Matter Extension but we get error:
Invalid object state.
To be able to paire a matter device on ios I need to installed on my iPhone the matter client developper profile as indicate on the apple documentation
Adding Matter support to your ecosystem | Apple Developer Documentation
(To test your app on the iOS or macOS device that initiates the pairing, download the developer profile now, then install it.)
When I do that it works perfectly.
Otherwise the documentation says that the profile is only needed for development but when I want to use my app from the apple store (validate by Apple) and when I remove the profile it doesn't work anymore.
What do I have to do to paire Matter device on iphone without the Matter client developer profile.
Added the MatterExtension for MatterAddDeviceExtensionRequestHandler as new Target. Everything is automatically generated.
But still only the default MatterAddDevice pickerView is displayed instead of MatterAddDeviceExtension?!
func play() {
Task {
let homes = [MatterAddDeviceRequest.Home(displayName: "my Home")]
let topology = MatterAddDeviceRequest.Topology(ecosystemName: "MyEcosystemName", homes: homes)
let request = MatterAddDeviceRequest(topology: topology)
do {
try await request.perform()
print("Successfully set up device!")
} catch {
print("Failed to set up device with error: \(error)")
}
}
}
Entitlements:
Matter Allow Setup Payload = YES
.plist is set up:
NSLocalNetworkUsageDescription
NSBonjourServices:
I'd like to learn how a Matter "Binding" can be created on iOS, e.g. via the "Matter" Framework.
I'm aware of the Matter Framework "Documentation" here.
But since it's missing any real description or documentation it's not helpful to me atm.
Any examples/ tutorials/ explanations are greatly appreciated.
On iOS 16.0, I added accessories via the MTRDeviceController class in the Matter.framework, and it worked fine.
But when I will phone upgrade to the latest version of the iOS (iOS 16.1.1), after I call "MTRDeviceController" class "pairDevice: onboardingPayload: error:" method. I get an error like this:
CHIP: [BLE] BLE:Error writing Characteristics in Chip service on the device: [The specified UUID is not allowed for this operation.]
According to the error message, I guess that the characteristics of a certain Bluetooth cannot be read and written. After trying to verify it, I find that the characteristics uuid of the Matter accessory: "18EE2EF5-263D-4559-959F-4F9C429F9D12" cannot be read.
So, my question is what can I do in iOS 16.1.1 to make my app work as well as it does on iOS 16.0.
Does anyone know if this is even supported at the moment? I've tried pairing a sample light application based on Silicon Lab's EFR32 but it's unable to find the OTBR on the network. [module](GitHub - SiliconLabs/matter: Matter is creating more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.) I'm also using the RaspberryPi 4/RCP combination as directed by Silicon Lab's documentation. I have no problems pairing the devices to the OTBR directly through its chiptool interface but Home isn't discovering the Thread network or showing me options to add the OTBR devices.
I'm currently running iOS 16.1 beta on my iPhone and I'm using a HomePod Mini which is on version 16.0 and has the HomeKit Matter Support profile installed.