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

    #16
    Nein dass ist kein Problem, da das Plugin nur auf Schreibbefehle und nicht auf Leseanfragen reagiert

    EDIT: Jumi war schneller... @Jumi: wis den dass? hast du kein if(A_GroupValue_Write) drin?
    Gruss Patrik alias swiss

    Kommentar


      #17
      @swiss ... ist es doch:

      Der Erstaufruf durch Trigger wird noch mit "A_GroupValue_Write" gefiltert, die restlichen Kreise dann nicht mehr ... ist aber schnell geändert. Erklären dauert länger .
      Damit würde der Status bei jedem Aufruf des Plugins verändert, also auch durch ein "A_Group_Value_Read". Im knxd hab ich dafür unterschiedliche Subscriptions gebaut und auch als Patch vorgeschlagen (plugin_subscribe, plugin_subscribe_read, plugin_subscribe_write).
      Hatte das damals ja nicht für mich selbst geschrieben und ist wohl noch keinem aufgefallen. Der Bug kommt wohl nur zum tragen wenn während der Bewässerung der Status gelesen wird...hab mir jetzt aber nicht das ganze Plugin angesehen.
      Umgezogen? Ja! ... Fertig? Nein!
      Baustelle 2.0 !

      Kommentar


        #18
        Hallo,

        ich nutze folgenden Code:
        Die Pumpenvorlaufzeit brauche ich nicht, habe einen Druckschalter.
        Code:
        ###Bewässerung
        ###2012-07-09 JuMi2006
        ###2013-06-20 DLA
        
        my $pumpe = '';        # Einschalten der Pumpe
        my $startstop = '6/0/5';    #Trigger GA: 1=Start 0=Stop
        my $strangA = '6/0/6';
        my $strangB = '6/0/7';
        my $strangC = '6/0/8';
        my $strangD = '6/0/9';    #GA für Kreis D
        
        my $timer = '900';    #Zeit in Sekunden Pro Kreis 900s=15Min.
        #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($strangA,'0',1.001);
        knx_write($strangB,'0',1.001);
        knx_write($strangC,'0',1.001);
        knx_write($strangD,'0',1.001);
        $plugin_info{$plugname.'_status'} = '0';
        $plugin_info{$plugname.'_last'} = time();
        $plugin_info{$plugname.'_cycle'} = 86400;
        plugin_log($plugname, "Manueller Abbruch!");
        }
        
        
        #### 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'} = 2;
        $plugin_info{$plugname.'_status'} = '1';
        #plugin_log($plugname, "Pumpe ein!");
        return;
        }
        
        
        
        if ($plugin_info{$plugname.'_status'} == '1' )
        {
        knx_write($strangA,'1',1.001);
        $plugin_info{$plugname.'_cycle'} = $timer;
        $plugin_info{$plugname.'_status'} = '2';
        plugin_log($plugname, "Bewässerung Strang A!");
        return;
        }
        
        if ($plugin_info{$plugname.'_status'} == '2' )
        {
        knx_write($strangA,'0',1.001);
        knx_write($strangB,'1',1.001);
        $plugin_info{$plugname.'_cycle'} = $timer;
        $plugin_info{$plugname.'_status'} = '3';
        plugin_log($plugname, "Bewässerung Strang B!");
        return;
        }
        
        if ($plugin_info{$plugname.'_status'} == '3' )
        {
        knx_write($strangB,'0',1.001);
        knx_write($strangC,'1',1.001);
        $plugin_info{$plugname.'_cycle'} = $timer;
        $plugin_info{$plugname.'_status'} = '4';
        plugin_log($plugname, "Bewässerung Strang C!");
        return;
        }
        
        if ($plugin_info{$plugname.'_status'} == '4' )
        {
        knx_write($strangC,'0',1.001);
        knx_write($strangD,'1',1.001);
        $plugin_info{$plugname.'_cycle'} = $timer;
        $plugin_info{$plugname.'_status'} = '5';
        plugin_log($plugname, "Bewässerung Strang D!");
        return;
        }
        
        if ($plugin_info{$plugname.'_status'} == '5' )
        {
        knx_write($strangD,'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;
        }
        Daran müsste also noch was geändert werden..... mal schauen, ob ich da durchsteige.

        Kommentar


          #19
          Könnte man noch schlanker machen, aber so sollte es gehen:

          Code:
          ###Bewässerung
          ###2012-07-09 JuMi2006
          ###2013-06-20 DLA
          
          my $pumpe = '';        # Einschalten der Pumpe
          my $startstop = '6/0/5';    #Trigger GA: 1=Start 0=Stop
          my $strangA = '6/0/6';
          my $strangB = '6/0/7';
          my $strangC = '6/0/8';
          my $strangD = '6/0/9';    #GA für Kreis D
          
          my $timer = '900';    #Zeit in Sekunden Pro Kreis 900s=15Min.
          #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($strangA,'0',1.001);
          knx_write($strangB,'0',1.001);
          knx_write($strangC,'0',1.001);
          knx_write($strangD,'0',1.001);
          $plugin_info{$plugname.'_status'} = '0';
          $plugin_info{$plugname.'_last'} = time();
          $plugin_info{$plugname.'_cycle'} = 0;
          plugin_log($plugname, "Manueller Abbruch!");
          }
          
          
          #### 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'} = 2;
          $plugin_info{$plugname.'_status'} = '1';
          #plugin_log($plugname, "Pumpe ein!");
          return;
          }
          
          unless ($msg{'apci'} eq "A_GroupValue_Read") {
              
              if ($plugin_info{$plugname.'_status'} == '1' )
              {
              knx_write($strangA,'1',1.001);
              $plugin_info{$plugname.'_cycle'} = $timer;
              $plugin_info{$plugname.'_status'} = '2';
              plugin_log($plugname, "Bewässerung Strang A!");
              return;
              }
              
              if ($plugin_info{$plugname.'_status'} == '2' )
              {
              knx_write($strangA,'0',1.001);
              knx_write($strangB,'1',1.001);
              $plugin_info{$plugname.'_cycle'} = $timer;
              $plugin_info{$plugname.'_status'} = '3';
              plugin_log($plugname, "Bewässerung Strang B!");
              return;
              }
              
              if ($plugin_info{$plugname.'_status'} == '3' )
              {
              knx_write($strangB,'0',1.001);
              knx_write($strangC,'1',1.001);
              $plugin_info{$plugname.'_cycle'} = $timer;
              $plugin_info{$plugname.'_status'} = '4';
              plugin_log($plugname, "Bewässerung Strang C!");
              return;
              }
              
              if ($plugin_info{$plugname.'_status'} == '4' )
              {
              knx_write($strangC,'0',1.001);
              knx_write($strangD,'1',1.001);
              $plugin_info{$plugname.'_cycle'} = $timer;
              $plugin_info{$plugname.'_status'} = '5';
              plugin_log($plugname, "Bewässerung Strang D!");
              return;
              }
              
              if ($plugin_info{$plugname.'_status'} == '5' )
              {
              knx_write($strangD,'0',1.001);
              $plugin_info{$plugname.'_cycle'} = '0';
              $plugin_info{$plugname.'_status'} = '0';
              plugin_log($plugname, "Bewässerung Ende!");
              return;
              }
              
          }else{
              plugin_log($plugname, "Die Trigger GA wurde nur ausgelesen ;)"); #darf man gerne löschen
              return;
          }
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #20
            Danke für die Anpassung. So sollte es erstmal funktionieren.
            Gruß, Dennis

            Kommentar


              #21
              Ich habe meinen Code nun ergänzt.
              Nur tritt das das Weiterschalten bei einer Leseanfrage auf die StartStopGA immer noch auf.

              Die Leseanfrage kommt vom KNXDroid auf meinem Android-Handy.

              Kommentar


                #22
                Poste nochmal den gesamten Code.
                Umgezogen? Ja! ... Fertig? Nein!
                Baustelle 2.0 !

                Kommentar


                  #23
                  versuche ich heute oder morgen zu machen.... bin zur Zeit unterwegs.

                  Kommentar


                    #24
                    so, hier nochmal mein Code; vielleicht erkennt Ihr ja noch was...:
                    Code:
                    ###Bewässerung
                    ###2013-06-23 - 
                    ###2013-08-13 -  kein Weiterschalten bei Statusabfrage
                    
                    my $gaStartStop = '9/0/1';    #Trigger GA: 1=Start 0=Stop
                    my $gaKreisA = '9/0/10';	#GA für Kreis A
                    my $gaKreisB = '9/0/11';
                    my $gaKreisC = '9/0/12';
                    my $gaKreisD = '9/0/13';
                    my $timer = '1200';	#Zeit in Sekunden Pro Kreis
                    
                    ####
                    $plugin_subscribe{$gaStartStop}{$plugname} = 1;
                    
                    
                    #### Erstaufruf durch Trigger und dann GA1 AN
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $gaStartStop && $msg{'value'} == '1' && $plugin_info{$plugname.'_status'} == '0' )
                    {
                    knx_write($gaKreisA,'1',1.001);
                    $plugin_info{$plugname.'_last'} = time();
                    $plugin_info{$plugname.'_cycle'} = $timer;
                    $plugin_info{$plugname.'_status'} = '1';
                    plugin_log($plugname, "Bewässerung Strang A!");
                    return 'Strang A';
                    }
                    #### Stop Befehl - Trigger mit '0'
                    
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $gaStartStop &&  $msg{'value'} == '0')
                    {
                    knx_write($gaKreisA,'0',1.001);
                    knx_write($gaKreisB,'0',1.001);
                    knx_write($gaKreisC,'0',1.001);
                    knx_write($gaKreisD,'0',1.001);
                    
                    $plugin_info{$plugname.'_status'} = '0';
                    $plugin_info{$plugname.'_last'} = time();
                    $plugin_info{$plugname.'_cycle'} = 86400;
                    plugin_log($plugname, "Stop!");
                    return 'STOP';
                    }
                    unless ($msg{'apci'} eq "A_GroupValue_Read") {
                    	
                    	### zweiter Kreis
                    	if ($plugin_info{$plugname.'_status'} == '1' )
                    	{
                    	knx_write($gaKreisA,'0',1.001);
                    	knx_write($gaKreisD,'1',1.001);
                    	$plugin_info{$plugname.'_cycle'} = $timer;
                    	$plugin_info{$plugname.'_status'} = '2';
                    	plugin_log($plugname, "Bewässerung Strang D!");
                    	return 'Strang D';
                    	
                    	}
                    	
                    	### dritter Kreis
                    	if ($plugin_info{$plugname.'_status'} == '2' )
                    	{
                    	
                    	knx_write($gaKreisD,'0',1.001);
                    	knx_write($gaKreisB,'1',1.001);
                    	knx_write($gaKreisC,'1',1.001);
                    	$plugin_info{$plugname.'_cycle'} = $timer;
                    	$plugin_info{$plugname.'_status'} = '3';
                    	plugin_log($plugname, "Bewässerung Strang B/C!");
                    	return 'Strang B/C';
                    	}
                    	
                    	### letzter Kreis !!! cycle auf 86400 und status auf 0 setzen !!! 
                    	if ($plugin_info{$plugname.'_status'} == '3' )
                    	{
                    	knx_write($gaKreisC,'0',1.001);
                    	knx_write($gaKreisB,'0',1.001);
                    	$plugin_info{$plugname.'_cycle'} = '86400';
                    	$plugin_info{$plugname.'_status'} = '0';
                    	plugin_log($plugname, "Bewässerung Ende!");
                    	knx_write($gaStartStop,'0',1.001);
                    	return 'nix zu tun';
                    	}
                    	
                    	### Beim einfachen Durchlauf ohne Befehle
                    	
                    	if ($plugin_info{$plugname.'_status'} == '0')
                    	{
                    	$plugin_info{$plugname.'_cycle'} = '86400';
                    	return;
                    	}
                    } else{
                        #plugin_log($plugname, "Die Trigger GA wurde nur ausgelesen ;)"); #darf man gerne löschen
                        return;
                    }
                    Gruß

                    Kommentar


                      #25
                      Lass mal das logging in der vorletzten Zeile drin, dann Plugin starten,Bewässerung starten und Die App starten. Aus dem Zeitraum müsste man sich mal die Plugin-Log und die Busmonitor-Log ansehen.
                      Ich seh da grad keinen Fehler.
                      Umgezogen? Ja! ... Fertig? Nein!
                      Baustelle 2.0 !

                      Kommentar


                        #26
                        so, ich habe mal den "Durchlauf" aufgezeichnet.
                        Hier das PluginLog:
                        Code:
                        2013-08-23 14:38:07.766,bewaesserung,Bewässerung Strang A!
                        2013-08-23 14:38:07.779,bewaesserung,Strang A,0s,
                        2013-08-23 14:38:17.817,bewaesserung,Die Trigger GA wurde nur ausgelesen ;)
                        2013-08-23 14:38:17.883,bewaesserung,Bewässerung Strang D!
                        2013-08-23 14:38:17.889,bewaesserung,Strang D,0s,
                        Es wird nach Öffnen von KNXDroid auf den nächsten Strang weitergeschalten.

                        Anbei noch was vom Busmonitor.
                        Angehängte Dateien

                        Kommentar


                          #27
                          Ahh klar, Ich hab zwar das Read gefiltert aber das Response vergessen:

                          Code:
                          unless ($msg{'apci'} eq "A_GroupValue_Read")
                          wird zu

                          Code:
                          if ($msg{'apci'} eq "A_GroupValue_Write")
                          Dann sollte es passen.
                          Umgezogen? Ja! ... Fertig? Nein!
                          Baustelle 2.0 !

                          Kommentar


                            #28
                            .... das war's gewesen.
                            Nun geht's.

                            Vielen Dank!!!

                            Kommentar


                              #29
                              ... noch nicht ganz.

                              Jetzt werden die zyklischen Aufrufe ja nicht bearbeitet. D.h. es wird jetzt gar nicht mehr weitergeschalten.....

                              Kommentar


                                #30
                                Wieder ändern

                                Code:
                                if ($msg{'apci'} eq "A_GroupValue_Write")
                                wird zu:

                                Code:
                                unless (($msg{'apci'} eq "A_GroupValue_Read") or ($msg{'apci'} eq "A_GroupValue_Response"))
                                Umgezogen? Ja! ... Fertig? Nein!
                                Baustelle 2.0 !

                                Kommentar

                                Lädt...
                                X