dht11 - ¿Conseguir la temperatura de la CPU usando Python?
dht11 raspberry pi 3 python (10)
¿Cómo recupero la temperatura de mi CPU usando Python? (Suponiendo que estoy en Linux)
Como alternativa, puede instalar el paquete lm-sensores, luego instalar PySensors (un enlace python para libsensors).
Cuidar el pyspectator
en pip
Requiere python3
>>> import psutil
>>> psutil.sensors_temperatures()
{''acpitz'': [shwtemp(label='''', current=47.0, high=103.0, critical=103.0)],
''asus'': [shwtemp(label='''', current=47.0, high=None, critical=None)],
''coretemp'': [shwtemp(label=''Physical id 0'', current=52.0, high=100.0, critical=100.0),
shwtemp(label=''Core 0'', current=45.0, high=100.0, critical=100.0),
shwtemp(label=''Core 1'', current=52.0, high=100.0, critical=100.0),
shwtemp(label=''Core 2'', current=45.0, high=100.0, critical=100.0),
shwtemp(label=''Core 3'', current=47.0, high=100.0, critical=100.0)]}
Dependiendo de su distribución de Linux, puede encontrar un archivo en /proc
que contiene esta información. Por ejemplo, esta página sugiere /proc/acpi/thermal_zone/THM/temperature
.
Hay una nueva API de "zona térmica de sysfs" (vea también el artículo LWN y el documento del kernel de Linux ) que muestra temperaturas por debajo de
/sys/class/thermal/thermal_zone0/temp
Las lecturas están en milésimas de grados Celsius (aunque en los núcleos más antiguos, pueden haber sido solo grados C).
La lectura de archivos en / sys / class / hwmon / hwmon * / temp1_ * funcionó para mí, pero AFAIK no existen estándares para hacerlo de manera limpia. De todos modos, puedes intentar esto y asegurarte de que proporciona la misma cantidad de CPU que muestra la utilidad cmdline de " sensores ", en cuyo caso puedes asumir que es confiable.
from __future__ import division
import os
from collections import namedtuple
_nt_cpu_temp = namedtuple(''cputemp'', ''name temp max critical'')
def get_cpu_temp(fahrenheit=False):
"""Return temperatures expressed in Celsius for each physical CPU
installed on the system as a list of namedtuples as in:
>>> get_cpu_temp()
[cputemp(name=''atk0110'', temp=32.0, max=60.0, critical=95.0)]
"""
# http://www.mjmwired.net/kernel/Documentation/hwmon/sysfs-interface
cat = lambda file: open(file, ''r'').read().strip()
base = ''/sys/class/hwmon/''
ls = sorted(os.listdir(base))
assert ls, "%r is empty" % base
ret = []
for hwmon in ls:
hwmon = os.path.join(base, hwmon)
label = cat(os.path.join(hwmon, ''temp1_label''))
assert ''cpu temp'' in label.lower(), label
name = cat(os.path.join(hwmon, ''name''))
temp = int(cat(os.path.join(hwmon, ''temp1_input''))) / 1000
max_ = int(cat(os.path.join(hwmon, ''temp1_max''))) / 1000
crit = int(cat(os.path.join(hwmon, ''temp1_crit''))) / 1000
digits = (temp, max_, crit)
if fahrenheit:
digits = [(x * 1.8) + 32 for x in digits]
ret.append(_nt_cpu_temp(name, *digits))
return ret
Puede probar el módulo PyI2C , puede leer directamente desde el kernel.
Recientemente implementé esto en psutil solo para Linux.
from pyspectator import Cpu
from time import sleep
cpu = Cpu(monitoring_latency=1)
while True:
print (cpu.temperature)
sleep(1)
Si su Linux es compatible con ACPI, leer pseudoarchivo /proc/acpi/thermal_zone/THM0/temperature
(la ruta puede ser diferente, sé que es /proc/acpi/thermal_zone/THRM/temperature
en algunos sistemas) debería hacerlo. Pero no creo que exista una manera que funcione en todos los sistemas Linux del mundo, ¡así que tendrás que ser más específico sobre qué Linux tienes exactamente! -)
Sysmon funciona bien. Bien hecho, hace mucho más que medir la temperatura de la CPU. Es un programa de línea de comandos y registra todos los datos que mide en un archivo. Además, es de código abierto y está escrito en python 2.7.
Py-cputemp parece hacer el trabajo.