Ankündigung

Einklappen
Keine Ankündigung bisher.

GESUCHT: Plugin für Bewässerung

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] GESUCHT: Plugin für Bewässerung

    Hallo Leute,


    also ich hab ein kleines Problem. Die Bewässerungsanlage ist hardwaremäßig schon an den Bus gebracht. Ich hänge jedoch noch an der Steuerung.

    Geplant war folgendes. Auf Knopfdruck setzt sich folgender Ablauf in gang. Über die Einschalt- und die Ausschaltverzögerung des Aktors (Lingg Jahnke Eib Duo 12 fach) werden insgesamt 9 Stränge Bewässerung hintereinander jeweils für 15min geschaltet. Idealerweise wird vorher noch die Grundwasserpumpe eingeschaltet wenn sie aus ist und nur wenn sie vorher aus war, danach auch wieder aus. Sollte sich per Logik im Aktor an dem die Pumpe hängt lösen lassen.
    Soweit bin ich aber gar nicht gekommen. Wenn zu Beginn ein und aus Telegramm gesendet werden, dann funktioniert das mit Kanal 1 Super, die anderen schalten aber nicht ein, da vor dem einschalten ja schon ein "AUS" Telegramm da ist.
    Fazit: Läuft so nicht.

    Meine nächste Idee war ein Wiregate Plugin, wollte ich mich schon länger endlich mit beschäftigen. So nen Perl Editor besorgt und angefangen mich einzulesen. Hierbei bin ich dann auf den Einstiegsthread von Makki gestoßen... . Naja und da steht dann max. Pluginlaufdauer 10s.

    So ab jetzt hab ich nen Problem, die max Laufzeit macht Sinn aber dann geht ja meine Bewässerung nicht ^^

    Wie könnte man das Ganze denn lösen ?? Also wie gesagt, bin leider noch zu weit am lernen um selbst nen Skript auf die Rehe zu bekommen...

    Hat da einer von euch evtl. was fertiges was man nutzen kann. Müsste doch eigentlich machbar sein, auf Knopfdruck alle 15 min einen Ausgang ein und den anderen ausschalten.


    Gruß

    Gringo

    #2
    Hallo Gringo

    Klar geht das mit einem Plugin aber vorerst mal meine Zwischenfrage...

    Wenn zu Beginn ein und aus Telegramm gesendet werden, dann funktioniert das mit Kanal 1 Super, die anderen schalten aber nicht ein, da vor dem einschalten ja schon ein "AUS" Telegramm da ist.
    Fazit: Läuft so nicht.
    Wo ist genau das Problem? Beschreiben den Ablauf und die Steuerung mal genauer. Momentan stelle ich mir das so vor...

    Taster ist als Trigger mit auswertung der steigenden Flanke parametriert und sendet NUR eine 1 auf den BUS.

    Der Aktor hat eine Zeitfunktion mit Ein- und Ausschaltverzögerung (Treppenhausfunktion). Alle KO's für die Treppenhausfunktionen der Ausgänge werden auf eine gemeinsame GA mit dem Taster gelegt.

    Nun müssen nur noch die Zeiten parametriert werden...

    z.B.

    Kanal 1 = Einschaltverzögerung 0min, Ausschaltverzögerung 15min
    Kanal 2 = Einschaltverzögerung 15min, Ausschaltverzögerung 15min
    Kanal 3 = Einschaltverzögerung 30min, Ausschaltverzögerung 15min
    Kanal 4 = Einschaltverzögerung 45min, Ausschaltverzögerung 15min

    Damit werden die Kanäle ohne Überlappung der Reihe nach angesteuert.

    Der Kanal für die Pumpe auch über Treppenhausautomat und gleiche Trigger-GA mit Einschaltverzögerung 0 und Ausschaltvertögerung 60min

    Oder habe ich das falsch verstanden?
    Gruss Patrik alias swiss

    Kommentar


      #3
      Hallo,

      ja im wesentlichen wars mal so gedacht, mehr würde ein Plugin ja auch nicht tun. Das Problem ist, die Treppenhausfunktion im Aktor hat keine Einschaltverzögerung. Sprich die laufen nicht so schön hintereinander weg.
      Die Ein- und Ausschaltverzögerung funktioniert dann folgendermaßen:

      Es werden direkt hintereinander der Ein und der Aus Befehl gesendet. Wollte das über Taste drücken und Taste loslassen machen

      Die Aufteilung sieht so aus: E= Einschalt... A = Ausschalt...

      1: E=0 A=15
      2: E=15 A= 30
      3: E=30 A = 45
      4: ....

      Pumpe dann entweder Analog oder über die Logikfunktion des Aktors als OR Funktion und den Statusobjekten der Bewässerungsanlage ..

      Das Problem ist nun das wenn während der Einschaltverzögerung ein Aus Telegramm kommt, der Aktor den EIN Befehl ignoriert. Egal ob ausgeführt oder nicht

      War mir da auch nicht sicher und habs sicherheitshalber dann nochmal im Buch nachgelesen ...

      Wäre mir so eing auch lieber aber fürchte wird so nichts ohne Plugin oder Logik


      Gruß Gringo

      Kommentar


        #4
        Aber woher soll das AUS Telegramm kommen? Wenn du den Taster so kunfigurierst, dass er beim drücken IMMER nur eine 1 sendet (Trigger) dann sollte das kein Problem sein.
        Gruss Patrik alias swiss

        Kommentar


          #5
          Jaja schon klar, das Aus Telegramm wäre dann fast zeitgleich mit dem Ein Telegramm gekommen. Ein bei Taster drücken, aus bei Taster loslassen, oder alternativ durch drücken von Taster 2 direkt nach dem Einschalten.

          Andersrum hab ich halt das Problem, wie die Ventile wieder ausschalten ? Geht halt nicht das man mehrere Stränge gleichzeitig betreibt.

          Treppenhausfunktion kann wie gesagt nicht mit Einschaltverzögerung betrieben werden. Was ja auch sinn macht, will ja eig. nicht warten wenn das Licht im Treppenhaus angehen soll.


          Gruß

          Gringo

          Kommentar


            #6
            Ok. Ich verstehe nun das Problem. Ich dachte dass nur 1 Zyklus durchlaufen werden soll. Also nach ein EIN Telegramm wird einmal das komplette Programm abgearbeitet und beendet sich dan selbst. Von Ausschalten war bis jetzt noch nicht die Rede...

            Also schreib mal gur GANZ GENAU was du machen möchtest, und was alles möglich sein soll.

            z.B.

            - Einschalten über eine Trigger GA
            - Automatische beenden nach 1 Durchlauf
            - Vorzeitiger abbruch des Programms durch erneutes senden auf die Trigger GA

            Oder was auch immer... Damit kann man deine genauen Anforderungen erfassen. Erst wenn alle deine Bedürfnisse bekannt sind, kann dir wirklich geholfen werden. Dann findet sich bestimmt auch für dich eine passende Lösung
            Gruss Patrik alias swiss

            Kommentar


              #7
              Hi Gringo,

              suche einmal ein bisschen. Es gab vor kurzem einen Thread in dem Dein Problem elegant gelöst wurde.
              Dabei wurde die Aktorkanäle in Reihe mit einem Negierer verknüpft. Es wurde der erste getriggert und nach Ablauf der Treppenhausfunktion ging der erste Kanal wieder auf 0 und damit negiert 1 für den zweiten Kanal. Benötigt aber Aktoren mit einfachen Logikfunktionen.

              Hth

              Marcus

              Kommentar


                #8
                Ja das geht mit "KNX-aus-der-Box" (was IMHO immer besser ist als externe Logik!), braucht halt nur etwas Hirnschmalz bzw. zur Hilfe etwas mehr Details (Welche aktoren, ...)

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

                Kommentar


                  #9
                  Hallo,

                  soo Sry das ich erst jetzt wieder antworte, aber der ganze Kram der während des Urlaubs liegengeblieben ist musste erstmal weg.

                  @ Makki
                  Also Aktor ist ein Lingg Jahnke A2X6F16H (12TE). Ich war zuletzt dabei das ganze über eine XOR Verknüpfung zusammen mit der Einschaltverzögerung zu lösen. So wirklich gelungen isses mir leider auch damit nicht. Tippe auf irgend nen Denkfehler

                  Also "Exklusives Oder" Anfangsstatus logischerweise Objekt A und B = 0. Einschaltverzögerung jeweils 15 min.
                  Die Idee dahinter war die Stränge jeweils mit dem Status der vorhergehenden Stränge zu schalten. Gibt aber dummerweise ne Schleife.

                  Also keine Ahnung warum, aber wenn jemand ne Idee hätte wäre ich dankbar. Steh da irgendwie auf dem Schlauch.


                  @ Swiss

                  Also im wesentlichen hast dus schon komplett richtig erfasst, ich beschreib das Ganze mal in Ausbaustufen ^^

                  Stufe 1 (Basics):

                  Über eine Trigger GA wird die die Bewässerung gestartet und die Pumpe eingeschaltet, falls sie noch nicht an ist. (Die Pumpe sollte eig aber KNX intern über ne Oder Verknüpfung gehen, idealerweise kriegt die Pumpe 1-2 Min Vorlauf um den Druck aufzubauen)

                  EVTL: Möglichkeit über zwei verschiedene Ga entweder die Stränge 1-9 zu starten (Bewässerung komplett Garten) oder nur 3-9 (Bewässerung nur Rasenflächen) wäre aber eig Stufe 1,5.

                  Dann gibt es genau einen Durchlauf, ein Strang nach dem anderen mit einer fest definierten Zeit pro Strang. Zeit kann für alle Stränge gleich sein. (Bei Stufe 1,5 zwei Zeiten, einmal für 1-2 und dann 3-9)

                  Nach dem letzten Strang wird die Pumpe wieder ausgeschaltet, wenn sie vorher aus war. (Ne gesendete 0 sollte reichen => Oder Verknüpfung)

                  Abbruch der Bewässerung über eine weitere Trigger GA wäre super.


                  Stufe 2:

                  Zusätzlich zu 1. Kann durch verschiedene Trigger die Laufzeit für alle Stränge gleich verändert werden. Also Taste 1-4 jeweils bsp. 10 / 15 / 20 / 30 min pro Strang


                  Stufe 3: volle Kontrolle (wird eher nur per Visu Widget gehen denke ich)


                  Variable Zeiten für jeden Strang einzeln. (Slider oder Triggerwerte) Über Visu die Möglichkeit die Agenda festzulegen.


                  Also ich wähle vor Programmbeginn aus ob und wie lange ein Strang laufen soll. Danach wird der Ablauf gestartet

                  Stufe 3,5 : 3 + Timerfunktion

                  Stufe 4: Der Gral oder: Falls alles Andere fertig ist ^^

                  Komplett automatisierte Bewässerung. Kein Eingriff mehr nötig. Berechnung der Zeiten für jeden Strang seperat. Über Bewässerte Fläche, Bodenfeuchte und Verdunstung mittels Globalstrahlungswerten. Automatisches Bewässern kurz nach Tagestiefsttemperatur (also sobald es wieder Wärmer wird.) danach Aktualisierung des aktuellen, berechneten Feuchtigkeitsgehaltes. Einbezug von Regen ...

                  Aber das ist echt Zukunftsmusik.



                  So hoffe das war alles an Infos was gefragt war.


                  Gruß und Dank

                  Gringo

                  Kommentar


                    #10
                    Hier mal ein Ansatz, ich hab aber nur 3 Kreise gemacht. Kann man natürlich bestimmt schöner mit subs machen, aber ich wollte mal gucken.
                    Die restlichen Kreise gehen dann im selben Schema.

                    $ga -> gibt start und stop zeichen
                    $gaX -> GA des Aktors zum Kreis
                    $timer -> Laufzeit pro Kreis (zum Test 10 Sekunden)

                    Code:
                    ###Bewässerung
                    ###2012-07-09 JuMi2006
                    
                    my $ga = '1/1/10';    #Trigger GA: 1=Start 0=Stop
                    my $ga1 = '12/0/1';	#GA für Kreis 1
                    my $ga2 = '12/0/2';
                    my $ga3 = '12/0/3';
                    my $timer = '10';	#Zeit in Sekunden Pro Kreis
                    
                    ####
                    $plugin_subscribe{$ga}{$plugname} = 1;
                    
                    #### Stop Befehl - Trigger mit '0'
                    
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $ga &&  $msg{'value'} == '0')
                    {
                    knx_write($ga1,'0',1.001);
                    knx_write($ga2,'0',1.001);
                    knx_write($ga3,'0',1.001);
                    $plugin_info{$plugname.'_status'} = '0';
                    $plugin_info{$plugname.'_last'} = time();
                    $plugin_info{$plugname.'_cycle'} = 86400;
                    plugin_log($plugname, "Stop!");
                    }
                    
                    
                    #### Erstaufruf durch Trigger und dann GA1 AN
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $ga && $msg{'value'} == '1' && $plugin_info{$plugname.'_status'} == '0' )
                    {
                    knx_write($ga1,'1',1.001);
                    $plugin_info{$plugname.'_last'} = time();
                    $plugin_info{$plugname.'_cycle'} = $timer;
                    $plugin_info{$plugname.'_status'} = '1';
                    plugin_log($plugname, "Bewässerung Strang 1!");
                    return;
                    }
                    
                    ### zweiter Kreis
                    if ($plugin_info{$plugname.'_status'} == '1' )
                    {
                    knx_write($ga1,'0',1.001);
                    knx_write($ga2,'1',1.001);
                    $plugin_info{$plugname.'_cycle'} = $timer;
                    $plugin_info{$plugname.'_status'} = '2';
                    plugin_log($plugname, "Bewässerung Strang 2!");
                    return;
                    }
                    
                    ### dritter Kreis
                    if ($plugin_info{$plugname.'_status'} == '2' )
                    {
                    knx_write($ga2,'0',1.001);
                    knx_write($ga3,'1',1.001);
                    $plugin_info{$plugname.'_cycle'} = $timer;
                    $plugin_info{$plugname.'_status'} = '3';
                    plugin_log($plugname, "Bewässerung Strang 3!");
                    return;
                    }
                    
                    ### letzter Kreis !!! cycle auf 86400 und status auf 0 setzen !!! 
                    if ($plugin_info{$plugname.'_status'} == '3' )
                    {
                    knx_write($ga3,'0',1.001);
                    $plugin_info{$plugname.'_cycle'} = '86400';
                    $plugin_info{$plugname.'_status'} = '0';
                    plugin_log($plugname, "Bewässerung Ende!");
                    return;
                    }
                    
                    ### Beim einfachen Durchlauf ohne Befehle
                    
                    if ($plugin_info{$plugname.'_status'} == '0')
                    {
                    $plugin_info{$plugname.'_cycle'} = '86400';
                    return;
                    }
                    Für den neunten Sieht das Ende dann so aus:
                    Code:
                    ### neunter Kreis
                    if ($plugin_info{$plugname.'_status'} == '8' )
                    {
                    knx_write($ga8,'0',1.001);
                    knx_write($ga9,'1',1.001);
                    $plugin_info{$plugname.'_cycle'} = $timer;
                    $plugin_info{$plugname.'_status'} = '9';
                    plugin_log($plugname, "Bewässerung Strang 9!");
                    return;
                    }
                    
                    
                    ### letzter Kreis !!! cycle auf 86400 und status auf 0 setzen !!! 
                    if ($plugin_info{$plugname.'_status'} == '9' )
                    {
                    knx_write($ga9,'0',1.001);
                    $plugin_info{$plugname.'_cycle'} = '86400';
                    $plugin_info{$plugname.'_status'} = '0';
                    plugin_log($plugname, "Bewässerung Ende!");
                    return;
                    }
                    Kreis 1-2 und 3-9 könnte man getrennt in 3 Plugins machen (1-2 / 3-9 / 1-9).
                    Bis auf den Vorlauf der Pumpe sind wir ja jetzt bei Stufe 1,5
                    Umgezogen? Ja! ... Fertig? Nein!
                    Baustelle 2.0 !

                    Kommentar


                      #11
                      Super Danke,

                      das ist scht super. Ich bau mir das mal so komplett zusammen und poste es nochmal hier. Nicht das ich dann noch nen Fehler reinbocke. ^^


                      Gruß und Dank


                      Gringo

                      Kommentar


                        #12
                        Und...läufts ???
                        Umgezogen? Ja! ... Fertig? Nein!
                        Baustelle 2.0 !

                        Kommentar


                          #13
                          Jap läuft Prima. Danke nochmal

                          Hab allerdings noch den Pumpenvorlauf reingebastelt. Was ich niht hinbekommen habe ist direkt zu Strang 3 zu springen. Dachte würde gehen wenn man den Status bei entsprechender 1 der passenden Ga gleich auf 2 setzt. Aber irgendwie wollte das nicht.


                          Gruß

                          Gringo

                          Code:
                          ###Bewässerung
                          ###2012-07-09 JuMi2006
                          
                          my $pumpe = '6/0/2';	# Einschalten der Pumpe
                          my $startstop = '6/0/5';    #Trigger GA: 1=Start 0=Stop
                          my $strang1 = '6/0/6';
                          my $strang2 = '6/0/7';
                          my $strang3 = '6/0/8';
                          my $strang4 = '6/0/9';	#GA für Kreis 4
                          my $strang5 = '6/0/10';
                          my $strang6 = '6/0/11';
                          my $strang7 = '6/0/12';	#GA für Kreis 7
                          my $strang8 = '6/0/13';
                          my $strang9 = '6/0/14';
                          my $timer = '900';	#Zeit in Sekunden Pro Kreis
                          my $timeP = '45';	# Zeit in Sekunden für Pumpenvorlauf
                          
                          ####
                          $plugin_subscribe{$startstop}{$plugname} = 1;
                          
                          #### Stop Befehl - Trigger mit '0'
                          
                          if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $startstop &&  $msg{'value'} == '0')
                          {
                          knx_write($strang1,'0',1.001);
                          knx_write($strang2,'0',1.001);
                          knx_write($strang3,'0',1.001);
                          knx_write($strang4,'0',1.001);
                          knx_write($strang5,'0',1.001);
                          knx_write($strang6,'0',1.001);
                          knx_write($strang7,'0',1.001);
                          knx_write($strang8,'0',1.001);
                          knx_write($strang9,'0',1.001);
                          knx_write($pumpe, '0',1.001);
                          $plugin_info{$plugname.'_status'} = '0';
                          $plugin_info{$plugname.'_last'} = time();
                          $plugin_info{$plugname.'_cycle'} = 86400;
                          plugin_log($plugname, "Manueller Abbruch!");
                          plugin_log($plugname, "Pumpe aus!");
                          }
                          
                          
                          #### Erstaufruf durch Trigger und dann Pumpe AN
                          
                          if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $startstop && $msg{'value'} == '1' && $plugin_info{$plugname.'_status'} == '0' )
                          {
                          knx_write($pumpe,'1',1.001);
                          $plugin_info{$plugname.'_last'} = time();
                          $plugin_info{$plugname.'_cycle'} = $timeP;
                          $plugin_info{$plugname.'_status'} = '1';
                          plugin_log($plugname, "Pumpe ein!");
                          return;
                          }
                          
                          
                          ### dritter Kreis
                          if ($plugin_info{$plugname.'_status'} == '1' )
                          {
                          knx_write($strang3,'1',1.001);
                          $plugin_info{$plugname.'_cycle'} = $timer;
                          $plugin_info{$plugname.'_status'} = '2';
                          plugin_log($plugname, "Bewässerung Strang 3!");
                          return;
                          }
                          
                          ### vierter Kreis
                          if ($plugin_info{$plugname.'_status'} == '2' )
                          {
                          knx_write($strang3,'0',1.001);
                          knx_write($strang4,'1',1.001);
                          $plugin_info{$plugname.'_cycle'} = $timer;
                          $plugin_info{$plugname.'_status'} = '3';
                          plugin_log($plugname, "Bewässerung Strang 4!");
                          return;
                          }
                          
                          ### fünfter Kreis
                          if ($plugin_info{$plugname.'_status'} == '3' )
                          {
                          knx_write($strang4,'0',1.001);
                          knx_write($strang5,'1',1.001);
                          $plugin_info{$plugname.'_cycle'} = $timer;
                          $plugin_info{$plugname.'_status'} = '4';
                          plugin_log($plugname, "Bewässerung Strang 5!");
                          return;
                          }
                          
                          ### sechster Kreis
                          if ($plugin_info{$plugname.'_status'} == '4' )
                          {
                          knx_write($strang5,'0',1.001);
                          knx_write($strang6,'1',1.001);
                          $plugin_info{$plugname.'_cycle'} = $timer;
                          $plugin_info{$plugname.'_status'} = '5';
                          plugin_log($plugname, "Bewässerung Strang 6!");
                          return;
                          }
                          
                          ### siebter Kreis
                          if ($plugin_info{$plugname.'_status'} == '5' )
                          {
                          knx_write($strang6,'0',1.001);
                          knx_write($strang7,'1',1.001);
                          $plugin_info{$plugname.'_cycle'} = $timer;
                          $plugin_info{$plugname.'_status'} = '6';
                          plugin_log($plugname, "Bewässerung Strang 7!");
                          return;
                          }
                          
                          ### achter Kreis
                          if ($plugin_info{$plugname.'_status'} == '6' )
                          {
                          knx_write($strang7,'0',1.001);
                          knx_write($strang8,'1',1.001);
                          $plugin_info{$plugname.'_cycle'} = $timer;
                          $plugin_info{$plugname.'_status'} = '7';
                          plugin_log($plugname, "Bewässerung Strang 8!");
                          return;
                          }
                          
                          ### neunter Kreis
                          if ($plugin_info{$plugname.'_status'} == '7' )
                          {
                          knx_write($strang8,'0',1.001);
                          knx_write($strang9,'1',1.001);
                          $plugin_info{$plugname.'_cycle'} = $timer;
                          $plugin_info{$plugname.'_status'} = '8';
                          plugin_log($plugname, "Bewässerung Strang 9!");
                          return;
                          }
                          
                          ### letzter Kreis !!! cycle auf 86400 und status auf 0 setzen !!! 
                          if ($plugin_info{$plugname.'_status'} == '8' )
                          {
                          knx_write($strang9,'0',1.001);
                          knx_write($pumpe,'0',1.001);
                          $plugin_info{$plugname.'_cycle'} = '86400';
                          $plugin_info{$plugname.'_status'} = '0';
                          plugin_log($plugname, "Bewässerung Ende!");
                          plugin_log($plugname, "Pumpe Aus!");
                          return;
                          }
                          
                          ### Beim einfachen Durchlauf ohne Befehle
                          
                          if ($plugin_info{$plugname.'_status'} == '0')
                          {
                          $plugin_info{$plugname.'_cycle'} = '86400';
                          return;
                          }

                          Kommentar


                            #14
                            Hallo,

                            ich kram den Thread nochmal raus.
                            Bei mir läuft das Plugin jetzt auch soweit.

                            Nur eine Frage:
                            Was passiert bei einer Leseanfrage auf die startstop-GA? Wird da der Status immer eins hochgezählt, da das Plugin mit der eintreffenden GA wieder ausgeführt wird?

                            Wenn ich auf dem Smartphone KNXDroid starte, werden erstmal viele GAs abgefragt; das würde ja dann das Plugin durcheinander bringen!?

                            Gruß

                            Kommentar


                              #15
                              Ja da müsste man die Klammern nochmal schieben.
                              Welche Version nutzt Du ?
                              Umgezogen? Ja! ... Fertig? Nein!
                              Baustelle 2.0 !

                              Kommentar

                              Lädt...
                              X