Universal Sourceful edge node — one Go binary that turns any machine into a gateway on the Sourceful Energy network.
- Runs device drivers — Lua 5.1 drivers poll energy devices (inverters, batteries, meters, chargers) via Modbus, MQTT, HTTP
- Publishes telemetry — DER data flows to NovaCore via NATS in real-time
- Handles control commands — Grid commands execute locally with 60s watchdog failsafe
- Serves as a probe target — Hugin (AI integration tool) can scan, detect, and probe devices through this node remotely
- Works everywhere — Laptop, Raspberry Pi, industrial server, Zap, Blaxt — same binary
make build # → bin/edge-node
make build-all # Cross-compile all platforms
make test # Run tests
# Standalone (embedded NATS)
./bin/edge-node
# Connect to Sourceful testnet (embedded NATS + leaf node)
./bin/edge-node --nats-embed --nats-leaf-url wss://novacore-testnet.sourceful.dev:4443
# With device drivers
./bin/edge-node --nats-embed --nats-leaf-url wss://novacore-testnet.sourceful.dev:4443 --drivers ./drivers/
# Test with Hugin (Hugin connects to edge-node's embedded NATS)
./bin/edge-node --nats-embed --nats-leaf-url wss://novacore-testnet.sourceful.dev:4443
# In another terminal:
cd ../sourceful-hugin && ./bin/hugin --gateway --develop --nats-url nats://127.0.0.1:4222| Flag | Env | Default | Description |
|---|---|---|---|
--nats-url |
SOURCEFUL_NATS_URL |
embedded | Direct NATS URL (requires registered identity) |
--nats-embed |
false | Run embedded NATS server (recommended) | |
--nats-leaf-url |
Upstream NATS for leaf node (with --nats-embed) | ||
--nats-creds |
NATS credentials file for upstream auth | ||
--data-dir |
SOURCEFUL_DATA_DIR |
~/.sourceful/ |
Data directory |
--drivers |
auto-detect | Path to device drivers | |
--devices |
{data-dir}/devices.json |
Device configuration | |
--serial |
auto-derived | Gateway serial override |
On first run, generates an ES256 keypair stored at {data-dir}/identity.json and {data-dir}/gateway.pem. The serial format is hugin-{8hex} derived from hostname + MAC address.
┌─────────────────────────────────────────┐
│ SOURCEFUL EDGE NODE │
├─────────────────────────────────────────┤
│ NATS Client (NovaCore / embedded) │
│ Probe Handler (remote AI integration) │
│ Device Manager (continuous poll loop) │
│ Control Handler + Watchdog │
│ Fleet Monitor │
├─────────────────────────────────────────┤
│ Lua 5.1 Runtime (gopher-lua) │
│ Protocol Bridges: Modbus, MQTT, HTTP │
│ Driver Loader (YAML manifests + Lua) │
│ ES256 Identity + JWT Auth │
└─────────────────────────────────────────┘