Ankündigung

Einklappen
Keine Ankündigung bisher.

Stapelliste

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

    Stapelliste

    Hallo,

    ich habe meine Bewässerungssteuerung so konfiguriert, dass ich jeweils pro Bewässerungsstrang ein Item für die Stunden und ein Item für die Wochentage habe. jede Stunde wird eine Logik aufgerufen, die prüft, ob beides passt und dann wird die Bewässerung mittels timer der Item-Funktion gestartet. Damit kann ich auch mehrere Bewässerungsstränge nacheinander durchlaufen lassen.

    Das ganze hat aber einen Haken:
    Läuft die Bewässerung noch irgendwo, wird sie entweder unterbrochen oder im schlimmsten Fall laufen 2 Kreise gleichzeitig. Ich muss also immer ganz genau vorher die Zeiten ausrechnen, ob alles passt.

    Deshalb die Idee nicht mit Timer zu arbeiten, sondern mit einer Stapelliste, ala "first in first out". Dann würde ich die Bewässerung auf den Stapel packen und die laufen dann nacheinander durch. Und hier kommt die Frage? Gibt es da euerseits einen Ansatz, eine Idee, wie man das bequem machen könnte? Meine Idee ist derzeit dafür zwei Item zu verwenden und das an eine Logik zu binden. Da speichere ich dann das zu einzuschaltende Zielitem und die Dauer rein. So elegant erscheint mir das aber nicht.

    #2
    Ich versuche mich gerade damit, das mal so umzusetzen, wie ich dachte. Ist es denn möglich ein Item in einem Item zu speichern, also so, dass ich das dann wieder aufrufen kann?

    Kommentar


      #3
      Es ist nicht möglich ein Item in einem Item zu speichern. Du kannst jedoch den path des Items in einem Item speichern und später mit der Funktion return_item() wieder auf das Item zugreifen.
      Viele Grüße
      Martin

      There is no cloud. It's only someone else's computer.

      Kommentar


        #4
        Zitat von Msinn Beitrag anzeigen
        . Du kannst jedoch den path des Items in einem Item speichern und später mit der Funktion return_item() wieder auf das Item zugreifen.
        Super! Danke!

        Kommentar


          #5
          Ich nutze stateengine Plugin dafür. Ist aber eher Overkill, insofern würde mich deine finale Lösung sehr interessieren.

          Kommentar


            #6
            Zitat von Onkelandy Beitrag anzeigen
            insofern würde mich deine finale Lösung sehr interessieren
            Wenn es nur um den Stapel geht, ist das weniger kompliziert als erwartet. Ich habe eine Logik, die alle 5 Sekunden ausgeführt wird (cycle):

            Code:
            #!/usr/bin/env python3
            # bewaesserung_stapel.py
            
            BEWAESSERUNG_STAPEL_ITEMSCHALTEN = 0
            BEWAESSERUNG_STAPEL_ITEMDAUER = 1
            BEWAESSERUNG_STAPEL_DAUER = 2
            
            StapelListe = []
            StapelListe = sh.Aussen.Garten.Bewaesserung.Stapel()
            
            # prüfen, ob Bewässerung zentral gesperrt ist
            if sh.Aussen.Garten.Bewaesserung.sperren():
                # wenn gesperrt, Liste komplett löschen
                StapelListe = []
                sh.Aussen.Garten.Bewaesserung.Stapel(StapelListe)
            
            if len(StapelListe) > 0:
                # prüfen, ob andere Bewässerung nicht läuft
                 if not sh.Aussen.Garten.Bewaesserung.aktiv():
                    # ersten Eintrag vom Stapel holen
                    job = StapelListe[0]
                    # Werte aus Stapel lesen
                    itemSchalten = items.return_item(job[BEWAESSERUNG_STAPEL_ITEMSCHALTEN])
                    itemDauer = items.return_item(job[BEWAESSERUNG_STAPEL_ITEMDAUER])
                    wertDauer = job[BEWAESSERUNG_STAPEL_DAUER]
                    logger.info('Stapeleintrag: Item Schalten: {}'.format(job[BEWAESSERUNG_STAPEL_ITEMSCHALTEN]))
                    logger.info('Stapeleintrag: Item Dauer: {}'.format(job[BEWAESSERUNG_STAPEL_ITEMDAUER]))
                    logger.info('Stapeleintrag: Dauer: {}'.format(job[BEWAESSERUNG_STAPEL_DAUER]))
                    # Dauer der Bewässerung setzen
                    itemDauer(wertDauer)
                    # Bewässerung starten
                    itemSchalten(True)
                    # aktuellen Job aus der Liste löschen
                    StapelListe.pop(0)
                    sh.Aussen.Garten.Bewaesserung.Stapel(StapelListe)
                    logger.info('Es sind noch {} Bewässerungsvorgänge im Stapel.'.format(len(StapelListe)))
            Dazu ein Item für den Stapel:

            Code:
                        Stapel:
                            type: list
                            cache: yes
            Ich überlege jetzt noch Funktionen einzubauen, dass ich auch manuell was schalten kann und dann der Rest pausiert wird, das wäre aber etwas komplizierter, weil ich dann einen 2. (manuellen) Schaltvorgang einfügen müsste. Deshalb hat das nicht unbedingt Priorität.

            Kommentar

            Lädt...
            X