There are a couple of key components to a successful IoT infrastructure. Typical IoT system has IoT devices, IoT back-end, and front-end. Depending on a specific use case the system can also utilize other elements to cache the IoT results or provide a history of IoT records for example. Contact us to discuss how we can help you succeed in building your IoT Ecosystem.
IoT devices are connected to the IoT backend via a secure link. They mostly send data that they collect to the IoT cloud (IoT sensor type device). IoT devices can also listen for commands from IoT cloud and execute predefined actions based on these commands (re-routing a vehicle because of a traffic jam). Devices can be directly connected to IoT back-end via a GPRS connection. An optimal update frequency is selected to limit the amount of data.
The back-end is some sort of MQTT broker server. MQTT is a protocol used to send and receive information within IoT Ecosystem. It is used instead of traditional HTTP protocol because it has much less overhead and is more efficient, keeping the bandwidth as low as possible. For devices exposed over the internet, we use AWS IoT cloud exclusively for security reasons as communication is encrypted with a certificate. For internal systems, we typically use open source Eclipse Mosquito broker that is isolated from the internet.
Last part of the IoT infrastructure is front-end. This involves some sort of control panel type software to monitor the system. The sole purpose of this is to present IoT data to the system administrators/managers in a visual form. This way any issues can be easily identified and solved quickly.
In a case where users need to interact with IoT Ecosystem via mobile devices, we need an extra back-end system that proxies the information between IoT system and mobile devices. This extra back-end system offers a secure gateway into the IoT cloud that is still secured with a certificate. On the other hand, it checks and authenticates requests from mobile devices to relay relevant information to them.
We can deliver individual Software components that fit into your existing infrastructure or we can architect the whole IoT system. It is not necessary for our software solution to be connected to IoT system. We primarily specialize in back-end server systems but can deliver other solutions that fulfill customers needs.
Kanban is used to monitor and maintain projects as it makes us use our time more efficiently. CI/CD is used where ever possible to test and deploy solutions. For that reason, Docker containers fit perfectly in our workflow. Allowing use to automate as many steps as possible and, as stated before, be more efficient.
Native app development can be a difficult task especially when you maintain multiple codebases doing basically the same thing. There are tools that can minimize this overhead in native app development if you can accept some drawbacks.
It is possible to have a single codebase for multiple platforms. Xamarin is one of the tools we use to achieve this cross-platform development with as much as 90% of the shared codebase. There are also a few drawbacks that need to be considered and are subject of individual use-case when deciding what tools to use for development.
Picking the right hardware for the job is assessed on individual customer requirements. Once the hardware is selected and it is clear how it will be integrated into the overall system we can deliver software for it. Our primary focus is systems security with trying to avoid any potential weak links in the system. For that reason, we use certificates to securely connect to IoT Ecosystem. Each device has its own certificate which can be revoked and device isolated from the system in case of problems.
When needed we design, manufacture and deliver custom IoT hardware that is integrated into the IoT Ecosystem. Custom hardware comes into play when there are specific requirements that can not be covered with what existing devices have to offer. We are not only limited to Arduino/Microcontroller based hardware, but also offer custom hardware based on Raspberry Pi Compute Module or nVidia's Jetson Nano kit. These group of devices can fulfill almost any IoT requirements customers have.
We use the latest and greatest technologies existing today and we listed some of the most common technologies we are working with. When solutions demand it, we can deliver them using other technologies too. Our primary goal is to make our customers succeed. We feel that helping with our customers' success is beneficial for our long-term cooperation.
When needed we offer maintenance for the system we develop. We can deploy and maintain the whole IoT Ecosystem depending on your needs.
We primarily create cloud-based solutions and are using Amazon AWS IoT core at the heart of IoT Ecosystem. AWS IoT cloud is an MQTT message broker responsible for relaying messages inside IoT Ecosystem.
To improve the usability we can add additional components like InfluxDB to keep parameters history and Redis to cache the data and keep the number of IoT requests as low as possible.
Our DevOps flow is supported by bitbucket for storing source code. Rancher server is used for management of Kubernetes clusters which in term host Docker containers. Jenkins is used for running tests and to deploy containers into development/staging/production environments. Zabbix/Grafana can be leveraged for monitoring purposes.
We mostly use Node.js and Python to develop code. For native apps, we use swift and java of course.
Amazon EC2 instances are usually used to host Kubernetes clusters. But we can also use other providers like Google, Microsoft Azure, Linode and similar.
Depending on the needs we use IoT hardware based on Arduino, Raspberry Pi or Nvidia Jetson nano kit. These components turn out to fulfill almost any scenario needed by our customers.