Power Module

Power Module RESTful API documentation

These examples are meant to be run on the device!
If you want to run them from a remote computer, you need to change “localhost” to the IP/hostname.
You will also need to generate an access token and use the “auth basic” method.
You may also want to use the secure protocol https://.

Generic

Base URL:

<HOSTNAME>/api/power/<version>/

Version check and device selection

See Version check and device selection

Error response

See Error Response

Source

GET /source

Returns the power sourcing capabilities of the device.

The source_* value shows the maximum power that can be consumed on this voltage rail in milliwatt.
The source_total value shows the maximum power all rails can consume together.
The efficiency_factor* can be used to calculate the power consumption including power dissipation.
e.g: Efficiency is 90% →value is 10W → calculated dissipation is 1W → total consumption is 11W

Request:

Method: GET
URL: <HOSTNAME>/api/power/<version>/<slot>/source

Parameters:

No body parameters

Response:

{
  "source_3v3": <mW>,
  "source_5v0": <mW>,
  "source_12v": <mW>,
  "source_total": <mW>,
  "efficiency_factor_3v3": <int(%)>,
  "efficiency_factor_5v0": <int(%)>,
  "efficiency_factor_12v": <int(%)>
}

Example

Request:

curl http://localhost/api/power/1.0/1/source

Response:

{
  "source_3v3": 17671,
  "source_5v0": 22275,
  "source_12v": 28750,
  "source_total": 28750,
  "efficiency_factor_3v3": 90,
  "efficiency_factor_5v0": 90,
  "efficiency_factor_12v": 100
}

Protection log

GET /protectionlog

Returns the internal protection table counters of the device. If an error like an over voltage event occurs the counter is increased. It can be reset by the factory reset command.

Label explanation:

opp_protection_cnt = Sum of all counters
ovp* = Over voltage protection
uvp* = Under voltage protection
pmc_temperature = Power Management Controller temperature exceeded 125°C
total_power_overload = Total power limit of the device exceeded (see /source)

Voltage limits:

3V3 rail = 3.240V - 3.440V
5V0 rail = 4.608V - 5.202V
12V rail = 11.30V - 12.77V

Request:

Method: GET
URL: <HOSTNAME>/api/power/<version>/<slot>/protectionlog

Parameters:

No body parameters

Response:

{
  "opp_protection_cnt": <int>,
  "ovp_cnt_3v3": <int>,
  "uvp_cnt_3v3": <int>,
  "ovp_cnt_5v0": <int>,
  "uvp_cnt_5v0": <int>,
  "ovp_cnt_12v": <int>,
  "uvp_cnt_12v": <int>,
  "ocp_cnt_3v3": <int>,
  "ocp_cnt_5v0": <int>,
  "ocp_cnt_12v": <int>,
  "pmc_temperature": <int>,
  "total_power_overload": <int>
}

Example

Request:

curl http://localhost/api/power/1.0/1/protectionlog

Response:

{
  "opp_protection_cnt": 0,
  "ovp_cnt_3v3": 0,
  "uvp_cnt_3v3": 0,
  "ovp_cnt_5v0": 0,
  "uvp_cnt_5v0": 0,
  "ovp_cnt_12v": 0,
  "uvp_cnt_12v": 0,
  "ocp_cnt_3v3": 0,
  "ocp_cnt_5v0": 0,
  "ocp_cnt_12v": 0,
  "pmc_temperature": 0,
  "total_power_overload": 0
}

Stats

GET /stats

Returns the voltage and current statistics of the device.

Request:

Method: GET
URL: <HOSTNAME>/api/power/<version>/<slot>/stats

Parameters:

No body parameters

Response:

{
  "voltage_3v3": <mV>,
  "voltage_5v0": <mV>,
  "voltage_12v": <mV>,
  "current_3v3": <mA>,
  "current_5v0": <mA>,
  "current_12v": <mA>,
  "limit_3v3": <mA>,
  "limit_5v0": <mA>,
  "limit_12v": <mA>
}

Example

Request:

curl http://localhost/api/power/1.0/1/stats

Response:

{
  "voltage_3v3": 3301,
  "voltage_5v0": 4936,
  "voltage_12v": 11936,
  "current_3v3": 762,
  "current_5v0": 536,
  "current_12v": 1,
  "limit_3v3": 5950,
  "limit_5v0": 4950,
  "limit_12v": 2400
}

Limits

POST /limits

Enables the watchdog timeout. The timeout is disabled after reset if the config is not saved.

“limit_3v3” must be > 1000 and < 5950 mA

“limit_5v0” must be > 1000 and < 4950 mA

“limit_12v” must be > 100 and < 2400 mA

Request:

Method: POST
URL: <HOSTNAME>/api/power/<version>/<slot>/limits

Parameters:

{
  "limit_3v3": <int>,
  "limit_5v0": <int>,
  "limit_12v": <int>
}

Response:

{
  "status": "success"
}

Example

Request:

curl http://localhost/api/power/1.0/1/limits --header "Content-Type: application/json" --request POST --data '{"limit_3v3": 5950, "limit_5v0": 4950, "limit_12v": 2400}'

Response:

{
  "status": "success"
}

Temperature

GET /temperature

Returns the temperature value of all sensors.

on_board_temp: Value from the NTC located next to the AC/DC converter

pmc_temp: Value from the PMCs internal sensor

The unit is degree Celsius.

Request:

Method: GET
URL: <HOSTNAME>/api/power/<version>/<slot>/temperature

Parameters:

No body parameters

Response:

{
  "on_board_temp": <float>,
  "pmc_temp": <float>
}

Example

Request:

curl http://localhost/api/power/1.0/1/temperature

Response:

{
  "on_board_temp": 40.353,
  "pmc_temp": 36.632
}

Fan

If the fan mode is changed it may take up to 10 seconds until it is applied by the firmware (to prevent fan vibrations).
fan_setting_mode and fan_current_mode can be compared to check the execution status.

GET /fan

Returns the fan statistics.

fan_forced: False means the fan is auto controlled by the firmware. True means the setting from fan_setting mode is applied.

fan_current_mode: Shows the mode currently in use (in auto and manual mode)

fan_setting_mode: Shows the mode which will be applied if fan_forced is True.

fan_*_mode values: 0, 20, 40, 60, 80, 100 (percent)

Request:

Method: GET
URL: <HOSTNAME>/api/power/<version>/<slot>/fan

Parameters:

No body parameters

Response:

{
  "fan_forced": <bool>,
  "fan_current_mode": <int>,
  "fan_setting_mode": <int>
}

Example

Request:

curl http://localhost/api/power/1.0/1/fan

Response:

{
  "fan_forced": false,
  "fan_current_mode": 0,
  "fan_setting_mode": 80
}

POST /fan

Changes the fan mode to the configured setting.

fan_*_mode values: 0, 20, 40, 60, 80, 100 (percent)

Request:

Method: POST
URL: <HOSTNAME>/api/power/<version>/<slot>/fan

Parameters:

{
  "fan_forced": <bool>,
  "fan_mode": <int>
}

Response:

{
  "status": "success"
}

Example

Request:

curl http://localhost/api/power/1.0/1/fan --header "Content-Type: application/json" --request POST --data '{"fan_forced": true, "fan_mode": 100}'

Response:

{
  "status": "success"
}

RPM

GET /fan/rpm

Returns the fan rounds-per-minute value.
It takes at least a second to update the value after the fan mode changed.

The typical maximum value is 5000 RPM +/- 15%.

Request:

Method: GET
URL: <HOSTNAME>/api/power/<version>/<slot>/fan/rpm

Parameters:

No body parameters

Response:

{
  "enabled": <bool>,
  "rpm": <int>
}

Example

Request:

curl http://localhost/api/power/1.0/1/fan/rpm

Response:

{
  "enabled": false,
  "rpm": 0
}

POST /fan/rpm

Changes the fan rounds-per-minute measurement status.

Request:

Method: POST
URL: <HOSTNAME>/api/power/<version>/<slot>/fan/rpm

Parameters:

{
  "measurement_enabled": <bool>
}

Response:

{
  "status": "success"
}

Example

Request:

curl http://localhost/api/power/1.0/1/fan/rpm --header "Content-Type: application/json" --request POST --data '{"measurement_enabled": true}'

Response:

{
  "status": "success"
}


Power Module examples

Basic usage examples