Die folgenden Aufgabe beziehen sich auf einen Minicomputer Raspberry Pi B2.
An dem Pi sind Temperatursensoren über das 1-wire-Protokoll angeschlossen. Derzeit habe ich 30 Sensoren dran, es werden noch ca. 20 mehr. Die Sensoren identifizieren sich dem Pi gegenüber mit ihrer Seriennummer.
Zur Auswertung kommt ein Programm (oder sagt man hier Script?) das ich im Anhang mal mitliefer. Die Ausgabe ist so:
Sensor ID | Temperatur
-----------------------------
28-000006375540 | 21.2 °C
28-000006377b60 | 21.1 °C
28-000006376a30 | 21.2 °C
Nun sagt die Seriennummer nicht viel aus, ich hätte gerne einen Klartextnamen. Ich könnte nun per If-Abfrage im # print temperature Block jeden Wert (Seriennummer) abfragen und in der Ausgabe durch einen Klarnamen (z.B. "Dachboden") ersetzten. Nur würde dann die Schleife nicht nur (max) 50 mal durchlaufen, sondern bei jedem Durchlauf würden noch mal 50 If-Abfragen dazukommen. Gibt es da eine bessere Lösung?
Thomas
Code: Alles auswählen
# Copyright (c) 2013-2015 by Georg Kainzbauer <http://www.gtkdb.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# import sys module
import sys
import time
# open 1-wire slaves list for reading
file = open('/sys/devices/w1_bus_master1/w1_master_slaves')
# read 1-wire slaves list
w1_slaves = file.readlines()
# close 1-wire slaves list
file.close()
# print header for results table
now = time.localtime()
print(time.strftime("%d.%m.%Y %H.%M"))
print("Sensor ID | Temperatur")
print("-----------------------------")
# repeat following steps with each 1-wire slave
for line in w1_slaves:
# extract 1-wire slave
w1_slave = line.split("\n")[0]
# open 1-wire slave file
file = open('/sys/bus/w1/devices/' + str(w1_slave) + '/w1_slave')
# read content from 1-wire slave file
filecontent = file.read()
# close 1-wire slave file
file.close()
# extract temperature string
stringvalue = filecontent.split("\n")[1].split(" ")[9]
# convert temperature value
temperature = float(stringvalue[2:]) / 1000
# print temperature
fd=open('Messwerte.txt', "a")
print(str(w1_slave) + " | %5.1f °C" % temperature)
fd.write(time.strftime("%d.%m.%Y %H.%M") +"; "+ str(w1_slave) + " ; %5.1f °C" % temperature)
fd.write('\n')
fd.close
# quit python script
sys.exit(0)