Initial State, powerful data capture and analytics for your IoT infrastructure
Just managing your IoT devices isn't enough; to get value from your investment you need to capture the data they generate and slice and dice it and Initial State has the platform

A few posts ago I reviewed Cayenne, an IoT Platform as a Service (PaaS) solution that really impressed me. Today, I have a sort of competing service that has also impresses me: Initial State. But where Cayenne focusses on device management with support for shutting down, rebooting, configuration, and remote access, Initial State, is focussed on event data capture and analytics and ignores the device control aspect.
One of the powerful aspects of Initial State is the wide range of device support which goes from “bare” IoT platforms such as the Raspberry Pi, Arduino, and BeagleBone Black single board computers through to products such as FitBit activity trackers and the Amazon Echo. In fact, the lowest common denominator is that you can acquire data from any device that can make an HTTP request.
At the heart of Initial State are “buckets” which capture “streamed” event data in the form of key and value pairs (source IDs and associated values) from one or more devices. An HTTP Get request is the most basic way to save data:
https://groker.initialstate.com/api/events?accessKey=accessKey&bucketKey=bucketKey&eventKey=eventValue
In this request, accessKey
is a private unique key generated by Initial State for each application and bucketKey
is the unique ID of a bucket in which the strings for the event ID (eventKey
) and its associated value (eventValue
) are stored. Multiple events can be sent to a single bucket (Initial State recommends a maximum of 10 events per request) in a single transaction (Initial State recommends a maximum of 5 requests per second). You can also create buckets via Initial State API calls.
Post requests, which use a JSON payload, are preferred but if you’d rather not “bare metal” it with HTTP requests, Initial State has libraries for Python, C/C++, Node.js, and Java as well as example Arduino sketches, details on how to use IFTTT to stream data, and even how to send data via a Web form.
Initial State web interface with bucket shelf on left and the default Tile view on right
That’s how data gets sent to Initial State, so now, when it’s sitting there in a bucket, what can we do with it? We start by selecting a bucket from the bucket shelf on the left of the Web interface. Selecting a bucket loads the data and parses it into separate streams, one for each source with the stream format automatically identified and displayed in Tile view. Above is the display using the "Example Import" data set; you can see the service has correctly identified analog streams and digital streams.
Tile configuration
In Edit Tiles mode clicking on a tile produces the Tile Configuration pop up where you can change the tile’s display name, the Tile Type, and other attributes.
Wave view
The Waves view graphs the streams and you can add and remove cursors for marking timeline points as well as measuring values and difference between points. You can also generate Stats reports such as an analysis of the data points between the cursors for one or more streams.
Wave view showing signal statistics report
Lines view showing signals statistics report
The Lines view drills down into the Waves view by displaying a single stream. The final option, the Source view, simply displays the original data uploaded to the bucket and offers the option to download it.
Tile view in an Initial State dashboard for my Raspberry Pi
To test Initial State, I set up a Raspberry Pi board by following the Create a System Health Dashboard for your Raspberry Pi tutorial from the Projects and Examples section of the web site. I won’t bother detailing the setup as it’s very straightforward and within a few minutes I had the RPi reporting its system attributes to an Initial State dashboard. One key part of this setup involves installing psutil:
a cross-platform library for retrieving information on running processes and system utilization (CPU, memory, disks, network) in Python. It is useful mainly for system monitoring, profiling and limiting process resources and management of running processes. It implements many functionalities offered by command line tools such as: ps, top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime, pidof, tty, taskset, pmap. It currently supports Linux, Windows, OSX, Sun Solaris, FreeBSD, OpenBSD and NetBSD, both 32-bit and 64-bit architectures, with Python versions from 2.6 to 3.5 (users of Python 2.4 and 2.5 may use 2.1.3 version). PyPy is also known to work.
psutil is an outstanding tool for instrumenting anything that can run Python which means that with a little tweaking, integrating your servers, virtual machines, or just about anything else to create an Initial State dashboard should be a piece of cake.
The service's tutorials are excellent and Initial State’s documentation depth and quality is outstanding. The Web interface has also been designed to be completely responsive so it displays faithfully on everything from desktops to the tiniest smartphone screens. If you subscribe to the Pro tier of Initial State you can embed dashboards on other Web sites as well as set up Triggers to notify you by email or SMS of stream events meeting various criteria.
Things I’d like to see Initial State improve? There’s no ability to export any of the Stats reports at present and when you edit the configuration of a tile, you can’t use the dynamic value of another stream as the setting for either the minimum of maximum Y axis value (for example, you can't use total disk space as the upper limit of a gauge on the free disk space tile). Another issue is a lack of flexibility in Triggers which currently doesn’t allow for customized messages or sending stream values (for example, when one criteria is met, say, a change in barometric pressure, you might want to have the current temperature sent in the message). Triggers should also include the ability to make REStful requests to external services; in particular, outbound IFTTT integration would be useful.
So, pricing: The Free tier allows for unlimited devices, 25,000 streamed events per calendar month, and provides 1 day data retention. The Standard tier increase data retention to unlimited for $6.55 per calendar month ($5 if billed annually), while the Pro tier is priced at $30 per calendar month ($25 if billed annually) and adds unlimited Triggers, personal support, public sharing and web site embeds, and the ability to import data files. Enterprise plans are available starting at $500 per calendar month.
Initial State is impressive and provides a powerful IoT data capture and analysis capability to anyone building out an IoT infrastructure. Given that the entire focus of the service is data analytics, the lack of ability to export Stats reports is the reason why, at present, I can’t award Initial State a perfect rating though I'll be happy to change that when appropriate. Even so, Initial State gets a very healthy Gearhead rating of 4.5 out of 5 and a recommendation to watch this platform, it could become a market leader.
Comments? Thoughts? Email me your data analytics or comment below then follow me on Twitter and Facebook.
Copyright © 2016 IDG Communications, Inc.