Ankündigung

Einklappen
Keine Ankündigung bisher.

Bewässerungssteuerung

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

    [callidomus] Bewässerungssteuerung

    Hallo,

    ich habe am Wochenende meine automatische Rasenbewässerung in callidomus mit Zustandsautomaten umgesetzt. An dieser Stelle sei gesagt, dass ich mit dem Ergebnis bis jetzt äußerst zufrieden bin. Falls Interesse besteht, stelle ich das Konzept gerne einmal vor.

    Die Zeitdauer der Beregnung berechne ich in einer Logik auf Basis der Durchschnittstemperatur des vergangenen Tages. Das Ergebnis dieser Logik schreibt die Dauer der Bewässerung in Sekunden pro Ventil in ein Item. Soll bewässert werden, läuft die Prozedur dann um 02.00 Uhr morgens los und öffnet nacheinander die entsprechenden Ventile für die entsprechende Zeit. Man kann die Bewässerung auch manuell starten und es lässt sich immer nur ein Ventil gleichzeitig öffnen.

    Ich bewässere auch nicht jeden Tag, sondern abhängig von der Temperatur in unterschiedlichen Intervallen. Außerdem möchte ich noch berücksichtigen, ob es geregnet hat (und wie lange) - das steht noch aus. Zusätzlich werde ich mir wohl demnächst auch noch eine Bodenfeuchtigkeitssensor holen.

    Gruß
    Thomas

    #2
    Hi,
    hast du da auch die eine oder andere Sicherheitschaltung drinn? Also ich hätte angst das der Automat mal spinnt oder nicht das tut was du willst.
    VG
    Jürgen
    Zuletzt geändert von heckmannju; 26.04.2017, 18:08.

    Kommentar


      #3
      Zitat von heckmannju Beitrag anzeigen
      ... hast du da auch die eine oder andere Sicherheitsschaltung drinn?
      Ich bin da eigentlich ganz zuversichtlich. :-)

      Und ja, es gibt Sicherheiten. Die Automatik muss man aktiv einschalten, die Prozedur läuft nur bei eingeschalteter Automatik los (ist eine Betreten-Bedingung). Wenn alle Timer auf Null stehen, passiert auch nichts. Die Timer werden auch nur gesetzt, wenn auch beregnet werden soll (oder manuell). Das schalten der Ventile habe ich über eine eigene SM gelöst (im Prinzip wie das Szenen-Beispiel in der Doku), so dass immer nur ein Ventil geöffnet ist. Außerdem setze ich an (fast) allen Zuständen einen Statustext, den ich in der Visu auch ausgebe und so auch ungefähr weiß, wo die SM gerade steht.

      Ich spiele ja schon seit dem Wochenende damit rum und bis jetzt läuft es stabil.

      Mit der Berechnung des Intervalls bin ich noch nicht so zufrieden. Da muss ich noch optimieren, wobei ich da auch selbst noch nicht so richtig schlüssig bin, wie es überhaupt haben will. Ich denke, das wird dann der Sommer zeigen.

      Gruß
      Thomas

      Kommentar


        #4
        Hi,
        zur Zeit braucht man ja auch eher eine steuerung der Rasenheizung :-)

        Aber die lösung der Statemaschine selber würde mich zu Lernzwecken schon interresieren.

        Vg
        Jürgen

        Kommentar


          #5
          Hallo,

          OK, dann hier schon mal Teil 1. Meine Itemstruktur sieht wie folgt aus (Ich habe den Export auch angehangen): screen06.png


          Test.TR ist sozusagen der Hauptknoten für die Ventile. Für jedes Ventil gibt es einen Knoten mit jeweils zwei Kinderknoten: Value und Time. In Value ist der Status gespeichert (0 = geschlossen | 1 = geöffnet | 2 = geschlossen, Beregnung beendet) und in Time die Beregnungs- bzw. Öffnungszeit in Sekunden. Die Ventil-Items selbst sind KNX-Items vom Typ 1 (Bool) und schalten einen Aktor.

          Dann habe ich einen Zustandsautomaten "Stationen", der im Prinzip wie das Szenen-Beispiel aus der Doku aufgebaut ist. screen02.png


          Dabei gibt es einen Zustand für jedes Ventil und einen Aus-Zustand. Die Ventil-Zustände schalten dann jeweils den entsprechenden Aktorkanal ein und den für alle anderen Ventile aus. Außerdem wird der Status entsprechend gesetzt. Der Hintergrund ist, dass ich immer nur ein Ventil gleichzeitig öffnen möchte. screen03.png


          In der Visu habe ich dann einen Zustand/Szenen-Wähler verwendet, mit dem sich die einzelnen Ventile schalten lassen: screen04.png

          Außerdem zweige noch den Statustext and und ein Icon mit dem Status jedes Ventils. Dazu habe ich vier Icons nebeneinander platziert: screen05.png

          Das sieht in der Visu dann wie folgt aus. screen01.png
          screen07.png

          Mit dem Schiebeschaltern pro Ventil kann man manuell die Zeit der Bewässerung einstellen. Das habe ich erstmal für die Testphase so eingestellt, später fliegt das vermutlich wieder raus.

          Soweit so einfach. So viel erstmal zu den Items, und der ersten SM für das Schalten der Ventile.

          Gruß
          Thomas
          Angehängte Dateien

          Kommentar


            #6
            weiter geht es mit Teil 2. Der zweite Zustandsautomat steuert die automatische Bewässerung.
            screen08.png

            Die SM wird jeden Tag um 03:30 Uhr ausgeführt. Status 0 ist der Default-Status (Jahr > 0), der Manuelle-Status ist für den manuellen Start und der Automatik-Modus ist der interessante und sieht so aus: screen09.png

            Ich frage also zum einen, ob in der Zisterne noch genug Wasser ist und ob das Item "Auto" auf 1 gesetzt ist. Falls dem so ist, wir der Zustand betreten und der Statustext entsprechend gesetzt. Während des Zustands wird alle 10 Sekunden ein kleines Script ausgeführt, welches die eigentliche Beregnung steuert (die Stationen-SM). Ich denke, der Code ist weites gehend selbst erklärend.
            Code:
            if (Test.TR.Valve1.State < 2) and (Test.TR.Valve1.Time > 0):
                 Test.Sprinkler.State(1)
                 Test.TR.State('Ventil 1 für '+str(Test.TR.Valve1.Time())+' Sek. geöffnet')
                 if (Test.TR.Valve1.State.age() >= Test.TR.Valve1.Time):
                      Test.TR.Valve1.State(2)
            elif (Test.TR.Valve2.State < 2) and (Test.TR.Valve2.Time > 0):
                 Test.Sprinkler.State(2)
                 Test.TR.State('Ventil 2 für '+str(Test.TR.Valve2.Time())+' Sek. geöffnet')
                 if (Test.TR.Valve2.State.age() >= Test.TR.Valve2.Time):
                      Test.TR.Valve2.State(2)
            elif (Test.TR.Valve3.State < 2) and (Test.TR.Valve3.Time > 0):
                 Test.Sprinkler.State(3)
                 Test.TR.State('Ventil 3 für '+str(Test.TR.Valve3.Time())+' Sek. geöffnet')
                 if (Test.TR.Valve3.State.age() >= Test.TR.Valve3.Time):
                      Test.TR.Valve3.State(2)
            else:
                 Test.TR.State('Aus')
                 Test.Sprinkler(0)
            Wenn also Status < 2 (also beregnet gerade oder hat noch nicht begonnen - siehe vorherigen Post) und die Beregnungszeit für dieses Ventil nicht 0 ist, wird der Zustand für das Ventil 1 aus der Stationen-SM aufgerufen und der entsprechende Statustext gesetzt.
            Dann wird geprüft, ob die letzte Status-Änderung älter als die hinterlegte Zeit ist. Falls das so ist wird der Status auf 2 gesetzt und beim nächsten Durchlauf des Codes wird das nächste Ventil angesteuert.

            Tja, das war es eigentlich schon mit der zweiten SM. Meinungen, Vorschläge, Lob und Kritik - immer her damit. Bitte nicht schlagen, der Code ist noch nicht optimal, das ist mir bewusst.

            Dritter Teil wäre jetzt die Logik, die auf Basis der Temperatur die Beregnungszeiten berechnet und die Zeiten in die entsprechenden Items schreibt. An dieser Logik feile ich noch und da die sowieso sehr individuell ist, macht eine Veröffentlichung sicher auch keinen Sinn.

            Viel Spaß und Gruß
            Thomas

            P.S.: Das ist alles keine Rocket-Science. Aber das ist eben auch das Tolle an callidomus!
            Zuletzt geändert von Stereofeld; 27.04.2017, 21:43.

            Kommentar


              #7
              Hi Thomas,

              habe mir das eben mal angesehen, sieht klasse aus. Leider habe ich (noch) keine Beregnungsanlage, sonst würde ich das gleich ausprobieren.
              Aber eine Anregung habe ich noch: Das, was Du in Deinem "Während"-Script machst, sind eigentlich 4 weitere "Automatik"-Zustände dieser SM (oder einer weiteren), die Du über "Während" nur triggern müsstest. Dann kämst Du ganz ohne coding aus. Und wo ist "Valve4"?

              Nur so ne Idee...Scripts sind eben anfälliger auf Item-Verschiebungen, deswegen versuche ich die zu vermeiden.

              Gruß, Waldemar
              OpenKNX www.openknx.de

              Kommentar


                #8
                Hallo Waldemar,

                so ein Lob von dir ist ja schon fast ein "Ritterschlag". :-)

                Mit dem Triggern bei "Während" hast du vermutlich Recht - ich bin da aber manchmal noch etwas verwirrt, wie ich das in eine SM bringe. Das können wir uns ja vielleicht auch mal gemeinsam bei Gelegenheit "offline" anschauen.

                "Valve4" ist im Script nun drin - das hatte ich tatsächlich vergessen. ;-)

                Gruß
                Thomas

                Kommentar

                Lädt...
                X