104 lines
3.0 KiB
Python
104 lines
3.0 KiB
Python
################################################################
|
|
# Install:
|
|
# * python -m pip install colorama
|
|
# * python -m pip install requests
|
|
#
|
|
# Usage:
|
|
# * MAKE SURE YOU READ THE WARNING
|
|
# * python LiquidCool.py
|
|
#
|
|
# Description:
|
|
# This script implements a simple load based control of two fans
|
|
# It first saves the original Fan settings, then starts
|
|
# monitoring the CPU and GPU load. It integrates those values
|
|
# to dampen the value changes somewhat. It then uses the maximum
|
|
# of the two values to set the fan speeds.
|
|
#
|
|
# Warning: This script is written as an example and may or may
|
|
# not kill your PC! Use at your own risk!
|
|
################################################################
|
|
|
|
import colorama
|
|
import json, requests
|
|
import time
|
|
import math
|
|
|
|
url = 'http://127.0.0.1:8085'
|
|
|
|
params = dict()
|
|
|
|
pos = lambda x, y: '\x1b[%d;%dH' % (y, x)
|
|
clear = lambda : "\033[2J\033[1;1f"
|
|
|
|
def getValue(sensorId):
|
|
params=dict(id=sensorId, action="Get")
|
|
resp = requests.post(url=url + "/Sensor", params = params, timeout=10);
|
|
result = json.loads(resp.text);
|
|
|
|
if result["result"] != "ok":
|
|
raise Exception("Server returned error:\n " + result["message"].replace("\\n", "\n").replace("\\r", ""))
|
|
if result["value"] == None:
|
|
return None;
|
|
else:
|
|
return float(result["value"])
|
|
|
|
def setValue(sensorId, sensorValue):
|
|
if sensorValue == None:
|
|
sensorValue = "null"
|
|
params=dict(id=sensorId, action="Set", value=sensorValue)
|
|
resp = requests.post(url=url + "/Sensor", params = params, timeout=10);
|
|
result = json.loads(resp.text)
|
|
if result["result"] != "ok":
|
|
raise Exception("Server returned error:\n " + result["message"].replace("\\n", "\n").replace("\\r", ""))
|
|
|
|
def draw_progressbar(x, y, description, progress):
|
|
p = '#'*math.floor(progress/5)
|
|
p1 = '-'*math.ceil((100-progress)/5)
|
|
print('{0}{1}[{2}{3}] {4}% '.format(pos(x,y), description, p, p1, math.floor(progress*100)/100), end='')
|
|
|
|
def integrate(oldval, newval):
|
|
return float(oldval)*0.8 + float(newval) * 0.2
|
|
|
|
def main():
|
|
colorama.init()
|
|
|
|
print(clear())
|
|
|
|
try:
|
|
integratedCPU = getValue("/intelcpu/0/load/0");
|
|
integratedGPU = getValue("/nvidiagpu/0/load/0");
|
|
orgFan1 = getValue("/lpc/it8620e/control/0")
|
|
orgFan2 = getValue("/lpc/it8620e/control/1")
|
|
|
|
while 1:
|
|
cpuLoad = getValue("/intelcpu/0/load/0");
|
|
gpuLoad = getValue("/nvidiagpu/0/load/0");
|
|
|
|
integratedCPU = integrate(integratedCPU, cpuLoad)
|
|
integratedGPU = integrate(integratedGPU, gpuLoad)
|
|
fanVal = max(integratedCPU, integratedGPU)
|
|
fanVal = math.floor(fanVal*0.75)
|
|
|
|
draw_progressbar(1, 1, "CPU: ", cpuLoad)
|
|
draw_progressbar(1, 2, "GPU: ", gpuLoad)
|
|
|
|
draw_progressbar(1, 3, "IGPU: ", integratedCPU)
|
|
draw_progressbar(1, 4, "IGPU: ", integratedGPU)
|
|
|
|
draw_progressbar(1, 5, "Fans: ", fanVal)
|
|
|
|
setValue("/lpc/it8620e/control/0", fanVal);
|
|
setValue("/lpc/it8620e/control/1", fanVal);
|
|
|
|
print(pos(1, 1))
|
|
time.sleep(1)
|
|
except:
|
|
print(clear())
|
|
setValue("/lpc/it8620e/control/0", orgFan1);
|
|
setValue("/lpc/it8620e/control/1", orgFan2);
|
|
raise
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main() |