Overview¶
Deployment Options¶
There are several ways to deploy NF:
- Docker on most Linux environments (recommended)
- Azure IoT Edge module
- Fedora IoT on bare metal
- Access an existing installation via Normal Portal or its native APIs
System Architecture¶
NF is a layered system with well-defined interfaces between components. It provides access at different levels of abstraction so application writers can use high-level APIs in most cases, but drop down into protocol-level details when needed.
NF's services communicate natively over gRPC. Envoy serves as a frontend proxy, providing URL routing, authentication (using JWTs), grpc-web support, and JSON transcoding for an equivalent REST API.
State is stored in a local Redis instance with RediSearch and RedisTimeSeries.
| Service | Description |
|---|---|
| Point | Generic point metadata and timeseries, organized as a flat namespace of UUID-identified objects. Primary interface for data replication. |
| BACnet | Full BACnet/IP, BACnet/Ethernet, and BACnet/SC support including device discovery, data acquisition, polling, local objects, schedules, and alarms. |
| Command | Protocol-agnostic write interface with priority, lifetime, and guardrail enforcement. |
| Modbus | Modbus TCP and Modbus RTU-over-TCP support with configurable register maps. |
| Fox | Tridium Niagara (Fox) protocol support for object discovery, trending, and writes. |
| Sparkplug | Forwards data to MQTT brokers using the Sparkplug B payload and topic format. |
| Modeling | Equipment extraction, point tagging, and ontology-based normalization. |
| SDK | JavaScript runtime for hooks and applications with scheduling, data triggers, and sandboxed execution. |