Angaza Nexus Channel Core


Interoperability for off-grid devices

View the Project on GitHub angaza/nexus-channel-models

Nexus Channel Core

Resource Type Registry

A full list of resource type specifications like the ones mentioned below can be found in the Nexus Channel Core Resource Type Registry.

Nexus Channel Core: Actionable Interoperability

Nexus Channel Core allows devices to share arbitrary data (read/write) with other devices by exposing that data as a set of ‘resources’. For example, a Solar Home System (SHS) might host a battery ‘resource’ to expose information about its primary battery capacity and health. That same system might also host an energy generation ‘resource’, exposing how it is powered (solar, AC, etc), instantaneous power being generated, and cumulative energy generated by the source over time. Any devices that are able to communicate to the SHS (over any data communication link) have visibility into the current state of the SHS (as exposed via its hosted ‘resources’) as well as (optionally) update certain parameters of those resources (like low battery trigger level).

The above example relies on instances of well-defined “Resource Types” implemented on a device. These “Resource Types” are how devices implementing Nexus Channel Core are able to monitor and control each other without custom application logic for each new device. Independent of how a device developer implements the ‘battery’ resource, for instance, the same values are present (capacity, voltage, etc) and are accessed using the same property names and data types. In this way, devices only need to know what standard resource types other devices have implemented, then refer to the publicly available specifications for those resource types to determine how to read or modify the state of another device.

Nexus Channel Core operates at the application layer, and sends data payloads over existing communication channels between devices. This enables reuse of the same resource models and high-level application interfaces between devices, regardless of whether devices are connected using 2.4G links, LIN, 802.15.4, or a yet-to-be-developed networking standard.

Nexus Channel Core: Built on Industry Standards

Nexus Channel Core is a subset of the Open Connectivity Foundation (OCF) Specification, an industry and ISO/IEC standard (30118-1:2018). OCF specifies a way to define resource models in a non-proprietary, highly-interoperable format. It uses the following standards to model resource types:

Nexus Channel Core: Open Specifications

To see exactly what subset of CoAP, CBOR, and OCF that Nexus Channel Core supports, please see the following specifications:

To submit a new resource type for inclusion and receive a resource type registry value, please follow the instructions in the “Nexus Channel Core CBOR/Resource Type Creation Spec”.

Autogeneration of sample source code (in C) from YAML resource type definitions may be possible in the future, and the x-example fields included in resource type YAML specifications are meant to support this future possibility.

Nexus Channel Core: Additional Sample Use Cases

An SHS might provide an energy consumption resource, exposing the total power draw of its loads, as well as how that power is split across different loads. If the SHS is able to log or report data, it might store this information in a sample log resource, allowing other application logic to make decisions based on stored load data.

Or, consider the case of a solar home system with expansion battery packs. Each of the battery packs might expose resources sharing its own battery state, while also allowing another ‘authorized’ device to modify parameters like minimum safe battery capacity in a standard way.

An appliance (like a freezer) might expose a demand response resource, enabling coordinated energy management with an ‘energy management’ device (like the SHS above) by enabling the concept of ‘requested’ and ‘granted’ power consumption amounts via resource properties. A freezer might lower its requested power at night (when the temperature is lower), allowing the system controller to ‘free up’ more energy for lighting or entertainment uses in the evening.

Perhaps one device in the same home has a rich UI (such as a TV), which the client wishes to use to control other devices in the household (change the brightness of their indoor lighting or change the temperature setpoint of their freezer, for instance). This can be accomplished by implementing a operating mode resource on each device to be controlled, enabling the user to modify each device’s operating mode accordingly, and allowing manufacturers to specify custom operating modes based on their products specific needs.

The above examples barely scratch the surface of what is possible. Product designers can take advantage of new resource models as they are published, exposing capabilities historically limited to costly ‘smart home’ or industrially deployed devices. By enabling intelligent interoperability between devices at the application layer, Nexus Channel Core resource models allow developers to rapidly build reusable, advanced system designs that can be applied to multiple product lines and future revisions, completely independent of wiring or communication protocol changes over time.

If you’re interested in submitting a new resource model (resource type), a good place to start are issues tagged with resource model wanted in the public nexus-channel-models Github repository.

Nexus Channel Core: Reference Implementation

A compliant reference implementation is available in the nexus-embedded repository.