Temperaturmessung mit Adafruit

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Julian192837465
User
Beiträge: 3
Registriert: Sonntag 22. Oktober 2017, 21:38

Hallo,

ich beschreibe im Folgenden mal mein Problemchen. Ich bin absoluter Anfänger und hoffe auf euer Verständnis :) . Ich vermute die Lösung ist extrem simpel. Leider komme ich auch mit viel Recherchieren und Ausprobieren nicht voran.

Ich habe an meinem Raspberry Pi den Temperatursensor DHT22 angeschlossen und nutze ein Python Skript von Adafruit um die Messwerte aufzunehmen. Das Skript gibt folgende Werte aus: (58.134213, 20.244552). Ich habe keine Ahnung welche Art Variable oder Liste das ist.

Nun möchte ich den zweiten Wert verwenden also schreibe ich

Code: Alles auswählen

var2 = var1[1:2]
Das ergibt für var2 so etwas wie: (20.244552,)

Versuche ich die Variable zu konvertieren passiert nichts:

Code: Alles auswählen

var2 = str(var1[1:2])
Ergebnis: (20.244552,)

Egal wie ich hin und her konvertiere das Listenformat bleibt immer erhalten.

Hier der Code aus dem Adafruit Skript:

Code: Alles auswählen

def read(sensor, pin):
    # Validate GPIO and map it to GPIO base and number.
    gpio = pin_to_gpio.get(str(pin).upper(), None)
    if gpio is None:
        # Couldn't find in mapping, check if pin looks like GPIO<base>_<number>
        match = re.match('GPIO([0123])_(\d+)', pin, re.IGNORECASE)
        if match is not None:
            gpio = (int(match.group(1)), int(match.group(2)))
    if gpio is None or gpio[0] < 0 or gpio[0] > 3 or gpio[1] < 0 or gpio[1] > 31:
        raise ValueError('Pin must be a valid GPIO identifier like P9_12 or GPIO1_28.')
    # Get a reading from C driver code.
    result, humidity, temp = driver.read(sensor, gpio[0], gpio[1])
    if result in common.TRANSIENT_ERRORS:
        # Signal no result could be obtained, but the caller can retry.
        return (None, None)
    elif result == common.DHT_ERROR_GPIO:
        raise RuntimeError('Error accessing GPIO. Make sure program is run as root with sudo!')
    elif result != common.DHT_SUCCESS:
        # Some kind of error occured.
        raise RuntimeError('Error calling DHT test driver read: {0}'.format(result))
    return (humidity, temp)
Auch daraus werde ich nicht so ganz schlau und weiß wie ich mit dem Wert umgehen sollte.
Das Ziel ist am Ende eine Dezimalzahl zu bekommen, die ich runden kann und letztlich dann in einer Mail verschickt wird.

Vielen Dank!

Julian
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist ein tupel. Wenn du das (oder jede andere Sequenz) slicest bekommst du eine Teilsequenz zurück. Du willst aber einen wert an einem bestimmten Index. Da greifst du mit sequenz[indxex] drauf zu.
Julian192837465
User
Beiträge: 3
Registriert: Sonntag 22. Oktober 2017, 21:38

Habe jetzt tatsächlich kurz nach Posten der Frage eine Lösung gefunden: :roll:

Code: Alles auswählen

Temp = str(Temp[1:2])
Temp = float(Temp[1:3])
Temp = '{0:0.1f}'.format(Temp)
Da kommt dann z.B. 20.0 raus.

Das geht aber sicher eleganter oder?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Habe ich schon geschrieben wie es eleganter geht.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Julian192837465: da Du Deinen eigentlichen Code nicht zeigst, kann man Dir nicht helfen wirklich helfen, ohne raten zu müssen.

Code: Alles auswählen

humidity, temperature = read(sensor, pin)
send_mail("Die Temperatur ist {:.1f}°C".format(temperature))
Julian192837465
User
Beiträge: 3
Registriert: Sonntag 22. Oktober 2017, 21:38

Hab es! Danke euch!

Fand es überflüssig meinen Code zu zeigen da es wirklich nur an dem Wert hing. Ansonsten waren da nur if/else Funktionen etc. Habe mir da sehr einfache Schnipsel zusammengebastelt.
Antworten