Temperatursensor auslesen und email senden

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

    danke für die Tipps, habe es abgeändert und es funktioniert auch. Was aber immer noch nicht tut ist das die aktuell gemessene Luftfeuchtigkeit nicht in meiner Message erscheint.

    Zeile passt irgendwie nicht:

    [code=php]MESSAGE="Die Luftfeuchtigkeit im Wohnzimmer beträgt =$Hum bitte lüften"[/php]

    Übrigens ist mein Mail-Account bei Arcor, aber wie gesagt das funktioniert ja.

    P.S.: Eine Temperaturabfrage wäre sicherlich auch interessant, aber noch Sinnvoller wäre doch dann der Taupunkt oder.
    Man müsste dann die beiden Werte verrechnen, hat das schon mal jemand gemacht?

    Gruß Rooki

  • Das funktioniert deshalb nicht weil zu dem Zeitpunkt wo du die MESSAGE erstellst noch gar keine Variable Hum angelegt oder gar befüllt wurde ;)

    Entweder du setzt MESSAGE=.. erst viel weiter unten im Script, oder du setzt einen Platzhalter ein und lässt diesen dann später mit dem Wert ersetzen - letzteres würd ich bevorzugen da schöner ;)

    Spoiler anzeigen

    [code=php]
    #Mail Einstellungen
    SMTPFROM='pi@anbieter.de' #Absender
    SMTPTO='add@anbieter.de' #Empfänger
    SMTPSERVER='mail.anbieter.de' #SMTP-Server
    SMTPUSER='meinuser' #Benutzer
    SMTPPASS='passwd' #Passwort
    SMTPTLS=1
    SUBJECT="Werte sind zu hoch!"
    MESSAGE="Die Luftfeuchtigkeit im Wohnzimmer beträgt %HUM%% und die Temperatur beträgt %TEMP%*C. Bitte lüften."
    #Sensor Variablen
    MAXtemp=35
    MAXhum=50
    # CONFIG - END

    WERTE="Humidity = 51.12 % Temperature = 20.40 *C"

    Hum=$(echo $WERTE | awk {'print $3'})
    Temp=$(echo $WERTE | awk {'print $7'})
    echo "Humidity: $Hum"
    echo "Temperature: $Temp"

    MESSAGE=${MESSAGE//%HUM%/$Hum}
    MESSAGE=${MESSAGE//%TEMP%/$Temp}

    if [ "$(echo "$Hum > $MAXhum" | bc)" == 1 ]; then
    echo "E-Mail wird verschickt"
    if [ -n "$SMTPTLS" ] && [ $SMTPTLS == 1 ]; then
    sendEmail -f $SMTPFROM -t $SMTPTO -u $SUBJECT -m $MESSAGE -o tls=yes -s $SMTPSERVER -xu "$SMTPUSER" -xp "$SMTPPASS"
    else
    sendEmail -f $SMTPFROM -t $SMTPTO -u $SUBJECT -m $MESSAGE -s $SMTPSERVER -xu "$SMTPUSER" -xp "$SMTPPASS"
    fi
    fi
    [/php]

  • Hallo,

    schau dir mal das an:

    Code
    #! /bin/bash
    
    
    a=16.7
    message="a hat den Wert: $a"
    echo $message
    Code
    #! /bin/bash
    
    
    message="A hat den Wert: $a"
    a=16.7
    echo $message
  • Berechnung des Taupunkt gelöscht: Quellcode siehe Antwort von meigrafd!

    Immerhin hat es zum Ausprobieren motiviert!
    Natürlich sollte man mein Programm-Schnipsel in die gewünschte Programmiersprache übertragen ...
    Die Berechnung des Taupunktes sollte, meiner Meinung nach, unbedingt berücksichtigt werden!

    Gruß

    Michael

    Einmal editiert, zuletzt von michaMEG (6. Januar 2015 um 03:57)

  • michaMEG: Gemäß der Erfahrungen des TE's wird er diesen doch recht unübersichtlichen Schnipsel kaum verstehen, also bringt das nu nicht allzuviel

    Deshalb Bitte etwas mehr Mühe geben mit solchen Posts :fies: Sonst wird das jetzt noch 5 weitere Posts benötigen bis dein Schnipsel "entschlüsselt" wurde...

    //EDIT: Und gewöhn auch Du dir bitte an CODE im dafür vorgesehenen Tagg zu umschließen, in diesem Fall [ php ]
    (oben rechts im Editor)

    Dein Schnipsel etwas besser lesbar und für die Konsole:

    :s


  • Taupunkt....
    Man müsste dann die beiden Werte verrechnen, hat das schon mal jemand gemacht?

    Moin,

    allerdings gehe ich den Weg und messe die Luft.- und Mauertemp. mittels Sensoren um so die max. zulässige Luftfeuchtigkeit zu berechnen.
    Da mein FH im Winter nicht bewohnt ist kann ich die Temp. drastisch absenken um Schimmelbildung zu vermeiden und gegebenfalls einen Lufttrockner zuschalten.
    Somit ist sichergestellt, dass sich der Taupunkt immer tief im Mauerwerk befindet.

    Hier der Codeschnipsel zum Testen: taupunkt.sh , welcher mit taupunkt.sh 20 10 aufgerufen wird.
    20 = Lufttemp
    10 = Mauertemp.
    Diese Werte werden bei mir im vollständigen Code ermittelt und übergeben.

    PS.: bash und bc sind sowas von MÄCHTIG warum noch PHP mit verflechten....:stumm:

    Einmal editiert, zuletzt von rpivpn (5. Januar 2015 um 17:00)

  • rpivpn: Ein Tip der mir gleich am Anfang deines Scripts auffällt:

    Um bei echo einen Zeilenumbruch zu verhindern einfach die Option -n verwenden.
    Also anstatt:

    Code
    echo "Die Luftfeuchtigkeit darf nicht mehr als " | tr -d '\n'


    lieber das nutzen:

    Code
    echo -n "Die Luftfeuchtigkeit darf nicht mehr als "

    Ansonsten netter bc-Code :thumbs1:

    Vielleicht noch etwas wissenswertes:
    http://debaday.debian.net/2007/10/11/bc-…ssing-language/
    http://www.linuxjournal.com/article/9891

  • Hi,

    also dass die $Hum erst erstellt werden muss und dann die Message gesendet wird leuchtet ein.

    Das habe ich auch so abgeändert bzw. ich habe es weiter nach unten verschoben, weil ich nicht weiß wie man einen Platzhalter setzt und diesen später einfügt.

    Die Sache mit PHP scripts ist mir völlig neu und ich hab keine Ahnung wie man ein solches script benennen muss Geschweige denn wie man es aufruft.

    Ich finde es ja toll dass so viele Leute sich mit ihren Vorschlägen beteiligen und würde auch gerne dazu lernen bzw. es anwenden, aber ihr dürf nicht davon ausgehen dass alle Leute die sich mit solchen Themen auseinander setzten euer Wissen haben.

    Und auch gerade deswegen habe ich mich ja hier angemeldet.

    Gruß Rooki

  • weil ich nicht weiß wie man einen Platzhalter setzt und diesen später einfügt.

    Guck in den Spoiler von Beitrag#22, da steht der fertige Code drin :fies:

    wie man ein solches script benennen muss Geschweige denn wie man es aufruft.

    Dateiendungen sind völlig wurscht. Die Datei kann auch bla.blub heißen oder gar völlig ohne Dateiendung... Wichtig ist welcher Interpreter den Code verarbeitet ;)
    Beispiel hierfür wäre zB das Script raspi-config oder rpi-update ... beides sind bash Scripte, die aber durch Datei-Ausführ-Rechte und den Shebang vom richtigen Interpreter verarbeitet werden.


  • lieber das nutzen:

    Code
    echo -n ...

    Moin,

    jawohl, gehe ich voll mit, bei "einfachen" Echo´s.
    Nur würde es die 2. echo Zeile unbraucbar machen:
    echo "define pa (n) {
    .......
    (rh / 1.0)" | bc -lq

    Hier muss mit | tr -d '\n' eingerückt/der Zeilenumbruch entfernt werden.

    Bye

    Jürgen


  • Nur würde es die 2. echo Zeile unbraucbar machen:
    echo "define pa (n) {
    .......
    (rh / 1.0)" | bc -lq

    Hier muss mit | tr -d '\n' eingerückt/der Zeilenumbruch entfernt werden.

    indeed. Aber auch hierfür hätt ich ne Lösung :fies:

    "taupunkt.sh"


    ...ich kann von sowas einfach nicht die Finger lassen, sorry :daumendreh2:


  • Die Sache mit PHP scripts ist mir völlig neu und ich hab keine Ahnung wie man ein solches script benennen muss Geschweige denn wie man es aufruft.

    Hallo Rooki,

    nur kurz ein kleines Beispiel für php (Datei /home/pi/hello.php erstellen):

    PHP
    <?php
      echo "Hello World";
    ?>
    [/php]
    Also zuerst muss natürlich php installiert sein!
    [code]
    pi@raspi ~ $  sudo apt-get update
    pi@raspi ~ $  sudo apt-get install php

    Falls ich das Programm so ausführen will, gebe ich in der Eingabeaufforderung folgendes ein :

    Code
    pi@raspi ~ $  php /home/pi/hello.php
    Hello World
    pi@raspi ~ $  php ./hello.php
    Hello World

    Ich kann aber auch das Programm so schreiben und ihm Ausführungsrechte vergeben:

    Genauso mit der Shell (/home/pi/hello.sh):

    Code
    echo "Hello, World!"
    Code
    pi@raspi ~ $ ./hello.sh
    Hello, World!

    Oder eben mit Shebang:

    Bash
    #!/bin/bash
    echo "Hello, World!"
    Code
    pi@raspi ~ $ chmod 755 ./hello.sh
    pi@raspi ~ $ ./hello.sh
    Hello, World!

    Einfach mal im Netz nach der gewünschten Programmiersprache suchen:
    für PHP z.B. die Seite: PHP-Handbuch

    PHP kannst Du übrigens auch gut für Webseiten benutzen (z.B. mit apache2 auf dem pi), allerdings dann das Shebang weglassen!
    kleines Beispiel für php (Datei /var/www/hello.php erstellen):

    Dann die Seite im Browser aufrufen:
    http://raspi/hello.php

    Ich hoffe ich konnte dir etwas helfen!

    Gruß

    Micha

    Einmal editiert, zuletzt von michaMEG (6. Januar 2015 um 15:05)

  • Moin,

    danke micha für die Erklärung. Was hat denn PHP denn für ausschlaggebende Vorteile gegenüber eines Shell-Scriptes?
    Könnte man damit ein Webinterface für die "Grafische Abfrage" der Temperaturen z.B. mit dem Handy (Android) machen? Wenn ja, hat jemand so etwas am laufen?

    Bei mir läuft das ja momentan mit Pilight.

    Gruß Rooki

  • Hallo Rocki,

    machen kann man so etwas schon.
    Bei mir Zeige ich ähnlich wie auf der Seite:
    http://wetter.emsystech.de/
    einfach nur die Werte an.
    Da könnte man sicher noch einiges mehr machen!

    Eine Email mit Daten-Plots meiner Temperatur/Feuchte/Druckmessungen versende ich mit einer Mischung aus PHP, PHPMailer und Gnuplot. Aber zuviel durcheinander sollte man sich nicht antun.

    Ich benutze halt gerne PHP um meine Funktionen nicht doppelt schreiben zu müssen.
    Das ginge z.B. mit perl genauso.
    Ferner: Für die Integration von Datenbanken, die XML-Verarbeitung, json, Sockets, GD-Image erstellen, usw. ist alles PHP und Perl vorgesehen und es gibt vieles was man einfach schon benutzen kann (tcpdf, php_serial, PHPMailer, ...). Wobei manchmal trotzdem, wie z.B. bei php_serial, aus php auch Shellbefehle aufgerufen werden.

    Auf dem Pi ist auch python sehr beliebt, benutze ich bisher aber nur selten.
    Will mich aber in Zukunft etwas mehr damit beschäftigen.

    Interesant für Dich ist evtl. auch das rrdtool.
    Wird z.B. auf dieser Seite beschrieben:
    http://www.kompf.de/weather/pionewire.html)

    Gruß

    Micha

    Einmal editiert, zuletzt von michaMEG (6. Januar 2015 um 11:33)

  • Hi,
    also ich habe jetzt den DHT22 mal angeschlossen unf folgendes script am laufen:
    [code=php]#Mail Einstellungen
    SMTPFROM='pi@anbieter.de' #Absender
    SMTPTO='add@anbieter.de' #Empfänger
    SMTPSERVER='mail.anbieter.de' #SMTP-Server
    SMTPUSER='meinuser' #Benutzer
    SMTPPASS='passwd' #Passwort
    SMTPTLS=1
    SUBJECT="Werte sind zu hoch!"
    MESSAGE="Die Luftfeuchtigkeit im Wohnzimmer beträgt %HUM%% und die Temperatur beträgt %TEMP%*C. Bitte lüften."
    #Sensor Variablen
    MAXtemp=35
    MAXhum=50
    # CONFIG - END

    WERTE=$(sudo /home/pi/lol_dht22/loldht 7 | grep Humidity)

    Hum=$(echo $WERTE | awk {'print $3'})
    Temp=$(echo $WERTE | awk {'print $7'})
    echo "Humidity: $Hum"
    echo "Temperature: $Temp"

    MESSAGE=${MESSAGE//%HUM%/$Hum}
    MESSAGE=${MESSAGE//%TEMP%/$Temp}

    if [ "$(echo "$Hum > $MAXhum" | bc)" == 1 ]; then
    echo "E-Mail wird verschickt"
    if [ -n "$SMTPTLS" ] && [ $SMTPTLS == 1 ]; then
    sendEmail -f $SMTPFROM -t $SMTPTO -u $SUBJECT -m $MESSAGE -o tls=yes -s $SMTPSERVER -xu "$SMTPUSER" -xp "$SMTPPASS"
    else
    sendEmail -f $SMTPFROM -t $SMTPTO -u $SUBJECT -m $MESSAGE -s $SMTPSERVER -xu "$SMTPUSER" -xp "$SMTPPASS"
    fi
    fi [/php]
    das läuft schonmal super.
    Wenn ich jetzt weitere 4 Sensoren anschliessen möchte, müsste man das script nochmals erweitern. Wie könnte das aussehen.
    Ich hatte vor die Sensoren an Abgeschnittene Netzwerkkabel in die Dosen zu stecken da ich in jedem Raum 2 Netzwerkdosen habe Versorgung könnte ich evtl. auch extern über ein Patchfeld im Keller einspeisen.
    Was haltet iht davon?

    Gruß Rooki

    Einmal editiert, zuletzt von rooki_1 (7. Januar 2015 um 06:09)

  • Wobei du bei über 90% Außenluftfeuchtigkeit und 20°C Außentemperatur lieber nicht Lüften solltest (falls es nicht gerade Tropisch in deiner Wohnung ist)!
    Bei 90% Außenluftfeuchtigkeit und 3°C Außentemperatur ist es hingegen kein Problem ... :denker:


    Beispiel:
    Außentemperatur: 12 °C
    Außenfeuchte: 95 %
    Außentaupunkt: 11.2 °C
    Innentemperatur: 21 °C
    Innenfeuchte: 55 %
    Innentaupunkt: 11.6 °C
    Resultat: Öffnen des Fensters hat nur einen geringen positiven oder negativen Effekt!

    Jetzt bei 5 °C Außentemperatur:
    Außentemperatur: 5 °C
    Außenfeuchte: 95 %
    Außentaupunkt: 4.3 °C
    Innentemperatur: 21 °C
    Innenfeuchte: 55 %
    Innentaupunkt: 11.6 °C
    Resultat: Fenster öffnen, da sehr guter trocknender Effekt!

    Jetzt bei 18 °C Außentemperatur:
    Außentemperatur: 18 °C
    Außenfeuchte: 95 %
    Außentaupunkt: 17.2 °C
    Innentemperatur: 21 °C
    Innenfeuchte: 55 %
    Innentaupunkt: 11.6 °C
    Resultat: Fenster unbedingt geschlossen halten!!!

    Wobei verändere mal die Höhe deines Temperatur-/Feuchtesensors, kleine Höhenunterschiede machen da schon einiges bei der Temperatur und Feuchte aus!
    Die Oberflächentemperatur deiner Außenwände in der Wohnung sind da auch noch interessant ...

    Einmal editiert, zuletzt von michaMEG (7. Januar 2015 um 09:50)


  • Wenn ich jetzt weitere 4 Sensoren anschliessen möchte,
    ... die Sensoren ... in die Dosen...


    Moin,

    sollen die weiteren DHT22 Sensoren nur in der Wohnung plaziert werden oder einer aussen?


    Die DHT22-Sensoren sollten NICHT IN einer Dose/schlecht belüftetem Gehäuse oder ummittelbar an einer Wand plaziert werden.

    Die Messergebnisse beim DHT22 sind abhängig von der Kabellänge!
    Bei CAT 5 Kabel sind wenige cm bis ca. 15 Meter unkrittisch
    (sofern loldht verwendet wird, bei Adafruit ist schon nach wenigen Metern nix zu holen)
    Bei längerem Kabeln kann getrixt werden, z. B. Stromversorgung unmittelbar am Sensor.

    michaMEG
    In all deinen Beispielen kann bedenkenlos gelüftet werden, ohne dass es zu einer Schimmelbildung kommt, da der Taupunkt geringer ist als die Oberflächentemperatur.

    Bye

    Jürgen

  • Wenn ich jetzt weitere 4 Sensoren anschliessen möchte, müsste man das script nochmals erweitern. Wie könnte das aussehen.

    Keine Ahnung wie genau du das haben möchtest, ich würds erst mal so probieren:

    [code=php]#Mail Einstellungen
    SMTPFROM='pi@anbieter.de' #Absender
    SMTPTO='add@anbieter.de' #Empfänger
    SMTPSERVER='mail.anbieter.de' #SMTP-Server
    SMTPUSER='meinuser' #Benutzer
    SMTPPASS='passwd' #Passwort
    SMTPTLS=1
    SUBJECT="Werte sind zu hoch!"
    MSG="Die Luftfeuchtigkeit @%ORT% beträgt %HUM%% und die Temperatur beträgt %TEMP%*C"

    #Sensor Variablen

    #Format:
    #SENSOR[<GPIOpin>]="<Location>:<MAXtemp>:<MAXhum>"
    SENSOR[7]="Wohnzimmer:35:50"
    SENSOR[11]="Schlafzimmer:35:50"
    SENSOR[15]="Badezimmer:35:50"
    SENSOR[18]="Dachboden:40:80"

    # CONFIG - END

    #----------------------------------------------------------------

    SENDMAIL=0
    MESSAGE=""
    for pin in ${!SENSOR[@]}; do
    WERTE=$(sudo /home/pi/lol_dht22/loldht $pin | grep Humidity)
    Hum=$(echo $WERTE | awk {'print $3'})
    Temp=$(echo $WERTE | awk {'print $7'})
    LOCATION=$(echo ${SENSOR[$pin]} | awk -F':' {'print $1'})
    MAXtemp=$(echo ${SENSOR[$pin]} | awk -F':' {'print $2'})
    MAXhum=$(echo ${SENSOR[$pin]} | awk -F':' {'print $3'})
    echo "Place: $LOCATION \-\> Humidity: $Hum , Temperature: $Temp"
    if [ "$(echo "$Hum > $MAXhum" | bc)" == 1 ]; then
    SENDMAIL=1
    tempMSG=${MSG//%ORT%/$LOCATION}
    tempMSG=${MSG//%HUM%/$Hum}
    tempMSG=${MSG//%TEMP%/$Temp}
    [ -z "$MESSAGE" ] && MESSAGE=$tempMSG || MESSAGE="$MESSAGE\n\r$tempMSG"
    fi
    done

    if [ $SENDMAIL == 1 ]; then
    echo "E-Mail wird verschickt"
    if [ -n "$SMTPTLS" ] && [ $SMTPTLS == 1 ]; then
    sendEmail -f $SMTPFROM -t $SMTPTO -u $SUBJECT -m $MESSAGE -o tls=yes -s $SMTPSERVER -xu "$SMTPUSER" -xp "$SMTPPASS"
    else
    sendEmail -f $SMTPFROM -t $SMTPTO -u $SUBJECT -m $MESSAGE -s $SMTPSERVER -xu "$SMTPUSER" -xp "$SMTPPASS"
    fi
    fi[/php]

  • michaMEG
    In all deinen Beispielen kann bedenkenlos gelüftet werden, ohne dass es zu einer Schimmelbildung kommt, da der Taupunkt geringer ist als die Oberflächentemperatur.

    Würde ich nicht unterschreiben, da die feuchte Luft von Außen sich ja beim Lüften in der Wohnung verteilt und dadurch die relative Luftfeuchtigkeit in der Wohnung steigt!
    Dann ergibt sich in kürzester Zeit eine andere relative Innenluftfeuchte!
    Nach 10 Minuten Lüften sieht die Sache anders aus, da können es schon locker über 70% rel. Feuchte bei einem Taupunkt unter der Zimmertemperatur in der Wohnung werden.

    Bei 18 °C Außentemperatur:
    Außentemperatur: 18 °C
    Außenfeuchte: 95 %
    Außentaupunkt: 17.2 °C
    Innentemperatur: 21 °C
    Innenfeuchte: 55 %
    Innentaupunkt: 11.6 °C
    Resultat: Fenster unbedingt geschlossen halten!!!

    Gruß

    Micha

    Einmal editiert, zuletzt von michaMEG (7. Januar 2015 um 16:34)

  • Hi,

    meigrafd, Danke schonmal für die tolle Idee. Das werde ich ausprobieren, sobald die anderen Sensoren hier sind bzw. wenn ich die so eingebaut habe dass es funktioniert. Ich bin mir wirklich nicht sicher ob das mit den Kabellängen ein Problem wird. Ich dachte mir nur wenn ich schon Netzwerkdosen im ganzen Haus habe, sollte ich diese nutzen.

    Grüße Rooki

    Einmal editiert, zuletzt von rooki_1 (7. Januar 2015 um 16:58)

Jetzt mitmachen!

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