-
Notifications
You must be signed in to change notification settings - Fork 1
/
fancontrol.yaml
116 lines (110 loc) · 5.53 KB
/
fancontrol.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
---
#sample configuration file, should be located at /etc/fancontrol.yaml
# /sys/class/hwmon node declarations, uses the 'name' file content (/sys/class/hwmonX/name)
# to determine proper hwmon path for binding as hwmonX are not persistent
#
# 'drivetemp' nodes binding is performed in a different way.
# As they have the same name additional options must be provided:
# name - assigns a unique name for the following binding
# keyPath - relative attribute path on sysfs that points to the value to bind,
# it can be either a regular file or a directory. The file entry will use its content to match,
# the directory entry will expect child file/directory name to match
# default value: "device/wwid"
# bind - key value to bind
# This approach is supported for any arbitrary node with a non-unique name, e.g 'nvme'
hwmon:
# - it8665
# - k10temp
# - amdgpu
# - drivetemp: { name: dt_hdd1, bind: naa.5000cca25444276b }
# - drivetemp: { name: dt_hdd2, bind: naa.5000cca25444555c }
# - drivetemp: { name: dt_ssd, keyPath: "device/model", bind: "Samsung SSD 850" }
# - drivetemp: { name: dt_hdd3, keyPath: "device/scsi_device", bind: "2:0:0:0" }
# Sensor binding
# Sensor types:
# 1. hwmon node. Contain attributes:
# type - points to the hwmon entry declared in the above section
# bind - points to the file name which should be read, e.g. 'temp1' will represent
# /sys/class/hwmonX/temp1_input
# 2. shell_cmd, uses shell command to retrieve sensor data, the command output format should be
# an integer value of temperature in degree units.
sensors:
# - cpu: { type: it8665, bind: temp1 }
# - mb: { type: it8665, bind: temp2 }
# - wd12: { type: shell_cmd, bind: "hddtemp /dev/sdd | tail -c 6 | head -c -4" }
# - wd8: { type: shell_cmd, bind: "hddtemp /dev/sdc | tail -c 6 | head -c -4" }
# - hdd1: { type: dt_hdd1, bind: temp1 }
# - hdd2: { type: dt_hdd2, bind: temp1 }
# - ssd: { type: dt_ssd, bind: temp1 }
# PWM channel binding
# type: hwmon node entry, defined in 'hwmon' section
# bind: points to the file name which will be used for control, e.g. 'pwm1' will represent
# /sys/class/hwmonX/pwm1
# mode: 'dc' - DC channel mode, 'pwm' - PWM channel mode, default - no change
# minpwm, maxpwm: allowed PWM range, corresponds to the range of used fan,
# could be found experimentally
# fan_stop: boolean option, if true, the fan will be completely stopped
# if the temperature getting smaller than the lowest value defined.
# If set to true, implicitly defines fan_stop_hysteresis = 3.
# Default value: false
# fan_stop_hysteresis: fan start/stop hysteresis value in degrees Celsius,
# e.g. if controller defines lowest temperature setting as 50 and hysteresis equals to 5,
# the fan will be stopped after reaching 45 degrees and then will be started at 50 degrees.
# This item also implicitly defines fan_stop = true.
# Default value: 3
pwms:
# - cpu_main: { type: it8665, bind: pwm1, mode: dc, minpwm: 110, maxpwm: 255 }
# - cpu_aux: { type: it8665, bind: pwm6, mode: pwm, minpwm: 30, maxpwm: 230 }
# - cha: { type: it8665, bind: pwm2, mode: dc, minpwm: 90, maxpwm: 255, fan_stop: true }
# Controller binding
# Links sensor declarations to pwm declarations with defined control algorithm
# Can link multiple sensors to the multiple pwms.
# sensor: Sensor binding entry. Can be multiple, highest temperature will be used as a reference
# pwm: PWM channel binding entry. Can be multiple, each pwm will be controlled according to the
# allowed PWM range, highest value is used in the case of using multiple binding to the same pwm channel
# mode: control algorithm, possible values:
# 1. two_point - simple 2 point curve transformation
# 2. multi_point - arbitrary amount of approximation points
# 3. pi - proportional-integral control algorithm
#
# poll: polling options, can contain:
# 1. time - sampling time in seconds('s' suffix or absent)
# or milliseconds('ms' suffix), default value = 1s
# 2. ma_samples - amount of samples for moving average sensor reading mode, disabled if not exist
#
# set: special options for selected control algorithm (mode)
# 1. For 'two_point' it contains min and max allowed temperature: 'a', 'b'
# - min temperature maps to the 'minpwm' value
# - max temperature maps to the 'maxpwm' value
#
# 2. For "multi_point' it contains the points array (arbitrary amount of points),
# each point contain temperature and pwm value mapping,
# pwm value is defined in percents between minpwm and maxpwm value, e.g
# if minwm=100, maxpwm=200 the point {50: 30} will declare that at 50C
# the raw pwm value should be 130
#
# 3. For 'pi' it contains:
# t - desired temperature setting
# kp - proportional coefficient
# ki - integral coefficient
# max_i - maximum allowed value for I component in percents, default value = 50
controllers:
# - cpu: { sensor: cpu, pwm: { cpu_main, cpu_aux, cha }, mode: two_point,
# poll: { time: 1s, ma_samples: 8 }, set: { a: 50, b: 78 }
# }
# - cha1: { sensor: { wd8, wd12 }, pwm: cha, mode: pi, poll: { time: 2s, ma_samples: 8 },
# set: { t: 50, kp: 2, ki: 0.1, max_i: 60 }
# }
# - cha2: { sensor: wd4, pwm: cha, mode: multi_point, poll: 30s,
# set: {{ 40 : 0 }, { 50 : 50 }, { 60 : 100 }}
# }
# - cha3: { sensor: { hdd1, hdd2, ssd }, pwm: cha, mode: pi, poll: { time: 2s, ma_samples: 8 },
# set: { t: 50, kp: 2, ki: 0.1, max_i: 75 }
# }
# - aux: { sensor: cpu, pwm: cha , mode: two_point, poll: 5s,
# set: { a: 40, b: 75 }
# }
# - cpu_multi: { sensor: cpu, pwm: { cpu_main, cpu_aux, cha }, mode: multi_point,
# poll: { time: 1s, ma_samples: 8 },
# set: {{ 40 : 0 }, { 55 : 20 }, { 78 : 100 }}
# }