Hallo zusammen,
ich hab mir, unter anderem mit Hilfe dieses Forums, ein Programm zusammengebastelt, welches 1-wire Temperaturen und einen DHT22 ausliest.
Mein Problem liegt jetzt noch in der Übergabe an die Datenbank.
Zum einen scheint die erste Try - Except Anweisung nicht zu funktionieren. Soll heissen, auch wenn die Datenbank schon besteht gibt mir das Programm nicht die except Meldung zurück.
Andererseits bekomme ich beim Einfügen der Daten immer die except Meldung.
Habe schon versucht, mich über diverse Quellen zum Ziel zu lesen, komme aber auf keinen grünen Zweig.
Es wäre sehr nett, wenn ihr euch das mal anschauen könntet.
# -*- coding: utf-8 -*-
import sys
import os
import dhtreader
import time
import sqlite3
# SQLite3 Datenbank erstellen und Verbinden
connection = sqlite3.connect(database = "/home/pi/steuerung/klima.db")
cursor = connection.cursor()
try:
sql = "CREATE TABLE IF NOT EXISTS 'klima' (" \
"'zeit' timestamp NOT NULL, " \
"'temp1' FLOAT UNSIGNED NOT NULL, " \
"'temp2' FLOAT UNSIGNED NOT NULL, " \
"'temp3' FLOAT UNSIGNED NOT NULL, " \
"'temp4' FLOAT UNSIGNED NOT NULL, " \
"'humi' FLOAT UNSIGNED NOT NULL)"
cursor.execute(sql)
connection.commit()
except:
print ("Die Tabelle existiert bereits!")
# Zeitstempel erzeugen
def TimeStamp():
stamp = time.strftime("%d.%m.%Y-%H:%M:%S", time.localtime())
return(stamp)
zeit = TimeStamp()
print ""
print zeit
print ""
# 1-Wire Sensoren auslesen und Daten zuweisen
# 1-Wire Slave-Liste oeffnen
file = open('/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves') #Verzeichniss evtl. anpassen
# 1-Wire Slaves auslesen
w1_slaves = file.readlines()
# 1-Wire Slave-Liste schliessen
file.close()
# Header fuer Bildschirmausgabe
print('Sensor ID | Temperatur')
print('----------------------------')
# Fuer jeden 1-Wire Slave eine Ausgabe
n = 1
for line in w1_slaves:
# 1-wire Slave extrahieren
w1_slave = line.split("\n")[0]
#1-Wire Slave Datei öffnen
file = open('/sys/bus/w1/devices/' + str(w1_slave) + '/w1_slave')
# Inhalt des 1-wire Slave File auslesen
filecontent = file.read()
# 1-wire Slave File schliessen
file.close()
# Temperatur Daten auslesen
stringvalue = filecontent.split("\n")[1].split(" ")[9]
# Temperatur konvertieren
temperature = float(stringvalue[2:]) / 1000
# Temperaturwerte umbenennen und zuweisen
if n == 1:
temp1 = '%5.1f' % temperature
elif n == 2:
temp2 = '%5.1f' % temperature
else:
temp3 = '%5.1f' % temperature
# Temperatur ausgeben
print(str(w1_slave) + ' | %5.3f *C' % temperature)
n = n+1
#DHT22 auslesen
type = 22
pin = 3
while True:
try:
dhtreader.init()
f, h = dhtreader.read(type, pin)
if f != "" and h != "":
break
time.sleep(3)
except KeyboardInterrupt:
quit()
except:
pass
temp4 = '%5.1f' % f
humi = '%5.1f' % h
print 'Temp {0} *C, Hum {1} %' .format(temp4, humi)
# Daten in Datenbank bertragen
try:
cursor.execute("INSERT INTO klima VALUES (%s,%f,%f,%f,%f,%f), %(zeit, temp1, temp2, temp3, temp4, humi)")
connection.commit()
except:
print""
print ("Einfuegen von Daten nicht moeglich!")
# Testausgabe
print ""
print 'temp1 = {} *C' .format(temp1)
print 'temp2 = {} *C' .format(temp2)
print 'temp3 = {} *C' .format(temp3)
print 'temp4 = {} *C' .format(temp4)
print 'humi = {} %' .format(humi)
#sys.exit(0)
Alles anzeigen
Die Ausgabe sieht zur Zeit aus wie folgt:
02.08.2014-22:24:16
Sensor ID | Temperatur
----------------------------
28-0000062cf26c | 26.125 *C
28-0000062e4fb7 | 26.062 *C
28-0000062e5477 | 25.937 *C
Temp 26.9 *C, Hum 59.6 %
Einfuegen von Daten nicht moeglich!
temp1 = 26.1 *C
temp2 = 26.1 *C
temp3 = 25.9 *C
temp4 = 26.9 *C
humi = 59.6 %
Danke euch schonmal im Voraus.