Ankündigung

Einklappen
Keine Ankündigung bisher.

Bewässerung

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

    [Codebeispiel] Bewässerung

    Es kommt ja der Sommer, daher folgendes Szenario:

    Man möchte bewässern, wenn
    1. es 2 Tage nicht geregnet hat und es Hochsommer (1.6 bis 31.08)
    2. es 3 Tage nicht geregnet hat und es zwischen 1.05 und 30.09 aber nicht im Hochsommer (da ja alle 2 Tage)
    3. Man will nachts um 1:00 bewässern
    4. Man sprengt nur, wenn es um diese Zeit über 10° hat
    5. Wenn es nicht über 10° hat, soll einfach am nächsten Tag gewässert werden
    6. Man hat Magnetventile verbaut und diese über einen Heizungsaktor angesteuert () und kann dann je nach Sonnenlage im Grundstück über Prozentangabe intervallartig sprengen
    7. Die Bewässerungszeit betrage 1.5 Stunden


    Ich wollte das ja als Makro anbieten, aber ich denke, man kommt so fast besser klar, weil doch jeder da seine persönliche Vorstellung, etc. hat.
    Der Kern ist eigentlich: Wie zähl ich die Trockentage, der Rest ist m.E. einfach.

    Hier der Code mit meinen Gruppenadressen:

    Code:
    //------------------------------------------------------
    // Bewässerung
    //------------------------------------------------------
    RegenIndikator=AUS
    TrockenTage=0
    TageBisZurBewaesserung=3
    Bewaessern=AUS
    // Der Regenmelder (EIN==Regen)
    Regen="RegenMeldung-5/2/2"
    
    // Zwischen 1.05 und 31.10 soll bewässert werden
    Monat=month(01,05) and !month(30,09)  
    
    // Im Hochsommer alle 2 Tage, sonst 3 Tage
    if month(01,06) and !month(31,08) then { 
        TageBisZurBewaesserung=2 } else {
        TageBisZurBewaesserung=3 
    } endif 
    // Überprüfung auf Regen
    if (Regen==EIN) then {
            RegenIndikator=EIN;            
            TrockenTage=0             
    } endif
    // Um ein Uhr nachts wird der Indikator für den Tag gelöscht
    // und der Trockentag hochgezählt
    if htime(1,00,00) and RegenIndikator==AUS then TrockenTage=TrockenTage+1 endif
    if htime(1,00,00) and RegenIndikator==EIN then RegenIndikator=AUS endif
    
    // Lange genug nicht geregnet: Bewaessern
    if TrockenTage==TageBisZurBewaesserung and Monat then {
            TrockenTage=0;      
            Bewaessern=EIN;     
            RegenIndikator=AUS                 
    } endif
    
    // Nun Bewässern: Drei getrennte Kreise, die mit Magnetventilen und
    // Siemens "Heizaktoren" angesteuert sind.
    // Aber nur wenn es über 10° draußen hat und ein Bewässerungsmonat vorliegt...
    // Außerdem gibts ein Schaltobjekt "Wasser123Auto-2/0/10" an einem Panel
    if Bewaessern and "Wasser123Auto-2/0/10" and "Außentemperatur-3/5/0">10f16 and Monat then {
            write("WasserTür-2/0/2"u08,70%);       
            write("WasserSüd-2/0/3"u08,100%);      
            write("WasserWiga-2/0/0"u08,90%)      
    } endif 
    // 1,5 Stunden lang bewaessern und dann wieder ausschalten
    if delay(Bewaessern,5400000u64) then   {
            write("WasserTür-2/0/2"u08,0%);        
            write("WasserSüd-2/0/3"u08,0%);        
            write("WasserWiga-2/0/0"u08,0%);       
                    Bewaessern=AUS                        
    } endif
    Anbei noch zur besseren Lesbarkeit das Ganze als Bildschirmschuss.
    Frei zum Diskutieren...
    Angehängte Dateien
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    #2
    Hallo Michael,

    bei deinem Programm fehlt noch etwas entscheidendes:
    Eine Warnung, wenn die Beregnung anfängt!
    Ich hatte mal eine ähnliche Steurung (mit SPS) gemacht, aber bevor die Bewässerung anfing, blinkten die Gartenlampen erst 2 Minuten, damit man noch Zeit hatte zu einem Schalter zu gehen und damit die Bewässerung stoppen konnte, wenn man z.B. im Garten Grillen wollte.
    WAF =0 wenn der Grill gegossen wird!
    Der schöne Niederrhein läßt Grüssen

    Andreas


    Alter Hof mit neuer Technik

    Kommentar


      #3
      Anerkennung. Der erste Schritt in die sicherlich richtige Richtung (Anwender Beispiele) ist gemacht.

      Kommentar


        #4
        Zitat von anlo007 Beitrag anzeigen
        WAF =0 wenn der Kaffetisch gegossen wird!
        1. Wenn meine nachts ums 1 noch Kaffee trinkt, dann stimmt was nicht. Sie wäre quasi nicht ausgelastet und ich müßte mir was einfallen lassen.
        2. Die Terasse bleibt in jedem Fall ohne Besprengung, d.h. man wird auch nicht naß. Wenngleich die Idee mit den Gartenlampen durchaus seinen Charme hat.
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Na gut, dann hab ich eben den Grill aus dem Kaffetisch gemacht, oder soll ich besser schreiben, "nicht ins Bier regnen lassen".

          Ich hab die Automatik nicht weiter benutzt, nachdem ich festgestellt habe, das sich das Unkraut noch mehr über die regelmäßie Bewässerung freut, als die Blumen. Seit dem wird wieder punktuell von Hand gegossen.
          Aber morgen schreib ich was zum gewünschten Code.
          Der schöne Niederrhein läßt Grüssen

          Andreas


          Alter Hof mit neuer Technik

          Kommentar


            #6
            Nur nebenbei: Hab mir mal erzählen lassen, dass man am besten morgens vor SA bewässern sollte.. Das löst auch das Problem mit der Notwendigkeit einer Vorwarnung - sogar für mich

            Makki
            EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
            -> Bitte KEINE PNs!

            Kommentar


              #7
              Makki, gänzlich unbekannt, dass Du auch über fundierte botanische Kenntnisse verfügst. Anerkennung, Du hast Recht.
              Rasen sprengen: Wie man seinen Rasen richtig bewässert

              Kommentar


                #8
                Zitat von makki Beitrag anzeigen
                morgens vor SA bewässern sollte.. Das löst auch das Problem mit der Notwendigkeit einer Vorwarnung - sogar für mich

                Makki
                Naja wenn ich mir da die letzten Tage der L&B anschaue fällt mir der Glaube daran sehr schwer

                Kommentar


                  #9
                  Hallo,

                  ich würde 1 Stelle ändern:

                  if (Regen==EIN) then RegenIndikator=EIN; TrockenTage=0 endif

                  in:
                  if after ((Regen==EIN),2700000u64) then RegenIndikator=EIN; TrockenTage=0 endif

                  Denn sonst würden schon ein Paar Tropfen Regen den Zyklus löschen.
                  Der schöne Niederrhein läßt Grüssen

                  Andreas


                  Alter Hof mit neuer Technik

                  Kommentar


                    #10
                    Zitat von redstar Beitrag anzeigen
                    Makki, gänzlich unbekannt, dass Du auch über fundierte botanische Kenntnisse verfügst. Anerkennung, Du hast Recht.
                    Rasen sprengen: Wie man seinen Rasen richtig bewässert
                    Nach dem Artikel müssen wir lieber einen Baustein schreiben, mit dem man die Bettlaken über den Rasen ausbreiten kann?!
                    Der schöne Niederrhein läßt Grüssen

                    Andreas


                    Alter Hof mit neuer Technik

                    Kommentar


                      #11
                      In den Teil:
                      // Lange genug nicht geregnet: Bewaessern
                      if TrockenTage==TageBisZurBewaesserung and Monat then {
                      TrockenTage=0;
                      Bewaessern=EIN;
                      RegenIndikator=AUS
                      } endif

                      muß noch die Abfrage auf Temperatur>10° sonst beregnet es auch nicht am folgenden Tag da trockene Tage=0 , oder "Trockene Tage =0" zu "bewässern =AUS" in die letzte Zeile setzen.
                      Der schöne Niederrhein läßt Grüssen

                      Andreas


                      Alter Hof mit neuer Technik

                      Kommentar


                        #12
                        So hier mein Vorscholag als ganzes:
                        Code:
                        //------------------------------------------------------
                        // Bewässerung
                        //------------------------------------------------------
                        RegenIndikator=AUS
                        TrockenTage=0
                        TageBisZurBewaesserung=3
                        Bewaessern=AUS
                        // Der Regenmelder (EIN==Regen)
                        Regen="RegenMeldung-5/2/2"
                        // Zwischen 1.05 und 31.10 soll bewässert werden
                        Monat=month(01,05) and !month(30,09)  
                        // Im Hochsommer alle 2 Tage, sonst 3 Tage
                        if month(01,06) and !month(31,08) then { 
                            TageBisZurBewaesserung=2 } else {
                            TageBisZurBewaesserung=3 
                        } endif 
                        
                        // Überprüfung auf Regen
                        if after((Regen==EIN),50000u64)) then {
                                RegenIndikator=EIN;            
                                TrockenTage=0             
                        } endif
                        // Um ein Uhr nachts wird der Indikator für den Tag gelöscht
                        // und der Trockentag hochgezählt
                        if htime(1,00,00) and RegenIndikator==AUS then TrockenTage=TrockenTage+1 endif
                        if htime(1,00,00) and RegenIndikator==EIN then RegenIndikator=AUS endif
                        // Lange genug nicht geregnet: Bewaessern
                        if TrockenTage>=TageBisZurBewaesserung and Monat and "Außentemperatur-3/5/0">10f16 then Bewaessern=EIN endif
                        // Nun Bewässern: Drei getrennte Kreise, die mit Magnetventilen und
                        // Siemens "Heizaktoren" angesteuert sind.
                        // Aber nur wenn es über 10° draußen hat und ein Bewässerungsmonat vorliegt...
                        // Außerdem gibts ein Schaltobjekt "Wasser123Auto-2/0/10" an einem Panel
                        if Bewaessern and "Wasser123Auto-2/0/10"  then {
                                write("WasserTür-2/0/2"u08,70%);       
                                write("WasserSüd-2/0/3"u08,100%);      
                                write("WasserWiga-2/0/0"u08,90%)      
                        } endif 
                        // 1,5 Stunden lang bewaessern und dann wieder ausschalten
                        if delay(Bewaessern,5400000u64) then   {
                                write("WasserTür-2/0/2"u08,0%);        
                                write("WasserSüd-2/0/3"u08,0%);        
                                write("WasserWiga-2/0/0"u08,0%);       
                                        Bewaessern=AUS 
                        TrockenTage=0                         
                        } endif
                        Der schöne Niederrhein läßt Grüssen

                        Andreas


                        Alter Hof mit neuer Technik

                        Kommentar


                          #13
                          Ok, schön.
                          Hier

                          if after((Regen==EIN),50000u64)) then {


                          wird aber noch nicht das geschafft, was Du willst. Die Regenmeldung wird ja nur für 50 Sekunden verzögert. Da müsste man schon schreiben:

                          if after((Regen==EIN),50000u64)) and Regen then {

                          wobei dann man sich auch den Fall vorstellen kann, dass 2 mal kurz geregnet im Abstand von 50 Sekunden die Bewässerung deaktiviert.

                          Will man das so bauen, dass man eine Zeit festlegt, wie lange es regnen darf, bevor nicht bewässert wird, macht man es so:

                          // 50 Sekunden Dauerregen:
                          Count=0u16
                          Regen=AUS
                          if Regen then Count=Count+1u16 endif
                          if after(change(Count),100u64) and Regen then Count=Count+1u16 endif
                          if after(change(Count),100u64) and !Regen and Count>0u16 then Count=0u16 endif
                          if Regen and Count>500u16 then ....



                          Meine Erfahrung zeigt, dass es aber so genügt, aber meine Botanik ist auch nicht sooo anspruchsvoll ...
                          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                          Enertex Produkte kaufen

                          Kommentar


                            #14
                            Zitat von enertegus Beitrag anzeigen

                            if after((Regen==EIN),50000u64)) and Regen then {

                            ...
                            So ist es richtig, ich hab nur zu wenig Nullen reingeschrieben, sollte 1.500.000 sein, also knappe halbe Stunde Regen. (Zumindest 1/4 Stunde)

                            Das verstehe ich nicht:
                            // 50 Sekunden Dauerregen:
                            Count=0u16
                            Regen=AUS
                            if Regen then Count=Count+0u16 endif
                            if after(change(Count),100u64) and Regen then Count=Count+0u16 endif
                            if after(change(Count),100u64) and !Regen and Count>0u16 then Count=0u16 endif
                            if Regen and Count>500u16 then ....

                            irgendwo müßte doch hochgezählt werden. Du zählt aber nur wie oft es geregnet hat besser wäre:

                            count=0u16
                            zutrocken=EIN
                            if cycle(1) and regen then count=count+1 endif
                            if count<15u16 then zutrocken=EIN else zutrocken=AUS endif
                            if bewaessern then count=0u16 endif

                            Bzw. die letze Zeile nur als Bedingung oben eingefügt.
                            Dann würde jede Regenzeit >2 Minuten registriert. Das könnte oben aber auch direkt statt Regenindikator eingefügt werden.
                            Der schöne Niederrhein läßt Grüssen

                            Andreas


                            Alter Hof mit neuer Technik

                            Kommentar


                              #15
                              Zitat von anlo007 Beitrag anzeigen
                              irgendwo müßte doch hochgezählt werden. Du zählt aber nur wie oft es geregnet
                              War Tippfehler...
                              hat besser wäre
                              Ja, da führen viele Wege nach Rom...
                              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                              Enertex Produkte kaufen

                              Kommentar

                              Lädt...
                              X