Skip to content

Commit ff7d539

Browse files
committed
LED change from green to yellow to red for temp
1 parent 14158f1 commit ff7d539

1 file changed

Lines changed: 34 additions & 12 deletions

File tree

examples/automatic.py

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
#!/usr/bin/env python3
22
from fanshim import FanShim
3+
from threading import Lock
4+
import colorsys
35
import psutil
46
import argparse
57
import time
68
import signal
79
import sys
810

911

12+
T_MIN = 35
13+
T_MAX = 95
14+
15+
1016
parser = argparse.ArgumentParser()
1117
parser.add_argument('--threshold', type=float, default=-1, help='Temperature threshold in degrees C to enable fan')
1218
parser.add_argument('--hysteresis', type=float, default=-1, help='Distance from threshold before fan is disabled')
@@ -29,6 +35,20 @@ def clean_exit(signum, frame):
2935
sys.exit(0)
3036

3137

38+
def update_led_temperature(temp):
39+
led_busy.acquire()
40+
temp = float(temp)
41+
temp -= args.off_threshold
42+
temp /= float(args.on_threshold - args.off_threshold)
43+
temp = max(0, min(1, temp))
44+
temp = 1.0 - temp
45+
temp *= 120.0
46+
temp /= 360.0
47+
r, g, b = [int(c * 255.0) for c in colorsys.hsv_to_rgb(temp, 1.0, 1.0)]
48+
fanshim.set_light(r, g, b)
49+
led_busy.release()
50+
51+
3252
def update_led(state):
3353
if args.noled:
3454
return
@@ -57,7 +77,7 @@ def set_fan(status):
5777
changed = False
5878
if status != enabled:
5979
changed = True
60-
update_led(status)
80+
# update_led(status)
6181
fanshim.set_fan(status)
6282
enabled = status
6383
return changed
@@ -82,7 +102,12 @@ def set_automatic(status):
82102
fanshim.set_fan(False)
83103
armed = True
84104
enabled = False
105+
led_busy = Lock()
106+
enable = False
107+
is_fast = False
85108
last_change = 0
109+
signal.signal(signal.SIGTERM, clean_exit)
110+
86111

87112
t = get_cpu_temp()
88113
if t >= args.threshold:
@@ -99,25 +124,19 @@ def release_handler(was_held):
99124
elif not armed:
100125
set_fan(not enabled)
101126

102-
103127
@fanshim.on_hold()
104128
def held_handler():
129+
global led_busy
105130
if args.noled:
106-
return
131+
return
132+
led_busy.acquire()
107133
for _ in range(3):
108134
fanshim.set_light(0, 0, 255)
109135
time.sleep(0.04)
110136
fanshim.set_light(0, 0, 0)
111137
time.sleep(0.04)
112-
update_led(enabled)
113-
114-
115-
signal.signal(signal.SIGTERM, clean_exit)
138+
led_busy.release()
116139

117-
update_led(fanshim.get_fan())
118-
enable = False
119-
is_fast = False
120-
last_change = 0
121140

122141
try:
123142
while True:
@@ -126,7 +145,7 @@ def held_handler():
126145
was_fast = is_fast
127146
is_fast = (int(f.current) == int(f.max))
128147
if args.verbose:
129-
print("Current: {:05.02f} Target: {:05.02f} Freq {: 5.02f} Automatic: {} On: {}".format(t, args.threshold, f.current / 1000.0, armed, enabled))
148+
print("Current: {:05.02f} Target: {:05.02f} Freq {: 5.02f} Automatic: {} On: {}".format(t, args.off_threshold, f.current / 1000.0, armed, enabled))
130149

131150
if args.preempt and is_fast and was_fast:
132151
enable = True
@@ -139,6 +158,9 @@ def held_handler():
139158
if set_fan(enable):
140159
last_change = t
141160

161+
if not args.noled:
162+
update_led_temperature(t)
163+
142164
time.sleep(args.delay)
143165
except KeyboardInterrupt:
144166
pass

0 commit comments

Comments
 (0)