This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Power Module examples

Basic usage examples

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://.

Python examples

Get voltage, current and power

Example:

import requests

base_url = "http://localhost/api/power/1.0/"
# For tokens see http://noreya-nexus.local/nexuscontrolui/system/settings#access-token
login = ("token","")

resp = requests.get(base_url, auth=login)
if resp.status_code == requests.codes.ok:
  response = resp.json()
  for device in response['devices']:
    print("Voltage, current and power values for Power Module on slot " + str(device['slot_number']) + ":")
    resp = requests.get(base_url + str(device['slot_number']) + "/stats", auth=login)
    if resp.status_code == requests.codes.ok:
      response = resp.json()
      voltage_3v3 = round(response['voltage_3v3']/1000,3)
      voltage_5v0 = round(response['voltage_5v0']/1000,3)
      voltage_12v = round(response['voltage_12v']/1000,3)

      current_3v3 = round(response['current_3v3']/1000,3)
      current_5v0 = round(response['current_5v0']/1000,3)
      current_12v = round(response['current_12v']/1000,3)

      power_3v3 = round(voltage_3v3*current_3v3,3)
      power_5v0 = round(voltage_5v0*current_5v0,3)
      power_12v = round(voltage_12v*current_12v,3)

      print("3V3 rail voltage/current/power: " + str(voltage_3v3) + "V * " + str(current_3v3) + "A = " + str(power_3v3) + "W")
      print("5V0 rail voltage/current/power: " + str(voltage_5v0) + "V * " + str(current_5v0) + "A = " + str(power_5v0) + "W")
      print("12V rail voltage/current/power: " + str(voltage_12v) + "V * " + str(current_12v) + "A = " + str(power_12v) + "W")
    else:
      print("Error response for slot " + str(device['slot_number']))
else:
  print("Error response")

Output:

Voltage, current and power values for Power Module on slot 1:
3V3 rail voltage/current/power: 3.302V * 0.585A = 1.932W
5V0 rail voltage/current/power: 4.938V * 0.397A = 1.96W
12V rail voltage/current/power: 11.945V * 0.002A = 0.024W

Fan control

Example:

import requests
import time

base_url = "http://localhost/api/power/1.0/"
# For tokens see http://noreya-nexus.local/nexuscontrolui/system/settings#access-token
login = ("token","")

def check_fan(slot_number):
  response = requests.get(base_url + str(slot_number) + "/fan", auth=login)
  if response.status_code == requests.codes.ok:
    response = response.json()
    if response['fan_forced']:
      print("Fan is controlled by the driver")
    else:
      print("Fan is controlled by the firmware")

    print("Fan speed is: " + str(response['fan_current_mode']) + '%')
    print("Fan setting is: " + str(response['fan_setting_mode']) + '%')

    if (response['fan_current_mode'] != response['fan_setting_mode']) and response['fan_forced']:
        print ("Fan setting is going to be applied within 10 seconds")
        return True
    elif response['fan_forced']:
      print ("Fan setting applied!")
      print ("")
    return False
  else:
    raise RuntimeError("Could not get fan status")

response = requests.get(base_url, auth=("", ""))
if response.status_code == requests.codes.ok:
  response = response.json()
  for device in response['devices']:
    slot_number = device['slot_number']
    print("Fan control for Power Module on slot " + str(slot_number) + ":")

    response = requests.get(base_url + str(slot_number) + "/reset", auth=login)
    if response.status_code == requests.codes.ok:
      print("Successfully reset device")  # We do "write" requests so we need to get a defined state

    request = {"measurement_enabled": True}
    response = requests.post(base_url + str(slot_number) + "/fan/rpm", json=request, auth=login)
    if response.status_code == requests.codes.ok:
      print("Fan rpm measurement enabled")
    else:
      print("Enabling RPM measurement failed")

    check_fan(slot_number)
    print("")

    request = {"fan_forced": True, "fan_mode": 100}
    response = requests.post(base_url + str(slot_number) + "/fan", json=request, auth=login)
    if response.status_code == requests.codes.ok:
      print("Fan speed set to 100%")
      while check_fan(slot_number):  # Worst case it can take 10 seconds until the mode changes!
        time.sleep(1)
    else:
      print("Could not set fan mode")

    time.sleep(2) # It takes at least a second before the RPM value is available
    response = requests.get(base_url + str(slot_number) + "/fan/rpm", auth=login)
    if response.status_code == requests.codes.ok:
      response = response.json()
      print("Fan rounds-per-minutes: " + str(response['rpm']))
    else:
      print("Could not get fan rpm value")

    response = requests.get(base_url + str(slot_number) + "/reset", auth=login)
    if response.status_code == requests.codes.ok:
      print("Successfully reset device")

else:
  print("Error response")

Output:

Fan control for Power Module on slot 1:
Successfully reset device
Fan rpm measurement enabled
Fan is controlled by the firmware
Fan speed is: 0%
Fan setting is: 100%

Fan speed set to 100%
Fan is controlled by the driver
Fan speed is: 0%
Fan setting is: 100%
Fan setting is going to be applied within 10 seconds
Fan is controlled by the driver
Fan speed is: 0%
Fan setting is: 100%
Fan setting is going to be applied within 10 seconds
Fan is controlled by the driver
Fan speed is: 0%
Fan setting is: 100%
Fan setting is going to be applied within 10 seconds
Fan is controlled by the driver
Fan speed is: 100%
Fan setting is: 100%
Fan setting applied!

Fan rounds-per-minutes: 4500
Successfully reset device