Skip to content

NZXT H1 V2 #449

@ghost

Description

I've recently upgraded my NZXT H1 to the V2 revision due airflow concerns and sadly discovered that the AIO cooling solution is now bound to an internal Smart Device instead of the usual fan/pump motherboard headers. The hub is connected via a USB 2.0 header an powered using a SATA connector. It does have three headers, two for the fans (a 140 mm rad fan and a 92 mm GPU exhaust one) and one for the AIO pump. Tested it using NZXT CAM and apparently only fans speeds can be be changed, the pump is greyed out. Instead readings for both fans and pump speeds are available. I've tried sniffing the USB traffic using a Windows VM but didn't get a lot out of it: opening CAM spits out some initialization stuff but then there was nothing I could do in the interface. The various options did not apply and no USB traffic was sent at all... I think CAM went nuts due to both CPU and GPU temps being unknown in the VM. I might try installing Windows on bare metal later.

Anyway, I did a quick guess and added the device to the Smart Device V2s as

(0x1e71, 0x2015, None, 'NZXT H1 V2', {
     'speed_channel_count': 2,
     'color_channel_count': 0
})

then prevented the initialization from parsing LEDs as there are none

parsers = {b'\x11\x01': parse_firm_info}
if self.product_id not in [0x2015]:
    parsers[b'\x21\x03']: parse_led_info
self._read_until(parsers)

Seems to be working fine, it does initialize and I can write/read both fan speeds. This is just a quick PoC, it should probably have its own implementation as it is a mix of both a Smart Device V2 and an AIO cooler (a rebranded Kraken I guess?).

$ liquidctl initialize
NZXT H1 V2
└── Firmware version    1.10.0

$ liquidctl status
NZXT H1 V2
├── Fan 1 control mode     PWM  
├── Fan 1 duty              60  %
├── Fan 1 speed           1282  rpm
├── Fan 2 control mode     PWM  
├── Fan 2 duty              60  %
└── Fan 2 speed           1293  rpm

Device type: Smart Device with AIO and fan headers
Product page: https://nzxt.com/product/h1
First-party software: NZXT CAM
Other commonly used tools: None

The device appears to support the following features:

  • monitoring of temperatures or other environment sensors: Maybe?
  • monitoring of fan or pump speeds or duty cycles: Yes
  • monitoring of voltages, currents or power: No
  • configurable fan or pump speeds: Yes
  • configurable voltages or current/power limits: No
  • configurable lighting of embedded LEDs: No
  • configurable lighting of accessories like RGB fans or LED strips: No

The device is physically connected to the host system using:

  • USB: No
  • PCI-E: No
  • onboard the motherboard: USB 2.0 header
  • other: No

The device uses which protocols to communicate with the host system:

  • HID: No
  • USB: Yes
  • I²C: No
  • SMBus: No
  • other: No
$ lsusb -d 1e71:2015 -v
Bus 001 Device 004: ID 1e71:2015 NZXT NZXT H1 V2
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x1e71 NZXT
  idProduct          0x2015 
  bcdDevice            1.0a
  iManufacturer           1 NZXT, Inc.
  iProduct                2 NZXT H1 V2
  iSerial                 3 0D022013ABABBC855F8F1894
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0029
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.00
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     236
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  bNumConfigurations      0
Device Status:     0x0001
  Self Powered

Finally, I can help with:

  • testing changes on Linux: Yes
  • testing changes on Windows: Yes
  • testing changes on Mac OS: No
  • attempting to capture USB traffic: Yes1
  • attempting to capture I²C/SMBus traffic: Yes1
  • analyzing traffic data: Yes1
  • documenting the protocol: Yes
  • implementing the driver: Yes

1assuming documentation and/or assistance will be provided.

Metadata

Metadata

Assignees

No one assigned

    Labels

    new deviceRequest for support of a new device

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions