I am currently working on a C2C (SmartThings Cloud Connector) development project.
Until recently (before August 4, 2025), I believe most developers used the Workspace to create and test device profiles. However, it seems SmartThings now guides us to use the Device Profile Builder instead:
https://developer.smartthings.com/workspace/projects
Back in March, I only did some initial testing, but now my company has an official SmartThings integration project. So I am following the new approach using the Device Profile Builder. (On a related note, there was a recent issue with device profile creation on the C2C server side, which I raised both with the product team and here in the community, and that issue was eventually resolved.)
Now, I am testing multi-component devices, based on the multi-switch sample in the documentation:
https://developer.smartthings.com/docs/devices/configurations-and-presentations/device-configurations
For example, the sample JSON looks like this:
"dashboard": {
"states": [
{ "component": "main", "capability": "switch", "version": 1, "group": "main" },
{ "component": "switchTwo", "capability": "switch", "version": 1, "group": "Switch-2" },
{ "component": "switchThree", "capability": "switch", "version": 1, "group": "Switch-3" },
{ "component": "switchFour", "capability": "switch", "version": 1, "group": "Switch-4" }
],
"actions": [
{ "component": "main", "capability": "switch", "version": 1, "group": "main" },
{ "component": "switchTwo", "capability": "switch", "version": 1, "group": "Switch-2" },
{ "component": "switchThree", "capability": "switch", "version": 1, "group": "Switch-3" },
{ "component": "switchFour", "capability": "switch", "version": 1, "group": "Switch-4" }
]
}
According to the documentation, this should display four switches grouped in the SmartThings app dashboard.
However, when I actually create a device profile using the Device Profile Builder, download the JSON, and test it, only a single switch icon appears on the dashboard.
{
"deviceProfile" : {
"id" : "ef9259c0-ee8d-42c1-abb3-d08e434d55ef",
"name" : "multiSwitch20150825",
"metadata" : {
"deviceType" : "Switch",
"vid" : "95d81bec-b56f-4544-961a-c9911c54d211",
"mnmn" : "tomorrowmoney17668",
"presentationId" : "95d81bec-b56f-4544-961a-c9911c54d211",
"integrationType" : "cloud",
"manufacturerName" : "tomorrowmoney17668",
"mainState" : "main~switch~1",
"mainAction" : "main~switch~1",
"resourceType" : "oic.d.switch"
},
"migrationStatus" : "NOT_MIGRATED",
"status" : "DEVELOPMENT",
"preferences" : [],
"components" : [
{
"label" : "Main",
"id" : "main",
"capabilities" : [
{ "id": "healthCheck", "version": 1, "optional": false, "ephemeral": false },
{ "id": "refresh" , "version": 1, "optional": false, "ephemeral": false },
{ "id": "switch" , "version": 1, "optional": false, "ephemeral": false }
],
"categories" : [
{ "name": "Switch", "categoryType": "manufacturer" }
],
"optional" : false
},
{
"label" : "switchTwo",
"id" : "switchtwo",
"capabilities" : [
{ "id": "switch" , "version": 1, "optional": false, "ephemeral": false }
],
"categories" : [],
"optional" : false
},
{
"label" : "switchThree",
"id" : "switchthree",
"capabilities" : [
{ "id": "switch" , "version": 1, "optional": false, "ephemeral": false }
],
"categories" : [],
"optional" : false
},
{
"label" : "switchFour",
"id" : "switchfour",
"capabilities" : [
{ "id": "switch" , "version": 1, "optional": false, "ephemeral": false }
],
"categories" : [],
"optional" : false
}
]
},
"deviceConfiguration" : {
"mnmn" : "tomorrowmoney17668",
"vid" : "95d81bec-b56f-4544-961a-c9911c54d211",
"version" : "0.0.1",
"type" : "profile",
"dashboard" : {
"states" : [
{ "component": "main", "capability": "switch", "version": 1, "idx": 0, "group": "main", "values": [], "composite": false }
],
"actions" : [
{ "component": "main", "capability": "switch", "version": 1, "idx": 0, "group": "main" }
],
"basicPlus" : []
},
"detailView" : [
{ "component": "main", "capability": "healthCheck", "version": 1, "values": [], "patch": [] },
{ "component": "main", "capability": "refresh", "version": 1, "values": [], "patch": [] },
{ "component": "main", "capability": "switch", "version": 1, "values": [], "patch": [] },
{ "component": "switchtwo", "capability": "switch", "version": 1, "values": [], "patch": [] },
{ "component": "switchthree", "capability": "switch", "version": 1, "values": [], "patch": [] },
{ "component": "switchfour", "capability": "switch", "version": 1, "values": [], "patch": [] }
],
"automation" : {
"conditions" : [
{ "component": "main", "capability": "healthCheck", "version": 1, "values": [], "patch": [], "exclusion": [] },
{ "component": "main", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] },
{ "component": "switchtwo", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] },
{ "component": "switchthree", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] },
{ "component": "switchfour", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] }
],
"actions" : [
{ "component": "main", "capability": "healthCheck", "version": 1, "values": [], "patch": [], "exclusion": [] },
{ "component": "main", "capability": "refresh", "version": 1, "values": [], "patch": [], "exclusion": [] },
{ "component": "main", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] },
{ "component": "switchtwo", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] },
{ "component": "switchthree", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] },
{ "component": "switchfour", "capability": "switch", "version": 1, "values": [], "patch": [], "exclusion": [] }
]
},
"presentationId" : "95d81bec-b56f-4544-961a-c9911c54d211",
"manufacturerName" : "tomorrowmoney17668"
}
}
So my questions are:
- Is it currently not possible to implement multi-component devices properly through the Device Profile Builder?
- Do we instead need to manually create the JSON files using the SmartThings CLI?
- Or is this simply a case where the documentation has not yet been updated to reflect the latest changes?
Any insights or experiences from other developers would be greatly appreciated.