You've already forked Argon-One-Daemon
All checks were successful
Argon One Daemon / Argon One Daemon (Bookworm) [arm64] (push) Successful in 11s
118 lines
2.7 KiB
Python
118 lines
2.7 KiB
Python
#!/usr/bin/python3
|
|
|
|
import smbus
|
|
import RPi.GPIO as GPIO
|
|
import os
|
|
import time
|
|
from threading import Thread
|
|
|
|
rev = GPIO.RPI_REVISION
|
|
if rev == 2 or rev == 3:
|
|
bus = smbus.SMBus(1)
|
|
else:
|
|
bus = smbus.SMBus(0)
|
|
GPIO.setwarnings(False)
|
|
GPIO.setmode(GPIO.BCM)
|
|
shutdown_pin = 4
|
|
GPIO.setup(shutdown_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
|
|
|
|
def shutdown_check():
|
|
while True:
|
|
pulsetime = 1
|
|
GPIO.wait_for_edge(shutdown_pin, GPIO.RISING)
|
|
time.sleep(0.01)
|
|
while GPIO.input(shutdown_pin) == GPIO.HIGH:
|
|
time.sleep(0.01)
|
|
pulsetime += 1
|
|
if pulsetime >= 2 and pulsetime <= 3:
|
|
os.system("reboot")
|
|
elif pulsetime >= 4 and pulsetime <= 5:
|
|
os.system("poweroff")
|
|
|
|
def get_fanspeed(tempval, configlist):
|
|
for curconfig in configlist:
|
|
curpair = curconfig.split("=")
|
|
tempcfg = float(curpair[0])
|
|
fancfg = int(float(curpair[1]))
|
|
if tempval >= tempcfg:
|
|
if fancfg < 1:
|
|
return 0
|
|
elif fancfg < 25:
|
|
return 25
|
|
return fancfg
|
|
return 0
|
|
|
|
def load_config(fname):
|
|
newconfig = []
|
|
try:
|
|
with open(fname, "r") as fp:
|
|
for curline in fp:
|
|
if not curline:
|
|
continue
|
|
tmpline = curline.strip()
|
|
if not tmpline:
|
|
continue
|
|
if tmpline[0] == "#":
|
|
continue
|
|
tmppair = tmpline.split("=")
|
|
if len(tmppair) != 2:
|
|
continue
|
|
tempval = 0
|
|
fanval = 0
|
|
try:
|
|
tempval = float(tmppair[0])
|
|
if tempval < 0 or tempval > 100:
|
|
continue
|
|
except:
|
|
continue
|
|
try:
|
|
fanval = int(float(tmppair[1]))
|
|
if fanval < 0 or fanval > 100:
|
|
continue
|
|
except:
|
|
continue
|
|
newconfig.append("{:5.1f}={}".format(tempval, fanval))
|
|
if len(newconfig) > 0:
|
|
newconfig.sort(reverse=True)
|
|
except:
|
|
return []
|
|
return newconfig
|
|
|
|
def temp_check():
|
|
fanconfig = ["70=100", "65=75", "50=50", "55=25"]
|
|
tmpconfig = load_config("/etc/argon-one.conf")
|
|
if len(tmpconfig) > 0:
|
|
fanconfig = tmpconfig
|
|
address = 0x1A
|
|
prevblock = 0
|
|
while True:
|
|
try:
|
|
tempfp = open("/sys/class/thermal/thermal_zone0/temp", "r")
|
|
temp = tempfp.readline()
|
|
tempfp.close()
|
|
val = float(int(temp) / 1000)
|
|
except IOError:
|
|
val = 0
|
|
block = get_fanspeed(val, fanconfig)
|
|
if block < prevblock:
|
|
time.sleep(30)
|
|
prevblock = block
|
|
try:
|
|
if block > 0:
|
|
bus.write_byte(address, 100)
|
|
time.sleep(1)
|
|
bus.write_byte(address, block)
|
|
except IOError:
|
|
temp = ""
|
|
time.sleep(30)
|
|
|
|
try:
|
|
t1 = Thread(target=shutdown_check)
|
|
t2 = Thread(target=temp_check)
|
|
t1.start()
|
|
t2.start()
|
|
except:
|
|
t1.stop()
|
|
t2.stop()
|
|
GPIO.cleanup()
|