Fleet Management

From terminal to browser. Discover, configure, and monitor your entire fleet - one command, one click.

CLI Tool Web Dashboard Tags & Groups Health Heartbeats Threshold Events Remote Config

The CLI

28 commands. True color output. Instant fleet visibility.

ionode help
IOnode CLI v0.2.0 - 28 commands organized by category: Fleet, Hardware, Config, Events, Monitor
ionode discover
$ ionode discover

━━ Fleet Discovery

  ionode-01  ESP32-S3
    IP 192.168.178.43    heap 192 KB      v0.2.0
    chip_temp clock_hour clock_minute clock_hhmm rgb_led

  ionode-02  ESP32-S3
    IP 192.168.178.44    heap 192 KB      v0.2.0
    chip_temp room_temp clock_hour clock_minute clock_hhmm rgb_led

  2 node(s) found  ·  nats://localhost:4222
ionode status ionode-01
$ ionode status ionode-01

━━ Status  ·  ionode-01

  Chip temp:       39.2°C
  Free heap:       192 KB
  Uptime:          36m 29s
  WiFi signal:     ▂▄▆█ -87dBm
  Last reset:      power_on
  NATS reconnects: 2
ionode info ionode-01
$ ionode info ionode-01

━━ Node Detail  ·  ionode-01

  Firmware:        IOnode v0.2.0
  Chip:            ESP32-S3
  IP:              192.168.178.43
  Free heap:       193 KB
  WiFi signal:     ▂▄▆█ -74dBm

  HAL: gpio adc pwm dac uart system_temp

  Devices:
    chip_temp    internal_temp  39.2C
    rgb_led      rgb_led        0
    room_temp    ntc_10k        39.2C
hardware access
$ ionode read ionode-01 chip_temp
  chip_temp  38.2 C

$ ionode adc ionode-01 2
  ADC 2  660  ███░░░░░░░░░░░░░░░░░  16%

$ ionode gpio ionode-01 0 get
  GPIO 0  1  (HIGH)
fleet provisioning
# Configure 10 nodes in seconds
for i in $(seq 1 10); do
  node="ionode-$(printf '%02d' $i)"
  ionode tag $node greenhouse
  ionode device add $node temp ntc_10k 2 --unit C
  ionode device add $node fan relay 8 --inverted
  ionode event set $node temp --above 28
done
# 10 nodes. Tagged. Provisioned. Event-driven.

--no-color · --json · --server · NO_COLOR env - works everywhere.

Fleet Dashboard

A single local HTML file. Connects to NATS via WebSocket.
No backend. No build step.

IOnode Fleet Dashboard showing two ESP32-S3 nodes with heap, uptime, signal strength, and device tags
Fleet overview - node cards update live from heartbeats. Sensors in blue, actuators in purple.
IOnode Fleet Dashboard detail panel showing system info, sensors, RGB LED color picker, and quick config
Click a node - system health, live sensor values, actuator controls, and quick config in a slide-in panel.

Live Updates

Heartbeat subscriptions keep the dashboard current. Cards flash on each heartbeat. Online/offline detection.

Full Control

Toggle relays. Drag PWM sliders. Pick RGB colors. Read sensors. All from the browser.

Zero Setup

Open the HTML file. Enter your NATS WebSocket URL. Done. No npm, no build, no Docker.

Fleet Features

Tags & Groups

Tag nodes for fleet grouping. Query all nodes in a group with a single NATS request. Tags update live - no reboot required.

ionode tag ionode-01 greenhouse → ionode ls --tag greenhouse

Health Heartbeats

Nodes publish periodic health reports: heap, RSSI, uptime, reconnects, event count. Subscribe once, see everything. Dead node detection for free.

ionode watch --heartbeats

Threshold Events

Sensors fire NATS notifications when values cross a threshold. Edge-detected with configurable cooldown. Fire once, re-arm automatically.

ionode event set ionode-01 chip_temp --above 45 --cooldown 30

Remote Configuration

Add sensors, set tags, configure events, rename nodes - all over NATS. Flash 20 blank chips, provision them from one terminal.

ionode device add ionode-01 temp ntc_10k 2 --unit C

Actuator Persistence

Relay and digital output states survive reboots. Set a relay ON, power cycle - it comes back ON. Debounced flash writes protect your hardware.

Same Protocol

CLI, dashboard, scripts, Node-RED, OpenClaw - they all speak the same NATS subjects. Different UI, identical wire format.

same subjects everywhere
# CLI
ionode read ionode-01 chip_temp

# Raw NATS
nats req ionode-01.hal.chip_temp ""

# Dashboard (JavaScript)
nc.request('ionode-01.hal.chip_temp', '')

# Python
await nc.request('ionode-01.hal.chip_temp', b'')

# All return: 38.2

Ready to manage your fleet?

Flash a few nodes, install the CLI, open the dashboard.