ich möchte gerne kontinuierlich gemessene Temperaturwerte in eine sqlite-DB schreiben. Es gibt viele Beispiele im Netz mit möglichen Lösungswegen, leider ist es mir aber trotz etlichen Versuchen nicht gelungen auch nur eins davon umzusetzen.
Ein großes Problem für mich als Anfänger ist, dass ich keine Fehlermeldung bekomme. Wenn ich vorher etwas falsch gemacht hatte, konnte ich anhand der Fehlermeldung gezielt an der Behebung arbeiten und mich im Internet schlau machen. Das ist an dieser Stelle leider nicht der Fall.
Was funktioniert:
- Temperatursensor ist funktionsfähig und gibt im 10-s Intervall die gemessenen Werte aus
- SQlite-DB anlegen mit Tabelle und zwei Spalten
- Per Hand Testdaten in die beiden Spalten eingeben und auslesen
Was nicht funktioniert:
- Die Temperatursensorwerte permanent in die DB zu übernehmen
Funktioniert (Temperaturwerte messen):
Code: Alles auswählen
#!/usr/bin/python
# coding=utf-8
# messprogramm.py
# ----------------
import os, sys, time
def aktuelleTemperatur():
# 1-wire Slave Datei lesen
file = open('/sys/bus/w1/devices/28-011317a451b8/w1_slave')
filecontent = file.read()
file.close()
# Temperaturwerte auslesen und konvertieren
stringvalue = filecontent.split("\n")[1].split(" ")[9]
temperature = float(stringvalue[2:]) / 1000
# Temperatur ausgeben
rueckgabewert = '%6.2f' % temperature
return(rueckgabewert)
zeit = time.strftime('%H:%M:%S')
messdaten = aktuelleTemperatur()
try:
while True:
# Mit einem Timestamp versehe ich meine Messung und lasse mir diese in der Console ausgeben.
print ("Temperatur um " + time.strftime('%H:%M:%S') +" beträgt:" + messdaten + " °C")
# Nach 10 Sekunden erfolgt die nächste Messung
time.sleep(10)
except KeyboardInterrupt:
# Programm wird beendet wenn CTRL+C gedrückt wird.
print('Temperaturmessung wird beendet')
except Exception as e:
print(str(e))
sys.exit(1)
finally:
# Das Programm wird hier beendet, sodass kein Fehler in die Console geschrieben wird.
print('Programm wird beendet.')
Funktioniert (DB anlegen):
Code: Alles auswählen
import os, sys, sqlite3
connection = sqlite3.connect("tempdata.db")
cursor = connection.cursor()
# Tabelle erzeugen
sql = """
CREATE TABLE IF NOT EXISTS tempWerte(
zeit TEXT(20),
temperatur FLOAT(20));"""
cursor.execute(sql)
connection.commit()
connection.close()
Funktioniert nicht (Wenn ich das Programm laufen lasse werden die Temperaturwerte wieder angezeigt. Wenn ich dann im Anschluss die DB aber auslese, ist sie leer):
Code: Alles auswählen
import time, sys, sqlite3, Temperaturskript_22
def userTempWerte_db_anlegen():
connection = sqlite3.connect("tempdata.db")
cursor = connection.cursor()
sql = """INSERT INTO tempWerte VALUES
(%s,%s)""", (zeit,messdaten)
cursor.executemany(sql)
connection.commit()
connection.close()