Add ryujin iii 360 support#865
Conversation
Added the USB Product ID for the standard ASUS Ryujin III 360 (0xb05:0x1aa2). This allows proper identification of the device and enables control of the embedded pump fan to mitigate noise. Verified on physical hardware.
Includes update to udev rules, man page, bash completion, and automated tests. Verified on physical hardware.
There was a problem hiding this comment.
Pull request overview
Adds recognition and (partial) control support for the standard ASUS Ryujin III 360 by introducing its USB product ID (0x1aa2) across the driver, tests, docs, and Linux udev rules.
Changes:
- Register ASUS Ryujin III 360 (0x0b05:0x1aa2) in the
AsusRyujinUSB HID driver match table. - Extend the Ryujin test fixtures with a mock device configuration for product ID 0x1aa2.
- Update user-facing artifacts (man page, README device list, bash completion, udev rules) to include the new device/channel.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
liquidctl/driver/asus_ryujin.py |
Adds the new 0x1aa2 USB match entry for ASUS Ryujin III 360 with appropriate offsets/channel config. |
tests/test_asus_ryujin.py |
Adds mock responses/expected status for 0x1aa2 (Ryujin III 360). |
liquidctl.8 |
Adds a new “ASUS Ryujin III 360” subsection under device specifics. |
extra/linux/71-liquidctl.rules |
Adds udev access rule for 0x0b05:0x1aa2 and reflects regenerated ordering. |
extra/completions/liquidctl.bash |
Adds pump-fan to the bash completion channel suggestions. |
README.md |
Lists ASUS Ryujin III 360 as a supported device with a link to the Ryujin III guide. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| 0x1AA2: { | ||
| "name": "Mock Ryujin III 360", | ||
| "fan_count": 0, | ||
| "pump_speed_offset": 7, | ||
| "pump_fan_speed_offset": 10, | ||
| "temp_offset": 5, | ||
| "duty_channel": 1, |
There was a problem hiding this comment.
Added a new DEVICE_CONFIGS entry for product_id 0x1AA2, but the parametrized test lists below (test_initialize/test_status) don’t include 0x1AA2, so this new device isn’t actually exercised by the test suite. Include 0x1AA2 in the @pytest.mark.parametrize product_id lists (or derive the list from DEVICE_CONFIGS keys) to ensure initialization/status behavior is covered.
| ( | ||
| 0x0B05, | ||
| 0x1AA2, | ||
| "ASUS Ryujin III 360", | ||
| { |
There was a problem hiding this comment.
The module/class docstrings still say this driver is for Ryujin II and Ryujin III EXTREME only, but this change adds support for the Ryujin III 360 as well. Update the docstrings to reflect the expanded supported device set so users/devs aren’t misled when reading the driver source.
liquidctl.8
Outdated
| .SS ASUS Ryujin III 360 | ||
| .SS ASUS Ryujin III EVA | ||
| .SS ASUS Ryujin III EXTREME |
There was a problem hiding this comment.
This adds a subsection header for “ASUS Ryujin III 360” but no content is associated with it; the subsequent “Cooling channels” line applies only to the “ASUS Ryujin III EXTREME” subsection. Add the appropriate “Cooling channels” (and any other notes) under the Ryujin III 360 subsection, or restructure the Ryujin III subsections so the shared content clearly applies to all relevant models.
| .SS ASUS Ryujin III 360 | |
| .SS ASUS Ryujin III EVA | |
| .SS ASUS Ryujin III EXTREME | |
| .SS ASUS Ryujin III 360, ASUS Ryujin III EVA, ASUS Ryujin III EXTREME |
| # possibly use some command here to get a list of all the possible channels from liquidctl | ||
| local cur="${COMP_WORDS[COMP_CWORD]}" | ||
| COMPREPLY=($(compgen -W "fan fan1 fan2 fan3 fan4 fan5 fan6 led led1 led2 led3 led4 led5 led6 pump sync ring logo external lcd" -- "$cur")) | ||
| COMPREPLY=($(compgen -W "fan fan1 fan2 fan3 fan4 fan5 fan6 led led1 led2 led3 led4 led5 led6 pump pump-fan sync ring logo external lcd" -- "$cur")) |
There was a problem hiding this comment.
Bash completion now suggests the “pump-fan” channel, but the parser logic in _liquidctl_set_command only recognizes “pump” (not “pump-fan”) as a fan-channel token, so completing/handling arguments after “pump-fan” won’t work correctly. Update the case pattern that dispatches to _liquidctl_set_fan to include “pump-fan” as well.
|
Thanks for the thorough review! I have addressed all the identified issues in the latest commit (a31c824): Tests: Included 0x1AA2 in the @pytest.mark.parametrize lists for both test_initialize test_status liquidctl.8 _liquidctl_set_command |
Added the USB Product ID for the standard ASUS Ryujin III 360 (0xb05:0x1aa2). This allows proper identification of the device and enables control of the embedded pump fan to mitigate noise. Verified on physical hardware.
Checklist: