In my RequestHandler.swift, this is extension of MatterAddDeviceExtensionRequestHandler
After commission device is completion.
I call getBaseDevice method in the MTRDeviceController.
func controller(_ controller: MTRDeviceController, commissioningComplete error: Error?, nodeID: NSNumber?) {
if error != nil {
os_log(.default, "TrinhVM: commissioningComplete error -> \(error!.localizedDescription)")
} else {
os_log(.default, "TrinhVM: commissioningComplete ->\(nodeID)")
chipController.getBaseDevice(1, queue: DispatchQueue.main, completionHandler: { chipDevice, error in
if chipDevice == nil {
os_log(.debug, "Status: Failed to establish a connection with the device")
} else {
os_log(.error, "Status: Success to establish a connection with the device: \(chipDevice?.description ?? "")")
let onOff = MTRBaseClusterOnOff(device: chipDevice, endpointID: 1, queue: DispatchQueue.main)
// Send the "on" command to the device
onOff?.on { error in
let resultString: String
if let error = error {
resultString = String(format: "An error occurred: 0x%02lx", error._code)
} else {
resultString = "On command success"
}
debugPrint(resultString)
}
}
})
}
}
It's working well, the status is always "Status: Success to establish a connection with the device".
And I can control the lightbulb here with chipDevice (chipDevice is MTRBaseDevice).
But, after the commission device has finished in the extension, get back the application scheme.
I call method:
chipController.getBaseDevice(1, queue: DispatchQueue.main, completionHandler: { chipDevice, error in
if chipDevice == nil {
os_log(.debug, "Status: Failed to establish a connection with the device")
} else {
os_log(.error, "Status: Success to establish a connection with the device: \(chipDevice?.description ?? "")")
let onOff = MTRBaseClusterOnOff(device: chipDevice, endpointID: 1, queue: DispatchQueue.main)
// Send the "on" command to the device
onOff?.on { error in
let resultString: String
if let error = error {
resultString = String(format: "An error occurred: 0x%02lx", error._code)
} else {
resultString = "On command success"
}
debugPrint(resultString)
}
}
})
It's always show timeout error .
Mdns: Resolve failure (src/platform/Darwin/DnssdImpl.cpp:476: CHIP Error 0x00000074: The operation has been cancelled)
OperationalSessionSetup[1:0000000000000015]: operational discovery failed: src/lib/address_resolve/AddressResolve_DefaultImpl.cpp:119: CHIP Error 0x00000032: Timeout
Creating NSError from src/lib/address_resolve/AddressResolve_DefaultImpl.cpp:119: CHIP Error 0x00000032: Timeout (context: (null))
"Failed to establish a connection with the device Optional(Error Domain=MTRErrorDomain Code=9 \"Transaction timed out.\" UserInfo={NSLocalizedDescription=Transaction timed out.})"
I don't know why the same method, works in RequestHandler.swift but not in AppScheme.
Any support for this issue.
Thank and best regards.