Skip to content

srcfl/sourceful-edge-node

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sourceful Edge Node

Universal Sourceful edge node — one Go binary that turns any machine into a gateway on the Sourceful Energy network.

What It Does

  • 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

Quick Start

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

Configuration

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

Identity

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.

Architecture

┌─────────────────────────────────────────┐
│  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               │
└─────────────────────────────────────────┘

About

Universal Sourceful edge node — gateway, driver runtime, and AI integration probe handler in a single Go binary

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors