Temperatur Daten in eine MySQL Datenbank schreiben

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo, ich bin abosoluter Anfänger was die Programmierung von Pyhton angeht. Daher möchte ich euch um eurer Hilfe bitten.

    Ich habe an einem Pi einen DTH22 Sensor angeschlossen. Die Werte werden nun auch soweit ausgelesen,
    der erste Wert ist für die Luftfeuchtigkeit und der zweite gibt die Temperatur aus.
    root@raspberrypi:/home/pi# ./sensor
    47.50,25.10

    Ich möchte diese beiden Werte gerne mit dem Aktuellen Datum in eine Mysql Datenbank schreiben.

    Könnt ihr mir vielleicht dabei?

  • Temperatur Daten in eine MySQL Datenbank schreiben? Schau mal ob du hier fündig wirst!

  • MySQL wäre meiner Meinung nach die falsche Wahl - das ist zwar die bekannteste aber verbraucht wesendlich mehr CPU+RAM, auch wenn die Datenbank garnicht genutzt wird

    Benutz stattdessen lieber SQLite: Datenbanken mit SQLite


    Von python habe ich leider auch nicht soviel Ahnung, ich mache eigentlich alles über bash...

    Vermutlich wäre mein Weg die beiden Ausgaben durch das " , " voneinander getrennt behandeln zu können und sie dann in eine entsprechende SQL Tabelle zu schreiben..

    Also SQLite installieren und dann zum Beispiel folgendes in bash:

    Leider weiss ich nicht genau was es mit dem Befehl " sensor " auf sich hat, da ich nicht nachvollziehen kann von welchem Ort die Temperaturen 47.50 und 25.10 überhaupt stammen und somit weiss ich auch nicht wie man das über Bash regeln könnte um das festzulegen - deshalb würde mit meinem Beispiel in beiden Einträgen " Balkon " als Ort stehen was aber vermutlich falsch wäre?

    $(date +%s) ist die aktuelle Unixtime und definiert die Sekunden sie seit 1.1.1970 vergangen sind und kann beim Abrufen wie ich finde sehr leicht verwendet werden, damit kannst du nämlich nach belieben das Datumsformat selber festlegen.
    Als Beispiel was du auf der Konsole ausführen kannst:

    Code
    date
    date -d@$(date +%s) +"%H:%M:%S - %d.%m.%Y"

    was die einzelnen %H usw bedeuten kann über die manual-page von "date" nachgelesen werden: man date


    Also wie gesagt, zu der Ausgabe der Temperatur müsste man auch wissen zu welchem "Ort" die gehört

    Was ist denn " ./sensor " für ein Programm/Script? Kannst du das Script mal in Kode posten?


    Benzüglich 1-wire Sensoren gibts hier im Forum aber bereits eine gute Anleitung: 1-Wire Sensor mit Datenbank

  • Immer diese Sache mit mysql. Wenn dann reicht Sqllite und selbst dann reichts fürs meiste dann doch wirklich eine einzige File zum speichern (was dann auch ohne Problem ein shellskript leisten kann)

    Die Sqllitelösung versuche ich heute abend mal zu basteln, wenn nix dazwischen kommt. Bis dahin sollte auch das hier reichen.


    Einmal editiert, zuletzt von agitase (29. August 2013 um 13:18)

  • Danke erstmal für die Hilfe.

    Den Code(dht22.c) von sensor hab ich im Anhang angehängt. Der DHT22 Sensor misst Luftfeuchtigkeit und Temperatur siehe http://www.adafruit.com/products/385
    Ob nun Bash oder Pyhton nutze ist ja auch nicht so relevant, hauptsache es funktioniert :). Ich möchte eigentlich wie in dem Thread den du verlinkt hast, die ausgelesenen Daten in eine Datenbank speichern.

    Da bei mir ein weiterer Linux Rechner mit Mysql läuft und auch schon Daten von einem anderen System aufnimmt, würde ich gerne die Daten auch noch vom PI dort ablegen.

    • Offizieller Beitrag

    Für python brauchst du vorher das mysqldb modul

    Code
    sudo apt-get install python-mysqldb

    Und hier ne quick and dirty lösung

    Ungetestet, sollte aber klappen.

  • Für Temperatur Daten und Anzeige benutze ich rrdtools

    Gute Anleitung ist:
    http://www.zipfelmaus.com/blog/rrdtool-weather-station/

    Ergebnis hängt als Grafik an.

    rrd ist dafür super, da ich mit der Angabe "--start end-1d", "--start end-7d" direkt mehrere Graphen regelmässig erstellen kann und rrdupdate sich um das auslesen und verarbeiten der richtigen Daten kümmert.


  • Für python brauchst du vorher das mysqldb modul

    Code
    sudo apt-get install python-mysqldb

    Und hier ne quick and dirty lösung

    Ungetestet, sollte aber klappen.

    Genau sowas meinte ich, leider bricht er bei mir ab.

    root@raspberrypi:/home/pi# python daten.py
    File "daten.py", line 10
    out, error = sens.communicate()
    ^
    SyntaxError: invalid syntax
    root@raspberrypi:/home/pi#

    • Offizieller Beitrag

    naja, anpassen musst du das schon etwas ;), PATH/TO/sensor muss den Pfad enthalten wo sein "sensor" programm liegt (z.B. "/home/pi/sensor"), auch die Datenbankconnection muss angepasst werden, sonst kommt dort der nächste Fehler

  • Das hab ich auch gemacht :) auch wenn der Kaffee bei mir leer ist, ein bisschen kann ich noch lesen :D


  • Wenn du MySQL auf einem anderen Rechner bereits nutzt kannst du auch folgendes nutzen..

    Die Datenbank solltest du dann natürlich vorher schon erstellen - ich würde 4 Spalten anlegen:
    id INT 10, Attribute UNSIGNED, Extra: auto_increment
    unixtimestamp INT 11
    luftfeuchtigkeit VARCHAR 10
    temperatur VARCHAR 10
    sowie einen Benutzer mit entsprechenden Rechten auf die Datenbank einrichten ;)

    Zunächst auf dem RaspberryPI den mysql-client installieren:

    Code
    apt-get install mysql-client

    Und dann nach belieben das folgende bash Script anpassen und nutzen:

    Um die Werte regelmässig auszulesen kannst du crontab nutzen, wie das geht kannst du am Ende > dieses Posts < nachlesen

  • Das funktioniert soweit aber ein kleiner Fehler hat sich dort eingeschlichen(siede Code) und das Datum bekomm ich noch nicht richtig angezeigt aber das versuche ich erstmal ohne eure Hilfe.

    Code
    # WERTE in Datenbank eintragen
    INTERT="INSERT INTO

  • Das funktioniert soweit aber ein kleiner Fehler hat sich dort eingeschlichen

    Code
    # WERTE in Datenbank eintragen
    INTERT="INSERT INTO

    Gut aufgepasst - Danke für den Hinweis ;)

    das Datum bekomm ich noch nicht richtig angezeigt aber das versuche ich erstmal ohne eure Hilfe.

    Inwiefern nicht richtig angezeigt? Womit oder wie rufst du es denn ab?

    Wie gesagt ist date +%s der Unixtime Stamp
    Das ist eigentlich ein allgemein üblicher Weg damit zu arbeiten weil man sowas problemlos umwanden oder in eine X-Beliebige Form bringen kann (wie ich auch schon in Post#2 aufgezeigt hatte)
    In PHP kann das mit date auch leicht verarbeitet werden denn das erwartet auch einen timestamp
    Das demonstriere ich mal über ein php Script was ich über die Konsole ausführe:
    /tmp/1

    Noch Fragen? :cool:

  • Hallo,

    nur mal so ne Frage am Rande - wie lange läuft das den bei euch schon ?
    Weil ich habe da echt bedenken mit den Schreibzyklen der SD Karte ?
    Das sind ja im zweifel nur 10.000mal schreiben und wenn ich jede Minute
    nur einmal in den DB schreibe und evtl dann noch die rrdtool Grafik erneuere
    und noch ins Webroot schiebe ... da kommt dauert es theoretisch nicht lange
    bis die hinüber ist ?

    Bin mal gespannt was Ihr dazu sagt - weil hierfür suche ich noch nach einer Lösung.

    Gruß

  • Wie ein INSERT Skript auf eine externe Datenbank funktioniert, steht ja ein paar Einträge weiter oben, aber ein SELECT mit Speichern des Wertes in eine Variable mag nicht so ganz funktionieren.

    Wie sieht ein Shellskript für so eine Abfrage aus?

    Vielen Dank für einen Tipp!

  • Für eine MySQL Datenbank und ein normales Bash Skript.

    Das Einfügen von einem Wert hab ich wie folgt gelöst:

    Code
    SQLSTATEMENT="INSERT INTO $mySQLdatabase.$mySQLtable (temperature, GUID) VALUES (\"$TEMP\", \"$GUID\");"
    echo $SQLSTATEMENT | mysql -h $mySQLserver -P $mySQLport -u $mySQLuser -p"$mySQLpass" $mySQLdatabase

    Einmal editiert, zuletzt von oytschi (13. Februar 2015 um 18:13)

Jetzt mitmachen!

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