Skip to content

Overview

In order to get started using NF, you need to get access to a copy of it running somewhere. While it's possible to install on your development environment, it's often useful to deploy it somewhere with a more interesting set of devices for testing.

Ways to deploy NF

There are a few different ways to obtain access to a copy of NF.

  • NF can be deployed using docker-compose in most Linux environments.
  • You can install using an Azure IoT Edge module.
  • You can deploy on a bare metal device using Fedora IoT.
  • NF can be deployed onto a device managed by Balena.
  • You can access someone elses' installation.

System Architecture

NF is designed to as a layered system, with well-defined interfaces between different system components. We aim to provide access at different levels of abstraction so the application writer can use high-level APIs in most cases, but drop down into the "guts" of the system when needed; rather than hiding all the complexity.

As such, NF is built as a series of services which communiate natively over gRPC. These APIs use a common set of patterns which make it easy to build efficient and correct applications on top of them, while they take care of many of the tricky parts of integration with upstream IoT systems.

We use Envoy as a frontend proxy, which provides URL routing, load balancing, authentication (using JWTs), as well as support for grpc-web and JSON transcoding, which means we can offer an equivalent REST API.

Most state is stored in a local Redis instance with RedisTimeseries and RediSearch installed; this provides an efficient in-memory database.

Currently, the main set of services provide a number of BACnet-specific features; as well as a generic "points" service for storing and querying point metadata and time series.

Service Description
Point Implements generic point metadata + timeseries service as a flat namespace of objects identified by UUID. One-stop-shop for data replication.
Sparkplug Implements a reader which forwards data from the Point service to an MQTT broker using the Sparkplug B payload and topic format.
BACnet Hardware Presentation Layer (bacnet-hpl) Exports BACnet services over gRPC. Manages concurrency and I/O scheduling across all requests.
BACnet Scan (bacnet-scan) Provides job-based interface for discovering BACnet devices and objects in large, complicated networsk
BACnet Aquisition (bacnet-poll) Acquires data by polling points according to the configured poll rate.
BACnet Status (bacnet-status) Tracks device status (up/down) and read performance using data from the HPL.