By, Neeraj Arora, Staff Architect, PS Research Labs; Luis M. Valerio Castillo, Consultant, PS Research Labs
For the things we have to learn before we can do them, we learn by doing them, e.g. men become builders by building and lyreplayers by playing the lyre…
Excerpt from “Nichomachean Ethics”, by Aristotle
As is with many things in the emerging technology space, it feels like we are destroying and rebuilding our world all over again. Whereas this might feel true to many, we posit that Internet of Things (IoT) solutions are primarily a collection of already existing components with some new components added in to bring in new functionality. Value predominantly lies in using the data collected by this IoT infrastructure. This is where software applications come in, the current way forward being Modern Applications.
In this article, we introduce the overall design of a sample Modern IoT Application and over the next few articles, we will also walk our readers through its assembly. We are progressively releasing all of the sample application codebases as Open Source Software, so that you can follow along with us, and if you so choose, by building, become builders.
Application Use Case
Imagine a busy elevator lobby with a number of elevators, as in a hotel or a shopping mall, with only a few of them functioning. Elevators often enter sleep mode during light traffic periods that are configured by the clock. Misconfiguration or approximate configuration often results in some elevators being used more than others, causing early failure, and dissatisfied users because of lengthy wait times.
Now imagine an occupied building with smoke billowing out one of its windows. The fire alarm goes off and out pour the occupants, the fire wardens with their hard hats and clipboard prepared to call muster. Are we sure that the building is now empty? How can we be sure?
Whereas the two use cases above seem different, both belong to what we may call the “smart building” category of IoT use-cases. Interestingly, both may be solved using a similar IoT solution.
Consider this – what if we could have cameras overlooking the elevator lobby and at many locations in the building that took still images at regular intervals. Further, what if we could count people in these still images? Assuming the cameras were positioned correctly, the resulting count could tell us if we needed to wake elevators up from sleep, or if there were occupants still in the evacuated building.
In this series, we will do just that! We will be working together to create a “People Counter IoT Application”. At a very simplistic level, it will count the number of people in spaces captured by a fleet of cameras. Along the way, we will learn about the Infrastructure Sub-Systems of IoT, the Solution Components that make up an IoT solution, implementations of sub-systems and components, have some fun coding (for the adventurous) or downloading and deploying code (for the pragmatist), and learn about VMware and third-party products you can use to create IoT solutions.
Most of what we are going to do is achievable using Virtual Machines. The code can run in containers too, but we will need to attach a webcam to at least one environment to provide us with images if you choose to use real images. As you will find out soon enough, you can write a plugin relegating the need for real images and use a cache of images instead.
We will provide you with all the code and the instructions, but you will have to provide the batteries. So, let’s get started!
Ingest, Analyze, Engage
As you were reading the use cases above, you may have realized that the solutions take in environmental data such as images, processes this data into information such as a crowd count, and engage back with its environment by actuating a device or sending out an alert. Most IoT solutions fit this pattern of Ingest, Analyze, and Engage. That is, they:
- Ingest data from things,
- Infer or analyze ingested data to gather information, and
- Engage with users or the environment based on results of the inference
The high-level architecture below describes a solution to the elevator orchestration use-case mentioned above.
You could replace the actuation of elevators in the elevator lobby use case with actuation of other devices, such as thermostats in the HVAC efficiency use case, or with other forms of interaction such as sending alerts in the building evacuation use case. Whichever way you go about it, you will find the familiar pattern of Ingest, Analyze, and Engage.
Layers of an IoT Solution
One of the ways to look at architecting an IoT solution is to break it down into layers. We propose sub-dividing an IoT solution architecture into three layers:
- Infrastructure Sub-Systems of IoT,
- Solution Components of IoT, and
- Six Processes of Multi-Cloud
As we put together our IoT solution, or for that matter any IoT solution, we will build, configure, and subscribe to products that will fulfill various roles as described in the Infrastructure Sub-Systems of IoT. The choices made here will need to fulfill the requirements of choices made for the solution components of IoT. Finally, both the choices made for the infrastructure sub-systems and solution components need to assist with implementing the Six Processes of Multi-Cloud.
In this series, we will progressively take you through selecting, building, configuring and deploying these pieces to complete this Modern IoT Application. Whereas we will not cover running and managing the solution in detail – this is, after all, a sample application and a proof-of-concept – we will leave you with guidelines to run and manage an IoT solution.
Up Next
While we have you all fired up to implement this IoT solution proof-of-concept with us, here is a preview of upcoming content.
We will follow this article with one that dives into making design choices for our IoT application. Since we have been working on this for a few months, there exists a functioning end to end system. We would like to introduce you to that immediately with an introduction to the ingestion component. Following that, we will write about the inference and engage components. Design deep dives into each individual component will follow, and so will some detail on use-case specific algorithms implemented in the solution. The code is modular allowing the development of plugins to use the same data orchestration pipeline but utilize products and services different from those implemented in the PoC. To allow you to fit the code to your use-case and environment, we will introduce the plugin architecture next. Most of the detailed articles will be released as we take our code through the open-source process established at VMware and make it available for public visibility. Everything we are doing is doable on VMware based infrastructure and cloud products and so we will also take you through utilizing VMware’s products and cloud services to build, manage and run this PoC. Since an IoT solution is complete without a discussion around the process of managing ingested data in transit and at rest, we will also discuss the processes and policies with respect to IoT.
We look forward to building this Modern IoT Application with you. Thank you for accompanying us on this journey.
About the Authors
Neeraj Arora is a Staff Architect with PS Research Labs at VMware. He leads the development of service offerings for Machine Learning, IoT, and Edge Computing. Previously, Neeraj was part of the VMware Professional Services field organization delivering integrations to Fortune 500 companies using VMware and non-VMware products. Industry experience includes gaming, utilities, healthcare, communications, finance, manufacturing, education, and government sectors. Neeraj has published research papers in the areas of Search Engines, Standards Compliance, and use of Computer Science in Medicine.
Luis M. Valerio Castillo is a Solutions Development Consultant with PS Research Labs at VMware, focusing on IoT, and Edge Computing. Prior to this role, Luis worked in the field implementing solutions for customers, which included application deployment automation, third party system integrations, automated testing, and documentation. His six years of experience started at Momentum SI, which was acquired by VMware in 2014. He holds a Bachelor of Science, with a major in Computer Science.