… and brought into existence
Creating a framework for distributed applications.
Three months ago i took the chance to make a commitment — to realise an idea i had for years. Long before it became known as the Internet-Of-Things, i connected devices with wires and radio frequency. If you combine multiple things, it is amazing what sort of functionality can be created. Over the last decade Web-APIs became increasingly popular. It is so easy to use the most sophisticated technologies to enrich your own projects.
But there is a downside to this. If i want to create a solution, i have to make a choice. I have to select the devices i want to integrate, i have to select the protocols i want to communicate with, and most likely i have to create a number of accounts, to embed external functions or simply get some hosting for the software and data.
If one of the providers gets bought by someone else, if there is a change in a protocol or dependency, the whole solution suffers. This results in a very high turn-over of complete device environments.
I think a device that sits in my presence is an interaction device. I do not care much, how “intelligent” the device itself is — if it’s connected to a network it can be remote-controlled. The brain can be somewhere else. I want devices, that can be used for multiple functions. If devices can be integrated dynamically into multiple applications, the functionality can evolve. I’m dreaming of the ubiquitous human-machine-interface. We’re almost there, with voice, visual and haptic devices.
A framework for distributed applications
I developed a framework to make it possible to integrate devices and other resources into distributed applications. I defined, how data gets exchanged between the components. Also, i created a solution to make it possible to add external services with adapters.
For the Open IoT Challenge i defined a set of smaller challenges. I wanted to show, that it is possible to make single IoT devices available for distributed applications. I wanted to demonstrate that it is possible within the framework to create some kind of context awareness — specifically physical location context. And finally i wanted to integrate multiple different services to ensure a wide application spectrum.
One thing i liked about the challenge was, that i could work with wood and wires. Sawing, soldering, glue. And the result, i think, is pretty neat:
Beside the obvious hardware outcome i developed a number of services:
- Location-Service — allows to subscribe to events, when someone enters or exits a specific location, and to react to those events
- Weather Pic Service — fetches current weather data from an Weather API and composes an image from text and weather icons for displaying weather information.
- List Select Interaction Element — this interaction element can be used for multiple purposes — i select my favorite internet audio stream.
It is amazing what is possible with open source technologies. I build upon a lot of open source software packages and work with open hardware:
- The Raspberry Pi drives the Wall Interaction Panel that i have build.
- The base for my software service units are Docker containers.
- The system that makes the systems work are Alpine Linux, which i like because of its very small footprint, and Debian, an operating system i grew accustomed with.
- To test and experiment with Bluetooth technology i used the Bluez Software Stack.
- A very easy to use device management system for my wall panel is Kura, it takes care of Wifi & Network configuration, and integrates iBeacon advertising.
What did i learn
It is possible to create distributed applications with this framework. You can think about an idea for so and so long, but if you create it, you know for sure. Also i made a habit out of collecting my sources. It helped me to structure my knowledge and to find a straight path through the project.
When following a project, that has specific goals, it is very common to evaluate different solutions — i learned many ways on how my specific tasks could not be completed. But this knowledge will help me later.
To name one thing that i did researched and did not use: the Vorto project. I still think it might be beneficial to use its information scheme storage for clear interface definition between IoT components — for now i’m not there yet to use it.
Now it will grow
I plan to add more interface modality to the framework — starting with voice. Also, to create an incentive for people to share their own resources, and build bigger solutions, i will integrate a crypto currency compensation scheme. First tests with the Stellar system were successful — thus it will be possible, to pay for services or earn Lumen (or other currencies) for lending computing power or other resources, like sensor data.
Last but not least, i will publish the core components of the framework as open source software. Since i haven’t had much time during the challenge, this is an aspect that fell a bit short. The advantage is obvious: network effects. the more participate, the more useful the solutions can be on the framework. So i invite you, to follow me for updates on this development!
Thank you Eclipse Team!