problem mit print

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo liebes Forum,bin Anfänger,in Python , Linux u. Raspberry
    hoffe es kann mir jemand helfen?


    """
    dht22.py
    Temperature/Humidity monitor using Raspberry Pi and DHT22.
    Data is displayed at thingspeak.com
    Original author: Mahesh Venkitachalam at electronut.in
    Modifiziert von Armin Apolloner März 2017
    """
    import sys
    import RPi.GPIO as GPIO
    from time import sleep
    import Adafruit_DHT
    import urllib2
    import os
    myAPI = "782HOZPKR44LOVOU"

    def getSensorData_out():
    RH_out, T_out = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 23)
    return (str(RH_out), str(T_out))

    def getSensorData_in():
    RH_in, T_in = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 24)
    return (str(RH_in), str(T_in))

    def getPiCpuTemp():
    cpuT = int(open("/sys/class/thermal/thermal_zone0/temp").read()) / 1e3
    cpuT = round(cpuT,1)
    return (str(cpuT))

    def main():
    print "Start..."
    baseURL = 'https://api.thingspeak.com/update?api_key=%s' % myAPI
    while True:
    try:
    RH_out, T_out = getSensorData_out()
    RH_in, T_in = getSensorData_in()
    cpuT= getPiCpuTemp
    f = urllib2.urlopen(baseURL +
    "&field1=%s&field2=%s&field3=%s&field4=%s&field5=%s"\
    % (T_out, RH_out, T_in, RH_in, cpuT))
              
    print "Messung" ,f.read(),"Temp out",(T_out), "Feuchte out",(RH_out),\
    "Temp in",(T_in), "Feuchte in",(RH_in), "Pi CPU Temp",(cpuT)
    f.close()
    sleep(15) #upload Wert alle 15 sek.
    except:
    print "Ende..."
    break
    #call main
    if __name__ == '__main__':
    main()

    "Bei print stimmt alles soweit nur bei "Pi CPU Temp",(cpuT)" kommt anstelle von" 55 "nur "<function getPiCpuTemp at ox7572fef0>"

    MfG
    Armin Apolloner

    Erledigt sorry

    cpuT= getPiCpuTemp ------> cpuT = getPi Cpu Temp()

    MfG
    Apo

    es fehlte die Klammer

    Einmal editiert, zuletzt von Apo1 (1. April 2017 um 15:57)

  • Die runden Klammern machen echt was aus...

    Jupp :) . Kurze Erklärung noch dazu:
    Wenn Du

    Code
    puT= getPiCpuTemp

    schreibst wird der Variable die Adresse der Funktion zugewiesen. Diese siehst Du dann auch bei der Ausgabe

    Code
    <function getPiCpuTemp at ox7572fef0>

    .
    Wenn Du

    Code
    puT= getPiCpuTemp()

    benutzt wird der Variable der Ergebnis des Funktionsaufrufs zugewiesen. Und dann zeigt die Ausgabe auch den richtigen Wert ;)

    Manchmal will man aber auch so eine Funktionalitaet. Wenn man z.B. zur Laufzeit unterschiedliche Funktionen nur über eine Variable benutzen will.

    [code=php]
    def f_a():
    return "f_a"

    def f_b():
    return "f_b"

    def main():
      
    f=f_a // die variable f zeigt auf f_a
    print f() // aufruf von f prints f_a

    f=f_b // die variable f zeigt auf f_b
    print f() // aufruf von f prints f_b
    [/php]

  • Apo1

    - ``getSensorData_out()`` und ``getSensorData_in()`` ist das ein uns selbe. Übergib die Pins der Funktion als Parameter und mach nur eine Funktion daraus.
    - Die Klammern um nach ``return`` sind so gewollt? Willst du ein Tupel zurückgeben?
    - Schau dir das ``with`` Statement an.
    - Nackte excepts sind ein Fluch und kein Segen. Hier wird alles abgefangen und du weisst nicht, was das Problem war. Überlegt dir, was für Fehler du abfangen willst.

    Auch entspricht deine Namensgebung nicht der Namenskonvention von Python. Benenne Variablen so, dass auch andere wissen, um was es geht?
    Das Mischen von Englisch und Deutsch ist "uncool". Entweder alles deutsch oder englisch.


    Code
    def read_cpu_temp():
         with open('/sys/class/thermal/thermal_zone0/temp', 'rb') as f:
              return float(f.readline().strip()) / 1000


    https://www.python.org/dev/peps/pep-0008/

Jetzt mitmachen!

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