DHT22 Werte mittels Adafruit_DHT Libary in SQLITE DB schreiben

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    ich wollte die Messwerte meines DHT22 in eine kleine SQlite DB über Python einlesen. Da ich in Programmierung eher unbedarft bin, versuche ich mir das Programmieren selber beizubringen und habe mir dazu Python ausgesucht. Man möge mir also bitte verzeihen, wenn der Quellcode nicht dem Standard entspricht.

    Der Teil bei dem die Werte ausgelesen werden, habe ich aus dem Tutorial von Adafruit genommen. Das klappt auch irgendwie, aber irgendwie werden die Daten aus den Variablen temp u. humidity nicht eingetragen.

    Weiß jemand zufällig wo mein Fehler liegt, das keine Werte in die DB eingetragen werden?


    Danke vorab für eine eventuelle Hilfe! :danke_ATDE:

    Einmal editiert, zuletzt von Schmitho (11. Oktober 2013 um 11:52)

  • DHT22 Werte mittels Adafruit_DHT Libary in SQLITE DB schreiben? Schau mal ob du hier fündig wirst!

    • Offizieller Beitrag

    Hiho Schmitho (5€ in die schlechte-Reimkasse) :)

    dein Programm macht um genau zu sein nicht mehr als als eine Verbindung zur DB erstellen und versuchen eine Tabelle anzulegen.

    Du hast eine funktion "sensor" angelegt, welche nie aufgerufen wird (Und selbst wenn, würdest du in Fehlermeldungen laufen ;). soll ich dir das mal halbwegs zurechtbauen oder möchtest du es selber probieren?

  • Also, ich habe die Funktion jetzt rausgenommen und den Quellcode etwas eingerückt.


    Die Temperatur wird jetzt ausgegeben:

    Gib mir mal bitte den nächsten Tipp, sonst lerne ich es ja nie. ;)

    • Offizieller Beitrag

    Wenn du du jetzt die werte hast sollte einem schreiben in die db nichts im wege stehen.

    dieser punkt hier ist allerdings höchstgradig unsinnig (nicht böse gemeint).
    [code=php]
    try:
    for i in sensor:
    temp = row[0]
    humidity = row[1]
    sql = ("INSERT INTO Temperatur (Temperatur, Feuchtigkeit) VALUES (temp, humidity)")
    cursor.execute(sql, data)
    connection.commit()
    [/php] Ich erklär dir auch warum:

    • for i in sensor | was ist sensor? die varibale gibt es nicht, ergo kannst du nicht darüber iterieren
    • row[0],row[1]| row im allgmeinem gibt es nicht, warum sollten dort temp und hum drin stehen? die stehen doch in temp und humidity
    • data gibt es auch nicht


    ein
    [code=php]
    cursor.execute("""INSERT INTO Temperatur (Temperatur, Feuchtigkeit) VALUES (%d, %d)""" % (temp, humidity))[/php]
    sollte für erste schreibversuche reichen.

    Edit: Warum soll er eigentlich 3s warten wenn er nichts gefunden hat? das continue hat dort auch nichts zu suchen ;) wenn er mit dem if fertig ist, macht er so oder so weiter

  • Hi,

    das

    Zitat


    cursor.execute("""INSERT INTO Temperatur (Temperatur, Feuchtigkeit) VALUES (%d, %d)""" % (temp, humidity))

    geht nicht. Hat das vielleicht was damit zu tun, da ich ja eine Timestamp row habe, oder ist das bei dem Insert egal!?


    Zum Thema 3 Sekunden: Der Sensor kann nur alle 3 Sekunden nach einer Datenabfrage Daten liefern soweit wie ich weiß.

  • Ich denke, ich lasse es vorerst mit dem Zeitstempel und versuche im ersten Schritt die Temperatur und die Feuchtigkeit in die Tabelle zu bringen. :D

    Ich habe mal die test.py Datei mit Deinem Insert Statement angehangen. Mit "geht nicht" meinte ich eher, dass bis Zeile 41 alles zu funktionieren scheint....Das war´s dann auch schon. :irre:


    P.S

    Deine bemängelten Punkten müssen drin bleiben, ansonsten werden die Werte nicht ermittelt.

    • print output
    • time.sleep(3)
    • continue
    • Offizieller Beitrag

    Ich sag ja nicht, das du nicht 3 sekunden warten sollst, allerdings wartet das script nur 3sekunden wenn er keine Treffer hat und fängt dann von vorne an, was ich persönlich verwirrend finde. Ich würde generell 3sek. warten. ;)

    Zum testen würde ich auch auf try:/excepts verzichten, so gehen einem wichtige Fehlermeldungen verloren. Grade bei SQL statements schleichen sich gerne mal fehler ein

  • Also, das mit den Daten in die Tabelle einfügen habe ich mittlerweile hinbekommen.

    Ich hätte abschließen eine Frage zum Thema Zeitstempel:

    Eine Zeitstempel habe ich mit einer Funktion definiert:

    Code
    # Zeitstempel erzeugen
    def TimeStamp():
            stamp=time.strftime("%d.%m.%Y-%H:%M:%S", time.localtime())
            return(stamp)
    stamp=TimeStamp()
    
    
    print "Datum/Uhrzeit: [%s]" % (stamp)

    Als Ergebnis bekomme ich folgendes Ergebnis: Datum/Uhrzeit: [14.10.2013-11:36:17].

    Als SQL Statement benutze ich folgende Sysntax:

    Code
    cursor.execute("""INSERT INTO Temperatur (Zeit, Temperatur, Feuchtigkeit) VALUES (%s, %s, %s)""" %(stamp, temp, humidity))
    connection.commit()

    Und während der Ausführung erhalte ich folgende Meldung:


    Zitat


    Message File Name Line Position
    Traceback
    <module> <module1> 28
    "OperationalError: near "".2013"": syntax error"

    Die Tabellen Spalte ist mit "Zeit INTEGER NOT NULL" definiert.

    • Offizieller Beitrag

    probier mal

    Code
    cursor.execute("""INSERT INTO Temperatur (Zeit, Temperatur, Feuchtigkeit) VALUES ("%s", "%s", "%s")""" %(stamp, temp, humidity))

    hast du mal probiert das Datum manuell in die DB zuschreiben? Kannst du so das datum in der gewünschten notation reinschreiben?

  • Hallo,

    ich habe auch vor mit den DHT22-Sensoren etwas zu programmieren und als blutiger Pi-Anfänger habe ich mich auf die Suche begeben Codeschnipsel zusammenzusuchen.

    Grundkenntnisse im Programmieren sind vorhanden - mit Python ist dies aber mein erstes Projekt...

    So nun aber zum eigentlichen Thema:

    Ich habe mir das Auslesen der Sensoren aus der test.py Datei dieses Beitrags abgeschrieben (Ich hoffe der Autor nimmt es mir nicht übel...).
    Aber ich bekomme immer eine Fehlermeldung. Das Auslesen des Sensors über shell funktioniert, aber die Abfrage mittels Python will einfach nicht klappen.

    Was mache ich falsch? Kann mir hier jemand helfen?
    Als Ergebnis benötige ich die Messwerte von zwei DHT22-Sensoren. Temperatur und Feuchte sollen in Variablen abgelegt werden. Mit diesen Werten möchte ich dann einige Berechnungen anstellen und dann abschließen je nach Rechenergebnis unterschiedliche Relais schalten.
    Das wäre das Endziel, aber bislang bekomme ich nicht mal ein Messwertepaar in Variablen abgelegt...

    Kann jemand helfen?
    Code und Fehlermeldung können dem Screenshot entnommen werden.

    Gruß
    Matze


  • Deine Hochkomma waren die Lösung! An so kleinen Dinge scheitert das Leben. :bravo2:


    P.S Vielen Dank für die Hilfe und Geduld! :thumbs1:

    Hallo Schmitho,

    auch wenn dein Post hier schon drei Jahre alt ist, so stehe ich gerade an genau der gleichen Stelle wie du vor drei Jahren. ich versuche Daten eines DHT22 Sensors in eine SQLite Datenbank zu schreiben, stoße aber hier und da auf Probleme. Jetzt ist eure Diskussion hier ziemlich hilfreich, allerdings fällt es mir schwer die Kommentare nach und nach in dein anfänglich gepostetes Script einzubauen bzw. nachzuvollziehen. Könntest du dein fertiges Script hier posten?
    Danke

  • Ich habe genau dasselbe gemacht. Die Datenbank wurde vorher mit sqlite erstellt und mit phpliteadmin hab ich die Tabellen dazu eingerichtet. Dann braucht es nur noch diesen python Code (der über crontab alle 5 Min ausgeführt wird) um die Datenbank zu befüllen.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!