I found the process of creating an Arrayent application remarkably simple, though it did require a phone call to Arrayent's Application Architect, Harshy Wanigasekara, to understand the reasoning behind creating three attributes to establish a time series data collection service. I learned that Arrayent is working on reducing this to the more logical choice of two named attributes, but this option was unavailable at the time of my testing.
The requisite "Hello, world" of the Arrayent system is to hook up the on-board temperature sensor with the Arrayent back-end for time series reporting. While the user guide is well written, it didn't have a section on "your first application" which could have easily demonstrated how the system worked by walking developers through the temperature time series app creation process. Like many things with the company, the guide is rapidly evolving along with the expanded services that Arrayent can provide so this discussion may be included in future iterations. In the meantime, here's a brief synopsis of the process:
- Ensure both boards are powered and the Ethernet Gateway is connected to the Internet and the RF module.
- Log into the Arrayent Configurator website using the login credentials provided in the DevKit.
- Click the Device Attributes menu option in the Arrayent Configurator.
- Click the New button in the Device Attributes section of the page and select these three existing attributes from the Name drop down list:
- temp, a Hardware Attribute for the reported value received from the device
- tempp, a Hardware Attribute for the sampling period to poll the temp attribute
- temp-ts, a numeric Time Series for the captured tempp values.
These same steps can be followed for sampling sensors that can be attached to the digital lines (ex: adc1 for Digital Line 1, etc.).
Frequent samples can rapidly grown data storage needs, so unless the sensor requires frequent polling, setting the rate to 1 minute or more should be adequate for most scenarios. Although Arrayent has not at this writing confirmed any strict data storage quotas, Harshy estimates that most developer accounts should be able to store between 3 to 6 months of device data at a 1-minute sampling rate.
While the prospect of relatively easy, network-enabled embedded systems application development is attractive, questions remain. As these small devices continue to evolve and literally embed themselves at our work and home, how is security and privacy addressed? What happens to the functionality of Arrayent's devices if/when Arrayent's backend fails? If significant security exploits or fatal flaws are discovered in the device's firmware, how can they be inexpensively updated en masse? The very nature that makes these devices network-reliant signify an area that should be addressed before such devices permeate our world. As automobile manufacturers are learning with their embedded systems, poor security considerations and buggy software can lead to disastrous results, and many of these systems are not even widely broadcasting across the Internet. Certainly early adopters to this nascent embedded systems approach can take the risk, but these considerations should be assessed before taking on the full responsibility of long-term support on commercial applications based on Arrayent's technology.
As for the development experience, Arrayent certainly takes care of the heavy lifting involved with capturing device data, messaging and when programmatically inclined to do so, remotely signaling activity on their devices. This leaves developers with more time to focus on their primary application. Extracting device data from Arrayent's systems is also easy using Arrayent's well documented web services API. Developers also have access to Arrayent's Trac-based bug tracking website to submit and be kept aware of problems and their resolution states. They also anticipate hosting a developer forum site in the near future to encourage other Arrayent developers to share ideas and assist each other with development questions and answers.
I'm excited by the potential that Arrayent's approach has to offer. While the hobbyist can certainly build their own one-off systems that do the same thing that Arrayent proposes, scaling these solutions to a commercially viable, mass market product is a different story. Indeed, I have built a number of home-brewed network-enabled projects with an Arduino attached to an Ethernet Shield and a couple of Python scripts cron'd to poll the state of the sensors connected to the board, but building more than a few of these for friends and family would get downright expensive, not to mention brittle. Arrayent's smarter structured approach abstracts away these headaches so that the final deliverable is unlikely to fail on account of back-end systems problems. Arrayent has done an impressive job with the ease of which their devices call home, and setting up device capture and emitting attributes can be performed without writing a line of code. For anyone who has done this without such assistance, such a task is not only daunting, it can also be incredibly error-prone. Removing such potential for error from the overall development cycle equation could be a huge benefit for programmers and product designers alike, and from my vantage point, Arrayent has an impressive head start in this emerging market.