Evan Pratten

Software Developer

Making my UDM-Pro scream

/* Remote fan control for the Unifi Dream Machine Pro */

Ubiquiti's Unifi Dream Machine Pro is a powerful medium-scale business-oriented rack-mount router, capable of handling 10/100/1000/10000 ethernet traffic. Really quite a nice device.

One day, I had the thought: I've never heard the fans ramp up on this. And so, I started looking into the possibilities of manual fan control.

As it turns out, this Linux-based device allows you (like any embedded Linux computer) override its I/O with some clever shell commands.

Enter: SSH

If you own a UDM-Pro, you surely know how to log in to it via SSH. If not, look it up 😄.

With an SSH connection open, the following commands let you control the fans on the device!

# Override the fans with a speed (0-255)
export FAN_SPEED=128
killall -9 S04ubnt-fan-speed ubnt-fan-speed
echo 1 > /sys/class/hwmon/hwmon0/device/pwm1_enable
echo 1 > /sys/class/hwmon/hwmon0/device/pwm2_enable
echo $FAN_SPEED > /sys/class/hwmon/hwmon0/device/pwm1
echo $FAN_SPEED > /sys/class/hwmon/hwmon0/device/pwm2

# Return control back to the device
/etc/init.d/S04ubnt-fan-speed start

Exit stage left

Who needs SSH anyways?

When I discovered this, I decided to write a little program that wraps the SSH commands with a little bit of error checking, and support for auto-discovery of UDM-Pro devices on your network.

The following commands can be used to control the fans on a local UDM-Pro:

# Set the fans to half speed
udm-fan set 128

# Set the fans to full speed (with a custom IP address)
udm-fan set 255 --override-ip

# Bring the fans back to automatic control
udm-fan auto

Passwords can be provided through:

  • The --ssh-password flag
  • The UDM_SSH_PASS environment variable
  • A .netrc entry with the hostname being the UDM's IP address
  • The terminal at runtime