1-Wire Temperatur auslesen und "einstempeln"

  • Hallo,

    in einem anderen Fred hab ich ja die Realisation einer Pi-basierten Webcam mit Dateiupload beschrieben.
    Die Lösung ist nun vor Ort im Einsatz, es ist aber ein kleines Problem aufgetaucht.
    Kurz zum Hintergrund.
    Hiermit ermittle ich die Temperatur (/usr/bin/gettemp.sh):

    Code
    #! /bin/bash
    
    
    # Temperatur des 1Wire Sensors auslesen
    tempread=`cat /sys/bus/w1/devices/10-000802c3c507/w1_slave`
    temp=`echo $tempread | egrep -o '.{5}$'`
    temp2=`echo "scale=1; $temp / 1000" | bc`

    Das Skript läuft alle 20 Min:

    Soweit läuft alles ordentlich, wenn auch die Internetanbindung (altes Android Smartphone als WLAN AP) via GPRS grenzwertig ist. Nur Temperaturen unter 10°C werden nicht "eingestempelt" (nur "°C" im Bild).
    Ich vermute es liegt an der Zeile hier:

    Code
    temp=`echo $tempread | egrep -o '.{5}$'`

    Da unter 10°C der String nur noch vierstellig ist, könnte hier (oder in der folgenden Berechnung) das Problem liegen.
    Was muß ich ändern, damit auch negative Zahlen und auch 6stellige Strings (bei 2-stelligen Minusgraden) kein Problem bringen?
    Ist es nicht besser, das t= in der Sensordatei des 1-Wire Temperatursensors abzufangen und alles danach bis zum Zeilenende einzulesen? Nur wie?
    Als Programmier Noob steh ich da voll auf dem Schlauch.

    Gruß
    Onki

  • Hallo,

    Danke für den Tip.
    Kann es gerade nicht ausprobieren, da der RPi ja "im Feld" ist.

    Werden damit dann sowohl positive als auch negative Werte gelesen (und im darauf folgenden Schritt durch 1000 geteilt und auf 1 Dezimalstelle gekürzt)?

    Die Sensordatei sieht ja so in etwa aus:

    Code
    18 01 4b 46 7f ff 08 10 b0 : crc=b0 YES
    18 01 4b 46 7f ff 08 10 b0 t=17500

    Man müsste den "Trigger" irgendwie auf das "t=" setzen oder bin ich da auf dem Holzweg?

    Gruß
    Onki

  • ...Man müsste den "Trigger" irgendwie auf das "t=" setzen oder bin ich da auf dem Holzweg?


    Jein, das haengt davon ab ob in den Daten noch an anderer Stelle eine Zahl am Ende steht. Der Beispielausgabe nach reicht das so. Du kannst aber natuerlich noch nach t= greppen um ganz sicher zu sein. Probiere mal

    Code
    echo "t=17500" | egrep -o 't=[\-]?[0-9]+$' | cut -d= -f2

    Was passiert da? Es wird noch ein t= vor der Zahl erwartet und dann das Ergbnis t=4711 in zwei Teile geteilt (Trenner = '=', also t und 4711) und dann das zweite Element genommen. Du kannst dann auch beim echo andere Texte testweise eingeben um zu testen wie das Ergebnis aussieht. z.B. t=-4711

  • Hallo,

    Vielen Dank. Obwohl ich syntaxmäßig nur "Bahnhof" verstehe, werd ich das am Wochenende vor Ort mal entsprechend ändern und live testen. Mit Kältespray und Handwärme am Sensor kann ich ja jeden Fall durchspielen.

    Gruß
    Onki

  • Hallo,

    Sorry - hat leider mit der Umsetzung etwas gedauert.
    Es funktioniert.
    Ich musste nur noch so ein Hochkomma am Ende von -f2 setzen, dann hat es funktioniert.
    Zumindest mit einstelligen Temperaturwerten. Heute Nacht wird es Frost geben, dann seh ich, ob auch negative Temperaturen angezeigt werden.

    Danke für den Tip.

    Gruß
    Onki

Jetzt mitmachen!

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