Files
CarlMonitor/LibreHardwareMonitor-0.9.4/LibreHardwareMonitor/TestScripts/LiquidCool.py
2025-04-07 07:44:27 -07:00

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()