JOSP Developer
Every developer that works on a software that include the JSL Library is a JOSP Developer.
The JSL Library is the software library that allow 3rd party software interact with JOSP Objects and more in general with a JOSP EcoSystem (also cloud, users...). The JOSP Services, so we call the software that include the JSL Library, are used by End Users to interact with JOSP Objects.
Because services required by an IoT Solution can vary depending on solution's goals, also JOSP Developers needs depends on it.
To better discover the needs of Developers, let's analyze the types of IoT Services they could develop.
The first thing we think about when we talk about IoT services is a monitoring and control service.
Those services allow user show objects' statuses and execute commands remotely.
Developers needs to list all available objects, optionally services would filter them by their features or model.
Once identified on with which object interact, Developers can get object's info, structure, states and send command execution request.
Almost any connected object comes with a default Monitor and control service, that include also other basic features like object's registration and user's account management.
For smart homes and consumer users, normally this service is a mobile app to install on user's smartphone.
Instead, in enterprise/industrial fields this IoT service is represented by a management software or as extension for another management system.
This kind of services can be developed by anyone.
From the classic guy in his garage (a mobile app) to firms specializing in business services (Factory 4.0 services).
When those services introduce more complex logic and rules to automate object's commands execution, we are talking about objects orchestration services.
Those services enable the M2M communication acting as control point.
A typical example of M2M communication is when a thermostat detects a lower temperature and then activate the boiler.
In this example the thermostat act as object and as a control point, it contains both the temperature sensor and the logic to know when activate the boiler.
In an IoT Solution the logic is moved into services, more easy to configure, customize and update than an object.
IoT Services that control multiple objects simultaneously and allow creating scenes also fall into this category.
Services like that help user manage all objects that can be found in a specific environment like kitchen, living room, garage, or even work benches, gardens, greenhouses, offices, meeting rooms and much more.
All object's orchestrator services have in common that many of them must run 24/7.
Those services must work also without a user interface.
For example when you enter in your living room, you would switch on some lights and play music.
To do that a service must be running, then it must catch the status update from a motion sensor placed in your living room, and finally send the right commands to living room's lights and speakers.
This kind of software, normally is provided as cloud service.
The Developer publishes a web portal or mobile apps to allow end users register an account for the service, allow that service access to their JOSP Objects and, finally configure service's features.
Then Developer host on his cloud servers the software that include the JSL library and the user's credentials.
So this service can run 24/7 and reach all user's JOSP Objects via cloud.
Another type of IoT Service is related to analytics, machine learning and AI that process data generated by connected objects.
Those services basically have two techniques for collecting data.
The first one is to initialize the JSL library periodically (once a day) and get the latest data from connected objects and store them in an internal database.
Otherwise, services can run 24/7 and store status values each time they receive a status update message from connected objects.
In both cases, services must access to the objects and store their data internally to process them (immediately or later).
For those service, that should access to hundreds or thousands of objects, normally were created a special 'service' user.
After that, this 'service' user is granted permissions, at least at the STATE level, to access all the necessary connected objects.
Regardless of the different requirements and purposes, all Developers face the same challenges:
- Focus on functionality and not on communication
When Developers can focus on service's feature instead working on communication layers, the service development become quickly and easy. - Communicate with as many connected objects as possible
Every IoT Service, to achieve its purpose, must interact with specific objects depending on which feature they expose. Whatever technology is used to connect the objects.
Therefore, for a developer it is of primary importance to be able to communicate with similar objects without worrying about what technology they use. - Get detailed information on the object
Many connected objects are not very useful or difficult to exploit because they provide few details.
When Developer and Maker are not the same person, it becomes hard for Developer understand objects and how use them. For this reason, Developer require detailed info about objects. Even better if those details are provided by the object itself directly to IoT Services, so services can parse them and change accordingly. - Interact with new objects without altering software structure
In software development, integrate a new service involve a lot of effort. In the worst cases it requires restructuring the host software.
IoT EcoSystems are no exception. When a Developer integrate an IoT EcoSystem, it needs to alter his own software. Depending on the EcoSystem and on the software design, this process may require a little or more effort. - Get detailed information on the context in which the user is
To design increasingly user-centric service, Developers should be able to access and elaborate data about users and the context in which they are operating. IoT EcoSystems can process those data and provide to IoT Services so Developers can arrange their software depending on user and context statuses.