Internet of Things (IoT) is a network of physical devices with electronic, software, sensors, actuators, and connectivity which enables them to connect and exchange data. This creates opportunities for direct integration of the physical world into computer-based systems. This can aid efficiency, improvements, economic benefits, and help us reduce human effort.
Connection of electronic gadgets to computers started long ago. The mouse and keyboard that we use are external devices connected to the computer. This concept improved over time to include cameras, mobile phones, projectors, televisions etc. Advances in embedded software enabled delegating more and more intelligence into the devices. But there was a major limitation in all this.
So far, each device had a unique protocol defined for connecting - based on some dedicated piece of code on either side. We did not have a generic standard. IoT attempts to break out of this limitation, allowing anything to communicate with anything (within the restrictions of security and access rights). Apart from software and hardware developments this demands a solid framework.
Just as we had the OSI layer for computer networks, The SCP stack consists of the following layers that enable the connection of devices.
The Analytics layer is most important for Machine Learning. Yet it is necessary to have a basic understanding of the stack to do useful work on the analytics layer.
As we can see, IoT development spans a huge range of domains including mechanical, electrical, electronic and software engineering, data analytics and machine learning; along with ergonomic user interface design. It is almost impossible for one person to master each of these. Hence the implementation is typically divided into multiple steps - Define the end user experience; Create a data model; Plan the data analysis, connectivity and build.
The IoT implementation is most often based on a cloud, because that reduces the connectivity issues. Each thing in the physical world is modeled as a "Thing" in software. The rest of the application communicates with this "Thing" in the cloud - which in turn controls and receives data from the physical device.
Most often in an object oriented implementation, each Thing is an instance of a class that implements the details for the particular device and implements interfaces related to the functionality. For example, a Canon Camera would be modeled by a Thing that is an instance of the class Canon Camera - which in turn would implement the interface Camera.
The connection between the Thing object and the device may be specific to the electronic implementation. But beyond that, the Thing is a standard object that can communicate with the rest of the system. It exports a data model with relevant get/set methods. It also exports events and subscriptions for listeners. There are different proprietary and open source frameworks that simplify this implementation.
The data obtained from these Things is continuously monitored and processed by the application. This huge inflow of data is a hot recipe for a machine learning implementation. It is first analyzed and converted into meaningful information and then used for learning. There are three types of machine learning implementations. Real time - on device, real time - in cloud and offline learning. The choice depends upon the volume of data and the kind of training required.
If the training is specific to a particular device and the data is minimal, it can be implemented on the device itself this reduces the network delays and does not bother the cloud with local details. But if it more generic, like building a model of the entire geography based on the inputs from different drones, it has to be implemented on the cloud. And if it requires a huge amount of processing based on the data accumulated over time, then it has to be offline. Each approach requires a different type of implementation.