IOT (Internet of Things) is one of the most promising "new generation" business.
Nowadays it is not even remotely imaginable to think about managing your daily activities without using the internet or without using, at least once during the day, a device connected to the "big network".
Configuring a new router at home, I was impressed by the amount of objects (hardware) installed in my house requiring an internet connection to work properly. Let's start with the mobile phones; In the family we are 4, this means, 4 connections. Then the ipads.
we have two old ones plus an Android tablet. Then the kindle for my wife who, in the evening, relaxes by reading a book. Immediately after, you go to the smart TV, apple TV and PS3. Do not forget computers, remote access points,
wifi surveillance cameras. You got it right. I'm talking about dozens of objects, permanently connected to the network. Each of this object may not exist or may not work without a fully functional internet connection.
IoT is a concept much more complex than the simple use that can be made of a television or a mobile phone. IoT is a physical extension of the analog world to the digital world. With a lot of immagination it is something like if we were able to inject ourselves and our things
within the internet network and be simultaneously on multiple points.
Obviously, for the time being, it is better to "keep your feets on the ground". For the moment let's imagine, simply, to require to light a lamp at home while sitting comfortably at a friend's house 20 KM away from your home.
The extension of ourselves is a small object that, connected to the network, operates like a real switch controlled remotely from our mobile phone. This instrument has been our physical extension towards the home, tens of kilometers away.
"Internet of things" allows us to do this.
More than connect our minds through social media, share sites, blogs etc. now, we are able to connect our things, our homes, our machines, our washing machines, refrigerators and who knows what else we will connect.
You will understand that here we are talking about billions and billions of information to be managed and thousands and thousands of potential services that could be made available to those who produce hardware "connectable" to the internet.
Regarding this hardware there are two main characteristics that will help us to draw and then understand the miniservices concept. The first is that IoT is made of simple and minimal things.
The market itself teaches us that if we want to launch successfully a product we must lower costs, producing something ease to use and with chip components.
Another significant aspect is that producers of these components,
mainly want to produce the hardware and would be very interested to have already available all the software necessary to make their machines work quickly and easily.
Financial aspect is represented by:
-- Low development complexity
-- Simple protocolls
-- low level of communication and few constraint
The items I mentioned, make the point on a very interesting and new business model. This model got me to the decision to build: "MiniServices".
A miniservice is a simple, secure and versatile function that can be queried by hardware designed for the IoT and which can provide a data storage service, a sessionless function or simply, reply to a query:
Store: Save data in a safe place that I should not care (Infrastructure, backup, disaster recovery and so on).
Execute: Start a specific function using an input provided by the IoT object alone or combining information coming from more than one single object
Query: Query a database and send me back a result
With these three basic operations the Miniservices infrastructure proposes to greatly simplify the life of any manufacturer of IoT devices. It can be used by professionals, by private individuals but also by large companies.
The miniservice platform offers a security system ensuring that access to data remains unique and personal and that your services are and will be accessible only to your certified hardware devices.
Technically a miniservice is a REST (If you are interested in understanding what REST calls I wrote a short
tutorial) function, called by the IoT hardware internet interface (a wifi card connected to a router or a generic network module connected cable even a GPRS module connected to an internet APN).
Before querying the real needed service, we ask a specific authentication service to be allowed for a specific set of functions. This service (if approved) returns a unique key that is used to access the desired function once and only once. Invoking the selected service, the operations
executed by the miniservice generates a "Store" an "Execute" or a "Query" operation.
In the following graph I tried to schematically represent an application flow related to a call made to a miniservice, to obtain the service output response.
To simplify life of non expert users, I built also a basic firmware for the most "famous" controller (currently NodeMCU) used for home automation, that you can simply
download and install on your board in order to run it with most common sensors and actuators.
The main pourpose of the infrastructure is to let expert users and professionals to build their own device protocols and software but, if you want to quickly build and run, using internet, your devices, you can also use our
Web APP available on internet.
Using this Web application you will be able to
register to the platform,
add your devices and configure or read their status (temperature, GPS position etc.) using internet and an active connection for your device.
To show you how much this is simple, I prepeared the following
tutorial who describes you, step by step, how to quickly build your first IoT device to activate and deactivate Power plugs in your home using internet and the Miniservice Infrastructure.
SDK functions available in the version 1.0.
For every service you will be able to find a small servicesheet in english with the sintax to use for every single call using REST methodology
Authenticator: The core of the authentication system (default call) is represented by this service which, once verified various security information related to the calling device, returns
a token valid only one time to be used for calls to other Miniservices.
GeoReference: This service saves in the archive a series of geographical coordinates by adding different parameters that can be used, later, during the query,
to determine specific geographic locations or routes
RetrieveCoordinates: The output service of GeoCoordinates, returns the coordinates stored in the archive following some input criteria and applying the filters related to the specific
IoT device who stored the information.
ApplicationApprover: Allow your own device to work or not, based on a pre approval process with authentication token
ApproverConfig:This service can be used to configure which devices need to access what. More generally, this service can also be configured for approvals
other than access to miniservices.
Using this function, in theory, one could even simply authorize or not a specific device (or one given to another) to operate. What is configured through this service is then verified by consulting ApplicationApprover
GetIoTConfig: It is possible to define a configuration to download on your own devices. Calling this function, a device, can download it's own personalised configuration
ConfigurationConfig: This service allows you to upload complete configuration files in XML format that will be later downloaded to the device to be configured using the ConfigurationDownload miniservice
SetIoTConfigParam: This function is really important for any change that you need to apply to your configurations. As you know, every time an object starts it downloads its configuration from the platform. The configuration is composed by different parameters with a value.
If the object (or your own application) needs to change one of these parameters (without to upload every time all the configuration using the ConfigurationConfig function), it can use SetIoTConfig parameter passing the device ID, the parameter to change and the new value (an integer or a string). This generates a new config value that can
be used by the object itself or by another application reading objects configurations. Just to make you an example, the status of a power plug could be a boolean (0/1) parameter in the configuration of an IoT plugs adapter. If you want to switch off a light (could be a lamp connected to the plug) you can simply set the value to 0 from your application. When the IoT Object will read again the configuration,
it will verify that the value has been zeroed and will switch off the light.
TargetCoordinates: Very often it happens to have the need to store somewere a specific place of interest. Maybe, adding a special note to remind us of what the place was related to. This service does just that. The coordinates sent to the database could then be retrieved using the RetrieveCoordinates method
Temperature: This simple service (part of the "MeteoSet group of Miniservices") allows to store data coming from a temperature sensor (such as DHT11 or DHT22). The data can be connected or not to particular geographical coordinates.
The combination also allows you to locate the geo-referenced position of the point where the temperature was detected. Obviously, in this case the temperature sensor must be installed together with a GPS device
GetTemperature: All the weather information stored in the MeteoSet functions (Weather Set) DB can be queried through this function which returns all the parameters stored in a given time interval.
Biomedical: Biomedical service (part of the "Healt group of Miniservices") allows you to store biomedical data returned by IoT devices operating with medical sensors. Also in this area the sensors available on the market are many. The first version of such service can operate storing BPM (beats per minute) values, Temperature values and oxygenation data.
Miniservices is mainly an asyncronous platform. It means that objects put messages on a queue, pull messages from the queue and do not operate in a "synk way". However, this is not always the real need of an user implementing an IoT device. In certain situation (turn on a lamp or switch off a fan) you could need to interact with your device immediately. For this reason I built a Server named
PushNotifier that you can use to
syncronize your object in real time. You will need only to register your device on this server and call the notification function when needed.
One of the most common sensors available on the market to build IoT devices is, as example, the max 30100 but the number of devices you can find to evaluate medical values is big. Everithing depend on your fantasy and on the values you want to monitor.
For all of them we have available libraries to support IoT Development like the
Miniservices Controller that can be used to simplify any miniservice call.
If you are interested to understand how to implement such similar devices compatible with the Miniservices by BVRobotics.com infrastructure, then you can see how I built the
IoT Meteo station. This will be useful for you in order to start building your first device but also to understand how to implement access to authenticate your requests and to manipulate data stored into the central database of BVRobotics.com
All IoT Miniservices have an additional protection criteria related to the calling MAC code. This code is sent to the http protocol during the call and is validated by an access list in the manufacturer's archive. For this reason the activation (only initial of course) of a device requires the hardware manufacturer to send a list of MAC code to enable.
It is possible to access a protected test environment that can be used to test all the functionality of the miniservices without any impact on the stable production environment.
Last, but not the least, I built an interface with the
Alexa IoT service who can allow you to interact with your objects using the famous Amazon Device.
To enable your access to IoT Miniservice SET from www.BVRobotics.com, please, contact the support desk.