Beiträge von RasPi-Azubi

    hmm..

    das Datenblatt hatte ich zwar schon mehrmals angesehen, aber ich bin mit dem Englisch doch etwas auf Kriegsfuß!

    Vermutlich hatte ich daher nicht gründlich genug recherchiert!
    mea culpa, mea culpa, mea maxima culpa …

    Aber zur Rettung meiner Ehre muss ich sagen, dass ich davon ausgegangen bin, dass die Umrechnung bereits vom System erledigt wird, und dann die ordentlichen Werte in das virtuelle Filesystem von 1-Wire geschrieben werden.

    so eine Datei sieht dann folgendermaßen aus:
    ------------
    0c 01 4b 46 7f ff 04 10 bc : crc=bc YES
    0c 01 4b 46 7f ff 04 10 bc t=16750
    ------------
    wenn ich mich richtig informiert habe, dann wird vom System bei jeden Zugriff auf die Datei "/sys/bus/w1/devices/28-000xxxxxxx/w1_slave" der entsprechende Sensor eingelesen, und die "Text-Daten" dann über unsere Skripte zerlegt.

    Also sehe ich hier keinen direkten Zugriff auf die Hardware!

    Aber ich denke das sollte hier mal wirklich abgeklärt werden!

    Ich werde heute im Laufe des Tages einen neuen Sensor 100% wasserdicht verbauen, und mit langem Kabel in die Tiefkühltruhe (zusammen mit Vergleichsthermometer) legen. Dann hoffe ich, dass ich zuverlässig Minus-Temperaturen loggen kann!

    Meine Bitte an das Forum: jeder der hierzu Infos hat, soll diese bitte hier eintragen!

    http://www.msxfaq.de/verschiedenes/…raspi-1wire.htm
    https://raspiprojekt.de/forum/verschie…d-tool-etc.html
    http://www.it-adviser.net/raspberry-pi-t…-1-wire-sensor/
    https://learn.adafruit.com/adafruits-rasp…ensing/overview

    Alle Sensoren außer Dachboden und Testsensor stecken im Steckbrett neben dem RasPi. Daher auch die vergleichbaren Werte.

    Sobald der Testsensor in den positiven Bereich kommt, zeigt auch dieser wieder "vernünftige" Werte.

    aktuell liegt der Testsensor neben den Steckbrett_:

    ----------
    SensorID Messstelle ° C
    28-000005293706 Dachboden 6.5
    28-000005299f57 Test-Sensor 16.81
    28-000005296ee9 Hof (außen) 16.81
    28-000005298ddb Nähzimmer 16.81
    28-00000529d1a0 Keller 16.88
    28-00000529ab41 Keller 16.81
    28-00000529dffa Keller 16.88
    28-0000051ae8a6 Brunnen 16.69
    -----------

    Isolierung gegen Feuchtigkeit:

    1. jeder Pin kleiner Schrumpfschlauch über Lötstelle zum Kabel
    2. mit Heißkleber an der Lochrasterplatine ummantelt

    ..obwohl ich 100%ige Dichtheit nicht garantieren kann, denke ich nicht dass es hier ein Problem gibt, denn :
    -) ich bekomme ein YES in der ersten Zeile beim auslesen
    -) sobald der Sensor aus den Eis befreit war, hat er (noch feucht) wieder brauchbare Werte geliefert.

    Versuchsanordnung:

    1x RasPi
    1.x Steckbrett mit 6-7 Sensoren paralell
    1x Sensor im Dachboden verbaut (jetzt Sonne und um die 30°C)
    1x "Test-Sensor" der war jetzt über 24 Stunden in einer Pillendose im Gefrierfach
    (siehe Bild)
    testsensor.jpg
    die Kupferleitungen um die Dose gewickelt (Wärme über Leitungen vermindern), und alles in ein Handtuch gewickelt.

    wenn ich die Temperaturen mit dem Pathon-skript auslese, dann bekomme ich sehr fragwürdige Werte. Auch beim Auslesen mit PHP sind die Werte nicht glaubwürdig..

    Beispiel Bildschirmausgabe Raspi-Python:

    Code
    1. Durchlauf starten ------------------------> 2014-05-05 16:35:00
    2014-05-05 16:35:01 10 SensorID: 28-000005293706 Dachboden         -->  28.88 °C
    2014-05-05 16:35:02 11 SensorID: 28-000005296ee9 Hof               -->  17.81 °C
    2014-05-05 16:35:03 12 SensorID: 28-000005298ddb Naehzimmer        -->  17.75 °C
    2014-05-05 16:35:04 13 SensorID: 28-000005299f57 Test-Sensor       -->  -0.13 °C
    2014-05-05 16:35:05 14 SensorID: 28-00000529d1a0 Büro              -->  17.94 °C
    2014-05-05 16:35:06 15 SensorID: 28-00000529ab41 Keller            -->  17.81 °C
    2014-05-05 16:35:06 16 SensorID: 28-00000529dffa Keller            -->  17.75 °C
    2014-05-05 16:35:07 17 SensorID: 28-0000051ae8a6 Brunnen           -->  17.69 °C
    -------------------------(Durchlauf fertig)--> 2014-05-05 16:35:07

    Beispiel über PHP (Apache2 am RasPi: (Reihenfoge unterschiedlich)

    ich hätte an dieser Stelle am Test-Sensor eine Temp von -19 °C erwartet!!!
    (denn der Sensor steckte zu diesem Zeitpunkt noch fest im Eis aus dem Gefrierfach.

    die Werte meiner Variablen habe ich per Php- echo ausgeben lassen...

    hier die verwendete Funktion:

    [code=php]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,8); // 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
    [/php]

    Daher nun meine Fragen an das Forum:

    Hab irgend einen Denkfehler in meinem Skripten?
    Hat jemand brauchbare Messwerte im Minus-Bereich?
    Kann es sein, dass Feuchtigkeit die Werte verfälscht?

    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?


    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

    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!)

    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.

    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.

    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

    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);

    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 :)

    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?

    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
    >>>

    Hallo zusammen!

    ich bin hier zwar noch neu im Forum, aber auch ich bin dabei so ein ähnliches Projekt umzusetzen. (Daher hänge ich mich gleich mal in diesen Thread rein...)

    Mein Projekt werde ich demnächst unter --> http://raspiazubi.square7.ch/wp/projekte/1-0-heizungssteuerung/ genauer vorstellen.

    an dieser Stelle möchte ich jetzt mal ein paar Komponenten zeigen, die ich für mein Projekt geplant habe.

    1. Aufputz-Verteilergehäuse (zur Montage aller Komponenten im Keller --> Feuchtraum)
    http://www.pollin.de/

    2. Gehäuse: (Set.. auch nur das Gehäuse erhältlich.)
    http://www.pollin.de/

    3. Spannungsversorgung 240V~ - 12V= - 5V=
    220V Netzsversorgung
    12-14V über KFZ-Batterie für Relais und als Notfall-USV für den Raspberry
    5V für Raspberry und USH-Hub mit Wlan und Surfstick für Notfall-SMS

    4. Temp-Messung etwa 10-15 Messstellen (innen, außen und Solaranlage..)
    mit digitalen Temperatursensoren DS18B20 über 1-Wire Reichelt
    verbaut in Schutzhülsen wie Hier (jedoch aus Kupfer und im Eigenbau aus Kupferrohren)

    5. Ralais-Karten
    Variante A über 1-Wire http://www.denkovi.com/1-wire-eight-c…home-automation (UserManual.pdf)
    (da muss ich aber erst meine Skills verbessern, aber das Teil würde mir ganz toll gefallen :)

    Variante B direkt über die GPIO-Pins ... (da ich nur 5-6 Pumpen und Lüfter schalten will) z.B.:
    -) http://such001.reichelt.at/index.html?&ACTION=446&LA=0
    -) https://raspiprojekt.de/shop/bausaetze…elaiskarte.html
    -) http://www.amazon.de/Kanal-Relay-Relais-Module-Arduino/dp/B00AEIDWXK/ref=pd_sim_diy_7?ie=UTF8&amp%3BrefRID=0YBWA2MRXWM2APBY5B4C&tag=psblog-21 [Anzeige]
    (Da ich unter Umständen einige Pumpen oder Lüfter direkt schalten will, muss ich mich hier jedoch noch schlau machen, ob die Relaiskarten im 220V-Betrieb auch sicher betrieben werden können!)

    6. Schaltgeräte (Kleinschütze / Installationsrelais)
    -) http://www.pollin.de/shop/dt/NDg5OT…R_Z_R230_S.html
    -) http://www.conrad.at/ce/de/Search.html?search=Installationsrelais&filterKontaktart=2+Schlie%C3%9Fer
    -) http://such001.reichelt.at/index.html?&ACTION=446&LA=0