Ausgabe in Hex

  • Hallo Forum,
    ich habe ein Problem mit einen Script bei dem ich nicht weiterkomme, vielleicht kann mir jemand helfen. Ich frage einen Wert ab mit dem ich eine Aktion auslösen möchte:

    def my_callback(channel):
    leistung = (float(wert(dev_id)) / 1000)
    if leistung < 10(channel):
    print "Maschine aus"
    return True
    else:
    print "Maschine an"
    return True

    print wert
    print my_callback

    Wenn ich das Script ausführe bekomme ich für den "wert" eine Zahl zb. 35. Allerdings läuft das ganze nicht da der wert für die Variable my_callback in Hex ausgegeben wird:
    <function my_callback at 0x4f6d30>
    Was mache ich falsch ?

    Gruß
    Frank

  • Der Code ist zwar mangels Einrückungen schwer zu lesen, aber was soll "print my_callback" ausgeben? my_callback ist keine Variable, sondern eine Funktion, ohne (Eingangs-) Parameter funktioniert die nicht. Außerdem: Sie gibt immer "True" zurück - ist das so beabsichtigt?

  • ich habe den Code als Text angefügt. Ich frage mit "wert" eine Leistung ab. Wenn ich mit print wert die Daten abfrage bekommen ich die richtige Leistung angezeigt.
    Ich habe versucht über eine while Schleife bei Veränderung eine Aktion auszulösen.

    Geht nur nicht, da er die Veränderung nicht mitbekommt. Ich habe es mit < 10 definiert. Also kleiner 10 mache dies größer 10 mache das. Das Läuft aber nicht da die Veränderung durch erneutes Aufrufen von "wert" erfolgen muss. Von daher dachte ich mir ich definiere einen callback channel.

    Ich bekomme es aber nicht hin das der Wert von zB 35 übernommen wird sondern es wird nur der Hex Wert übergeben, und das bringt mich nicht weiter.

    Liege ich da falsch ?

  • Ich habe noch () drangehaengt ;)

    Wenn Du

    Code
    print call_back

    aufrufst wird die Hexadresse der call_back Def ausgegeben. Wenn Du () benutzt wird call_back aufgerufen und der return Wert ausgegeben.

    Da Deine call_back nur true oder false returned wird niemals Dein Wert angezeigt werden sondern nur true oder false. Also musst Du Dich entscheiden ob Du den Wert oder true/false returnen willst. Oder Du returnst ein Liste mit einem Wert und true/false

    :no_sad: ... Kein raspiBackup - kein Mitleid ... :no_sad:

    Mein Raspberry Zoo

    3 * RPi1B, 2 * RPi3B, 2 * RPI4, 1 * CM4, 1 * RPi5

    Edited once, last by framp (July 8, 2015 at 9:31 PM).


  • [/quote]

    Vielen Dank für deine Hilfe. Ich vermute du meinst das so wie oben ?
    Ich bekomme in beiden Varianten einen Fehler:
    result = my_callback()
    TypeError: my_callback() takes exactly 1 argument (0 given)

  • Leider läuft es nicht so wie gewollt. Der Stromverbrauch wird immer nur einmal eingelesen und Veränderungen bleiben unberücksichtigt. Ich bin heute nochmal von vorn angefangen und habe die Abfrage der Daten in eine Datei ausgelagert. Nun mache ich folgendes:

    Code
    def wert(str):
            value = "temptrok.py"
            execfile (value)
            time.sleep(10)
            return value
    while 1:
            print wert(hex)
            time.sleep(10)

    Als Ausgabe bekomme ich nun meine Leistungswerte:
    root@todesstern:~l# python versuch.py
    0.0
    0.0
    38.26
    usw
    So weit so gut, wenn ich nun aber den Wert nutzten will passiert nichts:

    Code
    def wert(str):
            value = "temptrok.py"
            execfile (value)
            time.sleep(10)
            return value
    if wert <  10:
            print "aus"

    Bei einer Leistung von 0 müsste nun "aus" geschrieben...wird aber nicht. Ich denke er kann mit dem Wert nichts anfangen. Was kann ich tun ?

    Edited once, last by firstfacility (July 9, 2015 at 8:09 PM).

  • Es gibt einen syntaktischen Unterschied ob Du auf die Variable wert zugreifst oder die Funktion wert aufrufst.

    Code
    print wert # die Variable Wert
    print wert() # das Ergebnis des Funktionsaufrufs der Funktion wert


    Deine Funktionsdefinition von wert erwartet noch einen Parameter (str) der in der Funktion nicht benutzt wird. Ein ähnliches Problem hattes Du schon weiter oben. Irgendwie sieht mir Dein Code nach copy & paste aus ohne das Du verstehst was er eigentlich bewirkt.

    :no_sad: ... Kein raspiBackup - kein Mitleid ... :no_sad:

    Mein Raspberry Zoo

    3 * RPi1B, 2 * RPi3B, 2 * RPI4, 1 * CM4, 1 * RPi5

    Edited once, last by framp (July 9, 2015 at 10:43 PM).


  • Es gibt einen syntaktischen Unterschied ob Du auf die Variable wert zugreifst oder die Funktion wert aufrufst.
    Deine Funktionsdefinition von wert erwartet noch einen Parameter (str) der in der Funktion nicht benutzt wird. Ein ähnliches Problem hattes Du schon weiter oben. Irgendwie sieht mir Dein Code nach copy & paste aus ohne das Du verstehst was er eigentlich bewirkt.

    Jep, du beschreibst mein Problem sehr präzise. Wenn du das so meinst :

    def wert(str):

    Funktioniert nur leider auch nicht.....

    Ich versuche schon zu verstehen was ich da mache, aber ich gebe zu, dass ich von Python keine Ahnung habe, aber deshalb frage ich dich/euch ja um Hilfe zu bekommen. Wenn mir dann noch jemand sagt was ich falsch mache bin ich ja schon glücklich. Ist das der falsche Ansatz ?

  • ...Ich versuche schon zu verstehen was ich da mache, aber ich gebe zu, dass ich von Python keine Ahnung habe, aber deshalb frage ich dich/euch ja um Hilfe zu bekommen.


    Ich denke Du solltest mal ein Python Tutorial durchgehen um die Basics zu lernen.

    Quick and dirty Erklärung so wie ich Dein Verständnisproblem verstehe:

    1) Eine Variable hat einen Namen und wird mit ihrem Namen angespochen um ihren Wert zu repäsentieren

    Code
    variable=42
    print variable

    2) Eine Funktion berechnet irgendwas, erwartet i.A. einen Parameter zur Berechnung und liefert an Ende ein Ergebnis. Wenn der Parameter fehlt gibt es Fehler.

    Code
    def berechneWert(parameter):   # berechnet x²
         return parameter*parameter


    Der Aufruf einer Funktion sieht syntaktisch wie folgt aus

    Code
    zahl=42
    quadrat=berechneWert(zahl)
    print quadrat
    
    
    oder
    
    
    print berechneWert(42)

    Wenn Du nun denselben Namen für eine Variable und für eine Funktion benutzt muessen bei der Benutzung der Funktion immer ()rn am Ende stehen.

    Also

    Code
    berechneWert=4711 
    print berechneWert # Der Wert der Variable wird ausgegeben
    print berechneWert(42) # Der Wert der von der Funktion berechneten Wert wird ausgegeben - Da sind Klammern und in denen Parameter für die Funktion

    :no_sad: ... Kein raspiBackup - kein Mitleid ... :no_sad:

    Mein Raspberry Zoo

    3 * RPi1B, 2 * RPi3B, 2 * RPI4, 1 * CM4, 1 * RPi5

    Edited once, last by framp (July 9, 2015 at 11:27 PM).

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!