使用 Python 将 CPU-Temp 记录到 .csv 文件 (Raspberry-Pi) 时发生奇怪的故障
Strange failure while logging CPU-Temp with Python to a .csv-File (Rasbperri-Pi)
我试着用风扇安装我的 Raspberry pi。它应该每 5 分钟记录一次温度,并使用 Python 脚本将其写入 .csv 文件。如果温度高于 52 摄氏度,则应打开 USB 集线器,如果低于该值,则将其关闭。现在,我创建了一个小网站,以查看我记录的数据。这是我的问题:正如您在屏幕截图中看到的,对于相同的值,它有时会告诉我 [HOT] 有时 [OK]?此外,它并没有像希望它分离的那样分离数据(over/under 52 摄氏度)。
Screenshot from my little website(这只显示我的 .csv 文件)
我的 .py 代码:
from gpiozero import CPUTemperature
from time import sleep, strftime, time
from datetime import datetime, timedelta
from threading import Timer
import matplotlib.pyplot as plt
v=datetime.today()
w = v.replace(day=v.day, hour=1, minute=0, second=0, microsecond=0) + timedelta(days=1)
delta_t=w-v
secs=delta_t.total_seconds()
cpu = CPUTemperature()
plt.ion()
x = []
y = []
def write_tempHot(temp):
with open("/var/www/html/cpuTemp.csv", "a") as log:
log.write("{0}{1}\n".format(strftime("%Y-%m-%d %H:%M:%S = [HOT] "),str(temp)))
def write_tempLow(temp):
with open("/var/www/html/cpuTemp.csv", "a") as log:
log.write("{0}{1}\n".format(strftime("%Y-%m-%d %H:%M:%S = [OK] "),str(temp)))
def clearTemp():
filename = "/var/www/html/cpuTemp.csv"
# opening the file with w+ mode truncates the file
f = open(filename, "w+")
f.close()
while True:
temp = cpu.temperature
if temp > 52:
temp = cpu.temperature
write_tempHot(temp)
plt.pause(300)
t = Timer(secs, clearTemp)
t.start()
else:
temp = cpu.temperature
write_tempLow(temp)
plt.pause(300)
t = Timer(secs, clearTemp)
t.start()
(也不介意 clearTemp() 函数,我想每天清除一次 .csv 文件)
有没有人知道为什么结果那么奇怪?
问候并非常感谢!
你的比较是
if temp > 52
什么时候应该
if temp >= 52.0
否则你的体温 Hi 只有在 53C 或以上时才会匹配。
我也会使用 time.sleep()
而不是 plt.pause()
。
对于您的日志文件,您有两个函数可以写入您的日志文件,我会用一个代替:
def write_log(temp):
fmt = """{when} = [{option}] {temp}"""
datefmt = """%Y-%m-%d %H:%M:%S"""
option = "OK"
with open("/var/www/html/cpuTemp.csv", "a") as log:
when = datetime.now().strftime(datefmt)
if temp >= 52.0:
option = "HOT"
log.write(fmt.format(when=when, option=option, temp=temp))
最后,我不明白你为什么要每 5 分钟截断一次日志文件。
我试着用风扇安装我的 Raspberry pi。它应该每 5 分钟记录一次温度,并使用 Python 脚本将其写入 .csv 文件。如果温度高于 52 摄氏度,则应打开 USB 集线器,如果低于该值,则将其关闭。现在,我创建了一个小网站,以查看我记录的数据。这是我的问题:正如您在屏幕截图中看到的,对于相同的值,它有时会告诉我 [HOT] 有时 [OK]?此外,它并没有像希望它分离的那样分离数据(over/under 52 摄氏度)。
Screenshot from my little website(这只显示我的 .csv 文件)
我的 .py 代码:
from gpiozero import CPUTemperature
from time import sleep, strftime, time
from datetime import datetime, timedelta
from threading import Timer
import matplotlib.pyplot as plt
v=datetime.today()
w = v.replace(day=v.day, hour=1, minute=0, second=0, microsecond=0) + timedelta(days=1)
delta_t=w-v
secs=delta_t.total_seconds()
cpu = CPUTemperature()
plt.ion()
x = []
y = []
def write_tempHot(temp):
with open("/var/www/html/cpuTemp.csv", "a") as log:
log.write("{0}{1}\n".format(strftime("%Y-%m-%d %H:%M:%S = [HOT] "),str(temp)))
def write_tempLow(temp):
with open("/var/www/html/cpuTemp.csv", "a") as log:
log.write("{0}{1}\n".format(strftime("%Y-%m-%d %H:%M:%S = [OK] "),str(temp)))
def clearTemp():
filename = "/var/www/html/cpuTemp.csv"
# opening the file with w+ mode truncates the file
f = open(filename, "w+")
f.close()
while True:
temp = cpu.temperature
if temp > 52:
temp = cpu.temperature
write_tempHot(temp)
plt.pause(300)
t = Timer(secs, clearTemp)
t.start()
else:
temp = cpu.temperature
write_tempLow(temp)
plt.pause(300)
t = Timer(secs, clearTemp)
t.start()
(也不介意 clearTemp() 函数,我想每天清除一次 .csv 文件)
有没有人知道为什么结果那么奇怪? 问候并非常感谢!
你的比较是
if temp > 52
什么时候应该
if temp >= 52.0
否则你的体温 Hi 只有在 53C 或以上时才会匹配。
我也会使用 time.sleep()
而不是 plt.pause()
。
对于您的日志文件,您有两个函数可以写入您的日志文件,我会用一个代替:
def write_log(temp):
fmt = """{when} = [{option}] {temp}"""
datefmt = """%Y-%m-%d %H:%M:%S"""
option = "OK"
with open("/var/www/html/cpuTemp.csv", "a") as log:
when = datetime.now().strftime(datefmt)
if temp >= 52.0:
option = "HOT"
log.write(fmt.format(when=when, option=option, temp=temp))
最后,我不明白你为什么要每 5 分钟截断一次日志文件。