Poste mal einfach die komplette Ausgabe, nicht nur die Zeile mit dem t=.
Falls t durch den Treiber richtig interpretiert wird, so müsste der Wert auch negativ sein, wenn negative Temperaturen (°C) gemessen werden.
Was ich jetzt an Informationen gesammelt habe:
- Ausgabe der Rohdaten > 32767, dann ist der Wert negativ
- In dem Fall Wert - 65536
- Dann durch 16 teilen
Code
def convert(value):
if value > 2 ** 15 - 1:
return (value - 2**16) / 16
else:
return value / 16
Das Beispiel habe ich hier her: https://www.raspberrypi.org/forums/viewtop…t=91982#p643987
Sein Beispiel gibt aber auch die korrekte Temperatur aus.
Falls die Ausgabe richtig wäre, könnte man einfach mit regex arbeiten:
Python
import re
from pathlib import Path
OUTSIDE = Path('/sys/bus/w1/devices/10-0008034b525c/w1_slave')
INSIDE = Path('/sys/bus/w1/devices/10-0008034c24c7/w1_slave')
TEMP_REGEX = re.compile(r"t\=(-?\d+)$", re.MULTILINE)
def get_temp(sensor_path):
"""
Read temperature from one wire sensors.
"""
try:
value = sensor_path.read_bytes()
except (FileNotFoundError, PermissionError):
raise ValueError(f"Could not read file {sensor_path}")
match = TEMP_REGEX.search(value)
if match:
return int(match.group(1)) / 1000
raise ValueError(f"Could not find t= in file {sensor_path}")
if __name__ == "__main__":
print("Außentemperatur:", get_temp(OUTSIDE), "°C")
print("Innentemperatur:", get_temp(INSIDE), "°C")
Alles anzeigen
Für crc gibt es auch Module, aber wichtig ist ja erstmal die korrekte Umrechnung des Messwerts.