[Gelöst]Temperaturwerte isoliert aulesen

  • Hi Leute,
    folgendes Skript liest wie erwünscht sowohl Temperatur als auch Luftfeuchtigkeit aus.
    Die Werte schreibe ich mittels eines Shell-Skriptes jede Minute in eine Datenbank

    Da ich die Datenbankwerte allerdings isoliert benötige, soll das Skript sowohl Temperatur als auch Luftdruck getrennt auslesen.
    Das aber funktioniert nicht.
    Folgender Versuch wird mit folgender Fehlermeldung quittiert....
    Skript:

    Fehlermeldung:

    Code
    root@raspberrypi:/home/tklustig/Skripte# python AdafruitDHT_copy.py 11 4
    Traceback (most recent call last):
     File "AdafruitDHT_copy.py", line 20, in <module>
       print('Temperatur:{0:0.1f} Grad Celsius'.format(temperature))
    ValueError: Unknown format code 'f' for object of type 'str'

    bzw.

    Code
    root@raspberrypi:/home/tklustig/Skripte# python AdafruitDHT_copy.py 11 4
    Traceback (most recent call last):
     File "AdafruitDHT_copy.py", line 20, in <module>
       print('Temperatur:{1:0.1f} Grad Celsius'.format(temperature))
    IndexError: tuple index out of range

    wie muss ich codieren,damit mein Vorhaben gelingt?

    Einmal editiert, zuletzt von tklustig (28. Februar 2017 um 19:06)

  • Adafruit_DHT.read_retry(sensor, pin)

    liefert 2 Werte. Diese hinterlegst du in 2 Variablen. Ein "getrenntes auslesen" funktioniert mit dieser Funktion nicht. Wenn du das (warum auch immer) trotzdem willst dann musst du dir eine eigene schreiben.
    https://github.com/adafruit/Adafr…T/common.py#L79
    Letztlich wird von dem Module das verwendet: https://github.com/adafruit/Adafr…y_Pi_2_Driver.c

    print('Temperatur:{1:0.1f} Grad Celsius'.format(temperature))

    kann nicht funktionieren da du als Index 1 vorgibst, der format() aber nur eine Variable gibst. Wenn dann müsste diese Zeile also so aussehen:

    print('Temperatur:{0:0.1f} Grad Celsius'.format(temperature))

    Ansonsten einfach mal mit format() auseinandersetzen und die doc dazu lesen ;)


  • Da ich die Datenbankwerte allerdings isoliert benötige, soll das Skript sowohl Temperatur als auch Luftdruck getrennt auslesen.
    Das aber funktioniert nicht.

    Das das nicht funktioniert, liegt daran, dass die Methode 2 Werte zurück gibt, die auch zugeordnet werden müssen.

    Aber:
    Ich versteh den 1. Satz oben nicht:
    Was hindert dich daran, die Werte aus der DB separat zu lesen?
    Wie ist das "Datenbankwerte allerdings isoliert benötige" zu verstehen... ???

  • Hallo,

    ersetz' die Zeile

    [code=php]temperature = Adafruit_DHT.read_retry(sensor, pin)[/php]

    durch

    [code=php]_ , temperature = Adafruit_DHT.read_retry(sensor, pin)[/php]

    dann funktioniert es. Erklärung: wie oben schon erwähnt ist, liefert `Adafruit_DHT.read_retry(sensor, pin)`zwei Werte zurück. Wenn du die nur an einen Variablennamen bindest, dann ist die Variable ein Tupel mit zwei Werten. mit `_, temperature` weist du die nicht benötigte Feuchtigkeit die "Wegwerfvariable" `_` zu.

    Ansonsten:

    Zitat

    Was hindert dich daran, die Werte aus der DB separat zu lesen? Wie ist das "Datenbankwerte allerdings isoliert benötige" zu verstehen... ???


    würde mich auch mal interessieren - wenn du keinen kaputten DB-Entwurf hast und Temperatur und Feuchtigkeit in zwei getrennte Spalten schreibst, kannst du ohne Probleme auch einzeln abfragen.

    Die Zeile des 1. Skripts
    [code=php]if humidity is not None and temperature is not None[/php]
    kann man einfacher schreiben:
    [code=php]if humidity and temperature:[/php]
    `is not None` ist eine doppelte Verneinung = eine Bejaung :)

    Gruß, noisefloor


    Gruß, noisefloor

  • Du hast aber hoffentlich verstanden dass dein ursprüngliches Anliegen Quatsch war?

    Es spricht absolut nichts dagegen [code=php]humidity,temperature = Adafruit_DHT.read_retry(sensor, pin)[/php] zu verwenden.
    Wie dann dein INSERT in deine Datenbank aussieht, oder die allg. Behandlung dieser beiden Werte aussieht, ist hiervon gänzlich unabhängig.

Jetzt mitmachen!

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