ich bin Python Anfänger und entschuldige mich schon mal für die Frage aber ich hänge seit über einer Woche an einem Problem.
Ich habe an einen Raspi einen DHT11 angeschlossen und möchte die Messwerte über einen längeren Zeitraum zunächst erstmal in eine Datei schreiben.
Alles andere später.
Nun hat es sich leider herausgestellt, dass der DHT einige Ausreißer-werte liefert. Diese möchte ich gerne ausfiltern. Dazu soll der zweite Wert auf Plausibilität verglichen werden und im Zweifelsfall aus den Werten 1 und 3 interpoliert werden. Das Programm ist bei weitem noch nicht fertig. Ich weiß, dass weder der erste noch der dritte Werte geprüft werden. Darum geht es aber nicht.
Meine Frage ist jetzt, wie ich es hin bekomme, ein Array zu basteln, was diese Aufgabe erfüllen kann. Bei den unten aufgeführten Programm bekomme ich die folgende Fehlermeldung:
======================= RESTART: /home/pi/temp_hum.py =======================
Traceback (most recent call last):
File "/home/pi/temp_hum.py", line 37, in <module>
lf = float(lf)
TypeError: 'float' object does not support item assignment
>>>
----------------------------------------------------------------------------------------------------------------------------------------------------
Der Programmcode lautet folgendermaßen:
Code: Alles auswählen
#!/usr/bin/python
import Adafruit_DHT, time, sys
import numpy as np
try:
d = open("TempWerte0001.csv", "w")
except:
print("Dateizugriff nicht möglich!")
sys.exit(0)
d.close
sensor = Adafruit_DHT.DHT11
pin = 4
zaehler = 1
hz = 1 # Hilfszähler für die Liste.
lf1 = [0, 0, 0]
temp1 = [0, 0, 0]
while True:
#Localtime
lt = time.localtime()
# 3 Werte, im Abstand von 10 sec. holen, in einer Liste mit Zähler speichern
# und anschließend vergleichen
lf = np.array([])
temp = np.array ([])
for i in range(3):
lf, temp = Adafruit_DHT.read_retry(sensor, pin)
lf[i] = float(lf)
temp[i] = float(temp)
print ("i =", i, "x =",lf[i], "y = ", temp[i])
# 10 Sekunden warten
time.sleep(10)
# Mittleren Wert Wert vergleichen und bei plausiblen Werten in lf3, temp3 überführen und in Datei schreiben
if lf[2] > 100.0:
lf3 = lf[1] + lf[3] / 2
temp3 = temp1[1] + temp[3] / 2
lf[2] = lf[3]
temp[2] = lf[3]
else:
lf3 = lf[2]
temp3 = temp[2]
# Ausgeben
Datum = str(lt[2]) + "." + str(lt[1]) + "." + str(lt[0])
Uhrzeit = str(lt[3]) + ":" + str(lt[4]) + ":" + str(lt[5])
a = str(zaehler) + ";" + Datum + ";" + Uhrzeit + ";" + str(temp3) + ";" + str(lf3)
print (" ================= Werte welche in die Datei geschrieben werden ===============")
print(a)
print ("===============================================================================")
# Werte in Datei schreiben
d = open("TempWerte0001.csv", "a")
d.write(str(zaehler) + ";" + str(Datum) + ";" + str(Uhrzeit) + ";" + str(temp3) + ";" + str(lf3) + str("\n"))
d.close
zaehler += 1
# 10 Sekunden warten
time.sleep(10)

Mfg
Keen