Skip to content
controller software for thermaltake devices
Branch: master
Clone or download

README.md

logo

This is home to TTController, a windows service for controlling various Thermaltake RGB Plus devices.

It allows you to fully customize them by using speed controllers, which control the speed, and effects, which control the led color. Each can be enabled or disabled dynamically by using various triggers.

The source code also provides an easy way to write your own speed controller, effect or trigger.


undefined

Quick start

Install

  • Unpack latest release to a desired directory
  • Run TTController.Service.exe
  • Select Manage Service from command line menu and install the service

The service will start automatically and will create a default empty config. See Configure section on how to configure it.

Configure

  • If the service is running
    • Stop the service using either Manage Service menu, services.msc or net stop
  • Edit the config.json file located in the same directory as TTController.Service.exe
  • Start the service using either Manage Service menu, services.msc or net start

You can use Show hardware info option from the commandline menu to determine what controllers are detected and find out your port and temperature sensor identifiers to be used in config.json.

Uninstall

  • Run TTController.Service.exe
  • Select Manage Service from command line menu and uninstall the service
  • Remove the folder containing service files

Update

  • If the service is running
    • Stop the service using either Manage Service menu, services.msc or net stop
  • Remove all files but leave the config.json file
  • Unpack newest release to the same directory
  • Start the service using either Manage Service menu, services.msc or net start

Device support

Device Support Confirmed Notes
Riing Plus 12/14/20 ✔️ ✔️
Riing Trio 12/14 ✔️ ✔️
Pure Plus 12/14 ✔️ ✔️
Floe Riing RGB 240/280/360 ✔️ ✔️
Pacific PR22-D5 Plus ✔️ ✔️
Pacific W4 ✔️ ✔️
Riing Duo 12/14 ✔️
WaterRam RGB ✔️
Pacific CL360/RL360 ✔️
Pacific V-GTX/V-RTX ✔️
Pacific Lumi/Rad/R1/Fitting ✔️
Pacific W5/W6 temperature sensor unsupported
Toughpower iRGB PLUS not implemented

Plugins

Speed Controllers:

Effects:

Triggers

Devices

Config

The documentation is still WIP, if you have problems with configuration please make a new issue.

The config is by default located in config.json file. You can modify this in TTController.Service.exe.Config file by changing the value of config-file key.

Example

{
  "Profiles": [
    {
      "Name": "Default",
      "Guid": "10af9207-7e67-4581-9d13-506cad5d53c1",
      "Ports": [
        [9802, 8101, 1]
      ],
      "SpeedControllers": [
        {
          "Type": "StaticSpeedController", 
          "Config": {
            "Speed": 50,
            "Trigger": {
              "Type": "AlwaysTrigger"
            }
          }
        }
      ],
      "Effects": [
        {
          "Type": "RippleEffect",
          "Config": {
            "Length": 4,
            "Color": [255, 0, 0],
            "TickInterval": 2,
            "Trigger": {
              "Type": "OneTimeTrigger"
            }
          }
        }
      ]
    }
  ],
  "SensorConfigs": [
    {
      "Sensors": ["/intelcpu/0/temperature/8"],
      "Config": {
        "CriticalValue": 90
      }
    }
  ]
}

Documentation

Root

{
  "List of profiles"
  "Profiles": ["<Profile>"],

  "List of computer state profiles"
  "ComputerStateProfiles": ["<ComputerStateProfile>"],

  "List of port configs"
  "The values in this list are optional, if PortConfig for a port is not present"
  "the default values will be used"
  "PortConfigs": ["<PortConfig>"],

  "List of sensor configs"
  "The values in this list are optional, if SensorConfig for a sesnor is not present"
  "the default valuse will be used"
  "SensorConfigs": ["<SensorConfig"],

  "Miliseconds between temperature updates"
  "TemperatureTimerInterval": "<int>",

  "Miliseconds between speed updates"
  "DeviceSpeedTimerInterval": "<int>",

  "Miliseconds between rgb updates"
  "DeviceRgbTimerInterval": "<int>",

  "Miliseconds between log update when running in console mode"
  "LoggingTimerInterval": "<int>"
}

Profile

{
  "Name of the profile"
  "Name": "<string>",

  "Unique GUID string (8-4-4-4-12 format)"
  "Can be generated here: https://www.guidgen.com/"
  "Guid": "<string>",

  "List of port identifiers that this profile controls"
  "Ports": ["<PortIdentifier>"],

  "List of speed controllers"
  "SpeedControllers": ["<SpeedController>"],

  "List of effects"
  "Effects": ["<Effect>"]
}
Examples:
{
  "Name": "Default",
  "Guid": "10af9207-7e67-4581-9d13-506cad5d53c1",
  "Ports": [
    [9802, 8101, 3],
    [9802, 8101, 2],
    [9802, 8101, 1]
  ],
  "SpeedControllers": ["..."],
  "Effects": ["..."]
}

Speed Controller

{
  "The class name of the speed controller"
  "Type": "<string>", 

  "Config json for this speed controller, depends on controller type"
  "Must contain a 'Trigger' property"
  "Config": {}
}
Examples:
{
  "Type": "StaticSpeedController", 
  "Config": {
    "Speed": 50,
    "Trigger": {
      "Type": "AlwaysTrigger"
    }
  }
}

Effect

{
  "The class name of the effect"
  "Type": "<string>", 

  "Config json for this effect, depends on effect type"
  "Must contain a 'Trigger' property"
  "Config": {}
}
Examples:
{
  "Type": "RippleEffect",
  "Config": {
    "Length": 4,
    "Color": [255, 0, 0],
    "TickInterval": 2,
    "Trigger": {
      "Type": "OneTimeTrigger"
    }
  }
}

Trigger

{
  "The class name of the trigger"
  "Type": "<string>", 

  "Config json for this trigger, depends on trigger type"
  "Config": {}
}
Examples:
{
  "Type": "AlwaysTrigger"
}
{
  "Type": "ProcessTrigger",
  "Config": {
    "Processes": ["cmd"]
  }
}

ComputerStateProfile

{
  "State type. One of:"
  "[Boot, Shutdown, Suspend]" 
  "StateType": "<string>",

  "List of port identifiers that this profile controls"
  "Ports": ["<PortIdentifier>"],

  "Speed from 0% to 100%"
  "If not set the speed is not changed" 
  "Speed": "<int>",

  "Effect type, depends on the controller type"
  "If not set the rgb effect is not changed" 
  "See show hardware info option for avaible effect types for each controller"
  "EffectType": "<string>",

  "List of LedColor that the effect should use."
  "EffectColors": ["<LedColor>"]
}

If you want to update or add a profile with Boot type, you first need to remove <add key="boot-profile-saved" value="true" /> line or change the value to false in TTController.Service.exe.Config file and restart the service.

Examples:
{
  "StateType": "Boot",
  "Ports": [
    [9802, 8101, 3],
    [9802, 8101, 2],
    [9802, 8101, 1]
  ],
  "Speed": 35,
  "EffectByte": 25,
  "EffectColors": [
    [0, 255, 0]
  ]
}

Port Config

{
  "List of port identifiers that this config applies to"
  "Ports": ["<PortIdentifier>"],

  "Port config"
  "Config": {
    "Port name"
    "Name": "<string>",

    "Port led count"
    "LedCount": "<int>",

    "Determines how to handle led color count"
    "mismatch generated by effects"
    "One of: [DoNothing, Lerp, Trim, Copy]"
    "LedCountHandling": "<string>",

    "Led rotation/offset for rgb effects"
    "LedRotation": "<int>",

    "If true led indexes are reversed"
    "LedReverse": "<bool>"
  }
}
Examples:
{
  "Ports": [[9802, 8101, 1]],
  "Config": {
    "Name": "Top Left",
    "LedCount": 12,
    "LedCountHandling": "Lerp",
    "LedRotation": 10,
    "LedReverse": true
  }
}

Sensor Config

{
  "List of sensor identifiers that this config applies to"
  "Sensors": ["<string>"],

  "Sensor config"
  "Config": {
    "If the value of the sensor exceeds this value"
    "all fans will be set to 100% speed"
    "CriticalValue": "<float>",

    "Sensor value offset"
    "Offset": "<float>"
  }
}
Examples:
{
  "Sensors": ["/intelcpu/0/temperature/8"],
  "Config": {
    "CriticalValue": 90
  }
}

Credits

Logo based on icon by Freepik from flaticon

You can’t perform that action at this time.