Community Tip - You can change your system assigned username to something more personal in your community settings. X
Hello ThingWorx community,
I could not find any reference in the documentation on the device autodiscovery, intended as the automatic creation of a RemoteThing for every unbound VirtualThing, and the automatic browsing of the remote services, remote properties, and remote events.
From what I can see, Thingworx does not have any builtin functionality to do this kind of things, and you have to manually create a service to fulfill this goal. This service must scan for new unboud things and it must be periodically executed with the help of a Timer Thing. This functionality cannot be executed in an evented fashion because a "newUnboundDevice" event does not currently exist in ThingWorx.
Based on this post I came up with this code:
var newRemoteThings=Resources["DeviceFunctions"].GetUnboundRemoteThings({maxItems:3});
var result=Resources["InfoTableFunctions"].CreateInfoTableFromDataShape({InfoTableName:"CreatedThings",dataShapeName:"NewThingsDataShape"});
logger.info(newRemoteThings);
logger.info(result);
//result.AddRow({ThingName:"ssd"});
for (var i=0;i<newRemoteThings.length;i++){
try {
Resources["EntityServices"].CreateThing({thingTemplateName:"MyTestThingTemplate",description:undefined,name:newRemoteThings.name});
Things[newRemoteThings.name].EnableThing();
Things[newRemoteThings.name].RestartThing();
}catch(e){
logger.warn("Unable to create Thing:" + newRemoteThings.name);
var params = {
name: newRemoteThings.name // THINGNAME
};
// no return
Resources["EntityServices"].DeleteThing(params);
}
result.AddRow({ThingName:newRemoteThings.name});
}
logger.info("finished method");
NOTE: I created
- MyTestThingTemplate that inherits from the RemoteThing template, with no fields
- NewThingsDataShape: not sure which fields should be... I created a "ThingName" field of basetype STRING. Is it correct? Probably not, because the result variable is empty when I execute the service.
Then I started the SimpleThingClient of the Java SDK.
The SimpleThing_1 Thing is correctly created, however it has no properties/services. I have to do it manually.
Now, how can I also automate the remote property/service auto discovery/binding step?
Giuliano
In general you have to be very careful with auto-creation and we recommend that there is always a verification step beyond the appkey exchange to make sure that the device you are going to create, indeed is a valid device.
The other approach btw, can be that you create it in the EMS as well and leverage twAPI to POST a request to the Platform to create a representative Remote Thing.
Dear Pai Chung i target to create things from andriod App, any documentation for this please?
Dear Pai Chung, how to automated bind the remote property/service after auto creating an unbinded RemoteThing from EMS through twAPI ?