Description
Hardware
SparkFun Thing Plus Matter - MGM240P
Core version
2.2.0
Arduino IDE version
2.3.3
Operating system
macOS 15.1
Radio stack variant
Matter
OpenThread Border Router device (if using Matter)
Apple iPhone 15 PRO
Issue description
According to https://appleinsider.com/articles/24/09/18/apple-enables-direct-thread-control-for-smart-home-devices-with-ios-18 iOS 18 supports direct Thread connection.
Currently this does not work - the thread device is detected by the phone and pairing is initiated. The process hangs at the "adding devices" step and times out eventually with iOS presenting and error "Unable to Add Accessory".
Serial output
12:45:42.403 -> Matter temperature sensor
12:45:42.799 -> Matter device is not commissioned
12:45:42.799 -> Commission it to your Matter hub with the manual pairing code or QR code
12:45:42.833 -> Manual pairing code: 34970112332
12:45:42.833 -> QR code URL: https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%3A6FCJ142C00KA0648G00
12:46:04.228 -> Waiting for Thread network...
12:46:38.355 -> Connected to Thread network
12:46:38.355 -> Waiting for Matter device discovery...
RTT output (if using Matter)
No response
Minimal reproducer code
#include <Matter.h>
#include <MatterTemperature.h>
MatterTemperature matter_temp_sensor;
void setup()
{
Serial.begin(115200);
Matter.begin();
matter_temp_sensor.begin();
Serial.println("Matter temperature sensor");
if (!Matter.isDeviceCommissioned()) {
Serial.println("Matter device is not commissioned");
Serial.println("Commission it to your Matter hub with the manual pairing code or QR code");
Serial.printf("Manual pairing code: %s\n", Matter.getManualPairingCode().c_str());
Serial.printf("QR code URL: %s\n", Matter.getOnboardingQRCodeUrl().c_str());
}
while (!Matter.isDeviceCommissioned()) {
delay(200);
}
Serial.println("Waiting for Thread network...");
while (!Matter.isDeviceThreadConnected()) {
delay(200);
}
Serial.println("Connected to Thread network");
Serial.println("Waiting for Matter device discovery...");
while (!matter_temp_sensor.is_online()) {
delay(200);
}
Serial.println("Matter device is now online");
}
void loop()
{
float current_cpu_temp = getCPUTemp();
matter_temp_sensor.set_measured_value_celsius(current_cpu_temp);
Serial.printf("Current CPU temperature: %.02f C\n", current_cpu_temp);
delay(2000);
}