Skip to content

Read the status

GET
/api/v1/status
curl --request GET \
--url http://pwrman.local/api/v1/status

Everything the web interface shows, as one object.

The current status.

Media typeapplication/json
object
name
required

Device name.

string
fw
required

Controller firmware version.

string
slot
required

The flash slot the controller is running from.

string
Allowed values: A B other raw
trial
required

The firmware is on trial after an update and not yet kept.

boolean
board_id
required

The RP2350’s unique ID, 16 hexadecimal digits. The same on every boot.

string
wifi_mac
required

The Wi-Fi MAC address; null on a controller without Wi-Fi.

string | null
eth_mac
required

The wired Ethernet MAC address; null on a controller without it.

string | null
uptime_s
required

Seconds since the controller started.

integer
rssi
required

Wi-Fi signal strength in dBm; 0 without a Wi-Fi connection.

integer
eth

Wired Ethernet, on controllers that have it: absent, no link, or the link speed and address, such as 100M full, 192.168.1.40.

string
total_w
required

Power all ports deliver now, in watts.

number
reserved_w
required

Power promised to the connected devices, in watts.

number
budget_w
required

The power budget, in watts.

number
headroom_w
required

Budget not yet promised, in watts.

number
energy_kwh
required

Energy delivered through all ports, in kWh.

number
fan
required

Whether the fan is running.

string
Allowed values: on off
fan_mode
required
string
Allowed values: auto on off
alert
required

A blade is signaling an alert on the backplane.

boolean
improv
required

Wi-Fi setup over Bluetooth.

string
Allowed values: off advertising connected provisioning provisioned
boot
required

Why the controller last started, such as power-on, watchdog timeout or firmware update.

string
warm_start
required

The controller restarted while the ports stayed powered.

boolean
vin_v
required

Input voltage; null on hardware that does not measure it.

number | null
ceiling_w
required

The power every port is held to while the input voltage is low, in watts, or 0 when no cap applies. See Ports capped at 60 W.

integer
problem
required

Something needs attention.

boolean
problems
required

What needs attention, in words; empty when nothing does.

string
led_mode
required

Which brightness the port lights use now.

string
Allowed values: normal night idle
led_now
required

The port lights’ brightness now.

integer
<= 255
chassis_light
required

What the chassis light shows: bus_fault (input voltage out of range), wifi_setup (Wi-Fi setup open), setup (first-time setup open) or ok.

string
Allowed values: bus_fault wifi_setup setup ok
blade_fw
required

The blade firmware version this controller installs on its blades.

string | null
update
required
object
available
required

A newer release is known.

boolean
latest
required

The newest known release.

string | null
check
required

The last check for a release; off without an update source.

string
Allowed values: off never checking ok failed
check_age_s
required

Seconds since the last check finished.

integer
installing
required
boolean
progress
required

Percent of the download.

integer
<= 100
restarting
required

The new firmware is installed and the controller restarts into it within a second.

boolean
auto
required

What automatic updates will do: off; none (no newer release); waiting (for auto_wait_s more seconds); scheduled (for 03:00 local time); retry (the last attempt failed and the next night tries again); installing; postponed (until postponed_until); or skipped.

string
Allowed values: off none waiting scheduled retry installing postponed skipped
auto_wait_s
required
integer
postponed_until
required

Unix time automatic installs are postponed until; 0 when they are not.

integer
skipped
required

The version that does not install automatically.

string | null
net
required

The network as the controller uses it now, which can differ from the settings. Addresses are null while the network is down.

object
up
required
boolean
ip
required
string | null
netmask
required
string | null
gateway
required
string | null
dns
required
string | null
ntp
required

The time server in use.

string | null
time_synced
required

The controller knows the time.

boolean
mqtt
required

The link to the MQTT broker.

string
Allowed values: off connecting waiting_for_clock connected
mqtt_problem
required

Why a TLS link to the broker cannot connect.

string | null
ports
required

One entry per port, in port order.

Array<object>
>= 6 items <= 6 items
object
name
required

The port’s name.

string
state
required

absent (no blade), probe (checking the blade), idle (no device), active (delivering power), throttled (held to a lower power to stay within the budget), fault, disabled (switched off), or updating (its blade firmware is being written).

string
Allowed values: absent probe idle active throttled fault disabled updating
gen
required

Blade generation; 0 until the blade has been checked.

integer
Allowed values: 0 2 3
attached
required

A device is connected.

boolean
charged
required

The device has drawn less than charged_mw for charged_min minutes.

boolean
pdo
required

The power offer the device chose, 1–7, as the port listed them when it chose; 0 for none. The list changes with the voltage cap, so the same number can mean a different offer on another port. contract says what kind of offer it is.

integer
<= 7
contract
required

The kind of contract: fixed (a fixed voltage), pps (Programmable Power Supply, the voltage and a current limit set by the device), avs (SPR Adjustable Voltage Supply, the voltage set by the device), or null without one.

string | null
Allowed values: fixed pps avs
v
required

Output voltage, in volts.

number
i
required

Output current, in amps.

number
p
required

Output power, in watts.

number
e
required

Energy delivered through this port, in kWh.

number
contract_w
required

The power the device’s contract allows, in watts.

number
prio
required

Priority; 0 is the most important.

integer
limit_w
required

The port’s power limit, in watts: the most it offers at any voltage, up to 5 A.

integer
>= 5 <= 100
max_v
required

The highest voltage the port offers.

integer
boot
required

The port’s state at power-up.

string
Allowed values: on off last
fault
required

Fault bits; 0 for none. Bit 5: CC line over-voltage. Bit 8: over-current. Bit 9: output over-voltage. Bit 10: VCONN over-current. Bit 11: port protector too hot. Bit 12: converter fault. Bit 13: converter too hot. Bit 14: receptacle too hot. Bit 15: blade failure. Bits 0–4, 6 and 7 come only from generation 2 blades.

integer
t_conv
required

Converter temperature, in °C; null without a reading.

number | null
t_plug
required

Receptacle temperature, in °C; null without a reading.

number | null
t_mcu
required

The blade processor’s temperature, in °C; null without a reading.

number | null
progress
required

While state is updating, the percent of the blade firmware written.

integer
<= 100
update_due
required

A blade update is waiting for the port to be free.

boolean
fw
required

The blade’s firmware version; null when unknown.

string | null
silent
required

The blade has stopped answering. The port stays powered, and the readings are its last answer.

boolean

Examples

Examplestatus
{
"name": "pwrman",
"fw": "0.16.1",
"slot": "A",
"trial": false,
"board_id": "E6614C311B4A8D2F",
"wifi_mac": "28:cd:c1:0e:4f:12",
"eth_mac": "02:31:1b:4a:8d:2f",
"uptime_s": 274620,
"rssi": -58,
"eth": "100M full, 192.168.1.40",
"total_w": 110.42,
"reserved_w": 202,
"budget_w": 240,
"headroom_w": 38,
"energy_kwh": 17.85,
"fan": "on",
"fan_mode": "auto",
"alert": false,
"improv": "off",
"boot": "power-on",
"warm_start": false,
"vin_v": 24.06,
"ceiling_w": 0,
"problem": false,
"problems": "",
"led_mode": "normal",
"led_now": 48,
"chassis_light": "ok",
"blade_fw": "0.2.0",
"update": {
"available": false,
"latest": "0.16.1",
"check": "ok",
"check_age_s": 5120,
"installing": false,
"progress": 0,
"restarting": false,
"auto": "none",
"auto_wait_s": 0,
"postponed_until": 0,
"skipped": null
},
"net": {
"up": true,
"ip": "192.168.1.40",
"netmask": "255.255.255.0",
"gateway": "192.168.1.1",
"dns": "192.168.1.1",
"ntp": "time.cloudflare.com",
"time_synced": true,
"mqtt": "connected",
"mqtt_problem": null
},
"ports": [
{
"name": "Laptop",
"state": "active",
"gen": 3,
"attached": true,
"charged": false,
"pdo": 5,
"contract": "fixed",
"v": 20.021,
"i": 2.712,
"p": 54.3,
"e": 6.211,
"contract_w": 65,
"prio": 0,
"limit_w": 100,
"max_v": 20,
"boot": "on",
"fault": 0,
"t_conv": 54.9,
"t_plug": 41.3,
"t_mcu": 36.2,
"progress": 0,
"update_due": false,
"fw": "0.2.0",
"silent": false
},
{
"name": "Phone",
"state": "active",
"gen": 3,
"attached": true,
"charged": false,
"pdo": 2,
"contract": "fixed",
"v": 9.004,
"i": 2.18,
"p": 19.63,
"e": 1.402,
"contract_w": 27,
"prio": 1,
"limit_w": 60,
"max_v": 9,
"boot": "on",
"fault": 0,
"t_conv": 41.2,
"t_plug": 33,
"t_mcu": 34.8,
"progress": 0,
"update_due": false,
"fw": "0.2.0",
"silent": false
},
{
"name": "Port 3",
"state": "idle",
"gen": 3,
"attached": false,
"charged": false,
"pdo": 0,
"contract": null,
"v": 0,
"i": 0,
"p": 0,
"e": 0,
"contract_w": 0,
"prio": 2,
"limit_w": 100,
"max_v": 20,
"boot": "on",
"fault": 0,
"t_conv": 30.1,
"t_plug": 29.4,
"t_mcu": 31,
"progress": 0,
"update_due": false,
"fw": "0.2.0",
"silent": false
},
{
"name": "Port 4",
"state": "idle",
"gen": 3,
"attached": false,
"charged": false,
"pdo": 0,
"contract": null,
"v": 0,
"i": 0,
"p": 0,
"e": 0,
"contract_w": 0,
"prio": 3,
"limit_w": 100,
"max_v": 20,
"boot": "on",
"fault": 0,
"t_conv": 29.8,
"t_plug": 29,
"t_mcu": 30.7,
"progress": 0,
"update_due": false,
"fw": "0.2.0",
"silent": false
},
{
"name": "Port 5",
"state": "disabled",
"gen": 3,
"attached": false,
"charged": false,
"pdo": 0,
"contract": null,
"v": 0,
"i": 0,
"p": 0,
"e": 0,
"contract_w": 0,
"prio": 4,
"limit_w": 100,
"max_v": 20,
"boot": "last",
"fault": 0,
"t_conv": 28.9,
"t_plug": 28.5,
"t_mcu": 30.2,
"progress": 0,
"update_due": false,
"fw": "0.2.0",
"silent": false
},
{
"name": "Port 6",
"state": "absent",
"gen": 0,
"attached": false,
"charged": false,
"pdo": 0,
"contract": null,
"v": 0,
"i": 0,
"p": 0,
"e": 0,
"contract_w": 0,
"prio": 5,
"limit_w": 100,
"max_v": 20,
"boot": "on",
"fault": 0,
"t_conv": null,
"t_plug": null,
"t_mcu": null,
"progress": 0,
"update_due": false,
"fw": null,
"silent": false
}
]
}

Auth_read is on and the token is missing or wrong.

Media typeapplication/json
object
error
required

Why the request was refused, in words.

string

Example

{
"error": "bearer token required"
}

USB Type-C® and USB-C® are registered trademarks of USB Implementers Forum.