Tut mir bitte nicht weh. Aber der Code funktioniert jetzt und ich habe als Frischling gerade noch den Überblick.
Code: Alles auswählen
import os, sys, time
import datetime
import matplotlib as mlp
import matplotlib.pyplot as plt
import numpy as np
def check_sensors():
""" Reading Pathcontent with all available sensor designations 28-xxxx """
sensor_adresses = []
for sensor_name in os.listdir("/sys/bus/w1/devices"):
if sensor_name.split("-")[0] in ("28", "10"):
sensor_adresses.append(sensor_name)
sensor1 = sensor_adresses[0]
sensor2 = sensor_adresses[1]
with open("Datenausgabe DS18B20.txt", "w") as file:
file.write("DS18B20_1 t1: " + str(sensor1) + '\n' + "DS18B20_2 t2: " + str(sensor2) + '\n')
file.write(" t1 " + " t2 " + " Timestamp " + "Dataset No. " + '\n')
file.write(" ")
return sensor_adresses
def check_data_temp(sensor_adresses):
""" Reading Data of w1_slave files for every sensor in sensor_adresses[] """
temperatures = []
for sensor in sensor_adresses:
with open(os.path.join("/sys/bus/w1/devices", sensor, "w1_slave")) as data:
temp = (float(data.read().split('t=')[-1])/1000)
temperatures.append(temp)
#print(temperatures)
return temperatures
temp_data_sets = input("How much Data Sets do you want to read? ",)
def temp_read_loop():
""" Printing data sets as often as choosen by user """
status = 0
output = []
timestemp_start = datetime.datetime.now().time()
while status < int(temp_data_sets):
sensor_adresses = check_sensors()
temperatures = check_data_temp(sensor_adresses)
timestamp = datetime.datetime.now().time()
temperatures.append(str(timestamp))
temperatures.append(str(status+1))
""" Printing first time the sensor adresses """
if status == 0:
print(sensor_adresses)
with open("Datenausgabe DS18B20.txt", "w") as file:
file.write(str(sensor_adresses) + str('\n'))
print(temperatures)
output.append(temperatures)
status += 1
time.sleep(.5)
""" Printing list of all recorded temperatures """
if status == int(temp_data_sets):
print("Finished reading " + temp_data_sets + " data sets")
temp_data_array = np.asarray(output)
with open("Datenausgabe DS18B20.txt", "a") as file:
file.write(str(temp_data_array))
[b] #np.savetxt('test.out', temp_data_array, delimiter=',')[/b]
return temp_data_array
return status
Ich habe den uninteressanten Teil am Ende rausgelassen in dem ich die Daten plotte.
np.savetxt klingt nicht schlecht, wenn dieses auch das tut was ich gerne hätte. Leider habe ich die Datei der Dauerschleife schon überschrieben.
Beispielhaft aus den normalen Daten, die bei kürzere Laufzeit entstehen sah es wie folgt aus:
Code: Alles auswählen
DS18B20_1 t1: 28-0113161bd91d
DS18B20_2 t2: 28-0113167ce9ad
t1 t2 Timestamp Dataset No.
22.812 22.75 20:34:12.796633 1
22.812 22.75 20:34:15.113494 2
22.812 22.75 20:34:17.433110 3
....,
22.875 22.75 20:34:28.473754 7(7000)
22.875 22.75 20:34:31.673569 8(7001)
22.875 22.812 20:34:33.993514 9(7002)
22.875 22.812 20:34:36.312765 10(7003)
So tauchten die Daten in der Datei auf. Nehmen wir an, dass dataset nr 7 dataset nr 7000 wäre und 3h weiter. Habe ich mal in Klammern gesetzt, wie ich es meine.
Bis zu einer gewissen Anzahl an Daten gibt er also die kompletten Messdaten wieder und ab diesem gewissen Punkt kürzt er das ganze ein bzw stellt nicht die kompletten Daten dar.
Wenn ich nun np.savetxt anwenden will gestalte ich es einfachheitshalber np.savetxt("test", temp_data_array) ohne weitere Attribute.
Hier gibt er mir folgenden Fehler aus:
Code: Alles auswählen
TypeError: Mismatch between array dtype ('<U32') and format specifier ('%.18e,%.18e,%.18e,%.18e')
Könntet ihr mir erklären, was Herr Computer mir sagen möchte?
Ich danke euch und wünsche einen schönen Abend.