Ankündigung

Einklappen
Keine Ankündigung bisher.

Ereignis während Script

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Ereignis während Script

    Hallo,

    ich habe mir eine Sequenz für die Gartenbewässerung geschieben. Ich bin leider keine Leuchte im programmieren und überlege jetzt wie ich per KNX-Ereignis ( "Es regnet" und "Abbruch, sind noch im Garten!") die Ausführung vorzeitig stoppen kann. Hier der aktuelle Code:
    Code:
    #!/usr/bin/env python
    lz_mitte = sh.garden.regner.mitte.time() * 60
    lz_links = sh.garden.regner.links.time() * 60
    lz_rechts = sh.garden.regner.rechts.time() * 60
    lz_drop = sh.garden.regner.drop.time() * 60
    
    if sh.garden.regner:
             if sh.sens.wetter.regenschwelle1:
                     sh.garden.regner.mitte(1)
                     time.sleep(lz_mitte)
                     sh.garden.regner.mitte(0)
    
                     sh.garden.regner.links(1)
                     time.sleep(lz_links)
                     sh.garden.regner.links(0)
    
                     sh.garden.regner.rechts(1)
                     time.sleep(lz_rechts)
                     sh.garden.regner.rechts(0)
    
                     sh.garden.regner.drop(1)
                     time.sleep(lz_drop)
                     sh.garden.regner.drop(0)
    
    
             sh.garden.regner(0)
    Vielen Dank für die Tipps!

    Timo

    #2
    Aus dem Bauch raus mit while:

    Code:
    #!/usr/bin/env python
    lz_mitte = sh.garden.regner.mitte.time() * 60
    lz_links = sh.garden.regner.links.time() * 60
    lz_rechts = sh.garden.regner.rechts.time() * 60
    lz_drop = sh.garden.regner.drop.time() * 60
    stop = sh.item.stop
    
    while not stop():
        if sh.garden.regner():
            if sh.sens.wetter.regenschwelle1():
                    sh.garden.regner.mitte(1)
                    time.sleep(lz_mitte)
                    sh.garden.regner.mitte(0)
        
                    sh.garden.regner.links(1)
                    time.sleep(lz_links)
                    sh.garden.regner.links(0)
        
                    sh.garden.regner.rechts(1)
                    time.sleep(lz_rechts)
                    sh.garden.regner.rechts(0)
        
                    sh.garden.regner.drop(1)
                    time.sleep(lz_drop)
                    sh.garden.regner.drop(0)
                    
                    sh.garden.regner(0)
                    stop(1)
        sh.garden.regner(0)
        stop(1)
    Solange sh.item.stop() nicht wahr wird durchläuft er auch die Schleife. Ob das jetzt mit allen Bedingungen so passt muss man anhand der Befehle schauen ... aber so in etwa könnte das aussehen.
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      Super danke! Ich glaube das habe ich gesucht.

      Kommentar


        #4
        Zitat von unknownuser Beitrag anzeigen
        Ich glaube das habe ich gesucht.
        Hi,

        ich glaube nicht, dass Du das gesucht hast. Das obige coding wird die Beregnung überspringen, wenn stop vorher gesetzt ist, aber diese nicht unterbrechen, wenn stop zwischendurch gesetzt wird.
        Ich kann Dir auch nur ans Herz legen, nicht mit sleep() im Minutenbereich in Logiken zu arbeiten, Du blockierst damit einen Thread für die gesamte Zeit. Mir war gar nicht klar, dass das ohne weiteres geht, aber da ist sh.py wohl besser als viele andere logik-Engines...

        Ich würde Dir empfehlen, auf das AutoBlind-Plugin umzusteigen. Das mutiert gerade zu einem relativ allgemeinen Zustandsautomaten (also nicht nur für Jalousien bzw. Rolläden) und sollte Deine Aufgabe spielend erledigen können - ganz ohne programmieren, nur durch Parametriesierung. Der entsprechende Thread ist "Automatische Verschattung" hier im Forum.

        Gruß, Waldemar
        OpenKNX www.openknx.de

        Kommentar


          #5
          Halb und halb ...

          Warum sollte die Unterbrechung nicht funktionieren? Wenn vorher ein stop() aktiv ist wird die Beregnung natürlich auch nicht ausgeführt, aber ich denke das ist klar.
          stop könnte also genauso eine generelle Beregnungssperre sein.

          Das Sleep ist da natürlich recht böse ... von anderen Folgen mal abgesehen kann es dann natürlich sein dass man warten muss bis ein Timer abgelaufen ist und die Beregnung dann unterbricht. Darauf hatte ich gar nicht geachtet.
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #6
            Hallo,

            Waldemar hat Recht.

            Wenn die Beregung einmal läuft, kann man sie - mit der vorgestellten Logik - nicht mehr unterbrechen.
            Das while ist "überflüssig" und könnte mit einem einfachen if ersetzt werden.
            Die Bedingungen müssten vor jedem sh.garden.regner.*(1) überprüft werden.

            Bis bald

            Marcus

            Kommentar


              #7
              Ja jetzt sehe ich es auch

              Ich gehe ja direkt nach dem "while" in ein "if" und bleibe da natürlich kleben.
              Und danach bin ich dann mit dem sleep komplett aufgeschmissen.

              Ich ziehe meine Antworten zurück.
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #8
                Huch! Die Replies habe ich garnicht mehr gesehen.
                ​Eure Kritik an meinem "Code" ist verständlich und einleuchtend.
                Nun gut, es hat meinen Rasen durch den Sommer 2015 gebracht, im Sommer 2016 läuft es dann dank euch und ​AutoBlind-Plugin besser. Wird mir das mal anschauen!
                Dankeschön

                Kommentar

                Lädt...
                X