RasPi + Python + mySQL | brauche Hilfe beim installieren von MySQLdb

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

    nach vielen vergeblichen Versuchen "MySQLdb" auf meinen RasPi einzurichten möchte ich hier mal ganz tolle Hilfe schreien!

    Wie muss man vorgehen, um das Modul MySQLdb zu installieren?

    ..an diversen Stellen finde ich immer einen Link zu: http://sourceforge.net/projects/mysql-python/..

    wie muss man das nun auf dem RasPi installieren od. einrichten?

    ich erhalte folgende Fehlermeldung:

    Code
    pi@raspberrypi ~ $ python3
    Python 3.2.3 (default, Mar  1 2013, 11:53:50)
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import MySQLdb
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ImportError: No module named MySQLdb
    >>>

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

  • RasPi + Python + mySQL | brauche Hilfe beim installieren von MySQLdb? Schau mal ob du hier fündig wirst!

  • erst mal Danke!!

    ich denke den Befehl hatte ich schon mal verwendet...

    jetzt über apt-get installiert... ---> sah eigentlich ganz gut aus, aber es klappt noch immer nicht so wie ich dachte...

    kann es sein, dass diese Installation nicht für Python3 funktioniert? Denn wenn ich nur Python starte, dann kommt keine Fehlermeldung!
    putty_0_28.04.2014-19_34_27_pi@raspberrypi_-.png

    Zusatzfrage: muss man Groß- Kleinschreibung beachten beim Import-Befehl?

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

    Einmal editiert, zuletzt von RasPi-Azubi (28. April 2014 um 19:43)

  • Code
    framp@obelix ~ $ python
    Python 2.7.3 (default, Feb 27 2014, 20:00:17) 
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import mysqldb
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ImportError: No module named mysqldb
    >>> import MySQLdb
    >>>
  • ok..

    denke ich kann nun folgendes berichten:

    Schreibweise ist wichtig (siehe Bild oben), denn unter Python2.7 zeigen sich erste Lebenszeichen in der DB... :)

    Wenn ich am Raspi eine Fehlermeldung beim DB-Zugriff erhalte, dann kann ich unter Python2.7 den Pfad sehen... aber unter Python3 finde ich kein vergleichbares Verzeichnis am Raspi. -----> daher wird es für Python3 das Modul MySQLdb vermutlich nicht geben..

    jedoch schaffe ich es momentan nicht Datensätze vom RasPi in die DB zu schreiben. Aber der Index "ID" (AUTO_INCREMENT)wird vom Python-skript erhöht, jedoch keine neuen Zeilen geschrieben

    chrome_28.04.2014-23_06_59_10.0.0.10-_-127.0.0.1-_-temp-_-messwerte-_-phpMyAdmin-4.1.12-Google-Chrome.png

    hier sind einige manuelle Einträge zu sehen... (mein Python-skript schreibt 9x pro Durchlauf ---> derzeit 9 Sensoren drann)

    vermutlich muss ich an meinen Insert noch Hochkommas oder Anführungszeichen basteln... das kenn ich auch von PHP-Zugriffen :)

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

    Einmal editiert, zuletzt von RasPi-Azubi (28. April 2014 um 23:16)

  • hier mein aktuell Quellcode... (nicht erschrecken... bin am lernen und testen)

    aber für jede Hilfe sehr dankbar!!

    liefert auf der Komandozeile am RasPi folgende Ausgabe:

    und etwa so sehen die Einträge im Logfile aus...

    Code
    2014-04-28 23:27:35 1 SensorID ---> 28-000005293706 --->  14.312 Grad Celsius
    2014-04-28 23:27:36 2 SensorID ---> 28-000005294837 --->  15.312 Grad Celsius
    2014-04-28 23:27:37 3 SensorID ---> 28-000005298765 --->  14.875 Grad Celsius
    2014-04-28 23:27:38 4 SensorID ---> 28-000005296ee9 --->  14.812 Grad Celsius
    2014-04-28 23:27:39 5 SensorID ---> 28-000005298ddb --->  14.812 Grad Celsius
    2014-04-28 23:27:40 6 SensorID ---> 28-00000529d1a0 --->  14.937 Grad Celsius
    2014-04-28 23:27:40 7 SensorID ---> 28-00000529ab41 --->  14.812 Grad Celsius
    2014-04-28 23:27:41 8 SensorID ---> 28-00000529dffa --->  15.0 Grad Celsius
    2014-04-28 23:27:42 9 SensorID ---> 28-0000051ae8a6 --->  14.75 Grad Celsius

    mein Problem liegt jetzt vermutlich in dieser Zeile...

    cursor.execute("INSERT INTO `temp`.`messwerte` (`ID`, `text`, `time`) VALUES (NULL, '12345 Test-text', CURRENT_TIMESTAMP)")

    vergleiche zum SQL vom myPHPadmin:

    INSERT INTO `temp`.`messwerte` (`ID`, `text`, `time`) VALUES (NULL, 'für das Forum ', CURRENT_TIMESTAMP);

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

    • Offizieller Beitrag

    Ungetestet, aber sollte so klappen. Ich hab mir angewöhnt SQL Queries immer in docstrings zu schreiben. Bin mir grad nicht sicher on NULL nicht "NULL" sein müsste....probiers aus ;)

    Code
    import datetime
    text = "some text"
    timestamp = datetime.datetime.utcnow()
    cursor.execute("""INSERT INTO messwerte (ID, text, time) VALUES (NULL, "%s", "%s")""" %(stamp, text, timestamp))
  • da kommt folgender Fehler:
    ---------
    pi@raspberrypi ~ $ python temp.py
    1. Durchlauf starten ------------------------> 2014-04-29 00:35:02
    2014-04-29 00:35:02 1 SensorID ---> 28-000005293706 ---> 14.437 Grad Celsius
    Traceback (most recent call last):
    File "temp.py", line 48, in <module>
    cursor.execute("""INSERT INTO messwerte (ID, text, time) VALUES (NULL, "%s", "%s")""" %(stamp, text, timestamp))
    NameError: name 'stamp' is not defined
    pi@raspberrypi ~ $
    -------

    also habe den "stamp" hinten rausgenommen (denke wir verwenden nur 2x die Platzhalter %s.. dann sollten auch nur 2 Werte übergeben werden)

    damit läuft das skript wieder genau wie vorher durch.. Kommandozeile sieht gut aus..

    aber der Auto_increment in der Tabelle wird um 9 erhöht ( 2.Rechner) und keine neuen Datensätze gespeichert...

    chrome_29.04.2014-00_55_04_10.0.0.10-_-127.0.0.1-_-temp-_-messwerte-_-phpMyAdmin-4.1.12-Google-Chrome.png

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

    Einmal editiert, zuletzt von RasPi-Azubi (29. April 2014 um 00:57)

  • Hallo zusammen...

    nach vielen Versuchen und Fehlern habe ich jetzt ein skript, dass fast alles macht was ich will.

    der Fehler beim schreiben in die DB waren vermutlich die fehlenden Zeilen:

    cursor.close()
    connection.commit()


    jetzt bin ich dabei, meine "zeile" in getrennte Werte zu teilen, und so in eine weitere DB-Tabelle zu schreiben.

    Da ich noch recht neu bin in der Python-Welt, würde ich mich sehr über Tipps zu meinen Skript freuen.

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

  • na ich hab doof erklärt... musste wegfahren, und konnte nicht ordentlich posten.!!! sorry

    da ich die beiden Zeilen (siehe oben) vergessen hatte, konnte ich zwar sehen dass der Auto-increment ID in meiner DB-Tabelle hochgezählt wurde... aber die Datensätze wurden nicht geschrieben!

    Das Problem ist nun gelöst.

    Sobald ich mein Skript nun fertig umgeschrieben habe, werde ich es hier nochmals vorstellen. Und dann hoffe ich auf eure Kommentare und Verbesserungsvorschläge! ..bis bald.

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

  • so, es funktionier nun:

    jetzt ist noch die Ausgabe für das Logfile optimiert werden, damit ich über CSV oder XML darauf zugreifen kann.

    offene Fragen:

    Wo soll man
    connection = MySQLdb.connect("10.0.0.10", "pi", "raspberry", "temp")
    cursor = connection.cursor() -----> 1x vor den Schleifen oder in die Schleife?
    cursor.execute("""INSERT INTO messwerte......)""" %( zeile))
    cursor.close() -----> 1x vor den Schleifen oder in die Schleife?
    connection.commit() -----> 1x vor den Schleifen oder in die Schleife?
    connection.close()
    in Python(2.7) am besten ins Skript setzen?

    Kann man im Logfile am RasPi immer den letzten Messwert in die erste Zeile schreiben? Wenn ja, wie?
    (Mein Versuch mit logfile.seek(0,0) und logfile.write(zeile + "\n") klappt derzeit so nicht!)

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

    Einmal editiert, zuletzt von RasPi-Azubi (29. April 2014 um 19:23)


  • Ungetestet, aber sollte so klappen. Ich hab mir angewöhnt SQL Queries immer in docstrings zu schreiben. Bin mir grad nicht sicher on NULL nicht "NULL" sein müsste....probiers aus ;)

    Code
    timestamp = datetime.datetime.utcnow()

    habe ich nun durch:

    Code
    timestamp = datetime.datetime.now()

    ersetzt, dadurch bekomme ich die aktuelle Zeit von RasPi in die DB-Tabelle
    Link: https://docs.python.org/2.7/library/datetime.html

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

    Einmal editiert, zuletzt von RasPi-Azubi (30. April 2014 um 16:26)

  • nun kann ich auch über PHP (Apache2 am RasPi) die Messwerte unabhängig von Temp-Logger (siehe oben) auslesen.

    Das PHP-Skript liest eine definierte Liste der Sensoren aus.

    Screenshot_2014-05-03-16-36-32.png

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

  • hier nun der vollständige PHP-Code mit Kommentaren.

    Die Seite kann über das RasPi-Logo gut am Smarty (Smartphone und Tablets) aktualisiert werden...

    Leider dauert bei dieser Methode das Einlesen der Sensoren relativ lange.

    Code von jm_temp_anzeigen.php
    [code=php]

    <!doctype html>
    <?php

    include 'lib/php/jm_configuration.php'; // enthält später einige Variablen zur Grundkonfiguration

    // Funktionen definieren


    //Temperaturen lesen: übernimmt SensorID vom 1-Wire Sensor,
    // und liefert die Temperatur als float (mit 2 Kommastellen)
    // angepasst für das 1-Wire Filesystem am RaspberryPI
    function jm_readTemp($sensorfile){

    $ok = FALSE;
    while ($ok == FALSE) { // auslesen so lange wiederholen bis erfolgreich
    $file = fopen("/sys/bus/w1/devices/" . $sensorfile . "/w1_slave", "r");
    $zeile1 = fgets($file); //z.B.: "b7 00 4b 46 7f ff 09 10 89 : crc=89 YES"
    //echo "zeile1 = " . $zeile1 . "<br>" . "substring = " . substr($zeile1,36,3) . "<br>";
    $zeile2 = fgets($file); // z.B.: "b5 00 4b 46 7f ff 0b 10 9e t=11312"
    //echo "zeile2 = " . $zeile2 . "<br>";
    //echo "substring = ". substr($zeile2,29,5) . "<br>";
    fclose($file);

    if (substr($zeile1,36,3) == "YES") { // wenn auslesen erfolgreich https://php.net/manual/de/function.substr.php
    $ok = TRUE;
    $tempString = substr($zeile2,29,5); // holt die letzten 5 Zeichen aus zeile2
    $temp = floatval($tempString)/1000; // in float wandeln und Dezimalpunkt setzen https://php.net/manual/de/function.floatval.php
    } // if

    return round($temp,2); // runden auf 2 Nachkommastellen https://php.net/manual/de/function.round.php
    } // while
    } //Function
    ?>
    <html>
    <head>
    <title><?php echo $jm_html_titel; ?></title>
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <meta charset="UTF-8">
    </head>

    <body align="center">
    <div align="center"></div>
    <!--<div id="kopf">
    <p align="center">1-Wire Temperatursensoren<br>
    auslesen über PHP</p>
    </div>
    -->
    <div id="inhalt">
    <h2 align="center">Messwerte Test <a href="jm_temp_anzeigen.php"><img src="images/Refresh24.png" alt="refresh" width="24" height="24"></a></h2>
    <p>

    <?php
    $sensor=array(
    "28-000005293706"=>"Dachboden ",
    "28-000005296ee9"=>"Hof (außen) ",
    "28-000005298ddb"=>"Nähzimmer ",
    "28-000005299f57"=>"Test-Sensor ",
    "28-00000529d1a0"=>"Keller ",
    "28-00000529ab41"=>"Keller ",
    "28-00000529dffa"=>"Keller ",
    "28-0000051ae8a6"=>"Brunnen ");
    /*// Daten der derzeit nicht verwendeten Sensoren*/
    $sensor_offline=array(
    "28-000005298765"=>"Wohnzimmer ",
    "28-000005294837"=>"Zimmer ",
    " "=>"");
    ?>



    <?php

    echo "<table align='center' border='1'cellpadding='3' cellspacing='0'><tr><th>SensorID</th><th>Messstelle</th><th>&deg; C</th></tr>";

    foreach($sensor as $x=>$x_value) {
    echo "<tr><td>".$x."</td><td>".$x_value."</td><td>".jm_readTemp($x)."</td></tr>";
    fclose($file);
    } // ende foreach
    echo "</table>";
    ?>

    </p>
    </div>
    <div id="fuss">
    <p align="center">Copyright<strong> &copy;</strong> 2013-<?php echo date("Y");?> ??????</p>
    <p align="center"><a href="jm_temp_anzeigen.php"><img src="images/raspberry_pi.png" alt="RasPi-logo" width="120" height="159"></a></p>
    </div>
    </body>
    </html>
    [/php]


    Code von jm_configuration.php

    [code=php]<?php

    // jm_configuration.php beinhaltet alle wichtigen Konfigurationen für JamesMatik

    $jm_html_titel = "JamesMatik";

    ?>[/php]

    Wie muss ich mein PHP-Skript ändern, damit auch Minus-Temperaturen richtig angezeigt werden?

    Suche Gleichgesinnte für mein Projekt!
    jamesmatik_200.png
    soll ein Baukasten (Software und Hardwaremodule) für Temperatur-Logging, kleine Steuerungsaufgaben und Smart-Home werden.

    Einmal editiert, zuletzt von RasPi-Azubi (4. Mai 2014 um 13:53)

Jetzt mitmachen!

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