It allows to register, discover and access to resources via RESTful API.
Since: 3.0
typedef DOMString ResourceType;
Remark : The length of resource type should be less than or equal to 61. The resource type must start with a lowercase alphabetic character, followed by a sequence of lowercase alphabetic, numeric, ".", or "-" characters, and contains no white space.
enum QosLevel{ "HIGH", "LOW" };
The following values are supported:
enum ResponseResult { "SUCCESS", "ERROR", "RESOURCE_CREATED", "RESOURCE_DELETED", "RESOURCE_CHANGED", "SLOW", "FORBIDDEN" };
enum PresenceResponseResultType { "OK", "STOPPED", "TIMEOUT" };
enum PresenceTriggerType { "CREATED", "UPDATED", "DESTROYED" };
enum ConnectivityType { "IP", "PREFER_UDP", "PREFER_TCP", "IPV4_ONLY", "IPV6_ONLY", "ALL" };
typedef DOMString ResourceInterface;
The following values are allowed:
enum ObservePolicy { "IGNORE_OUT_OF_ORDER", "ACCEPT_OUT_OF_ORDER" };
enum ObserveType { "NO_TYPE", "REGISTER", "DEREGISTER" };
[NoInterfaceObject] interface IotconObject { readonly attribute Iotcon iotcon; };
Tizen implements IotconObject;
There is a tizen.iotcon object that allows access to the Iotcon API.
[NoInterfaceObject] interface Iotcon { attribute DOMString deviceName; void initialize(DOMString filePath) raises(WebAPIException); Client getClient(); Server getServer(); long getTimeout(); void setTimeout(long timeout) raises(WebAPIException); long addGeneratedPinListener(GeneratedPinCallback successCallback) raises(WebAPIException); void removeGeneratedPinListener(long watchId) raises(WebAPIException); };
initialize
void initialize(DOMString filePath);
Privilege level: public
Privilege: http://tizen.org/privilege/internet
Remark : Recommends to use application local file for CBOR file path. If you want to know about iotivity security in detail, See iotivity security.
Parameters:
Exceptions:
with error type SecurityError, if the application does not have the privilege to call this method.
with error type AbortError, if the operation has been stopped.
Code example:
try { var cborPath = "App_installed_fullpath/iotcon-test.dat" tizen.iotcon.initialize(cborPath); tizen.iotcon.deviceName = "my_test"; } catch(err) { console.log(err.name +': ' + err.message); }
getClient
Client getClient();
Return value:
try { var cborPath = "App_installed_fullpath/iotcon-test.dat" tizen.iotcon.initialize(cborPath); tizen.iotcon.deviceName = "my_test"; var iotClient = tizen.iotcon.getClient(); } catch(err) { console.log(err.name +': ' + err.message); }
getServer
Server getServer();
try { var cborPath = "App_installed_fullpath/iotcon-test.dat" tizen.iotcon.initialize(cborPath); tizen.iotcon.deviceName = "my_test"; var iotServer = tizen.iotcon.getServer(); } catch(err) { console.log(err.name +': ' + err.message); }
getTimeout
long getTimeout();
This method returns the common timeout value for methods: findDeviceInfofindPlatformInfofindResourcemethodGetmethodPutmethodPostmethodDeleteAll asynchronous APIs have the same timeout value, there is no way to have different timeout values at each method. Without a response after the specified time, the mentioned methods would trigger an error callback with TimeoutError.
tizen.iotcon.setTimeout(60); var timeout = tizen.iotcon.getTimeout(); console.log("timeout value is " + timeout);
Output example:
timeout value is 60
setTimeout
void setTimeout(long timeout);
The timeout value is common for methods: findDeviceInfofindPlatformInfofindResourcemethodGetmethodPutmethodPostmethodDeleteAll asynchronous APIs have the same timeout value, there is no way to have different timeout values at each method. Without a response after the specified time, the mentioned methods would trigger an error callback with TimeoutError.
with error type InvalidValuesError, if any input parameter does not contain a valid value.
addGeneratedPinListener
long addGeneratedPinListener(GeneratedPinCallback successCallback);
Remark : Listener's callback only be invoked when provisioning tool tries to register this device using random pin based. If you want to know about provisioning tool and random pin, See iotivity provisioning.
with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
with error type AbortError, If the operation has been stopped.
var watchId function RandomPinSuccess(pin){ console.log("Pin code : " + pin); tizen.iotcon.removeGeneratedPinListener(watchId); } var cborPath = "App_installed_fullpath/iotcon-test.dat" tizen.iotcon.initialize(cborPath); watchId =tizen.iotcon.addGeneratedPinListener(RandomPinSuccess);
Pin code : 73883075
removeGeneratedPinListener
void removeGeneratedPinListener(long watchId);
Remark : Example of using can be find at addGeneratedPinListener code example.
[NoInterfaceObject] interface Client { void findResource(DOMString? hostAddress, Query? query, ConnectivityType connectivityType, FoundResourceSuccessCallback successCallback, optional ErrorCallback? errorCallback) raises(WebAPIException); long addPresenceEventListener(DOMString? hostAddress, ResourceType? resourceType, ConnectivityType connectivityType, PresenceEventCallback successCallback) raises(WebAPIException); void removePresenceEventListener(long watchId) raises(WebAPIException); void findDeviceInfo(DOMString? hostAddress, Query? query, ConnectivityType connectivityType, FoundDeviceInfoSuccessCallback successCallback, optional ErrorCallback? errorCallback) raises(WebAPIException); void findPlatformInfo(DOMString? hostAddress, Query? query, ConnectivityType connectivityType, FoundPlatformInfoSuccessCallback successCallback, optional ErrorCallback? errorCallback) raises(WebAPIException); };
findResource
void findResource(DOMString? hostAddress, Query? query, ConnectivityType connectivityType, FoundResourceSuccessCallback successCallback, optional ErrorCallback? errorCallback);
The ErrorCallback is launched with these error types:
remarks hostAddress should be in the format coap://address:port. For example "coaps://[fe80::ae5a:14ff:fe24:b8fe]:12345" or "coaps://192.168.1.10:12345".
function onerror(err) { console.log("Failed to find resource: " + err.message); } function foundSuccess(resource) { if(resource) { console.log("######## Found a resource ########") console.log("URI: " + resource.uriPath); console.log("Host Address: " + resource.hostAddress); console.log("Device ID: " + resource.deviceId); var resourceTypes = resource.resourceTypes; console.log("Resource Types: "); for(var index in resourceTypes) { console.log(" " + resourceTypes[index]); } var resourceInterfaces = resource.resourceInterfaces; console.log("Resource interfaces: "); for(var index in resourceInterfaces) { console.log(" " + resourceInterfaces[index]); } } } try { var client = tizen.iotcon.getClient(); var hostAddress = null; var query = { resourceType: "core.door" }; var connectivityType = "IP"; client.findResource(hostAddress, query, connectivityType, foundSuccess, onerror); } catch(err) { console.log(err.name +': ' + err.message); }
######## Found a resource ######## URI: /door Host Address: coaps://192.168.0.10:12345 Device ID: 3f58ff10-fc23-444c-9e42-e15b295722a7 Resource types: core.door Resource interfaces: oic.if.b
addPresenceEventListener
long addPresenceEventListener(DOMString? hostAddress, ResourceType? resourceType, ConnectivityType connectivityType, PresenceEventCallback successCallback);
var client; var watchID; var connectivityType = "IP"; function presenceSuccess(presenceResponse) { console.log("######## Get a presence response ########"); if(presenceResponse.resultType != "OK") { console.log("the result is not OK") return; } console.log("Trigger type: " + presenceResponse.triggerType); console.log("Host address: " + presenceResponse.hostAddress); console.log("Connectivity type: " + presenceResponse.connectivityType); console.log("Presence resource type: " + presenceResponse.resourceType); client.removePresenceEventListener(watchID); } try { client = tizen.iotcon.getClient(); watchID = client.addPresenceEventListener(null, null, connectivityType, presenceSuccess); } catch(err) { console.log(err.name +': ' + err.message); }
######## Get a presence response ######## Trigger type: UPDATED Host address: coaps://192.168.0.10:12345 Connectivity type: IP Resource type: oic.wk.ad
removePresenceEventListener
void removePresenceEventListener(long watchId);
Remark : Example of using can be find at addPresenceEventListener code example.
findDeviceInfo
void findDeviceInfo(DOMString? hostAddress, Query? query, ConnectivityType connectivityType, FoundDeviceInfoSuccessCallback successCallback, optional ErrorCallback? errorCallback);
// hostDeviceIpAddress should be a valid IP address var hostDeviceIpAddress = "coaps://192.168.0.10:12345"; var connectivityType = "IP"; var query = { resourceType: "core.door" }; function onerror(err) { console.log("Failed to find resource: " + err.message); } function foundSuccess(deviceInfo) { if(deviceInfo) { console.log("######## Get a device info ########"); console.log("Name: " + deviceInfo.deviceName); // human friendly name for device. console.log("Spec version: " + deviceInfo.specVersion); // spec version of the core specification. console.log("ID: " + deviceInfo.oicDeviceId); // unique identifier for OIC device. console.log("Data model version: " + deviceInfo.dataModelVersion); // version of the specs this device data model is implemented to. } } try { var client = tizen.iotcon.getClient(); client.findDeviceInfo(hostDeviceIpAddress, query, connectivityType, foundSuccess, onerror); } catch(err) { console.log(err.name +': ' + err.message); }
######## Get a device info ######## Name: Tizen Spec version: core.1.0.0 ID: 3f58ff10-fc23-444c-9e42-e15b295722a7 Data model version: res.1.0.0
findPlatformInfo
void findPlatformInfo(DOMString? hostAddress, Query? query, ConnectivityType connectivityType, FoundPlatformInfoSuccessCallback successCallback, optional ErrorCallback? errorCallback);
var hostDeviceIpAddress = "coaps://192.168.0.10:12345"; var connectivityType = "IP"; var query = { resourceType: "core.door" }; function onerror(err) { console.log("Failed to find resource: " + err.message); } function foundSuccess(platformInfo) { console.log("######## Get a platform info ########"); console.log("ID: " + platformInfo.platformId); console.log("Manufacturer name: " + platformInfo.manufacturerName); console.log("Manufacturer URL: " + platformInfo.manufacturerUrl); console.log("Model number: " + platformInfo.modelNumber); console.log("Date of manufacture: " + platformInfo.manufactureDate); console.log("Platform version: " + platformInfo.platformVersion); console.log("OS version: " + platformInfo.operatingSystemVersion); console.log("Hardware version: " + platformInfo.hardwareVersion); console.log("Firmware version: " + platformInfo.firmwareVersion); console.log("Support URL: " + platformInfo.supportUrl); console.log("System time: " + platformInfo.systemTime); } try { var client = tizen.iotcon.getClient(); client.findPlatformInfo(hostDeviceIpAddress, query, connectivityType, foundSuccess, onerror); } catch(err) { console.log(err.name +': ' + err.message); }
######## Get a platform info ######## ID: Tizen Manufacturer name: Tizen Manufacturer URL: Model number: tm1 Date of manufacture: Platform version: 3.0 OS version: Hardware version: Firware version: tizen-mobile_20160220.2 Support URL: System time:
[NoInterfaceObject] interface Server { Resource[] getResources() raises(WebAPIException); Resource createResource(DOMString uriPath, ResourceType[] resourceTypes, ResourceInterface[] resourceInterfaces, RequestCallback listener, optional ResourcePolicy policy) raises(WebAPIException); void removeResource(Resource resource) raises(WebAPIException); void startPresence(unsigned long timeToLive) raises(WebAPIException); void stopPresence() raises(WebAPIException); };
A Resource is a component in a server that can be viewed and controlled by another client. There are different resource types, for example a temperature sensor, a light controller etc.
getResources
Resource[] getResources();
var server = tizen.iotcon.getServer(); var resources = server.getResources();
createResource
Resource createResource(DOMString uriPath, ResourceType[] resourceTypes, ResourceInterface[] resourceInterfaces, RequestCallback listener, optional ResourcePolicy policy);
var server = tizen.iotcon.getServer(); var doorResource; var uriPath = "/door"; var resourceTypes = ["core.door"]; var resourceInterfaces = ["oic.if.b"]; var attributes = { openstate : 'open' }; var policy = { isObservable : true, isDiscoverable : true }; var requestListener = { onget: function(request) { console.log("onget"); var response = new tizen.Response(request); try { var representation = new tizen.Representation(doorResource.uriPath); representation.resourceTypes =doorResource.resourceTypes; representation.resourceInterfaces = doorResource.resourceInterfaces; representation.attributes = attributes; response.representation = representation; response.result = "SUCCESS"; } catch(err) { console.log(err.name + ": " + err.message); response.result = "ERROR"; } response.send(); }, onput: function(request) { console.log("onput"); //add request handle code }, onpost: function(request) { console.log("onpost"); //add request handle code }, ondelete: function(request) { console.log("ondelete"); //add request handle code }, onobserving: function(request, observeType, observeId) { console.log("onobserving"); //add request handle code } } doorResource = server.createResource(uriPath, resourceTypes, resourceInterfaces, requestListener, policy);
removeResource
void removeResource(Resource resource);
var resource = server.createResource(uriPath, resourceTypes, resourceInterfaces, requestListener, policy); server.removeResource(resource);
startPresence
void startPresence(unsigned long timeToLive);
Remark : If Server doesn't call startPresence(), client can't get presence event with addPresenceEventListener().
Remark : If timeToLive is 0, server will set default value as 60 seconds. If timeToLive is bigger than maximum seconds, server will set maximum value as (60 * 60 * 24) seconds (24 hours).
var server = tizen.iotcon.getServer(); server.startPresence(60); /* Do something */ server.stopPresence();
stopPresence
void stopPresence();
Remark : Example of using can be find at startPresence code example.
interface RemoteResource { readonly attribute DOMString uriPath; readonly attribute ConnectivityType connectivityType; readonly attribute DOMString hostAddress; readonly attribute ResourceType[] resourceTypes; readonly attribute ResourceInterface[] resourceInterfaces; readonly attribute boolean isObservable; readonly attribute boolean isDiscoverable; readonly attribute boolean isActive; readonly attribute boolean isSlow; readonly attribute boolean isSecure; readonly attribute boolean isExplicitDiscoverable; readonly attribute DOMString deviceId; readonly attribute DOMString deviceName; attribute IotconOption[]? options; readonly attribute Representation? cachedRepresentation; attribute long timeInterval; void methodGet(RemoteResourceResponseCallback responseCallback, optional Query? query, optional ErrorCallback? errorCallback) raises(WebAPIException); void methodPut(Representation representation, RemoteResourceResponseCallback responseCallback, optional Query? query, optional ErrorCallback? errorCallback) raises(WebAPIException); void methodPost(Representation representation, RemoteResourceResponseCallback responseCallback, optional Query? query, optional ErrorCallback? errorCallback) raises(WebAPIException); void methodDelete(RemoteResourceResponseCallback responseCallback, optional ErrorCallback? errorCallback) raises(WebAPIException); void startObserving(ObservePolicy observePolicy, RemoteResourceResponseCallback successCallback, optional Query? query) raises(WebAPIException); void stopObserving() raises(WebAPIException); void startCaching(optional CacheUpdatedCallback? updatedCallback) raises(WebAPIException); void stopCaching() raises(WebAPIException); void setResourceStateChangeListener(ResourceStateChangeCallback successCallback) raises(WebAPIException); void unsetResourceStateChangeListener() raises(WebAPIException); };
Remark : Options can have up to 2 IotconOption.
methodGet
void methodGet(RemoteResourceResponseCallback responseCallback, optional Query? query, optional ErrorCallback? errorCallback);
var query = {}; function onerror(err) { console.log("Error occured: " + err.message); } function onresponse(remoteResponse) { if(remoteResponse.result != "SUCCESS") { console.log("the result is not SUCCESS"); return; } var repr = remoteResponse.representation; console.log("Resource attributes: ") for(var key in repr.attributes) { console.log(" key: " + key + ", value: " + repr.attributes[key]); } } function foundSuccess(resource) { if(resource){ query["filter"] = {openstate: 'open'}; resource.methodGet(onresponse, query, onerror); } } try { var client = tizen.iotcon.getClient(); var hostAddress = null; var query = { resourceType: "core.door" }; var connectivityType = "IP"; client.findResource(hostAddress, query, connectivityType, foundSuccess, onerror); } catch(err) { console.log (err.name +': ' + err.message); }
Resource attributes: key: openstate, value: open
methodPut
void methodPut(Representation representation, RemoteResourceResponseCallback responseCallback, optional Query? query, optional ErrorCallback? errorCallback);
var query = {}; var representation; var uriPath = "/door"; function onerror(err) { console.log("Error occured: " + err.message); } function onresponse(remoteResponse) { console.log("result is "+remoteResponse.result ); var repr = remoteResponse.representation; console.log("representation attributes: ") for(var key in repr.attributes) { console.log(" key: " + key + ", value: " + repr.attributes[key]); } } function foundSuccess(resource) { if(resource){ query["filter"] = {openstate: 'open'}; representation = new tizen.Representation(uriPath); representation.resourceTypes = ["core.door"]; representation.attributes = {openstate : 'closed'}; resource.methodPut(representation, onresponse, query, onerror); } } try { var client = tizen.iotcon.getClient(); var hostAddress = null; var query = { resourceType: "core.door" }; var connectivityType = "IP"; client.findResource(hostAddress, query, connectivityType, foundSuccess, onerror); } catch(err) { console.log(err.name +': ' + err.message); }
result is RESOURCE_CHANGED representation attributes: key: openstate, value: closed
methodPost
void methodPost(Representation representation, RemoteResourceResponseCallback responseCallback, optional Query? query, optional ErrorCallback? errorCallback);
var representation; var uriPath = "/door"; function onerror(err) { console.log("Error occured: " + err.message); } function onresponse(remoteResponse) { console.log("result is "+remoteResponse.result ); var repr = remoteResponse.representation; console.log("representation attributes: ") for(var key in repr.attributes) { console.log(" key: " + key + ", value: " + repr.attributes[key]); } } function foundSuccess(resource) { if(resource){ representation = new tizen.Representation(uriPath); representation.resourceTypes = ["core.door"]; representation.attributes = {openstate: 'closed'}; resource.methodPost(representation, onresponse, null, onerror); } } try { var client = tizen.iotcon.getClient(); var hostAddress = null; var query = { resourceType: "core.door" }; var connectivityType = "IP"; client.findResource(hostAddress, query, connectivityType, foundSuccess, onerror); } catch(err) { console.log(err.name +': ' + err.message); }
methodDelete
void methodDelete(RemoteResourceResponseCallback responseCallback, optional ErrorCallback? errorCallback);
function onerror(err) { console.log("Error occured: " + err.message); } function onresponse(remoteResponse) { if(remoteResponse.result == "RESOURCE_DELETED" || remoteResponse.result == "SUCCESS") { console.log("Successfully deleted"); } function foundSuccess(resource) { if(resource){ resource.methodDelete(onresponse, onerror); } } try { var client = tizen.iotcon.getClient(); var hostAddress = null; var query = { resourceType: "core.door" }; var connectivityType = "IP"; client.findResource(hostAddress, query, connectivityType, foundSuccess, onerror); } catch(err) { console.log (err.name +': ' + err.message); }
Successfully deleted
startObserving
void startObserving(ObservePolicy observePolicy, RemoteResourceResponseCallback successCallback, optional Query? query);
var doorResource; function onchanged(remoteResponse) { if(remoteResponse.result == "SUCCESS") { var attributes = remoteResponse.representation.attributes; console.log("start observing, door is " + attributes["openstate"]); } doorResource.stopObserving(); } function foundSuccess(resource) { if(resource) { if(resource.uriPath == "/door") { doorResource = resource; try { doorResource.startObserving("IGNORE_OUT_OF_ORDER", onchanged); } catch(err) { console.log(err.name + ': ' + err.message); } } } } try { var client = tizen.iotcon.getClient(); var hostAddress = null; var query = { resourceType: "core.door" }; var connectivityType = "IP"; client.findResource(hostAddress, query, connectivityType, foundSuccess, onerror); } catch(err) { console.log(err.name +': ' + err.message); }
start observing, door is open
stopObserving
void stopObserving();
Remark : Example of using can be find at startObserving code example.
startCaching
void startCaching(optional CacheUpdatedCallback? updatedCallback);
with error type InvalidStateError, this error occur when already started.
var resource; function onerror(err) { console.log("Error occured: " + err.message); } function onupdated(representation) { console.log("######## updated representation ########"); for(var key in representation.attributes) { console.log("key: " + key + ", value: " + representation.attributes[key]); } resource.stopCaching(); } function foundSuccess(remoteResource) { if(remoteResource) { resource = remoteResource; remoteResource.startCaching(onupdated); //start caching } } try { var client = tizen.iotcon.getClient(); var hostAddress = null; var query = { resourceType: "core.door" }; var connectivityType = "IP"; client.findResource(hostAddress, query, connectivityType, foundSuccess, onerror); } catch(err) { console.log (err.name +': ' + err.message); }
######## updated representation ######## key: openstate, value: open
stopCaching
void stopCaching();
Remark : Example of using can be find at startCaching code example.
with error type AbortError, If the operation has been stopped
setResourceStateChangeListener
void setResourceStateChangeListener(ResourceStateChangeCallback successCallback);
var doorResource; function onchanged(isAlive) { if (isAlive == true) { console.log("Remote resource is alive"); } else { console.log("Remote resource is lost"); } doorResource.unsetResourceStateChangeListener(); } function foundSuccess(resource) { if(resource) { if(resource.uriPath == "/door") { try { resource.setResourceStateChangeListener(onchanged); } catch(err) { console.log(err.name + ': ' + err.message); } } } } try { var client = tizen.iotcon.getClient(); var hostAddress = null; var query = { resourceType: "core.door" }; var connectivityType = "IP"; client.findResource(hostAddress, query, connectivityType, foundSuccess, onerror); } catch(err) { console.log (err.name +': ' + err.message); }
Remote resource is alive
unsetResourceStateChangeListener
void unsetResourceStateChangeListener();
Remark : Example of using can be find at setResourceStateChangeListener code example.
dictionary ResourcePolicy { boolean isObservable; boolean isDiscoverable; boolean isActive; boolean isSlow; boolean isSecure; boolean isExplicitDiscoverable; };
This dictionary is used to input parameters when resources are created.
The default value is false
The default value is true
[NoInterfaceObject] interface Resource { readonly attribute DOMString uriPath; readonly attribute ResourceType[] resourceTypes; readonly attribute ResourceInterface[] resourceInterfaces; readonly attribute boolean isObservable; readonly attribute boolean isDiscoverable; readonly attribute boolean isActive; readonly attribute boolean isSlow; readonly attribute boolean isSecure; readonly attribute boolean isExplicitDiscoverable; readonly attribute Resource[] resources; readonly attribute long[] observerIds; attribute object? attributes; void notify(QosLevel qosLevel, optional long[]? observerIds) raises(WebAPIException); void addResourceTypes(ResourceType[] types) raises(WebAPIException); void addResourceInterface(ResourceInterface interface) raises(WebAPIException); void addChildResource(Resource resource) raises(WebAPIException); void removeChildResource(Resource resource) raises(WebAPIException); void setRequestListener(RequestCallback listener) raises(WebAPIException); void unsetRequestListener(); };
notify
void notify(QosLevel qosLevel, optional long[]? observerIds);
resource.attributes = {openstate: 'open'}; resource.notify("LOW", resource.observerIds);
addResourceTypes
void addResourceTypes(ResourceType[] types);
var server = tizen.iotcon.getServer(); var uriPath = "/door"; var resourceTypes = ["core.door"]; var resourceInterfaces = ["oic.if.b"]; var resource = server.createResource(uriPath, resourceTypes, resourceInterfaces, requestListener, policy); var types = [ "org.tizen.door"]; resource.addResourceTypes(types);
addResourceInterface
void addResourceInterface(ResourceInterface interface);
var resource = server.createResource(uriPath, resourceTypes, resourceInterfaces, requestListener, policy); var interface = "oic.if.ll"; resource.addResourceInterface(interface);
addChildResource
void addChildResource(Resource resource);
var doorResource; var lockResource; var uriPath = "/door"; var resourceTypes = ["core.door"]; var resourceInterfaces : ["oic.if.b"]; var doorAttributes = { openstate : 'open' }; var requestListener = { onget: function(request) { console.log("onget"); var response = new tizen.Response(request); try { var representation = new tizen.Representation(doorResource.uriPath); representation.resourceTypes =doorResource.resourceTypes; representation.resourceInterfaces = doorResource.resourceInterfaces; representation.attributes = doorResource.attributes; response.representation = representation; response.result = "SUCCESS"; } catch(err) { console.log(err.name + ": " + err.message); response.result = "ERROR"; } response.send(); }, onput: function(request) { console.log("onput"); //add request handle code }, onpost: function(request) { console.log("onpost"); //add request handle code }, ondelete: function(request) { console.log("ondelete"); //add request handle code }, onobserving: function(request, observeType, observeId) { console.log("onobserving"); //add request handle code } } doorResource = server.createResource(uriPath, resourceTypes, resourceInterfaces, requestListener, policy); doorResource.attributes = doorAttributes; uriPath = "/door/lock"; resourceTypes = ["core.lock"]; resourceInterfaces : ["oic.if.baseline"]; var lockAttributes = { lockstate : 'closed' }; policy = { isObservable : true, isDiscoverable : true }; var lockRequestListener = { onget: function(request) { console.log("onget"); var response = new tizen.Response(request); try { var representation = new tizen.Representation(lockResource.uriPath); representation.resourceTypes =lockResource.resourceTypes; representation.resourceInterfaces = lockResource.resourceInterfaces; representation.attributes = lockResource.attributes; response.representation = representation; response.result = "SUCCESS"; } catch(err) { console.log(err.name + ": " + err.message); response.result = "ERROR"; } response.send(); }, onput: function(request) { console.log("onput"); //add request handle code }, onpost: function(request) { console.log("onpost"); //add request handle code }, ondelete: function(request) { console.log("ondelete"); //add request handle code }, onobserving: function(request, observeType, observeId) { console.log("onobserving"); //add request handle code } } lockResource = server.createResource(uriPath, resourceTypes, resourceInterfaces, lockRequestListener, policy); lockResource.attributes = lockAttributes; doorResource.addChildResource(lockResource);
removeChildResource
void removeChildResource(Resource resource);
with error type InvalidValuesError, if the resource does not have the input child resource.
var lockResource = server.createResource(uriPath, resourceTypes, resourceInterfaces, requestListener, policy); doorResource.addChildResource(lockResource); doorResource.removeChildResource(lockResource);
setRequestListener
void setRequestListener(RequestCallback listener);
var server; var doorResource; var requestListener = { onget: function(request) { console.log("onget"); var response = new tizen.Response(request); try { var representation = new tizen.Representation(doorResource.uriPath); representation.resourceTypes =doorResource.resourceTypes; representation.resourceInterfaces = doorResource.resourceInterfaces; representation.attributes = doorResource.attributes; response.representation = representation; response.result = "SUCCESS"; } catch(err) { console.log(err.name + ": " + err.message); response.result = "ERROR"; } response.send(); }, onput: function(request) { console.log("onput"); //add request handle code }, onpost: function(request) { console.log("onpost"); //add request handle code }, ondelete: function(request) { console.log("ondelete"); //add request handle code }, onobserving: function(request, observeType, observeId) { console.log("onobserving"); //add request handle code } } var newRequestListener = { onget: function(request) { console.log("onget"); var response = new tizen.Response(request); try { var representation = new tizen.Representation(doorResource.uriPath); representation.resourceTypes =doorResource.resourceTypes; representation.resourceInterfaces = doorResource.resourceInterfaces; representation.attributes = doorResource.attributes; response.representation = representation; response.result = "SUCCESS"; } catch(err) { console.log(err.name + ": " + err.message); response.result = "ERROR"; } response.send(); }, onput: function(request) { console.log("onput"); var response = new tizen.Response(request); try { doorResource.attributes = request.representation.attributes; response.representation = request.representation; response.result = "RESOURCE_CHANGED"; } catch(err) { console.log(err.name + ": " + err.message); response.result = "ERROR"; } response.send(); }, onpost: function(request) { console.log("onpost"); //add request handle code }, ondelete: function(request) { console.log("ondelete"); try { var representation = new tizen.Representation(doorResource.uriPath); representation.resourceTypes =doorResource.resourceTypes; representation.resourceInterfaces = doorResource.resourceInterfaces; representation.attributes = doorResource.attributes; response.representation = representation; response.result = "RESOURCE_DELETED"; } catch(err) { console.log(err.name + ": " + err.message); response.result = "ERROR"; } response.send(); server.removeResource(doorResource); }, onobserving: function(request, observeType, observeId) { console.log("onobserving observeType:" +observeType + ", observeId:" + observeId); } } try { server = tizen.iotcon.getServer(); var uriPath = "/door"; var resourceTypes = ["core.door"]; var resourceInterfaces = ["oic.if.b"]; var attributes = {openstate : 'open' }; var policy = { isObservable : true, isDiscoverable : true }; doorResource = server.createResource(uriPath, resourceTypes, resourceInterfaces, requestListener, policy); doorResource.attributes = attributes; doorResource.setRequestListener(newRequestListener); } catch(err) { console.log(err.name +': ' + err.message); }
unsetRequestListener
void unsetRequestListener();
Remark : Example of using can be find at setRequestListener code example.
[Constructor(DOMString uriPath)] interface Representation { attribute DOMString uriPath; attribute ResourceType[] resourceTypes; attribute ResourceInterface[] resourceInterfaces; attribute object? attributes; attribute Representation[]? children; };
var uriPath = "/door"; // construct an Representation object with uriPath. var representation = new tizen.Representation(uriPath);
Representation(DOMString uriPath);
[NoInterfaceObject] interface PresenceResponse { readonly attribute DOMString hostAddress; readonly attribute ConnectivityType connectivityType; readonly attribute ResourceType? resourceType; readonly attribute PresenceResponseResultType resultType; readonly attribute PresenceTriggerType? triggerType; };
dictionary Query { ResourceType? resourceType; ResourceInterface? resourceInterface; object? filter; };
var filter = {"openstate": "open"}; var query = { resourceType: "core.door", resourceInterface: "oic.if.b" } query["filter"] = filter;
[Constructor(unsigned long id, DOMString data)] interface IotconOption { attribute unsigned long id; attribute DOMString data; };
var option = new tizen.IotconOption(3000, "12345");
IotconOption(unsigned long id, DOMString data);
[NoInterfaceObject] interface Request { readonly attribute DOMString hostAddress; readonly attribute ConnectivityType connectivityType; readonly attribute Representation? representation; readonly attribute IotconOption[] options; readonly attribute Query query; };
[Constructor(Request request)] interface Response { readonly attribute Request request; attribute ResponseResult result; attribute Representation representation; attribute IotconOption[]? options; void send() raises(WebAPIException); };
var server; var doorResource; var requestListener = { onget: function(request) { console.log("onget"); var response = new tizen.Response(request); try { var representation = new tizen.Representation(doorResource.uriPath); representation.resourceTypes =doorResource.resourceTypes; representation.resourceInterfaces = doorResource.resourceInterfaces; representation.attributes = doorResource.attributes; response.representation = representation; response.result = "SUCCESS"; } catch(err) { console.log(err.name + ": " + err.message); response.result = "ERROR"; } response.send(); }, onput: function(request) { console.log("onput"); //add request handle code }, onpost: function(request) { console.log("onpost"); //add request handle code }, ondelete: function(request) { console.log("ondelete"); //add request handle code }, onobserving: function(request, observeType, observeId) { console.log("onobserving"); //add request handle code } } try { server = tizen.iotcon.getServer(); var uriPath = "/door"; var resourceTypes = ["core.door"]; var resourceInterfaces = ["oic.if.b"]; var policy = { isObservable : true, isDiscoverable : true }; doorResource = server.createResource(uriPath, resourceTypes, resourceInterfaces, requestListener, policy); doorResource.attributes = {openstate : 'open' }; } catch(err) { console.log(err.name +': ' + err.message); }
Response(Request request);
var response = new tizen.Response(request);
var result = "SUCCESS"; var response = new tizen.Response(request); response.result = result;
var uriPath = "/door"; var representation = new tizen.Representation(uriPath) representation.resourceTypes = ["core.door"]; representation.resourceInterfaces = ["oic.if.b"]; representation.attributes = {openstate : "open"}; var response = new tizen.Response(request); response.representation = representation;
send
void send();
try { var uriPath = "/door"; var representation = new tizen.Representation(uriPath); representation.resourceTypes = ["core.door"]; representation.resourceInterfaces = ["oic.if.b"]; representation.attributes = {"openstate": "open"}; var response = new tizen.Response(request); response.representation = representation; response.result = "SUCCESS"; } catch(err) { console.log(err.name + ': ' + err.message); response.result = "ERROR"; } response.send();
[NoInterfaceObject] interface RemoteResponse { readonly attribute ResponseResult result; readonly attribute Representation representation; readonly attribute IotconOption[]? options; };
[NoInterfaceObject] interface DeviceInfo { readonly attribute DOMString? deviceName; readonly attribute DOMString? specVersion; readonly attribute DOMString? oicDeviceId; readonly attribute DOMString? dataModelVersion; };
[NoInterfaceObject] interface PlatformInfo { readonly attribute DOMString? platformId; readonly attribute DOMString? manufacturerName; readonly attribute DOMString? manufacturerUrl; readonly attribute DOMString? modelNumber; readonly attribute DOMString? manufactureDate; readonly attribute DOMString? platformVersion; readonly attribute DOMString? operatingSystemVersion; readonly attribute DOMString? hardwareVersion; readonly attribute DOMString? firmwareVersion; readonly attribute DOMString? supportUrl; readonly attribute DOMString? systemTime; };
[Callback=FunctionOnly, NoInterfaceObject] interface RequestCallback { void onget(Request request); void onput(Request request); void onpost(Request request); void ondelete(Request request); void onobserving(Request request, ObserveType observeType, unsigned long observeId); };
onget
void onget(Request request);
onput
void onput(Request request);
onpost
void onpost(Request request);
ondelete
void ondelete(Request request);
onobserving
void onobserving(Request request, ObserveType observeType, unsigned long observeId);
[Callback=FunctionOnly, NoInterfaceObject] interface FoundResourceSuccessCallback { void onfound(RemoteResource remoteResource); };
Remark : Example of using can be find at findResource code example.
onfound
void onfound(RemoteResource remoteResource);
[Callback=FunctionOnly, NoInterfaceObject] interface PresenceEventCallback { void onreceived(PresenceResponse presenceResponse); };
onreceived
void onreceived(PresenceResponse presenceResponse);
[Callback=FunctionOnly, NoInterfaceObject] interface FoundDeviceInfoSuccessCallback { void onsuccess(DeviceInfo info); };
Remark : Example of using can be find at findDeviceInfo code example.
onsuccess
void onsuccess(DeviceInfo info);
[Callback=FunctionOnly, NoInterfaceObject] interface FoundPlatformInfoSuccessCallback { void onsuccess(PlatformInfo info); };
Remark : Example of using can be find at findPlatformInfo code example.
void onsuccess(PlatformInfo info);
[Callback=FunctionOnly, NoInterfaceObject] interface RemoteResourceResponseCallback { void onsuccess(RemoteResponse response); };
Remark : Example of using can be find at methodGet code example.
void onsuccess(RemoteResponse response);
[Callback=FunctionOnly, NoInterfaceObject] interface ResourceStateChangeCallback { void onchanged(boolean isAlive); };
onchanged
void onchanged(boolean isAlive);
[Callback=FunctionOnly, NoInterfaceObject] interface CacheUpdatedCallback { void onupdated(Representation representation); };
onupdated
void onupdated(Representation representation);
[Callback=FunctionOnly, NoInterfaceObject] interface GeneratedPinCallback { void onsuccess(DOMString pin); };
void onsuccess(DOMString pin);
To guarantee this application will run on a device with a iotcon, add the below feature declaration to the config file
For more information, see Application Filtering.
module Iotcon { typedef DOMString ResourceType; enum QosLevel{ "HIGH", "LOW" }; enum ResponseResult { "SUCCESS", "ERROR", "RESOURCE_CREATED", "RESOURCE_DELETED", "RESOURCE_CHANGED", "SLOW", "FORBIDDEN" }; enum PresenceResponseResultType { "OK", "STOPPED", "TIMEOUT" }; enum PresenceTriggerType { "CREATED", "UPDATED", "DESTROYED" }; enum ConnectivityType { "IP", "PREFER_UDP", "PREFER_TCP", "IPV4_ONLY", "IPV6_ONLY", "ALL" }; typedef DOMString ResourceInterface; enum ObservePolicy { "IGNORE_OUT_OF_ORDER", "ACCEPT_OUT_OF_ORDER" }; enum ObserveType { "NO_TYPE", "REGISTER", "DEREGISTER" }; [NoInterfaceObject] interface IotconObject { readonly attribute Iotcon iotcon; }; Tizen implements IotconObject; [NoInterfaceObject] interface Iotcon { attribute DOMString deviceName; void initialize(DOMString filePath) raises(WebAPIException); Client getClient(); Server getServer(); long getTimeout(); void setTimeout(long timeout) raises(WebAPIException); long addGeneratedPinListener(GeneratedPinCallback successCallback) raises(WebAPIException); void removeGeneratedPinListener(long watchId) raises(WebAPIException); }; [NoInterfaceObject] interface Client { void findResource(DOMString? hostAddress, Query? query, ConnectivityType connectivityType, FoundResourceSuccessCallback successCallback, optional ErrorCallback? errorCallback) raises(WebAPIException); long addPresenceEventListener(DOMString? hostAddress, ResourceType? resourceType, ConnectivityType connectivityType, PresenceEventCallback successCallback) raises(WebAPIException); void removePresenceEventListener(long watchId) raises(WebAPIException); void findDeviceInfo(DOMString? hostAddress, Query? query, ConnectivityType connectivityType, FoundDeviceInfoSuccessCallback successCallback, optional ErrorCallback? errorCallback) raises(WebAPIException); void findPlatformInfo(DOMString? hostAddress, Query? query, ConnectivityType connectivityType, FoundPlatformInfoSuccessCallback successCallback, optional ErrorCallback? errorCallback) raises(WebAPIException); }; [NoInterfaceObject] interface Server { Resource[] getResources() raises(WebAPIException); Resource createResource(DOMString uriPath, ResourceType[] resourceTypes, ResourceInterface[] resourceInterfaces, RequestCallback listener, optional ResourcePolicy policy) raises(WebAPIException); void removeResource(Resource resource) raises(WebAPIException); void startPresence(unsigned long timeToLive) raises(WebAPIException); void stopPresence() raises(WebAPIException); }; interface RemoteResource { readonly attribute DOMString uriPath; readonly attribute ConnectivityType connectivityType; readonly attribute DOMString hostAddress; readonly attribute ResourceType[] resourceTypes; readonly attribute ResourceInterface[] resourceInterfaces; readonly attribute boolean isObservable; readonly attribute boolean isDiscoverable; readonly attribute boolean isActive; readonly attribute boolean isSlow; readonly attribute boolean isSecure; readonly attribute boolean isExplicitDiscoverable; readonly attribute DOMString deviceId; readonly attribute DOMString deviceName; attribute IotconOption[]? options; readonly attribute Representation? cachedRepresentation; attribute long timeInterval; void methodGet(RemoteResourceResponseCallback responseCallback, optional Query? query, optional ErrorCallback? errorCallback) raises(WebAPIException); void methodPut(Representation representation, RemoteResourceResponseCallback responseCallback, optional Query? query, optional ErrorCallback? errorCallback) raises(WebAPIException); void methodPost(Representation representation, RemoteResourceResponseCallback responseCallback, optional Query? query, optional ErrorCallback? errorCallback) raises(WebAPIException); void methodDelete(RemoteResourceResponseCallback responseCallback, optional ErrorCallback? errorCallback) raises(WebAPIException); void startObserving(ObservePolicy observePolicy, RemoteResourceResponseCallback successCallback, optional Query? query) raises(WebAPIException); void stopObserving() raises(WebAPIException); void startCaching(optional CacheUpdatedCallback? updatedCallback) raises(WebAPIException); void stopCaching() raises(WebAPIException); void setResourceStateChangeListener(ResourceStateChangeCallback successCallback) raises(WebAPIException); void unsetResourceStateChangeListener() raises(WebAPIException); }; dictionary ResourcePolicy { boolean isObservable; boolean isDiscoverable; boolean isActive; boolean isSlow; boolean isSecure; boolean isExplicitDiscoverable; }; [NoInterfaceObject] interface Resource { readonly attribute DOMString uriPath; readonly attribute ResourceType[] resourceTypes; readonly attribute ResourceInterface[] resourceInterfaces; readonly attribute boolean isObservable; readonly attribute boolean isDiscoverable; readonly attribute boolean isActive; readonly attribute boolean isSlow; readonly attribute boolean isSecure; readonly attribute boolean isExplicitDiscoverable; readonly attribute Resource[] resources; readonly attribute long[] observerIds; attribute object? attributes; void notify(QosLevel qosLevel, optional long[]? observerIds) raises(WebAPIException); void addResourceTypes(ResourceType[] types) raises(WebAPIException); void addResourceInterface(ResourceInterface interface) raises(WebAPIException); void addChildResource(Resource resource) raises(WebAPIException); void removeChildResource(Resource resource) raises(WebAPIException); void setRequestListener(RequestCallback listener) raises(WebAPIException); void unsetRequestListener(); }; [Constructor(DOMString uriPath)] interface Representation { attribute DOMString uriPath; attribute ResourceType[] resourceTypes; attribute ResourceInterface[] resourceInterfaces; attribute object? attributes; attribute Representation[]? children; }; [NoInterfaceObject] interface PresenceResponse { readonly attribute DOMString hostAddress; readonly attribute ConnectivityType connectivityType; readonly attribute ResourceType? resourceType; readonly attribute PresenceResponseResultType resultType; readonly attribute PresenceTriggerType? triggerType; }; dictionary Query { ResourceType? resourceType; ResourceInterface? resourceInterface; object? filter; }; [Constructor(unsigned long id, DOMString data)] interface IotconOption { attribute unsigned long id; attribute DOMString data; }; [NoInterfaceObject] interface Request { readonly attribute DOMString hostAddress; readonly attribute ConnectivityType connectivityType; readonly attribute Representation? representation; readonly attribute IotconOption[] options; readonly attribute Query query; }; [Constructor(Request request)] interface Response { readonly attribute Request request; attribute ResponseResult result; attribute Representation representation; attribute IotconOption[]? options; void send() raises(WebAPIException); }; [NoInterfaceObject] interface RemoteResponse { readonly attribute ResponseResult result; readonly attribute Representation representation; readonly attribute IotconOption[]? options; }; [NoInterfaceObject] interface DeviceInfo { readonly attribute DOMString? deviceName; readonly attribute DOMString? specVersion; readonly attribute DOMString? oicDeviceId; readonly attribute DOMString? dataModelVersion; }; [NoInterfaceObject] interface PlatformInfo { readonly attribute DOMString? platformId; readonly attribute DOMString? manufacturerName; readonly attribute DOMString? manufacturerUrl; readonly attribute DOMString? modelNumber; readonly attribute DOMString? manufactureDate; readonly attribute DOMString? platformVersion; readonly attribute DOMString? operatingSystemVersion; readonly attribute DOMString? hardwareVersion; readonly attribute DOMString? firmwareVersion; readonly attribute DOMString? supportUrl; readonly attribute DOMString? systemTime; }; [Callback=FunctionOnly, NoInterfaceObject] interface RequestCallback { void onget(Request request); void onput(Request request); void onpost(Request request); void ondelete(Request request); void onobserving(Request request, ObserveType observeType, unsigned long observeId); }; [Callback=FunctionOnly, NoInterfaceObject] interface FoundResourceSuccessCallback { void onfound(RemoteResource remoteResource); }; [Callback=FunctionOnly, NoInterfaceObject] interface PresenceEventCallback { void onreceived(PresenceResponse presenceResponse); }; [Callback=FunctionOnly, NoInterfaceObject] interface FoundDeviceInfoSuccessCallback { void onsuccess(DeviceInfo info); }; [Callback=FunctionOnly, NoInterfaceObject] interface FoundPlatformInfoSuccessCallback { void onsuccess(PlatformInfo info); }; [Callback=FunctionOnly, NoInterfaceObject] interface RemoteResourceResponseCallback { void onsuccess(RemoteResponse response); }; [Callback=FunctionOnly, NoInterfaceObject] interface ResourceStateChangeCallback { void onchanged(boolean isAlive); }; [Callback=FunctionOnly, NoInterfaceObject] interface CacheUpdatedCallback { void onupdated(Representation representation); }; [Callback=FunctionOnly, NoInterfaceObject] interface GeneratedPinCallback { void onsuccess(DOMString pin); }; };