Beiträge von firstfacility


    geht leider nicht der Fehler bleibt.

    hm, blicke grad nicht durch...

    Code
    while 1:
    current_value = wert()
            if current_value < 10.0 and last_value > 10:
                    Message()
            last_value = current_value
            time.sleep(4)

    das läuft aber das nicht ...

    Was mache ich falsch ?

    danke, danke, danke..... genau das läuft. Eine Kleinigkeit vielleicht wenn ich das in einem Thread laufen lassen möchte:


    bekomme ich einen Fehler:

    wieso?
    Schau mal hier:

    1. 0 - 4 Sek.: Messwert 11 => Keine Meldung
    2. 4 - 8 Sek.: Messwert 9.7 => Meldung & last_value auf 9.7 setzen
    3. 8 -12 Sek.: Messwert 9.5 => Keine Meldung, da last_value < 10.0
    4. 12-16 Sek.: Messwert 10.5 => keine Meldung, last_value wieder löschen
    5. 16-20 Sek.: Messwert 12 => keine Meldung
    6. 20-24 Sek.: Messwert 9.8 => Meldung & last_value auf 9.8 setzen

    So soll es wohl sein, oder?


    bin begeistert, stimmt so soll es sein. Hättest du noch ein Stück code für mich ?


    Hallo Andreas,

    ich bekomme einen Mittelwert über 4 Sek. Dein Vorschlag würde mein Problem um einen Durchlauf nach hinten setzen oder ?

    schöne Grüße
    Frank

    der wert() wird alle 4 Sek erneuert, und je nach dem welche aktuelle Leistung grade anliegt kommt immer der gleiche Wert, bis sich eben etwas verändert. Dies kann innerhalb der Zeit time.sleep sein oder auch nicht. Von daher leider keinen Erfolg.
    Aber Danke für den Versuch.


    Hi,
    also nur um erstmal die Gedanken zu sortieren und weil du immer von einer Schleife und dem else-Teil schreibst. Du hast in deinem Script eine while-Schleife, eine if-else-Anweisung und eine for-Schleife. while-Schleife um auf den Wert zu warten, ok. if-Anweisung, um den Wert zu prüfen, ok. Das continue im else-Teil ist überflüssig, da ist nichts mehr zu überspringen. Aber wenn der Event (Message()?) nur einmal ausgeführt werden soll, warum dann in eine for-Schleife, die bis 1 zählt?. Die for-Schleife ist für mich unnütz.

    Woran erkennst du, dass der if-Teil 'unendlich' ausgeführt wird? Wird dann Message() auch unendlich ausgeführt? Der if-Teil kann eigentlich gar nicht unendlich ausgeführt werden, sondern es ist die while-Schleife, die immer wieder durchlaufen wird. Aber sobald die if-Bedingung eintritt müsste nach Message() die break-Anweisung die while-Schleife beenden.

    Gruß

    ja ist etwas verzwickt, meine Idee war hat über die for Schleife nur einen Aufruf zu starten, aber klar ist unnütz. Wenn ich die for schleife rausnehme ändert sich auch nichts. Auf den else Teil könnte ich wohl ganz verzichten ? Wichtig ist für mich das "Message" nur einmal aufgerufen wird wenn der schwellenwert <10 unterschritten wird die Schleife aber aktiv bleibt und beim nächsten unterschreiten des Schwellenwertes wiederum "Message" ausgeführt wird.

    Code
    while 1:
            current_value = wert()
            if current_value < 10.0:
                   Message()
                    break

    Das wäre dann erst mal so aber hierdurch wird die Schleife beendet.


    Make läuft eigentlich nach deiner Aussage ordentlich durch.
    Versuche mal Telegram zu starten.

    Also ein: /bin/telegram-cli -k tg-server.pub -v 3 bringt:

    Wie richte ich denn nun eine neue Rufnummer ein ?

    Hallo Forum,

    ich frage mit meinem Script den Stromverbrauch ab und möchte einen Event auslösen wenn der Verbrauch einen Schwellenwert unterschreitet. Das allerdings nur einmal, dafür habe ich es mit einer Schleife versucht:

    Code
    while 1:
            current_value = wert()
            if current_value < 10.0:
                    for i in [1]:
                            Message()
                    break
            else:
                    continue

    Der else Teil läuft wie gewünscht, also wert > 10 mache nichts und warte, aber der If Teil wird entweder unendlich ausgeführt, oder die Schleife beendet sich nach dem Message() einmal ausgeführt wurde.
    Ist die Schleife der richtige weg für mich ? Ich weiß das es für die GPIO´s einen Interrupt gibt der die Veränderung feststellt, aber so etwas läuft wohl hierfür nicht. Hätte jemand noch eine Idee ?

    Gruß
    Frank


    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 ?

    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 ?


    [/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)

    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 ?

    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

    Hallo Forum,
    ich möchte gern anhand des aktuellen Stromverbrauchs eines Gerätes eine Session auslösen. Hierzu habe ich eine Steckdose von AVM gefunden die Dect200 die den aktuellen Stromverbrauch missen kann. Soweit ich es bisher verstanden habe kann ich über eine API die Steckdose schalten bzw auslesen. Was ich bisher gefunden habe sin PHP Scripts die das übernehmen. In Python findet Google auch etwas wie zB. Fheim aber die sagen nicht wie sie es gemacht haben. Hätte jemand einen Tipp wo ich mich einlesen kann, oder ein Beispiel das mir helfen könnte ?

    Gruß
    Frank