For the last year, I have been a part of what is now the IBM Watson Internet of Things (IoT) business unit. I’m still in the same role but have just been working with a different set of customers and interested in a solution that addressed their Continuous Engineering (CE) needs. This solution is only one aspect of the overall IBM Internet of Things solution. When you consider the broader IoT solution, it involves not just the designing and engineering of ‘things’ (using our CE solution) but the operation/management of them, the collection/control of data from them and the analysis/optimization of that data with all of that being cloud enabled and done in a secure manner.
Since I like to learn new things and since my solution focus is a part of a broader solution I was less familiar with, I decided to begin exploring one foundational element of it, namely the IoT Foundation.
“The IBM IoT Foundation platform allows organizations to securely and easily connect devices, from chips to intelligent appliances to applications and industry solutions. Scaling through cloud-based services and using rich analytics, IoT Foundation platform provides organizations with new insight for innovation and transformation.”
The next question was how best to get that experience. My colleague Dennis Schultz, who has written a nice series of blogs on My Internet of Things and MobileFirst adventure advised that I decide on a project that was practical, real and of interest to me. At first I thought of something related to a weather station but then I thought it would be cool to do something that helped me figure out when to water my yard. You see, I live in Texas and as I was considering this, it was in the middle of summer and our typical water restrictions were in effect such that I couldn’t always water when it was needed. I also don’t want to over water so on my day of the week to water, I would typically stick my finger in the soil to see how wet the soil was and decide whether to turn the sprinklers on or not. Wouldn’t it be nice if I could some how do that with a sensor that would let me know that through some sort of email, text or other mobile alert?
As I searched around, I found that some IBMers have already done some investigation along those lines. The Poseidon Project, led by a team in Europe, “is a voluntary initiative that aims to reduce water usage in the world”. They created a great three part tutorial series that connects a Raspberry Pi with sensors to monitor temperature and soil moisture, have that data published to an MQTT Message Broker, then input it to an application hosted on IBM Bluemix built using a Node-Red editor. This application tweets the sensor data and also stores it in a Cloudant database for later visualization through an HTML5 app. This appeared to have much of what I needed and more and would provide a nice launching point for my project. Take a look at the solution architecture below.
I didn’t want to just jump in and follow the tutorial. I first wanted to do some background reading and get some basic experience with the IBM IoT Foundation on Bluemix.
As you could imagine, there is a plethora of background information online. Here are some links I found useful:
- Getting started with Internet of Things Foundation
- Bluemix developer site
- MQTT protocol
- How IBM’s Node-RED is hacking together the internet of things
- Cloudant DB Features
To get started with IBM IoT Foundation on Bluemix, I found there is a growing number of recipes on IBM developerWorks. These are step by step tutorials that walk you through some aspect of using the technology of interest to you. In particular, I followed the recipe that used a simulated device to provide temperature and humidity data that I could visualize using a simple quickstart web app (which can take inputs from real devices too). From there I tried the IoT starter application which allowed me to feed the simulated sensor data into IoT Foundation application using a Node-Red editor in Bluemix. I found this all to be quite fun and informative.
Thus armed and dangerous with some background information and basic experience I charged ahead into the Poseidon Project tutorial. My setup is depicted below.
The specific hardware I purchased included:
- Raspberry Pi 2 Model B Desktop – core component
- GrovePi+ – allows easy expansion of Raspberry Pi 2, e.g. add sensors
- Grove – Barometer (High-Accuracy) – primarily for monitoring temperature
- Grove – Moisture sensor – monitor soil moisture
- Grove – Universal 4 Pin 20cm Cables – connect sensors to GrovePi+
- Raspberry Pi Micro USB Power Supply Charger – power the Raspberry Pi 2 board
- Edimax Wi-Fi USB Adapter Nano Size – for when I move the system outdoors
- SanDisk Ultra 16GB Ultra Micro SDHC – hold the OS and software
The tutorial is well written and I pretty well followed it verbatim. To keep it impervious to changes in the Bluemix user interface, some of the steps were written more general with fewer specific screenshots or navigation steps making some harder, but only minimally so, for new users like me to follow. I did find that several steps were missing in Part 3, Step 2 relating to creating the APIs to be used by the HTML5 visualization app. The authors intend to submit an update with the missing steps. Should you decide to follow the tutorial, if it doesn’t show a revision date since it’s original publication of 16-December-2014, check back with me for the missing steps.
Here’s one output from the visualization app.
My experiment isn’t ready to be taken out of doors and used to monitor the soil moisture of my yard, I’d have to weatherproof the setup and find a different moisture sensor as I subsequently found that the one I am using isn’t meant to be used outdoors nor prolonged time in soil. Still, I enjoyed the experience and believe with a little more work it could be applied as I intended.
It also gave me broad exposure to a number of different technologies enabling rapid development of IoT applications.
- IBM Bluemix
- IBM IoT Foundation
- Cloudant DB
- IBM DevOps Services
- Data Drive Documents
There are a couple of extensions to the tutorial I’d like to do. First, it was written so that the sensor data is published to an MQTT Message Broker then received by the IoT Foundation app on Bluemix. I want to instead publish the data directly to the IBM IoT Foundation using the ibmiotf client library. I am currently working on that. Second, I’d like to explore making use of the IBM IoT Real-Time Insights service on Bluemix. I’ll publish any work on these in a subsequent post.
Thinking beyond this project, another idea I’m thinking of is making use of the TI SensorTag and Estimote Beacons to monitor temperatures in my home at the thermostat and in areas seemingly hotter/colder, compare these to weather outdoors and visualize on a mobile device with an app built using the IBM MobileFirst Platform or perhaps use the MyWeatherCenter app.
Finally, I will close with a thanks to Bram Havers and Davy Vanherbergen who helped me with any issues I came across in the Poseidon Client tutorial.