作者:康师傅摸-你丶擦_489 | 来源:互联网 | 2023-09-18 17:15
1、前记,AC86U梅林系统提供强大的功能的同时,发热也是很厉害的。加装的5V风扇,声音呼呼的,放在电视柜上感觉很吵,手头有个树莓派zero,遂想到用树莓派来做个温控风扇,同时也能
1、前记,AC86U 梅林系统 提供强大的功能的同时,发热也是很厉害的。加装的5V风扇,声音呼呼的,放在电视柜上感觉很吵,手头有个树莓派zero,遂想到用树莓派来做个温控风扇,同时也能提供一个低电压的电源给风扇。
应该刚开始对梅林系统 不太了解,第一版勾想用selenium 无ui执行抓取页面的温度数据来达到目的。但是路由器只能有一个账号单点登陆,这个方法太过笨拙。思考一下页面有温度显示,那么系统里可能有一个临时文件或者日志来存储这个温度数据,经过研究终于在/sys/devices/virtual/thermal/thermal_zone0/temp 找到到了温度的数据。既然有原始数据了,那就好办了:
1)树莓派捞取原始数据
2)通过python控制GPIO
这样就可以了。具体实现看下面的步骤....
2、因为原temp文件权限限制无法直接分享,所有编写shell脚本wd.sh读取temp温度文件,并重写到挂载的usb里面,设置10秒一次,方便其他设备使用。
while true;
do
for wd in `cat /sys/devices/virtual/thermal/thermal_zone0/temp`
do
echo $wd > /tmp/mnt/sda1/temp
sleep 10
done
done
nohup ./tmp/home/root/wd.sh & # 后台运行wd.sh
3、在树莓派zero中挂载路由器smb文件夹,并且加入到开机启动中: 命令写到 /etc/rc.local
sudo mount -t cifs //10.1.1.1/sda1 /home/ac86_smb -o username=**,password=**@123,vers=1.0
4、编写python脚本控制gpio输出,gpio输出的电压虽然是3.3v,但是直接接风扇,风扇转不起来,可能是电流太小,所以加了一个两组3.3v触发的继电器,使用zero的3.3v针脚通过继电器常来给电。python脚本通过gpio控制继电器是否触发。
风扇3.3v供电,比usb的5v静音很多
# -*- coding: utf-8 -*-
from loguru import logger as do_log
import time,os,random
import RPi.GPIO as GPIO
base_dir = os.path.split(os.path.split(os.path.abspath(__file__))[0])[0]
LOG_FILE_PATH = os.path.join(os.path.join(os.path.join(base_dir,"pi"),"logs"),"all.log")
do_log.add(LOG_FILE_PATH,format="{time}|{level}|{message}",rotation="1 week")
GPIO.setmode(GPIO.BOARD)
GPIO.cleanup()
IN1 = 11
IN2 = 12
GPIO.setup(IN1, GPIO.OUT)
GPIO.setup(IN2, GPIO.OUT)
num = random.randint(11, 12)
while True:
with open(‘/home/ac86_smb/temp‘,"r",encoding="utf-8") as f:
wd =f.read()
if len(wd)==0:
continue
else:
wd = int(wd)/1000
if wd >70:
do_log.info(f"CPU {wd}°C , open the two fan")
GPIO.output(IN1, GPIO.HIGH)
GPIO.output(IN2, GPIO.HIGH)
do_log.info(f"CPU温度{wd}°C , keep two fan runing")
time.sleep(300)
if wd >= 55 and wd <=70:
if num == 11:
do_log.info(f"CPU {wd}°C, open the one fan of 1#")
GPIO.output(IN1, GPIO.HIGH)
GPIO.output(IN2, GPIO.LOW)
do_log.info(f"CPU温度{wd}°C , keep one fan runing")
else:
do_log.info(f"CPU {wd}°C, open the one fan of 2#")
GPIO.output(IN2, GPIO.HIGH)
GPIO.output(IN1, GPIO.LOW)
do_log.info(f"CPU温度{wd}°C , keep one fan runing")
time.sleep(300)
elif wd <55:
do_log.info(f"CPU温度{wd}°C , keep runing 5 min")
time.sleep(300)
do_log.info(f"CPU温度{wd}°C , close the fan")
GPIO.output(IN1, GPIO.LOW)
GPIO.output(IN2, GPIO.LOW)
# 温度降到55左右就降不下去了,所以小于55,就关闭风扇,等待10分钟再执行
time.sleep(600)
# 更换风扇运行
if num == 11:
num =12
else:
num = 11
time.sleep(5)
GPIO.cleanup()
5、再写一个进程守护的shell脚本开机启动,保证python脚本始终后台运行。
while true;
do
server=`ps aux | grep python3| grep -v wd.py`
if [ ! "$server" ]; then
./home/chick_wd/run.sh
fi
sleep 5
done
华硕路由器AC86u,加装树莓派zero温控