This project is submitted for

Description

analog.io is a full stack IoT web service and hardware platforms where people can create connected devices and share them with the world. It is designed to solve all kinds of world problems from air pollution, improving farm output or studying the bee population. It is really only limited by the users imagination.

From a software perspective, analog.io is a graphing front end that is backend agnostic. What this means is that users have the freedom to host their own data locally, within the analog.io cloud, or choice of 3rd party services such as data.sparkfun.com. At the moment only phant.io servers are supported but it is entirely possible and on the roadmap to support services such as thingspeak as well.

Details

Semi Finals Video:

Quarter Finals Video:

Many challenges today stem from the inability to cheaply and efficiently collect data, analyze it and share with others. My project, analog.io is a full stack development that aims to solve this issue. It has a very broad use case that could be used to monitor & reduce pollution, more efficiently heat or cool buildings, monitor water consumption, grow better food or learn more about our honey bees.

Nature is a very intertwined network of all kinds of data and my goal with analog.io is to create a community where everyone can come together for this common good.

Web Software Architecture:

analog.io is build on the Digital Ocean VPS cloud. These are basically linux servers running Ubuntu LTS 14.4. On Ubuntu I have install Ruby on Rails, Nginx and Postgres and deploy my application using Capistrano.

The application is developed in AngularJS and uses a Bootstrap Theme called Inspinia which I purchased from wrapbootstrap. For charts, the Highstocks library is used.

In addition to the web app, analog.io relies on separate "data backend" servers that store the actual IoT data. These backend servers run an open source library called phant.io. Phant was created by Sparkfun and is the infrastructure that data.sparkfun.com runs on. I have since forked phant.io and have been doing some modifications and improvements to it which I would ultimately like to merge back.

Phant.io is developed in nodejs and also runs in the Ubuntu environment. analog.io's AngularJS application makes API calls to the appropriate backend server to retrieve data. This means that analog.io can connect to any instance of phant, not just analog.io. I have experimented with building my own servers and also have 2 customers who I maintain private instances of phant for.

Project Logs

So I've talked a lot about both my 915 MHz Droplet radios as well as the new 2.4GHz MSP430 Sensor node. What I have been thinking about lately is creating a cluster of 2.4GHz nodes, use them to transmit from inside of the bee hive and then have a 915MHz radio that will transmit the packets over the long haul to my WiFi Bridge.

This hybrid approach gives me the ability to have cheap nodes but still get the superior range of the 915MHz radio.

Here are a few pictures. Normally I like to do a cleaner build with a single custom board. I've been meaning to spin this for a long time but for a variety of reasons, I never got around to it. Instead, since winter is moving in fast, I've decided to cobble something up out of random parts that I had laying around.

The Hub is a 6V SLA battery which can be bought for very cheap, then there is a Sparkfun Sunny Buddy board that will act as a Solar battery charger. Then I'm using the Buck regulator from a Electric Imp April break out board, One of my MSP430 Sensor Nodes and a Droplet. The theory of operation is that the 2.4GHz radio is constantly listening, then if a packet is received, it sends it via UART to the Droplet which then in turn transmits the packet over the 915MHz radio link.

The case is then a really nice polycarbonate box which I purchased from Menards for $6. Really the best deal on this box when compared to what can be bought on Digikey.

If you didn't already know, analog.io didn't advance to the next round for the 2015 Hackaday Prize. I have to say that I'm bummed about it. I also 100% respect the decision of the judges. There are many things that I admit could have been better documented on the site and a more cohesive message for the judges about how the project relates to the evaluation criteria.

Working as a professional, traveling often for work, having a wonderful wife and 2 awesome children with another on the way is a full plate. I especially give kudos to the Hackers and Makers here on hackday.io who have progressed their projects while also keeping everything afloat in their personal lives. It's stress full but also rewarding, totally under appreciated by the community where it seems like college students and younger professionals can run circles around everyone based off of the shear energy and time that they have at their disposal!

Furthermore, I have an enormous amount of respect for those working in the less urban areas of the world where online is the only place to interact with people who share the same interests.

Then there is the truly inspirational efforts of Patrick Joyce with his Eyedriveomatic.

Bottomline is that there are a lot of great entrants that made it to the next level. I'm going to keep working on analog.io and think that there is still something very important about the project. I'm also willing to help any of the finalists with advice as I've done here.

analog.io is a platform that can connect so many devices. I hope that I can work with one of the finalists to integrate their idea into the platform and showcase it in the process. Please contact me if that is the case.

Finally, the last comment that I will say relates to Skulls. I've been really fortunate to get so many of them from many people. I would encourage everyone to be generous with skulls, there is nothing more encouraging than waking up and seeing in your feed that someone gave a skull. I will especially direct your attention to #Vinduino, a wine grower's water saving project it is a totally under skulled project so skull it up!

Introduction

I've spent a lot of time showing the MSP430 Sensor nodes and their capability of transmitting BLE packets. I wanted to clarify one thing because I don't think that I've done a great job so far highlighting how exactly this is done.

The Sensor nodes use a very inexpensive RF Transceiver chip from HopeRF called RF75. Maybe you have seen the HopeRF RFM73 or RFM75 modules that are typically very low cost on eBay or other sites. With a few exceptions, these chips are cheaper clones of the venerable Nordic Semi nRF24 transceiver.

NRF24 has been in the hobbyist community for a very long time. There are many different libraries for it and all kinds of exciting projects. Not only that but you can get nRF24 modules for many times less money than the individual chips on Digikey.

I'm sure many of you just have some laying around your lab right now!

Knowing this, I decided to to a quick project log about how you can test the BLE capabilities of nRF24 in less than 15 minutes.

The Hack

In my opinion, this is hacking at its best: use something for a purpose that it most certainly wasn't designed for but still works well. Dimitry made a connection here between the BLE standard and a nRF24 datasheet which is very impressive!

Please try this at home:

So here it is, super simple as demonstrated in the video above. Here is the Fritzing diagram for my setup:

With the wires hooked up, it is just a matter of importing the following github library: analog_io_lib

I have perviously written about Sensor Mania, this describes my workflow for coming up with new ideas for sensors and applications. Well yesterday when I received my sound level meter, I thought that a good way to spend the evening would be getting this meter to push data to the web!

So heres a picture of the meter fresh out of the package:

I was shocked at the size, it is a pretty large device, I guess I was just expecting something smaller. Regardless, I'm happy with it, I really liked the price and the user interface is clean and simple which is great.

The one feature that was critical for me is that this unit had a DC output for its measurement. This interface is prime for attaching to my sensor node and that is exactly what I set out to do.

Let's take a look inside:

For $25, I'm pretty impressed with the build. In some ways for the number of components, I'm shocked that there is actually profit to be made for this unit. Regardless, I scanned through the board and found some very conveniently labeled test points and places to tie in my Sensor node. Here's the breakdown:

As shown in the picture I soldered wires in on the signals of interest and connected them to a pin header which I intend to connect to the sensor node.

One very convenient point about this unit is that the VCC test point turns on and off with the Meter power button. This is really convenient for power management of the device when it is powered off, essentially the sensor node is powered off as well.

With connections in place, it is time for a little code. Here it is, less than 20 lines of code!

Now let's take a look at the prototype iPhone app. Writing for iPhone an app is an uphill process so I was looking for a temporary alternate way to quickly prototype the iPhone as a wireless bridge to the internet. After doing some research I discovered TechBasic from Byte Works. It struck my interest because it enabled me to write code, running on the iPhone and had an API that worked with the iPhone BLE stack.

I purchased the app and here is the code that I came up with on the iPhone side to receive the BLE beacons from the sensor node and forward them on to a datastream at data.sparkfun.com.

I figured that I would re-run the user growth analysis that I previously posted here after seeing the effects of the Hackaday Blog Feature. I'm very pleased to welcome more users to the community. Here's the data, not too much else to say :)

Being featured on the hackaday.com blog has been a great experience. Over the past 32 hours, about 80 people signed up for the site pushing the overall user count up to 500 people! When starting analog.io, I would have never expected it to grow to this level.

In reviewing the activity and talking with those who have contacted me, 2 Recurring bugs have been identified that may have hindered everyones first experience with the site. For that I'm sorry. First impressions are very important.

In the spirit of transparency and openness, I figured that I would share the bugs, my understanding on their root case, a recommended work around and what I plan to do to fix them.

Missing Stream Data:

The missing stream data bug occurs when a user selects a stream to view. Typically users find streams of interest from the index, click on the stream to view the data, the stream title and description loads but no data is showen. The image below is an example:

Root Cause: This bug is caused when the data.sparkfun.com server purges old data using the phant reaper module. analog.io keeps an independent record of this data in its database and does not identify that the stream is no longer valid.

Work around:Right now the only work around is to look to a different stream to see the data.

Fix: A feature is planned for analog.io to scan through all stream records and verify that data is still available. The scan may also score the streams based on their last update and provide a rank. This will ensure that the best quality streams are shown first in the index.

In the interim, I have added a manual function that I can selectively hide streams that are no longer valid.

The notch bug:

The notch bug appears as a vertical line at the beginning of the time series plot as shown below. Due to this "notch" the vertical scale of the chart is adjusted to cover all data. This scale change often compresses the meaningful data such that it looks close to a flat horizontal line.

Root Cause: Data requested from the backend server is delivered in CSV format, the application then parses this CSV file into floating point number data that is used by the highcharts library. If the parser discovers a non numeric value in the CSV file, it automatically gives it a placeholder value of 0. Since the CSV file contains a header line, the first parsed value always resolves to non-numeric and results in a 0.

Work around:One way to work around this issue is to adjust the horizontal window of the plot as demonstrated in the image below

Fix: The fix is to change the parser such that it ignores trying to parse the header row.

Thanks to everyone who joined, bugs are part of the development process and I'm very happy to hear about them for users and fix the as soon as practically possible.

I'm very excited to see today that analog.io is featured on hackaday.com! Brian did an excellent write up.

Certainly there is a lot of info here on the project page, I'm still working on polishing it up for the Sept 21st deadline. The web application is not bug free either so if you signed up and didn't have a good on boarding please tell me.

To everyone who signed up for analog.io, followed the project, gave it a skull or posted a comment, Thanks!

I very much am and I think others would be as well. I came upon it because I was using Sparkfun's Phant, but ended up installing my own on a raspi. I really like the way analog.io displays data... was the easiest and least fussy one I found!

Thanks, we'll see what the future brings, I hope to get back into it although with 3 kids, spare time is a pretty scarce commodity. In the interim analog.io is still useful if you waive the SSL errors. Not really a good practice but it is possible.

Great project! I got my sensor node last Friday and had it up and running quickly. It is easy to use with lots of applications. I have mine working inside a network of MSP430 nRF24L01 devices of my own design. The example using Bluetooth LE worked without a hitch and I'm considering how to make best use of that. Great work!

I like this project and think you have a complete solution for showcasing internet of things connected devices. Your platform can help all of us data nerds get familiar with what we always wondered about. For example, the water usage example is very important on the west coast and could open people's eyes to consumption on a real-time basis. I like all the hardware, software, and mobile applications you created as part of your entry. Bravo!

This is a great project! I have problems with my internet connection slowing down to basically nothing from about 5pm - 11pm. Analog.io was the perfect tool for me to display a graph of my internet speeds throughout the day. I know the primary use is for IoT, but it perfectly fit my needs. You can see it here: http://analog.io/sAM or check out my project describing how I set it up here: https://hackaday.io/project/7166-speed-test