You've already forked Argon-One-Daemon
Inital Commit
All checks were successful
Argon One Daemon / Argon One Daemon [arm64] (push) Successful in 33s
All checks were successful
Argon One Daemon / Argon One Daemon [arm64] (push) Successful in 33s
This commit is contained in:
117
root/usr/lib/argon-one/daemon
Normal file
117
root/usr/lib/argon-one/daemon
Normal file
@@ -0,0 +1,117 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user