betaas apis webinar adaptation, service and extended service programming interfaces 1 h ow to i...
TRANSCRIPT
BETaaS APIs Webinar 1
Adaptation, Service and Extended Service Programming Interfaces
HOW TO INTERACT THROUGHBETAAS APIS
BETaaS APIs Webinar 2
Dec 2014 BETaaS: a horizontal platform for IoT
Jan 2015 How to interact through BETaaS API
Feb 2015 How to use local and remote cloud instances at BETaaS
Feb 2015 CoAP Adaptation Plugin
Feb 2015 Running apps BETaaS enabled proprietary devices
Feb 2015 How to setup security environment in BETaaS
WEBINARS AGENDA
BETaaS APIs Webinar 3
THE LAYERED ARCHITECTURE
GW
GW
GW
BETaaS APIs Webinar 4
EXTERNAL INTERACTIONS - ADAPTATION
Things
BETaaS APIs Webinar 5
EXTERNAL INTERACTIONS - SERVICESmartphones,Laptops, etc.
Things
BETaaS APIs Webinar 6
INTERACTIONS - EXTENDED SERVICES
Extended Services
Things
Smartphones,
Laptops, etc.
Custom Business Logic
BETaaS APIs Webinar 7
ADAPTATION INTERFACE (1/3)
To be implemented by every OSGi adaptor bundle
Sub-project: betaas-plugins\betaas-adaptation-plugin
Once installed, the bundle is automatically exploited by BETaaS
Thing Simulator Adaptor Plug-in
CoAP Plug-in
ETSIPlug-in …
Java Interfaces: IAdaptorPlugin
BETaaS APIs Webinar 8
ADAPTATION INTERFACE (2/3)
Adaptation bundles are used by BETaaS to:
Plug-inBundle
DISCOVER new Things+ Context
Information
GETsensors
measurementsand/or SUBSCRIBE
SETactuator
s
BETaaS APIs Webinar 9
ADAPTATION INTERFACE (3/3)
public Vector<HashMap<String, String>> discover()
public String getData(String sensorID);public boolean register(String sensorID);public boolean unregister(String sensorID);
public String setData(String sensorID, String value);
Key Value
ID 0323Ar-BTU2-a
type Presence
… …
Key Value
ID MNOS-4520-21
type Humidity
latitude 43.192416
… …
…
public boolean notify(String type, String resourceID, HashMap<String, String> value);
Interface IAdaptorListener (USED)
Interface IAdaptorPlugin (IMPLEMENTED)
Key Value
measurement 7.21
latitude 43.192418
… …
BETaaS APIs Webinar 10
SERVICE INTERFACE (1/2)
Used by external applications to:
> Request the resources allocation
> Get the list of allocated Thing Services
> Get and Set data using Thing Services
> Retrieve extended services data
> Request the execution of background tasks on Thing Services data
Sub-project: betaas-service\betaas-service-servicemanager
Java Interfaces: ServiceManagerExternalIF
Available both through SOAP and REST
Services description also available at http://<karaf host>:8181/cxf
BETaaS APIs Webinar 11
SERVICE INTERFACE (2/2)
public String installApplication(String manifestContent);
public String getApplicationServices(String appID);
public boolean uninstallApplication(String appID, String manifestContent);
public String getThingServiceData(String appID, String serviceID, String token);
public boolean setThingServiceData(String appID, String serviceID, String data, String token);
public String getExtendedServiceData(String appID, String extServUniqueName, String additionalInfo);
public boolean register(String appID, String serviceID, String token);
public boolean unregister(String appID, String serviceID, String token);
public String getTaskData(String appID, String taskID);
BETaaS APIs Webinar 12
MANIFEST – AN EXAMPLE<?xml version='1.0'?><manifest>
<Application><name>eu.betaas.test.testBETaaSREST</name><credentials>MIIGogIBAzCCBlwGCSqGSIb3DQEHAaCCBk[…]</credentials><notificationAddress>http://192.168.31.44:8080/TestBETaaSREST/</notificationAddress>
</Application><ServiceDescriptionTerm>
<ServiceDefinition><Feature>STREET LAMP</Feature><Areas>
<Environment>Public</Environment><Altitude>30</Altitude><Latitude>43.656998</Latitude><Longitude>10.437418</Longitude><Radius>1000.0</Radius>
</Areas><Delivery>betaas.delivery.SET</Delivery><Trust>3</Trust><QoS>
<MaxInterRequestTimeSec>5</MaxInterRequestTimeSec><MaxResponseTimeSec>15</MaxResponseTimeSec><MinAvailability>1</MinAvailability>
</QoS><credentials></credentials>
</ServiceDefinition></ServiceDescriptionTerm>
</manifest>
BETaaS APIs Webinar 13
SERVICE INTERFACE – AN EXAMPLE
BETaaS APIs Webinar 14
SERVICE INTERFACE – INTRUSION DETECTION
Uses SOAP service interfaces
Allocates one TS for PRESENCE anywhere in the HOME
GET TS data (combined value) and requests a simple data TASK
<Feature>presence</Feature><Areas>
<Environment>
Private</Environment><LocationKeyword>
home</LocationKeyword>
<Floor>1</Floor></Areas>
BETaaS APIs Webinar 15
EXTENDED SERVICE INTERFACE (1/2)
Extended service are OSGi bundles that use Service Layer APIs (ServiceManagerInternalIF) to:
> Request the resources allocation
> Get and Set data using Thing Services
> Request the execution of background tasks on Thing Services data
Sub-project: betaas-service\betaas-service-servicemanagerJava Interface: IExtendedService
Standard Java calls to APIs methods
Extended Services must implement an interface
BETaaS APIs Webinar 16
EXTENDED SERVICE INTERFACE (2/2)
public String getUniqueID();
public void notifyInstallation(boolean success, String msg, String extServId, ArrayList<String> servList,ArrayList<String> tokenList);
public void notifySLAViolation(String serviceID);
public void notifyData(String serviceID, JsonObject data);
public String getResult(String additionalInfo);
Methods to provide:
BETaaS APIs Webinar
EXTENDED SERVICE – LEZ TRAFFIC MGMTTraffic Intensity data
Cars position
MUNICIPALITY
GW
Compute dynamic fees
User App
Adaptation APIs
Extended Service APIsServiceAPIs
• Discovery of GPS and Traffic sensors • Registration to data updates
• Allocate 2 TS (GPS and Traffic)• Registration to data updates• Request usage of Extended Service• Request data from Extended Service (current fee)
17
BETaaS APIs Webinar
MOBILE APP INTERACTION
18
Difficulty to implement a “receptor” service (for PUSH mode)> Use Google Cloud Messaging
> Proprietary system> Not free> Vendor lock-in
> Use open source queuing tools (RabbitMQ)
> Implement your own server
> RabbitMQ> Battery consumption
> Not possible in some systems> Good luck!
Difficulty to interact with SOAP interfaces in mobile development> Complexity> Lack of libraries
BETaaS APIs Webinar
MOBILE APP INTERACTION
19
Install App
App Id
Get services IDs
Services IDs
Get Data
Data
Set Data
OK/KO
Get Data
Data
Set Data
OK/KO
Use of the REST interface in PULL mode:
loop
loop
BETaaS APIs Webinar 20
<?xml version='1.0'?><manifest>
<Application><name>IntrusionDetection</name><credentials>MIIGogIBAzCCBlwGCSqGSIb3DQEHAaCCBk[…]</credentials><notificationAddress>http://localhost:8080/betaasapptester/</notificationAddress>
</Application><ServiceDescriptionTerm>
<ServiceDefinition><Feature>presence</Feature><Areas>
<Environment>Private</Environment><LocationKeyword>home</LocationKeyword><Floor>1</Floor>
</Areas><Delivery>betaas.delivery.RTPULL</Delivery><Trust>5</Trust><QoS>
<MaxInterRequestTimeSec>5</MaxInterRequestTimeSec><MaxResponseTimeSec>15</MaxResponseTimeSec><MinAvailability>2</MinAvailability>
</QoS><credentials></credentials>
</ServiceDefinition></ServiceDescriptionTerm>
</manifest>
MOBILE APP INTERACTION
BETaaS APIs Webinar 21
Install Application: HTTP Method: POST URL: http://<sm-IP>:8181/cfx/sm/application/ Headers: “Content-Type : application/xml” Body: manifest string Returns: <Gateway ID0>::<App Id>
Get Services IDs: HTTP Method: GET URL: http://<sm-IP>:8181/cfx/sm/application/<appID> Returns: { InstallationInfo: { serviceList : [<service1>, <service2>...], tokenList : [<token1>, <token2>...] } }
MOBILE APP INTERACTION – REST API 1/2
BETaaS APIs Webinar 22
Get data: HTTP Method: GET URL: http://<sm-IP>:8181/cfx/sm/data/<applicationID>/<serviceID> Headers: “token : <token>” Returns: true/false
Uninstall application: HTTP Method: DELETE URL: http://<sm-IP>:8181/cfx/sm/application/<applicationID> Headers: “token : <token>” Returns: 200 OK
MOBILE APP INTERACTION – REST API 2/2
Full specification: http://<sm-IP>:8181/cfx/sm?_wadl
BETaaS APIs Webinar 23
MOBILE APP INTERACTION - SAMPLE
GatewayFragment GatewayManager REST serverGWCommunicatorREST REST client
Mobile App
UI Thread AsyncTask (background thread)
BETaaS Gateway
installApplication(gwId) installApplication(gwId)postResource(appData) POST …
200 OK - 0/1
[200 OK, appId]
getResource(app)GET …
200 OK – {InstallationInfo…}[200 OK, {Installatio…}]
{<appId>, [serv1, serv2], …
notifyDataUpdate(res)
getPresence(servId)
loop
getPresence(servId)getResource(servId)
GET …
200 OK - appId
[200 OK, 0/1]true/false
notifyApplicationInstalled(d)
loop
BETaaS APIs Webinar
www.betaas.eu
HOW TO USE LOCAL AND REMOTE CLOUD INSTANCES AT BETAAS
February 2015
NEXT WEBINAR