Seite 1 von 1

Schleife erst beim 2. mal ausführen

Verfasst: Dienstag 25. August 2015, 19:29
von firstfacility
Hallo,

ich möchte gern mit einer Schleife meinen Regensensor überwachen. Hierzu sende ich mir beim Auslösen eine Nachricht. Ich habe leider das Problem das ich hin und wieder einen Fehlalarm bekomme (ca 1 mal pro Woche) Um nun Fenster zu steuern wäre es wichtig den Impuls zu überspringen. Hier der Code den ich nutze:

Code: Alles auswählen

def Thread():
        last_value = 1
        #global current_value
        while 1:
                current_value = wert()
                if current_value = 1 and last_value =1:
                        Message()
                last_value = current_value
                time.sleep(4)
th1=threading.Thread(target=Thread)
th1.start()

Wie kann ich erreichen wenn wert() das erste mal 1 ist, die schleife dies ignoriert und erst beim zweiten mal Message() ausführt. Kleine Info noch wenn es regnet wird alle 10 sec eine 1 in wert() geschrieben oder eben eine 0 wenn es nicht regnet. Hätte jemand einen Tipp ?

Gruß
Frank

Re: Schleife erst beim 2. mal ausführen

Verfasst: Dienstag 25. August 2015, 19:34
von BlackJack
@firstfacility: Das ist sicher nicht der Code den Du nutzt denn der ist nicht nur unvollständig sondern compiliert nicht einmal wegen Syntaxfehlern.

Ansonsten sollte der doch das tun was Du erreichen willst.

Re: Schleife erst beim 2. mal ausführen

Verfasst: Dienstag 25. August 2015, 19:46
von nezzcarth
BlackJack hat geschrieben: Ansonsten sollte der doch das tun was Du erreichen willst.
Evtl. noch last_value mit 0 statt 1 initialisieren.

Re: Schleife erst beim 2. mal ausführen

Verfasst: Dienstag 25. August 2015, 20:05
von BlackJack
@nezzcarth: Verdammt ich hätte auf die Details achten sollen. :-)

Re: Schleife erst beim 2. mal ausführen

Verfasst: Dienstag 25. August 2015, 20:12
von firstfacility
sorry ihr habe natürlich recht ich versuche zur Zeit verschiedene Varianten aber auch mit 0 filtert er den ersten wert nicht aus sondern durchläuft gleich die Schleife.

Re: Schleife erst beim 2. mal ausführen

Verfasst: Dienstag 25. August 2015, 20:56
von BlackJack
@firstfacility: Zeig doch mal tatsächlichen Code denn es macht wenig Sinn über Fehler in Code zu reden der vielleicht so ähnlich aussieht, aber den Fehler gar nicht enthält. Und die *Schleife* wird natürlich jedesmal durchlaufen. Muss sie ja auch.

Re: Schleife erst beim 2. mal ausführen

Verfasst: Dienstag 25. August 2015, 21:45
von snafu
Man könnte das auch über eine innere Schleife lösen:

Code: Alles auswählen

while True:
    if get_value() == 1:
        while get_value() == 1:
            show_message()
Durch die vorherige `if`-Abfrage hätte man die erste zu ignorierende 1 wunschgemäß weggeworfen. Das spart das Merken des vorherigen Wertes ein, mag aber für manche nicht so gut lesbar zu sein. Ich würde vermutlich die Variante mit dem Merken des Vorgängers wählen, weil mir das weniger fehleranfällig erscheint.