Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for (other) Asetek 690LC coolers #7

Closed
wants to merge 1 commit into from

Conversation

@jonasmalacofilho
Copy link
Owner

commented Nov 13, 2018

This is the current state on supporting (other) "bare" 5th generation Asetek coolers like the EVGA CLC 120 CL12, 240 and 280 (#16):

  • NZXT Kraken X31, X41 or X61 (#3);
  • and other Asetek 690LC devices

Please test/debug the changes in this pull request – i.e. branch add-second-gen-krakens – and report back.

I suggest trying features in the following order:

  1. Status: liquidctl status
  2. Fixed combined speed: liquidctl set sync speed <fixed value>
  3. Fixed independent speeds: liquidctl set <fan|pump> speed <fixed value>
  4. Variable fan speed: liquidctl set fan speed <temp> <value> [...]

While debugging or submitting error reports, consider using --debug; it will dump a bunch of useful (or less so) information, including all libusb calls.

If you need to reset the controller for some reason, just power off the device (or the computer) completely, ensuring no USB power (even standby) is available to the cooler.

Finally, if you're on Windows, you might need a different kernel driver (in addition to the libusb runtime libraries). But this should only be the case if the device doesn't already use the Microsoft HID one. If that's the case, please let us all know and you can install a suitable driver with Zadig.


Areas under work at the moment:

  • minimal interference for getting the cooler's status
  • setting fan and pump speeds independently of each other, at different times, and without resorting to a daemon
  • possibly allowing custom fan curves based on liquid temperature, running directly on the device

Setting the LEDs is not possible for now, as command for it is currently being used to trigger status responses from the cooler. Additionally, since aesthetics are the main difference between the various flavors of the base model, this might also cause the status command to fail on the EVGA devices.


The recommend way to experiment with this is directly through git, since you'll have easier access to inspect and modify the code. But you can also use pip:

# pip install git+https://github.com/jonasmalacofilho/liquidctl@add-second-gen-krakens

@jonasmalacofilho jonasmalacofilho referenced this pull request Nov 13, 2018

Closed

NZXT Kraken X61 #3

@jonasmalacofilho jonasmalacofilho force-pushed the add-second-gen-krakens branch from ca02a5d to e209712 Nov 20, 2018

@jonasmalacofilho jonasmalacofilho referenced this pull request Dec 9, 2018

Closed

MacOS Support #9

@jonasmalacofilho jonasmalacofilho force-pushed the add-second-gen-krakens branch from a058256 to 68b4807 Jan 17, 2019

@jonasmalacofilho jonasmalacofilho changed the title Support for second generation NZXT Kraken X31, X41 and X61 Support for Asetek 690LC coolers Feb 2, 2019

@KeithMyers

This comment has been minimized.

Copy link

commented Feb 2, 2019

I'm not having any luck getting this branch

$ pip install git+https://github.com/jonasmalacofilho/liquidctl@add-second-gen-krakens
Collecting git+https://github.com/jonasmalacofilho/liquidctl@add-second-gen-krakens
  Cloning https://github.com/jonasmalacofilho/liquidctl (to add-second-gen-krakens) to /tmp/pip-Lx1HOt-build
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-Lx1HOt-build/setup.py", line 10, in <module>
        with open('README.md', 'r', encoding='utf-8') as fh:
    TypeError: 'encoding' is an invalid keyword argument for this function
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-Lx1HOt-build/
@KeithMyers

This comment has been minimized.

Copy link

commented Feb 2, 2019

Still having issues executing the setup.py program. form the -add-second-gen-krakens branch

$ ls
CHANGELOG.md  docs  extra  LICENSE.txt  liquidctl  MANIFEST.in  README.md  setup.py
$ python setup.py
Traceback (most recent call last):
  File "setup.py", line 10, in <module>
    with open('README.md', 'r', encoding='utf-8') as fh:
TypeError: 'encoding' is an invalid keyword argument for this function
@jonasmalacofilho

This comment has been minimized.

Copy link
Owner Author

commented Feb 2, 2019

@KeithMyers I ended up answering you first messages on #16... but, basically, I think you need Python 3 and to make sure that you're calling the appropriate pip version for it.

@xsuchy

This comment has been minimized.

Copy link

commented Feb 4, 2019

can you test/debug the current state of #7?

status: liquidctl status

$ sudo liquidctl status
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature          36.2  °C 
Fan speed                    840  rpm
Pump speed                  2400  rpm
Firmware version         0.7.0.0 
fixed combined speed: liquidctl set sync speed <fixed value>
$ sudo liquidctl set sync speed 1000
report: failed to (pre) open (control: open), ignoring
#### FAN goes crazy
$ sudo liquidctl status
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature          36.2  °C 
Fan speed                   2040  rpm
Pump speed                  2400  rpm
Firmware version         0.7.0.0     
##### wait a second and once again
$ sudo liquidctl status
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature          36.2  °C 
Fan speed                    900  rpm
Pump speed                  2400  rpm
Firmware version         0.7.0.0
fixed independent speeds: liquidctl set <fan|pump> speed <fixed value>
$ sudo liquidctl status
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature          36.1  °C 
Fan speed                    840  rpm
Pump speed                  2400  rpm
Firmware version         0.7.0.0     

$ sudo liquidctl set fan speed 500
report: failed to (pre) open (control: open), ignoring
[mirek@triple/~/projects/liquidctl{add-second-gen-krakens}]$ sudo liquidctl status
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature          36.1  °C 
Fan speed                   2040  rpm
Pump speed                  2400  rpm
Firmware version         0.7.0.0     

$ sudo liquidctl set pump speed 3000
report: failed to (pre) open (control: open), ignoring
[mirek@triple/~/projects/liquidctl{add-second-gen-krakens}]$ sudo liquidctl status
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature          36.1  °C 
Fan speed                    840  rpm
Pump speed                  2400  rpm
Firmware version         0.7.0.0     

$ sudo liquidctl set pump speed 1000
report: failed to (pre) open (control: open), ignoring
[mirek@triple/~/projects/liquidctl{add-second-gen-krakens}]$ sudo liquidctl status
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature          36.1  °C 
Fan speed                    840  rpm
Pump speed                  3720  rpm
Firmware version         0.7.0.0
variable fan speed: liquidctl set fan speed <temp> <value> [...]

This seems to work. Status is just after the operation and then again after few seconds.

$ sudo  liquidctl set fan speed 35 80
report: failed to (pre) open (control: open), ignoring
usb.core.USBError: [Errno 110] Operation timed out
[mirek@triple/~/projects/liquidctl{add-second-gen-krakens}]1$ sudo liquidctl status 
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature          36.4  °C 
Fan speed                   1740  rpm
Pump speed                  3720  rpm
Firmware version         0.7.0.0     

]$ sudo liquidctl status
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature          36.2  °C 
Fan speed                   1740  rpm
Pump speed                  3600  rpm
Firmware version         0.7.0.0     

$ sudo  liquidctl set fan speed 40 80
report: failed to (pre) open (control: open), ignoring
usb.core.USBError: [Errno 110] Operation timed out

$ sudo liquidctl status
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature          36.2  °C 
Fan speed                    960  rpm
Pump speed                  3600  rpm
Firmware version         0.7.0.0     

$ sudo liquidctl status
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature          36.1  °C 
Fan speed                    840  rpm
Pump speed                  3600  rpm
Firmware version         0.7.0.0     

$ sudo liquidctl status
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature          36.1  °C 
Fan speed                    780  rpm
Pump speed                  3720  rpm
Firmware version         0.7.0.0 
@cdgriffith

This comment has been minimized.

Copy link
Contributor

commented Feb 7, 2019

I don't know all the possibilities for color modes and everything, but I did add a logo color changer to my own version that works for the Kraken x61:

    def set_color(self, channel, mode, colors, speed):
        """Set the color of the logo."""
        try:
            speed = int(speed)
        except ValueError:
            speeds = {
                'fastest': 1,
                'faster': 2,
                'normal': 3,
                'slower': 4,
                'slowest': 5
            }
            if speed not in speeds:
                LOGGER.warning('Speed must be a value between 1 and 255, setting to 1')
                speed = 1
            else:
                speed = speeds[speed]
        else:
            if speed < 1 or speed > 255:
                speed = 1
                LOGGER.warning('Speed must be a value between 1 and 255, setting to 1')

        if channel != 'logo':
            LOGGER.warning('Only "logo" channel supported for this device, falling back to that')

        if mode not in ('fixed', 'alternating', 'blinking', 'off'):
            raise NotImplementedError('Only fixed and off currently supported')

        if mode == 'off':
            color1, color2 = [0x00, 0x00, 0x00], [0x00, 0x00, 0x00]
        else:
            color1, *color2 = colors
            if len(color2) > 1:
                LOGGER.warning('Only maximum of 2 colors supported, ignoring further colors')
            color2 = color2[0] if color2 else [0x00, 0x00, 0x00]

        self._begin_transaction()
        data = ([0x10] +
                color1 +
                color2 +
                [0x00, 0x00, 0x00, 0x3c,
                 speed,
                 speed,
                 0x00 if mode == 'off' else 0x01,
                 0x01 if mode == 'alternating' else 0x00,
                 0x01 if mode == 'blinking' else 0x00,
                 0x00, 0x00, 0x01])  # constant
        self._write(data)
        self._end_transaction_and_read()
@cdgriffith

This comment has been minimized.

Copy link
Contributor

commented Feb 7, 2019

Just noticed a bug, calling status or pump speed resets my fan speed (and can hear them spin down as soon as command is issued.) (Kraken x61, Windows 10)

(venv) C:\Users\teckc>liquidctl set fan speed 100
report: failed to (pre) open (control: open), ignoring

(venv) C:\Users\teckc>liquidctl status
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature          31.4  °C
Fan speed                   1440  rpm
Pump speed                  3480  rpm
Firmware version         0.7.0.0


(venv) C:\Users\teckc>liquidctl status
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
report: failed to (pre) open (control: open), ignoring
Liquid temperature          31.5  °C
Fan speed                    360  rpm
Pump speed                  3600  rpm
Firmware version         0.7.0.0
@jonasmalacofilho

This comment has been minimized.

Copy link
Owner Author

commented Feb 10, 2019

Made a few changes..

Added information from EVGA CLC captures and remove the extended pre opening sequence that doesn't seem necessary (or supported) on these devices. Additionally:

  • commit 16a4c2f ("Experiment with specific read command 0x14") is supposed to fix the issue with status resetting the fan speed, but it's based on EVGA CLC captures and there's a chance that it won't work on the X61;

  • commit 3dce63b ("Experiment replacing dummy commands on fixed speed changes with try-except") tries to remove dummy uses of the "set color" command, clearing the path for exposing that feature to the user; however, it also changes how setting fixed independent fan/pump speeds works, and I honestly can't predict whether it will improve or break things.

As usual, --debug output can sometimes help me, and you can reset the cooler by cutting all (including USB) power to it.

@cdgriffith

This comment has been minimized.

Copy link
Contributor

commented Feb 10, 2019

Changing commands for the write to [0x14, 0, 0, 0] has broken it for me, will either timeout or give wrong values for status.

Edit: To be clear using Kraken x61.

(venv) C:\Users\a\PycharmProjects\liquidctl>liquidctl status -d 0
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
usb.core.USBError: [Errno 10060] Operation timed out

(venv) C:\Users\a\PycharmProjects\liquidctl>liquidctl status -d 0
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
Liquid temperature         127.5  °C
Fan speed                  23635  rpm
Pump speed                 28527  rpm
Firmware version      105.118.101.114
Bad stats debug

(venv) C:\Users\a\PycharmProjects\liquidctl>liquidctl status -d 0 --debug [DEBUG] usb.backend.libusb1: _LibUSB.__init__() [INFO] usb.core: find(): using backend "usb.backend.libusb1" [DEBUG] usb.backend.libusb1: _LibUSB.enumerate_devices() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.__init__() [INFO] usb.core: find(): using backend "usb.backend.libusb1" [DEBUG] usb.backend.libusb1: _LibUSB.enumerate_devices() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.__init__() [INFO] usb.core: find(): using backend "usb.backend.libusb1" [DEBUG] usb.backend.libusb1: _LibUSB.enumerate_devices() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB._finalize_object() [DEBUG] usb.backend.libusb1: _LibUSB.__init__() [INFO] usb.core: find(): using backend "usb.backend.libusb1" [DEBUG] usb.backend.libusb1: _LibUSB.enumerate_devices() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB._finalize_object() [DEBUG] usb.backend.libusb1: _LibUSB.__init__() [INFO] usb.core: find(): using backend "usb.backend.libusb1" [DEBUG] usb.backend.libusb1: _LibUSB.enumerate_devices() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB.get_device_descriptor() [DEBUG] usb.backend.libusb1: _LibUSB._finalize_object() Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental) [DEBUG] usb.backend.libusb1: _LibUSB.open_device() [DEBUG] usb.backend.libusb1: _LibUSB.get_configuration() [DEBUG] usb.backend.libusb1: _LibUSB.get_configuration_descriptor(, 0) [DEBUG] liquidctl.driver.asetek: open device [DEBUG] usb.backend.libusb1: _LibUSB.ctrl_transfer(, 64, 2, 2, 0, array('B'), 1000) [DEBUG] liquidctl.driver.asetek: begin transaction [DEBUG] usb.backend.libusb1: _LibUSB.ctrl_transfer(, 64, 2, 1, 0, array('B'), 1000) [DEBUG] liquidctl.driver.asetek: write 14 00 00 00 [DEBUG] usb.backend.libusb1: _LibUSB.get_configuration_descriptor(, 0) [DEBUG] usb.backend.libusb1: _LibUSB.get_interface_descriptor(, 0, 0, 0) [DEBUG] usb.backend.libusb1: _LibUSB.get_configuration_descriptor(, 0) [DEBUG] usb.backend.libusb1: _LibUSB.get_endpoint_descriptor(, 0, 0, 0, 0) [DEBUG] usb.backend.libusb1: _LibUSB.get_interface_descriptor(, 0, 0, 0) [DEBUG] usb.backend.libusb1: _LibUSB.get_configuration_descriptor(, 0) [DEBUG] usb.backend.libusb1: _LibUSB.claim_interface(, 0) [DEBUG] usb.backend.libusb1: _LibUSB.bulk_write(, 2, 0, array('B', [20, 0, 0, 0]), 2000) [DEBUG] usb.backend.libusb1: _LibUSB.get_configuration_descriptor(, 0) [DEBUG] usb.backend.libusb1: _LibUSB.get_interface_descriptor(, 0, 0, 0) [DEBUG] usb.backend.libusb1: _LibUSB.get_configuration_descriptor(, 0) [DEBUG] usb.backend.libusb1: _LibUSB.get_endpoint_descriptor(, 0, 0, 0, 0) [DEBUG] usb.backend.libusb1: _LibUSB.get_interface_descriptor(, 0, 0, 0) [DEBUG] usb.backend.libusb1: _LibUSB.get_configuration_descriptor(, 0) [DEBUG] usb.backend.libusb1: _LibUSB.get_endpoint_descriptor(, 1, 0, 0, 0) [DEBUG] usb.backend.libusb1: _LibUSB.get_interface_descriptor(, 0, 0, 0) [DEBUG] usb.backend.libusb1: _LibUSB.get_configuration_descriptor(, 0) [DEBUG] usb.backend.libusb1: _LibUSB.bulk_read(, 130, 0, array('B', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2000) [DEBUG] liquidctl.driver.asetek: received 5c 53 79 73 74 65 6d 52 6f 6f 74 5c 53 79 73 74 65 6d 33 32 5c 64 72 69 76 65 72 73 5c 6d 73 72 [DEBUG] usb.backend.libusb1: _LibUSB.release_interface(, 0) [DEBUG] usb.backend.libusb1: _LibUSB.close_device() Liquid temperature 127.5 °C Fan speed 23635 rpm Pump speed 28527 rpm Firmware version 105.118.101.114 [DEBUG] liquidctl.driver.asetek: close device [DEBUG] usb.backend.libusb1: _LibUSB.open_device() [DEBUG] usb.backend.libusb1: _LibUSB.ctrl_transfer(, 64, 2, 4, 0, array('B'), 1000) [DEBUG] usb.backend.libusb1: _LibUSB.close_device()

[DEBUG] usb.backend.libusb1: _LibUSB._finalize_object()
[DEBUG] usb.backend.libusb1: _LibUSB._finalize_object()

Thanks for the hard work, and sorry it's not just working cross device easily :-/

@jonasmalacofilho

This comment has been minimized.

Copy link
Owner Author

commented Feb 10, 2019

And thank you all for testing and reporting back!

@cdgriffith, as mentioned above I might have fixed the issue with status. I also started to clear the path for incorporating your implementation of set_color (_send_dummy_command conflicts with it). will revert, thanks.

@xsuchy, I'm glad that fan profiles might work on the X61 firmware. Have you tried more temperature–duty points (e.g. 20 25 25 50 30 75 35 100)?

@jonasmalacofilho

This comment has been minimized.

Copy link
Owner Author

commented Feb 10, 2019

I'll need to differentiate between NZXT and EVGA devices.

@cdgriffith after reverting the patch did the cooler get back to normal immediately or did you need to reset it? I'm thinking of using the 0x14 command as a test for the appropriate operating mode.

(as far as the OS is concerned, the two device types are indistinguishable; and reading the firmware version requires a write first, ideally of something other than a dummy setting)

@cdgriffith

This comment has been minimized.

Copy link
Contributor

commented Feb 10, 2019

@jonasmalacofilho so this is kinda weird behavior. But it seems I only get that crazy output if I never send a color / dummy command first (for that reboot.) Sending the 0x14 the first time ALWAYS makes it timeout, and the second time it works.

Fresh reboot (printing out return message, using self._write([0x14, 0, 0, 0])):

(venv) C:\Users\a\PycharmProjects\liquidctl>liquidctl status -d 0
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
usb.core.USBError: [Errno 10060] Operation timed out

(venv) C:\Users\a\PycharmProjects\liquidctl>liquidctl status -d 0
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
array('B', [7, 0, 0, 0, 4, 0, 29, 0, 92, 83, 121, 115, 116, 101, 109, 82, 111, 111, 116, 92, 83, 121, 115, 116, 101, 109, 51, 50, 92, 100, 114, 105])
Liquid temperature         131.9  °C
Fan speed                   1792  rpm
Pump speed                 23635  rpm
Firmware version      116.101.109.51

Change back to self._send_dummy_command()

(venv) C:\Users\a\PycharmProjects\liquidctl>liquidctl status -d 0
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
array('B', [1, 224, 123, 91, 198, 219, 33, 191, 7, 8, 34, 16, 28, 17, 5, 67, 254, 200, 153, 123, 25, 252, 3, 0, 7, 0, 0, 1, 195, 70, 105, 32])
Liquid temperature          34.5  °C
Fan speed                    480  rpm
Pump speed                  1800  rpm
Firmware version         0.7.0.0

Change back to self._write([0x14, 0, 0, 0]), notice the temp output is now working as expected? (Still times out first time like clockwork)

(venv) C:\Users\a\PycharmProjects\liquidctl>liquidctl status -d 0
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
usb.core.USBError: [Errno 10060] Operation timed out

(venv) C:\Users\a\PycharmProjects\liquidctl>liquidctl status -d 0
Device 0, Asetek 690LC (NZXT, EVGA or other) (experimental)
array('B', [1, 224, 123, 91, 198, 219, 33, 191, 7, 8, 34, 16, 28, 17, 5, 67, 254, 200, 153, 123, 25, 252, 3, 0, 7, 0, 0, 1, 195, 70, 105, 32])
Liquid temperature          34.5  °C
Fan speed                    480  rpm
Pump speed                  1800  rpm
Firmware version         0.7.0.0
@jonasmalacofilho

This comment has been minimized.

Copy link
Owner Author

commented Mar 9, 2019

Just a quick update, since it's been a while since I updated this branch...

First, I have a CLC from EVGA on hand now, and will be finishing the driver for it soon. I'm pretty confident it will be possible to support it without any quirks, apart from requiring a call to initialize after every boot, which is something a few other devices already require.

I might also receive a X61 for testing in the next few weeks. These, on the hand, are ugly: we haven't yet found a way to query the state of the cooler (or its firmware version) without first changing a setting.
One way to manage this (insanity) is to save our settings persistently somewhere, so that we at least change things to what they already were (supposedly).(note 1) Maybe this will have to do...

Finally, this branch will get rebased soon, as two-hid-backends is almost ready for the master branch, and that changes the underlying driver hierarchy.


Note 1: see Chris' patch to _send_dummy_command.

@KeithMyers

This comment has been minimized.

Copy link

commented Mar 9, 2019

So does this mean that the add-second-gen-krakens branch will be deprecated or absorbed into the master branch? The add-second-gen-krakens branch seems to be working fine with my EVGA CLC 280 AIO cooler.

@jonasmalacofilho

This comment has been minimized.

Copy link
Owner Author

commented Mar 9, 2019

The support for the EVGA CLCs, once finalized, will be merged into the master branch (and will also be part of future release). This branch will remain with ongoing work for the Krakens.

The support for the EVGA CLCs has been merged into the master branch, and its development will continue there.

This branch remains for ongoing work to support the second generation of Krakens and other 690LC devices.

@jonasmalacofilho jonasmalacofilho force-pushed the add-second-gen-krakens branch from 6409010 to be92eaa Mar 12, 2019

@jonasmalacofilho jonasmalacofilho changed the title Support for Asetek 690LC coolers Support for (other) Asetek 690LC coolers Mar 12, 2019

Revert to a configuration message instead of 0x14 to read status
The Krakens do not reliably respond to 0x14.

@jonasmalacofilho jonasmalacofilho force-pushed the add-second-gen-krakens branch from be92eaa to 4d14566 Mar 14, 2019

@jonasmalacofilho

This comment has been minimized.

Copy link
Owner Author

commented Apr 8, 2019

Both EVGA CLC and NZXT Kraken variants are now maintained from the 'master' branch.

@KeithMyers

This comment has been minimized.

Copy link

commented Apr 8, 2019

Thanks for the notification. Already grabbed the latest master branch and installed. Everything AOK.

@jonasmalacofilho jonasmalacofilho deleted the add-second-gen-krakens branch Apr 9, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
4 participants
You can’t perform that action at this time.