Hallo zusammen, mithilfe eines Raspberry Pi's und einem Temperatursensor DS18B20 wollte ich mir (zu Übungszwecken) einen Temperatur-Datenlogger basteln. Aus dem Internet habe ich mir noch ein Python-basiertes Skript ausgesucht und dieses leicht modifiziert, um mir das Ganze dann bequem auf der Konsole ausgeben zu lassen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #!/usr/bin/python3 # -*- coding: utf-8 -*- import time, sys, os from datetime import datetime sensor = '/sys/bus/w1/devices/28-031683c997ff/w1_slave' def read_temp(var): loc = '/sys/bus/w1/devices/' + dev + '/w1_slave' with open(loc) as tf: return float(tf.read().split('\n')[1].split(' ')[9][2:]) / 1000.0 def loop(var): '''Starts temperature logging until user interrupts.''' while True: t = read_temp(dev) if t: print('Current temperature: {0:.3f} °C'.format(t)) sys.stdout.flush() time.sleep(5) if __name__ == '__main__': var = [d for d in os.listdir('/sys/bus/w1/devices') if d != 'w1_bus_master1'][0] try: loop(var) except KeyboardInterrupt: print('Temperaturmessung wird beendet') except Exception as e: print(str(e)) sys.exit(1) finally: print('Programm wird beendet.') sys.exit(0) |
Mir fiel auf, dass die Messzeiten - also die definierten Intervalle über time.sleep(x), in diesem Falle 5 s - nicht ganz der Realität entsprechen: Tatsächlich scheint das Programm die Temperatur in verzögerten Abständen zu messen. Wenn ich beispielsweise die Messabstände auf time.sleep(1) setze, misst das Programm in einem Intervall von ca. 1,7 s statt 1,0 s. Sofern die Abstände auf 10 Sekunden oder mehr erhöht werden, misst das Programm ebenfalls mit einer rel. Ungenauigkeit. Mit einer Stoppuhr kann das schnell nachgewiesen werden oder beispielsweise über die begleitende Ausgabe der Uhrzeit mithilfe von "time.strftime('%H:%M:%S')". Warum misst das Programm in ungenauen Zeitabständen und wie könnte ich die Messzeit möglichst genau (also auf die Sekunde) definieren?