What are Accessors?

CapeCode Screenshot

Accessors are a technology for making the Internet of Things accessible to a broader community of citizens, inventors, and service providers through open interfaces, an open community of developers, and an open repository of technology. Accessors enable composing heterogeneous devices and services in the Internet of Things (IoT).

An actor is a software component that reacts to streaming input events and produces streaming output events. An accessor is an actor that wraps a (possibly remote) device or service in an actor interface. An accessor host is a service running in the network or on a client platform that hosts applications built as a composition of accessors that stream data to each other. The host is like a browser for things.

See an overview paper and overview presentation. For a quick start using Node.js as a host, see the Node host. See also the tutorial on CapeCode, the development environment based on Ptolemy II that uses the Nashorn host.

Accessors embrace concurrency, atomicity, and asynchrony. The actor model, which governs interaction between accessors, permits accessors to execute concurrently with segregated private data and a message-passing interface for interaction. Internally, many accessors use asynchronous atomic callbacks (AAC) to invoke remote services and handle responses asynchronously and atomically. See comparisons with related technologies for insight into how accessors work.

Accessors are defined in a JavaScript file that includes a specification of the interface (inputs, outputs, and parameters) and an implementation of the functionality (reactions to inputs and/or production of outputs). Any JavaScript file that conforms with the accessor specification defines an accessor class.

The accessor library provides a collection of example accessors. This library is maintained via an Git repository that permits many contributors to add accessors to the library.

An instance of an accessor is created by a swarmlet host that evaluates the JavaScript in the accessor definition. At this time, there are at least three accessor hosts compatible with accessor specification 1.0:

  • A browser host, which allows inspection of the accessor, and if the accessor is suitable for execution in a browser, interactive invocation of the accessor.
  • A Node.js host, an interactive program that runs in Node.js that allows instantiation and execution of accessors.
  • A Ptolemy II host, which supports composition of accessors with visual block diagrams and provides a large library of actors that the accessors can interact with.

To experiment with accessors now, see Getting Started with Accessors. or Tutor 2017 Tutorial Paris, December 5, 2017

This work is supported by the Industrial Cyber-Physical Systems (iCyPhy) Center. This work was supported in the past in part by the TerraSwarm Research Center, one of six centers supported by the STARnet phase of the Focus Center Research Program (FCRP) a Semiconductor Research Corporation program sponsored by MARCO and DARPA.

This work is licensed with a BSD-style license.

See the accessors wiki page for further information.
See publications and presentations for yet more information.
The accessors project is no longer under active development. The follow-on project is Lingua Franca.