Hwmon Linux kernel driver for monitoring and configuring Aquacomputer PC watercooling devices
[aleksa@fedora linux]$ sensors
d5next-hid-3-3
Adapter: HID adapter
Pump voltage: 12.10 V
Fan voltage: 12.12 V
+5V voltage: 5.04 V
Pump speed: 1970 RPM
Fan speed: 1332 RPM
Coolant temp: +25.2°C
Pump power: 2.73 W
Fan power: 420.00 mW
Pump current: 226.00 mA
Fan current: 35.00 mA
octo-hid-3-8
Adapter: HID adapter
Fan 1 voltage: 0.00 V
Fan 2 voltage: 0.00 V
Fan 3 voltage: 0.00 V
Fan 4 voltage: 0.00 V
Fan 5 voltage: 0.00 V
Fan 6 voltage: 0.00 V
Fan 7 voltage: 0.00 V
Fan 8 voltage: 12.08 V
Fan 1 speed: 0 RPM
Fan 2 speed: 0 RPM
Fan 3 speed: 0 RPM
Fan 4 speed: 0 RPM
Fan 5 speed: 0 RPM
Fan 6 speed: 0 RPM
Fan 7 speed: 0 RPM
Fan 8 speed: 354 RPM
Sensor 1: N/A
Sensor 2: N/A
Sensor 3: N/A
Sensor 4: +31.9°C
Fan 1 power: 0.00 W
Fan 2 power: 0.00 W
Fan 3 power: 0.00 W
Fan 4 power: 0.00 W
Fan 5 power: 0.00 W
Fan 6 power: 0.00 W
Fan 7 power: 0.00 W
Fan 8 power: 100.00 mW
Fan 1 current: 0.00 A
Fan 2 current: 0.00 A
Fan 3 current: 0.00 A
Fan 4 current: 0.00 A
Fan 5 current: 0.00 A
Fan 6 current: 0.00 A
Fan 7 current: 0.00 A
Fan 8 current: 9.00 mA
[leo@manjaro]$ sensors
quadro-hid-3-3
Adapter: HID adapter
Fan 1 voltage: 12.13 V
Fan 2 voltage: 12.13 V
Fan 3 voltage: 12.13 V
Fan 4 voltage: 12.13 V
Fan 1 speed: 643 RPM
Fan 2 speed: 1756 RPM
Fan 3 speed: 659 RPM
Fan 4 speed: 650 RPM
Flow speed [l/h]: 60 RPM
Sensor 1: +33.9°C
Sensor 2: +25.3°C
Sensor 3: +37.6°C
Sensor 4: +33.3°C
Fan 1 power: 290.00 mW
Fan 2 power: 0.00 W
Fan 3 power: 260.00 mW
Fan 4 power: 260.00 mW
Fan 1 current: 24.00 mA
Fan 2 current: 0.00 A
Fan 3 current: 22.00 mA
Fan 4 current: 22.00 mA
...
The following devices are supported by this driver, and from which kernel version (if applicable):
Device | Supported since kernel | Functionality | Microcontroller |
---|---|---|---|
D5 Next | 5.15 | Various sensors, direct fan PWM control (6.0+) | ? |
Farbwerk 360 | 5.18 | Temperature sensors | MCF51JU128VHS |
Farbwerk | 5.19 | Temperature sensors | ? |
Octo | 5.19, flow sensor (6.10) | Temperature, flow and fan sensors, direct fan PWM control, flow sensor pulses | MCF51JU128VLH |
Quadro | 6.0 | Temperature, flow and fan sensors, direct fan PWM control, flow sensor pulses | MCF51JU128VHS |
High Flow Next | 6.1 | Various sensors | ? |
Aquaero 5/6 | 6.3 (sensors), 6.4 (fan control), rest here | Temperature sensors, fan sensors, direct fan PWM control, DC/PWM mode setting, flow sensors | MCF51JM128EVLK |
Leakshield | 6.5 (sensors), rest here | Various sensors and setting parameters for higher accuracy | ? |
Aquastream XT | 6.4 (sensors), rest here | Temperature sensors, voltage sensors, pump and fan speed control | ATMEGA8-16MU |
Aquastream Ultimate | 6.3 | Temperature sensors, pump and fan sensors, pressure and flow | ? |
Poweradjust 3 | 6.3 | External temperature sensor | ? |
High Flow USB | 6.7 | Temperature sensors, flow meter | ? |
MPS Flow | 6.7 | Temperature sensors, flow meter | ? |
Microcontrollers are noted for general reference, as this driver only communicates through HID reports and does not interact with the device CPU & electronics directly.
Being a standard hwmon
driver, it provides readings via sysfs
, which are easily accessible through lm-sensors
as usual.
Only notable parts are listed:
- aquacomputer_d5next.c - the driver itself
- Reverse engineering docs - documents explaining how the devices communicate to help understand what the driver does
- Kernel docs - driver documentation for the kernel
It may happen that at times, this repo will be ahead of the kernel in terms of bug fixes or features, as evidenced in the table in the previous section. Upstreaming progress is tracked in #81 and the state of the driver in the kernel is tracked in the hwmon-state branch.
Ideally, you are on a recent kernel and your distro includes it. If that's the case, you should already have this driver available! Refer to the table in the overview above to check.
If you're not, or your kernel does not have the driver support for your particular device, you can compile it yourself.
The driver uses some features only available in kernel 5.18 and later. You can check your kernel version by running:
uname -r
If you're on an older version, you'll have to do some additional steps, outlined in the next section. Whether any of the supported or unsupported devices are currently plugged in do not have an effect on the outcome of compilation.
First, clone the repository by running:
git clone https://github.com/aleksamagicka/aquacomputer_d5next-hwmon.git
Then, compile it and insert it into the running kernel, replacing the existing instance (if needed):
make dev
If all went well, you can skip ahead to see how to use it.
If you are sure that you're on a recent kernel and are still getting errors, please open an issue so we can track it down.
These kernels do not have hwmon_pwm_auto_channels_temp
, so compilation fails. In that case, you can modify
the driver, following what the compiler says, or upgrade to a newer kernel (see #28 for an example).
That functionality is not needed for basic usage. These kernels are old by now and no extra support will be
provided.
If the driver is inserted, try running sensors
and your devices should be listed there, if plugged in and supported.
Some devices have controllable fans, pumps or curves; to control them, you can access their sysfs entries under
/sys/class/hwmon/hwmonX
, where hwmonX
is the directory of the device that you wish to control. Every hwmonX
instance has a name
entry, so you can be sure what its referring to. For explanation of entries, look up the
kernel docs.
The driver does not control the full name that lm-sensors generates. For example, if you have an Octo, lm-sensors
may name it octo-hid-3-11
. Only the octo
part comes from the driver as it detected the device as such. This may
present a problem for users who try to scrape the data from the output of sensors
, which is a tedious way to go about
that. It's much easier (and more reliable) to read the data from hwmon directly. Related issues: #40, #66.
The numbers after the device name may depend on the order in which the driver (or the devices) are loaded by the kernel. The driver can not control when it gets loaded, only that it's loaded after the HID subsystem.
If a fan header is set to a certain speed, but is not physically connected, its values may flap from 0 to around 12V. This happens because the device repeatedly tries to establish PWM signal and is not a bug in the driver. See #7 for a case in point.
Contributions in form of reporting issues, sending bug fixes and new functionality are very welcome! Without contributors, this driver would never be as feature rich as it is today. Please use the issue tracker and PR functionality for any feedback and patches. Code contributions must follow the Linux code style rules.
Pull requests have CI workflows to check if the driver compiles and if the code is following the code style. If you're sure that a checkpatch warning should not be fixed, please be prepared to elaborate. There's a quick way to run checkpatch yourself, without bothering with the exact command:
make checkpatch
All commits must be signed off.