Gemessene Temperaturdaten in eine MYSQL Datenbank auf einem NAS speichern

  • Hallo zusammen, ich bin Neuling in Sachen Raspberry und Python. Es ist mir gelungen, einen DHT22 an meinem Raspi zum

    Laufen zu bringen. Nun möchte ich die gelieferten Daten in eine Datenbank schreiben. Eine Datenbank habe ich auf

    meinem NAS installiert. Eine Tabelle ist auch eingerichtet.

    Nun möchte ich aber, dass der Vorgang automatisch abläuft und die gemessenen Daten automatisch auf dem NAS gespeichert

    werden. Leider komme ich damit nicht weiter.

    #!/usr/bin/python

    import Adafruit_DHT

    import time

    import mysql.connector

    mydb = mysql.connector.connect(

    host="192.168.57.56",

    user="schalck",

    password="xxxxxxxxxxxxxxx",

    db="wetter"

    )

    PIN_DHT22 = 4 # GPIO4

    while True:

    humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, PIN_DHT22)

    if humidity is not None and temperature is not None:

    print('Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature, humidity))

    Bis hierher funktioniert es. Temp-Daten werden auch in der Konsole ausgelesen.

    Jetzt habe ich folgendes versucht.

    mycursor = mydb.cursor()

    sql = "INSERT INTO Temperaturen (Temp) VALUES ('%s')"%(temperature)


    mycursor.execute(sql)

    mydb.commit()

    Frage: Stellen die beiden Daten (humidity und temperature), die

    in der while-Schleife geschaffen werden, Variablen dar ? Wenn nicht, wie kann ich daraus Variablen bilden und wie verarbeitet ich diese in der INSERT INTO Anweisung zur Speicherung auf dem NAS ?

    Ich danke Euch jetzt schon mal für Eure Antworten.

  • Gemessene Temperaturdaten in eine MYSQL Datenbank auf einem NAS speichern? Schau mal ob du hier fündig wirst!

  • Hallo schalck

    Zitat

    mycursor = mydb.cursor()

    Das vor der While schleife stehen.

    Versuch mal nach der Zeile:

    Zitat

    print('Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature, humidity))

    folgendes (einrückung muss korrekt sein...) :

    Code
    try:
        sql = " INSERT INTO Temperaturen (Temp, Hum) VALUES (%s, %s)"
        mycursor.execute(sql, (temperature, humidity))
        mydb.commit()
    except:
        print("Fehler beim Daten in DB schreiben."


    Temp und Hum => Sind die Spalten in der Datenbank.

    temperature und humidity sind deine Variablen.

    Gruss Dani

  • Hab jetzt folgendes versucht, aber keinen Erfolg. Daten werden zwar ausgelesen und in der Konsole angezeigt, bekomme aber nach jeder Ausgabe die Fehlermeldung: Fehler beim schreiben in die Datenbank. Hat jemand noch einen guten Tipp ?

  • Habe ich gemacht. Er bringt mir folgende Fehlermeldung:

    mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1

    Kann das sein, dass es mit dem Connector zu tun hat ?

  • Danke für den Hinweis. Ach, noch eine Frage.... nun möchte ich ja nicht, dass alle 2-3 Sekunden ein Eintrag in die Datenbank erfolgt. Welchen Befehl muss ich hinzufügen und an welcher Stelle muss ich ihn einfügen, dass das Scrip nur alle 30 min ausgeführt wird ?

Jetzt mitmachen!

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