使用 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 分钟截断一次日志文件。