Friday, November 2, 2012

The Open Source Internet of Things

Friday, November 2, 2012
The Open Source Internet of Things

Smart Object API and Internet of Things Gateway
The Smart Object API and IoT Toolkit is a reference implementation of an Internet of Things gateway and application service. Earlier posts in this series describe the API and framework at a high level. To summarize, a Smart Object encapsulates the observable and descriptive properties of sensors or data sources into a RESTful web object (URI) with Linked Data compatibility.

I have been writing code and refining program API details of the reference implementation for the last few weeks. It's still very much an early work in progress; working toward an early collaborator review and functional demonstration around November 15th.

For those interested, the code is hosted at github:

NB I'm still working on some of the very basic functionality. This provides a look at the patterns and methods. There is a basic http service with some example objects and resources. The service is itself a Smart Object with it's high level Semantic Description, which registers and describes the set of Smart Object instances in the local gateway. Discovery and linkage will be layered onto the service object. The http server has a resource dictionary interface to the object service.

Remaining work items:
- Implement bug tracking
- API and unit test cases
- Threaded queue for network clients
- CoAP server and proxy
- Object building, cloning, and persistence using Semantic descriptions
- Semantic discovery and linkage, core-link-format compatibility
- Auth model (httpauth, oauth, WebID, API keys)

IoT Gateways and IoT Gateway-as-a-Service 

The goal is to enable a commonly used IoT deployment pattern:

sensor net <=> IoT gateway <=> Internet service <=> client interface

The target deployment is an Ubuntu image that can be deployed as:

- Installation on Raspberry Pi, supporting the Ciseco EVE IoT gateway with multiple onboard WSNs
- Gateway-as-a-Service e.g. Amazon EC2 micro instance with application running in cloud

The gateway and service work together with a common API, allowing applications to be distributed between multiple gateways and service instances. The gateway pattern will be able to integrate third party services and sensor networks.

Each gateway user or owner would use a dedicated cloud service instance or set of instances. Cloud services scale up by adding more instances (virtual machines) which isolates users and owners from each other and allows for granular redundancy and load balancing.

Client-only applications will be able to use the API as a library for interacting with services or directly with gateways.

The IoT Toolkit Open Source project
The Smart Object API and IoT Toolkit is a collaborative Open Source project. There is still a lot to be defined and built to enable end-to-end deployment, and another layer of application enablement is needed.

The IoT Toolkit will provide:
- RESTful API for data source, gateway, service, and software agent peer interaction model
- Application framework for gateway and granular scale cloud instances (GaaS)
- Semantic Web linked-date discovery and linkage, CoAP Resource Discovery compatibility
- Multi-protocol IoT gateway including CoAP-to-HTTP proxies and sensor net agents
- Serial asynchronous communication tools for low level sensor nets
- Ubuntu, Raspberry Pi, Amazon EC2 images
- Sensor and client reference implementations using open source tools e.g. Contiki

Different real world and experimental deployments will provide robust test cases for defining API features, as well as the next larger ecosystem of index and search, ontologies, client tools, etc.

We're launching a website, , to provide a point of contact for this project. The goal is to enable end-to-end deployment of IoT solutions through a set of Open Source tools and facilities  for Sensor Nets, Proxy Gateways, Gateway-as-a-Service instances, and Application software integration.

The Open Source Internet of Things 
The World Wide Web as we know it is made up of Open Source platforms and services. Apache, Mozilla, Ajax, Perl, PHP, Python, Linux, Android, MySQL, Hadoop, OpenFlow, the list goes on. There is a common set of tools and platforms that the community maintains as a shared infrastructure on which to build new services.

There is no such shared infrastructure yet for the developing Internet of Things. I believe there are many people working on creating it, some believing that there could be a common set of languages, tools, and platforms on which to build the next level.

In this spirit we would like to engage a broad discussion on the Open Source Internet of Things. We've created a new Open Source Internet of Things meetup group :

We would like the discussion to include engineers, entrepreneurs, and enthusiasts from anywhere, and to facilitate new projects, collaboration, and sharing. We believe that the next level is at hand, where we build a common platform for Internet of Things communication and applications that we can use to build domain specific services and applications on top of.

More Information

The Smart Object API is described at a high level here :

The Smart Object work-in-progress code is at:

The EVE board is an IoT gateway board from Ciseco with Xbee, EnOcean, SRF, Zwave, and RFM12B radio modules plus real time clock and onboard sensing:
EVE Hardware Kickstarter

Raspberry Pi is a $35 ARM based single board computer that runs Linux:

The Open Source Internet of Things Silicon Valley meetup

IoT Toolkit Open Source project:


  1. Thanks for giving such an interesting post. You gave some valuable points which are very useful for all readers to understand Xbee quick start. It's a very good source for learning XBee module.

  2. Hello Micheal:

    Thought you deserved a comment here other than spam robots!

    I've been reading as much as I can today about what you're proposing in various places, and have browsed the code you posted and the high-level concept docs you provided. It's very interesting!

    I'd like to design products around the architecture and standards you propose, but I expect it may be some time (years perhaps?) before this work turns into real standards and robust, easy to use, well-documented code, so I may build yet another proprietary solution in the meantime.

    Please write an article somewhere describing in detail some of the ways in which others can help you develop or in any other way move forward the complex of technologies/concepts you describe.




Note: Only a member of this blog may post a comment.