Ankündigung

Einklappen
Keine Ankündigung bisher.

bewaesserung.pl - mein erstes Plugin zur Gartenbewässerung

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

    #16
    Bei diesem Wetter macht Gartenarbeit mehr Spass, als am PC zu sitzen....
    Dann viel Erfolg.
    Vielleicht findest Du ja mal Zeit, Dein Plugin zu überarbeiten.

    Gruß,
    Dennis

    Kommentar


      #17
      Hallo zusammen,

      bin derzeitg auch am verlegen meiner Gartenbewässerung mit 9St Magnetventilen, welche ich gerne über dieses Plugin ansteuern möchte.

      Da ich bis jetzt noch nicht die Zeit gefunden habe mich in Plugins einzulesen, geschweige den selbst welche zu schreiben,
      habe ich bis jetzt immer die vorhanden aus dem Forum genutzt und umgeschrieben (genau so wie dieses)

      Dazu habe ich mir einen neuen Schaltaktor gekauft
      - die Schaltausgänge auf Treppenlicht eingestellt (größere Zeit als im Plugin)
      - die Gruppenadressen für Start/ Stopp / Status angepaßt
      - die Gruppenadressen der einzelnen Regnerkreise eingetragen.

      Dennoch funktioniert das Plugin nicht.

      Beim Starten über die Gruppenadresse bekomme ich sofort in der Pluginlog

      -2014-06-08 16:22:53.410,bewässerung Rasen test.pl,1 (BUS)
      Beregnungsprogramm läuft nicht - keine Aktion ausgeführt

      Kann mir jemand helfen, denn der Rasenansaattermin rückt in greifbare Nähe und da sollte dieses Plugin laufen. Panik
      Muß evtl bei diesem Plugin noch was geändert werden??
      Brauche ich evtl noch Befehlszeilein in der config datei????
      Hat jemand dieses Plugin schon am laufen???

      Danke schon mal im Voraus
      Gruß

      Frank

      PS: habe mal mein Plugin in einer Text datei angehängt!
      Angehängte Dateien

      Kommentar


        #18
        Hallo Mathias!

        Hab grad das plugin für meine Bewässerung aktiviert.
        Was soll ich sagen: funktioniert - DANKE!!!!

        Kompliment an deine Programmierung! Debug-log wirklich super übersichtlich, und durch die Sub() sehr flexibel gehalten.

        Habe 2. Kleinigkeiten geändert
        (hab meine GAs nicht importiert, da mir das zu aufwändig ist, bei jeder neuen GA in der ETS das import-tool anzuwerfen):
        - GA-Type im knx_write ergänzt
        - $msg{'data'} == 1 anstelle von $msg{'value'} == 1

        Könnte für die interessant sein, die ebenfalls die GAs nicht importiert haben.

        Folgende Dinge werde ich kurzfristig ergänzen (und gerne posten, wenn wer interessiert ist):
        - "Freigabeobjekt"
        - Mit der Status Rückmeldung auch die verbleibende Zeit des akt. Kreises schicken
        - Erkennung ob ein Kreis gesperrt ist (knx-read auf das Sperrobjekt des Aktors), wobei mir hier der Weg noch nicht ganz klar ist.

        Wenn dann noch Zeit bleibt:
        - Verstellung der Dauer über CV Infotrigger, das Plugin muss sich die Zeit auch merken und auf read am Bus antworten
        - Automatiksteuerung (Zeitschaltuhr + Abhängigkeit von Regenmenge der letzten 24h und Temperatur)

        Nochmals Danke für dein Plugin
        lg
        Robert

        Kommentar


          #19
          Hallo Robert_Mini,

          ich denke die nicht importierten GA's im Wiregate könnten auch bei mir das Problem sein.

          Kannst du bitte deine Änderungen hier einstellen, vielleich funktionierts dann auch bei mir!

          Danke und Gruß

          Kommentar


            #20
            Ich poste hier mal meinen Zwischenstand.

            Folgende Erweiterungen:
            - Globaler Zeitfaktor für alle Kreise von GA DPT9
            - zykl. senden der Restzeit des akt. Kreis und Gesamtzeit
            - Abfrage des Sperrobjektes vom Aktorkanal
            - Lesen der Sollzeit von der Visu über GA
            - Reset der Zeiten auf Default

            Hab zusätzlich einen Visu-Screenshot angehängt.

            Wesentliche Änderungen hinsichtlich der DPT sind:
            - Angabe der GA bei knx_write und knx_read
            - ($msg{'data'} == 1) anstelle ($msg{'value'} == 1)

            @Mathias:
            Vielleicht können wir das wieder auf einen gemeinsamen, kompatiblen(!) Stand im SVN bringen? Ich denke hierzu fehlen im wesentlichen die Abfragen, wenn xxx_ga !='' bei allen optionalen Sendewerten.

            lg
            Robert

            Code:
            #############################################################################
            # Plugin: bewaesserung.pl (Gartenberegnung steuern)
            # V0.5 20140309
            # Autor: Mathias Gindler (mathias@gindler.de)
            # Erweiterung: Robert_Mini
            # License: GPL (v3)
            #
            #############################################################################
            #
            # Beschreibung:
            # Ansteuerung mehrerer Beregnungstränge hintereinander für eine bestimmte Dauer
            # (je Strang), ausgelöst/gestoppt über eine einzige GA.
            # Dabei wird der Strang innerhalb der Dauer zyklisch neu angetriggert,
            # somit kann die Treppenlichtfunktion eines Aktors für eine Sicherheits-
            # abschaltung verwendet werden.
            #
            #############################################################################
            #
            # Änderungshistorie:
            #
            #############################################################################
            #
            # Offene Punkte:
            # - Zeitsteuerung
            # - aktiv/inaktiv
            # - Regenmengen- und Temperaturabhängigkeit
            #############################################################################
            #
            # Abhängigkeiten:
            #
            #############################################################################
            #
            # plugin_info-Werte
            # - aktKreisNr: Index (0-n) des aktuellen Kreises
            # - Startzeit: Start des aktuellen Kreises
            # - Status: Bewässerung aktiv (1) oder inaktiv (0)
            #
            #############################################################################
            
            use POSIX;
            use Time::Local;
            
            # return;
            # Konstanten für Aufrufart
            use constant EVENT_RESTART => 'restart';
            use constant EVENT_MODIFIED => 'modified';
            use constant EVENT_BUS => 'bus';
            use constant EVENT_SOCKET => 'socket';
            use constant EVENT_CYCLE => 'cycle';
            
            my $show_debug = 6;
            my $debugindex = 1;
            my $gv_event=undef;
            
            my $startzeit;
            my $pluginstatus;
            
            my $ga_plugintrigger = "5/4/102";     # Start/Stop der Beregnungs-Sequenz
            my $ga_pluginstatus  = "5/4/103";     # Status, ob Sequenz aktiv/inaktiv (1/0)
            my $ga_gesamtzeit  = "5/4/104";     # Status, ob Sequenz aktiv/inaktiv (1/0)
            my $ga_zeitfaktor = "5/4/106";
            my $ga_resetdauer = "5/4/108";
            my $triggercycle = 30;                # Re-Trigger-Intervall  (entspricht max. Über-Bewässerung), 
                                                  # muss kleiner als Treppenlicht-Einstellung des Aktors sein
            
            
            my @Kreise;    # Array für Regnerkreise
            push @Kreise, {name => "Wiese Gartenhaus", dauer => 900, ga_schalten => '5/4/115', ga_status => '5/4/99', ga_sperre => '5/4/116', ga_restzeit => '5/4/118', ga_dauer => '5/4/119'};
            push @Kreise, {name => "Terrasse",         dauer => 600, ga_schalten => '5/4/125', ga_status => '5/4/99', ga_sperre => '5/4/126', ga_restzeit => '5/4/128', ga_dauer => '5/4/129'};
            push @Kreise, {name => "Obstgarten",       dauer => 900, ga_schalten => '5/4/110', ga_status => '5/4/99', ga_sperre => '5/4/111', ga_restzeit => '5/4/113', ga_dauer => '5/4/114'};
            push @Kreise, {name => "Spruehregner",     dauer => 450, ga_schalten => '5/4/120', ga_status => '5/4/99', ga_sperre => '5/4/121', ga_restzeit => '5/4/123', ga_dauer => '5/4/124'};
            push @Kreise, {name => "Brunnen",          dauer => 600, ga_schalten => '5/4/130', ga_status => '5/4/99', ga_sperre => '5/4/131', ga_restzeit => '5/4/133', ga_dauer => '5/4/134'};
            
            plugin_log($plugname, "------------------------------------") if ($show_debug > 5);
            
            # Aufruf per Bus-Telegramm
            $plugin_subscribe{$ga_plugintrigger}{$plugname} = 1;
            $plugin_subscribe{$ga_resetdauer}{$plugname} = 1;
            
            # aktuellen Status lesen
            if ($plugin_info{$plugname.'_Status'} ne '') {$pluginstatus = $plugin_info{$plugname.'_Status'}};
            
            # Aus welchem Grund läuft das Plugin gerade
            if (!$plugin_initflag) {$gv_event = EVENT_RESTART;} # Restart des daemons / Reboot
            elsif ($plugin_info{$plugname.'_lastsaved'} > $plugin_info{$plugname.'_last'}) {$gv_event = EVENT_MODIFIED;} # Plugin modifiziert
            elsif (%msg) {$gv_event = EVENT_BUS;}               # Bustraffic
            elsif ($fh) {$gv_event = EVENT_SOCKET;}             # Netzwerktraffic
            else {$gv_event = EVENT_CYCLE;}                     # Zyklus
            
            plugin_log($plugname, $debugindex++." (MAIN) Aufrufgrund: $gv_event") if ($show_debug > 5);
            plugin_log($plugname, $debugindex++." (MAIN) aktueller Status: $pluginstatus") if ($show_debug > 5);
            
            if ($gv_event eq EVENT_RESTART) {
                ende();
            } 
            elsif ($gv_event eq EVENT_MODIFIED) {
                ende();
            }  
            elsif ($gv_event eq EVENT_SOCKET) {
            } 
            elsif ($gv_event eq EVENT_CYCLE) {
                beregnung();
            }
            elsif ($gv_event eq EVENT_BUS) {
            ## Start durch GA 
            # Zeiten vom Bus lesen ergänzen
                plugin_log($plugname, $debugindex++." (BUS) aktueller Status: $pluginstatus") if ($show_debug > 1);
                if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $ga_plugintrigger) {
                    if ($msg{'data'} == 1){  #value durch data ersetzt
                        plugin_log($plugname, $debugindex++." (BUS) EIN-Telegramm empfangen") if ($show_debug > 1);
                        $plugin_info{$plugname.'_cycle'} = $triggercycle;
                        if ($pluginstatus == 1){
                            plugin_log($plugname, $debugindex++." (BUS) Beregnungsprogramm läuft bereits - keine Aktion ausgeführt") if ($show_debug > 0);
                        }
                        else{
                            plugin_log($plugname, $debugindex++." (BUS) Beregnungsprogramm gestartet") if ($show_debug > 0);
                            $startzeit = time();
                            $plugin_info{$plugname.'_Startzeit'} = $startzeit;
                            $plugin_info{$plugname.'_aktKreisNr'} = 0;
                            $pluginstatus = 1;
                            $plugin_info{$plugname.'_Status'} = $pluginstatus;
                            $plugin_info{$plugname.'_StartzeitSequenz'} = $startzeit;
                            beregnung();
                        }
                    }
                    else{
                        plugin_log($plugname, $debugindex++." (BUS) AUS-Telegramm empfangen") if ($show_debug > 1);
                        $plugin_info{$plugname.'_cycle'} = 0;
                        if ($pluginstatus == 0){
                            plugin_log($plugname, $debugindex++." (BUS) Beregnungsprogramm läuft nicht - keine Aktion ausgeführt") if ($show_debug > 0);
                        }
                        else{
                            plugin_log($plugname, $debugindex++." (BUS) Beregnungsprogramm beendet") if ($show_debug > 0);
                            ende();
                        }
                    }
                }
                elsif ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $ga_resetdauer) {
                    if ($msg{'data'} == 1){  #value durch data ersetzt
                        plugin_log($plugname, $debugindex++." (BUS) ga_resetdauer aufgerufen") if ($show_debug > 0);
                        foreach (@Kreise){
                            my $kreisdauer  = ($_->{dauer})/60;
                            knx_write($_->{ga_dauer}, $kreisdauer, 9);
                        }
                    }
                }
                 
            } 
            
            knx_write($ga_pluginstatus, $pluginstatus, 1);  # aktuellen Status an Bus zurückmelden
            
            
            sub beregnung{
                my $x;
                my $kreisname;
                my $kreisdauer;
                my $ga_schalten;
                my $ga_status;
                my $ga_sperre;
                my $ga_restzeit;
                my $istdauer;
                
            # Parameter für aktuellen Kreis setzen    
                $x = $plugin_info{$plugname.'_aktKreisNr'};
                $kreisname     = $Kreise[$x]->{name};
                $ga_schalten   = $Kreise[$x]->{ga_schalten};
                $ga_status     = $Kreise[$x]->{ga_status};
                $ga_sperre     = $Kreise[$x]->{ga_sperre};
                $ga_restzeit   = $Kreise[$x]->{ga_restzeit};
            
                my $sperre = knx_read($ga_sperre, 0,1);
                my $zeitfaktor = knx_read($ga_zeitfaktor, 0,9);
            
                $kreisdauer    = ($Kreise[$x]->{dauer}) * $zeitfaktor;
                
                my $restzeit = 0;
                my $gesamtzeit = 0;
                plugin_log($plugname, $debugindex++." (SUB beregnung) Beregnung: Index $x ('$kreisname'), Trigger $ga_schalten, Status $ga_status, Sperre $sperre, Zeitfaktor $zeitfaktor") if ($show_debug > 5);
                
                if ($plugin_info{$plugname.'_Startzeit'} + $kreisdauer - 2 < time() or ($sperre == 1)){
                    if (!$sperre) {
                        plugin_log($plugname, $debugindex++." (SUB beregnung) Kreis '$kreisname' abgeschlossen") if ($show_debug > 0);
                        $istdauer = sprintf("%2.0f", time() - $plugin_info{$plugname.'_Startzeit'});
                        plugin_log($plugname, $debugindex++." (SUB beregnung) Kreis '$kreisname' Dauer: $istdauer sek. (ist)/$kreisdauer sek. (soll)") if ($show_debug > 0);
                        knx_write($ga_schalten, 0, 1);
                    }
                    else {
                        plugin_log($plugname, $debugindex++." (SUB beregnung) Kreis '$kreisname' gesperrt") if ($show_debug > 0);
                    }
                    knx_write($ga_restzeit, $restzeit, 9);
                    if ($x < $#Kreise){
                        plugin_log($plugname, $debugindex++." (SUB beregnung) Umschalten auf nächsten Kreis") if ($show_debug > 0);
                        $x++;
                        $plugin_info{$plugname.'_aktKreisNr'} = $x;
                        $plugin_info{$plugname.'_Startzeit'} = time();
            
            # nächste Zeile aktivieren, um sofort umzuschalten; 
            # wenn deaktiviert, wird nächster Kreis erst im nächsten Zyklus eingeschaltet ($triggercycle)
                        beregnung();   
                    }
                    else{
                        plugin_log($plugname, $debugindex++." (SUB beregnung) keine weiteren Kreise, Beregnung beendet.") if ($show_debug > 0);
                        $gesamtzeit = (time() - $plugin_info{$plugname.'_StartzeitSequenz'})/60;
                        knx_write($ga_gesamtzeit, $gesamtzeit, 9);
                        ende();
                    }
                }
                else{
                    plugin_log($plugname, $debugindex++." (SUB beregnung) Beregnung für Kreis '$kreisname' (re-)triggert") if ($show_debug > 0);
                    knx_write($ga_schalten, 1, 1);
                    $restzeit = ($plugin_info{$plugname.'_Startzeit'} + $kreisdauer - time())/60;
                    knx_write($ga_restzeit, $restzeit, 9);
                    $gesamtzeit = (time() - $plugin_info{$plugname.'_StartzeitSequenz'})/60;
                    knx_write($ga_gesamtzeit, $gesamtzeit, 9);
                }
            }
            
            sub ende{
                foreach (@Kreise){
                    plugin_log($plugname, $debugindex++." (SUB ende) Ventil für '$_->{name}' geschlossen") if ($show_debug > 0);
                    knx_write($_->{ga_schalten},0,1);
                    knx_write($_->{ga_restzeit}, 0, 9);
                }
                $pluginstatus = 0;
                $plugin_info{$plugname.'_Status'} = $pluginstatus;
                $plugin_info{$plugname.'_cycle'} = 0;
            }
            Angehängte Dateien

            Kommentar


              #21
              Zitat von Robert_Mini Beitrag anzeigen
              Hab zusätzlich einen Visu-Screenshot angehängt.
              Super Arbeit Robert. Könntest du evtl auch noch die entsprechende XML-Config-Datei der CometVisu (oder einen Ausschnitt daraus) hier einstellen?

              Danke!
              Micha

              Kommentar


                #22
                Hallo Micha!

                Kein Problem.
                Hier der .xml Ausschnitt aus meiner CV.

                lg
                Robert
                Code:
                      <page name="Bewässerung">
                        <group name="Einstellungen">
                          <layout colspan="12"/>
                          <switch mapping="OnOff" styling="GreyGreen">
                            <layout colspan="4"/>
                            <label><icon name="temp_temperature"/>Freigabe gesamt</label>
                            <address transform="DPT:1.001" mode="readwrite">5/4/100</address>
                          </switch>
                          <infotrigger uplabel="+" downlabel="-" upvalue="1" downvalue="-1" align="left" infoposition="right" format="%.0f mm" change="absolute" min="0" max="30">
                            <layout colspan="4"/>
                            <label><icon name="temp_temperature"/>Regenlimit 24h</label>
                            <address transform="DPT:9.001" mode="readwrite">5/4/101</address>
                          </infotrigger>
                          <infotrigger uplabel="+" downlabel="-" upvalue="0.1" downvalue="-0.1" align="left" infoposition="right" format="%.1f x" change="absolute" min="0.5" max="2">
                            <layout colspan="4"/>
                            <label><icon name="temp_temperature"/>Globaler Zeitfaktor</label>
                            <address transform="DPT:9.001" mode="readwrite">5/4/106</address>
                          </infotrigger>
                        </group>         
                        <group name="Manuelle Bedienung">
                          <layout colspan="6"/>
                          <switch mapping="OnOff" styling="GreyGreen">
                            <layout colspan="4"/>
                            <label><icon name="sani_sprinkling"/>Bewässerungssequenz starten</label>
                            <address transform="DPT:1.001" mode="write">5/4/102</address>
                            <address transform="DPT:1.001" mode="read">5/4/103</address>
                          </switch>
                          <info format="%.1f min">
                            <layout colspan="2"/>
                            <label><icon name="time_timer"/>Gesamtzeit</label>
                            <address transform="DPT:9.001" mode="readwrite">5/4/104</address>
                          </info> 
                          <switch mapping="OnOff" styling="GreyGreen">
                            <layout colspan="4"/>
                            <label><icon name="sani_sprinkling"/>Kreis 1 - Obstgarten</label>
                            <address transform="DPT:1.001" mode="write">5/4/110</address>
                            <address transform="DPT:1.001" mode="read">5/4/112</address>
                          </switch>
                          <info format="%.1f min">
                            <layout colspan="2"/>
                            <label><icon name="time_timer"/>Restzeit</label>
                            <address transform="DPT:9.001" mode="readwrite">5/4/113</address>
                          </info>   
                          <switch mapping="OnOff" styling="GreyGreen">
                            <layout colspan="4"/>
                            <label><icon name="sani_sprinkling"/>Kreis 2 - Wiese Gartenhaus</label>
                            <address transform="DPT:1.001" mode="write">5/4/115</address>
                            <address transform="DPT:1.001" mode="read">5/4/117</address>
                          </switch>
                          <info format="%.1f min">
                            <layout colspan="2"/>
                            <label><icon name="time_timer"/>Restzeit</label>
                            <address transform="DPT:9.001" mode="readwrite">5/4/118</address>
                          </info>
                          <switch mapping="OnOff" styling="GreyGreen">
                            <layout colspan="4"/>
                            <label><icon name="sani_sprinkling"/>Kreis 4 - Terrasse</label>
                            <address transform="DPT:1.001" mode="write">5/4/125</address>
                            <address transform="DPT:1.001" mode="read">5/4/127</address>
                          </switch>
                          <info format="%.1f min">
                            <layout colspan="2"/>
                            <label><icon name="time_timer"/>Restzeit</label>
                            <address transform="DPT:9.001" mode="readwrite">5/4/128</address>
                          </info>         
                          <switch mapping="OnOff" styling="GreyGreen">
                            <layout colspan="4"/>
                            <label><icon name="sani_sprinkling"/>Kreis 5 - Brunnen</label>
                            <address transform="DPT:1.001" mode="write">5/4/130</address>
                            <address transform="DPT:1.001" mode="read">5/4/132</address>
                          </switch>
                          <info format="%.1f min">
                            <layout colspan="2"/>
                            <label><icon name="time_timer"/>Restzeit</label>
                            <address transform="DPT:9.001" mode="readwrite">5/4/133</address>
                          </info>          
                          <switch mapping="OnOff" styling="GreyGreen">
                            <layout colspan="4"/>
                            <label><icon name="sani_sprinkling"/>Kreis 3 - Vorgarten+Pool</label>
                            <address transform="DPT:1.001" mode="write">5/4/120</address>
                            <address transform="DPT:1.001" mode="read">5/4/122</address>
                          </switch>
                          <info format="%.1f min">
                            <layout colspan="2"/>
                            <label><icon name="time_timer"/>Restzeit</label>
                            <address transform="DPT:9.001" mode="readwrite">5/4/123</address>
                          </info>           
                        </group> 
                        <group name="Parameter Bewässerungskreise">
                          <trigger value="1">
                            <layout colspan="4"/>
                            <label>Standardzeiten wiederherstellen</label>
                            <address transform="DPT:1.001" mode="readwrite">5/4/108</address>
                          </trigger>
                          <trigger value="0" mapping="Freigeben">
                            <layout colspan="2"/>
                            <address transform="DPT:1.001" mode="readwrite">5/4/107</address>
                          </trigger>
                          <infotrigger uplabel="+" downlabel="-" upvalue="1" downvalue="-1" align="left" infoposition="right" format="%.0f min" change="absolute" min="0" max="20">
                            <layout colspan="4"/>
                            <label><icon name="time_timer"/>Dauer Soll</label>
                            <address transform="DPT:9.001" mode="readwrite">5/4/114</address>
                          </infotrigger>
                          <switch mapping="Sperre" styling="GreenRed">
                            <layout colspan="2"/>
                            <label></label>
                            <address transform="DPT:1.001" mode="readwrite">5/4/111</address>
                            <address transform="DPT:1.001" mode="read">5/4/107</address>
                          </switch>
                          <infotrigger uplabel="+" downlabel="-" upvalue="1" downvalue="-1" align="left" infoposition="right" format="%.0f min" change="absolute" min="0" max="20">
                            <layout colspan="4"/>
                            <label><icon name="time_timer"/>Dauer Soll</label>
                            <address transform="DPT:9.001" mode="readwrite">5/4/119</address>
                          </infotrigger>
                          <switch mapping="Sperre" styling="GreenRed">
                            <layout colspan="2"/>
                            <label></label>
                            <address transform="DPT:1.001" mode="readwrite">5/4/116</address>
                            <address transform="DPT:1.001" mode="read">5/4/107</address>
                          </switch>        
                          <infotrigger uplabel="+" downlabel="-" upvalue="1" downvalue="-1" align="left" infoposition="right" format="%.0f min" change="absolute" min="0" max="20">
                            <layout colspan="4"/>
                            <label><icon name="time_timer"/>Dauer Soll</label>
                            <address transform="DPT:9.001" mode="readwrite">5/4/129</address>
                          </infotrigger>
                          <switch mapping="Sperre" styling="GreenRed">
                            <layout colspan="2"/>
                            <label></label>
                            <address transform="DPT:1.001" mode="readwrite">5/4/126</address>
                            <address transform="DPT:1.001" mode="read">5/4/107</address>
                          </switch>
                          <infotrigger uplabel="+" downlabel="-" upvalue="1" downvalue="-1" align="left" infoposition="right" format="%.0f min" change="absolute" min="0" max="20">
                            <layout colspan="4"/>
                            <label><icon name="time_timer"/>Dauer Soll</label>
                            <address transform="DPT:9.001" mode="readwrite">5/4/134</address>
                          </infotrigger>
                          <switch mapping="Sperre" styling="GreenRed">
                            <layout colspan="2"/>
                            <label></label>
                            <address transform="DPT:1.001" mode="readwrite">5/4/131</address>
                            <address transform="DPT:1.001" mode="read">5/4/107</address>
                          </switch>
                          <infotrigger uplabel="+" downlabel="-" upvalue="1" downvalue="-1" align="left" infoposition="right" format="%.0f min" change="absolute" min="0" max="20">
                            <layout colspan="4"/>
                            <label><icon name="time_timer"/>Dauer Soll</label>
                            <address transform="DPT:9.001" mode="readwrite">5/4/124</address>
                          </infotrigger>
                          <switch mapping="Sperre" styling="GreenRed">
                            <layout colspan="2"/>
                            <label></label>
                            <address transform="DPT:1.001" mode="readwrite">5/4/121</address>
                            <address transform="DPT:1.001" mode="read">5/4/107</address>
                          </switch>
                        </group>         
                      </page>

                Kommentar


                  #23
                  Danke für die Config. Ich habe das jetzt mal (trocken ;-) ausprobiert - leider nur mit mäßigem Erfolg:
                  - ich kann Soll-Zeiten für die Kreise über die Visu einstellen und auch wieder zurücksetzen
                  - allerdings bleibt "Gesamtzeit" immer bei 0
                  - dadurch sehe ich auch folgendes im Log:
                  Code:
                  2014-07-02 23:02:14.629,bewaesserung.pl,1 (MAIN) Aufrufgrund: bus
                  2014-07-02 23:02:14.630,bewaesserung.pl,2 (MAIN) aktueller Status: 0
                  2014-07-02 23:02:14.631,bewaesserung.pl,3 (BUS) aktueller Status: 0
                  2014-07-02 23:02:14.631,bewaesserung.pl,4 (BUS) EIN-Telegramm empfangen
                  2014-07-02 23:02:14.632,bewaesserung.pl,5 (BUS) Beregnungsprogramm gestartet
                  2014-07-02 23:02:14.645,bewaesserung.pl,6 (SUB beregnung) Beregnung: Index 0 ('Ostseite'), Trigger 9/6/10, Status 9/6/11, Sperre 1, Zeitfaktor 
                  2014-07-02 23:02:14.646,bewaesserung.pl,7 (SUB beregnung) Kreis 'Ostseite' gesperrt
                  2014-07-02 23:02:14.652,bewaesserung.pl,8 (SUB beregnung) Umschalten auf nächsten Kreis
                  2014-07-02 23:02:14.665,bewaesserung.pl,9 (SUB beregnung) Beregnung: Index 1 ('Suedseite'), Trigger 9/6/20, Status 9/6/21, Sperre 0, Zeitfaktor 
                  2014-07-02 23:02:14.667,bewaesserung.pl,10 (SUB beregnung) Kreis 'Suedseite' abgeschlossen
                  2014-07-02 23:02:14.669,bewaesserung.pl,11 (SUB beregnung) Kreis 'Suedseite' Dauer:  0 sek. (ist)/0 sek. (soll)
                  2014-07-02 23:02:14.682,bewaesserung.pl,12 (SUB beregnung) keine weiteren Kreise, Beregnung beendet.
                  2014-07-02 23:02:14.686,bewaesserung.pl,13 (SUB ende) Ventil für 'Ostseite' geschlossen
                  2014-07-02 23:02:14.699,bewaesserung.pl,14 (SUB ende) Ventil für 'Suedseite' geschlossen
                  2014-07-02 23:02:14.737,bewaesserung.pl,2,0.3s,
                  => der Kreis wird also nur 0sek beregnet...

                  Anmerkung: ich habe das Ganze erstmal ohne Aktor am Laufen. Könnte das ein Grund für das Fehlverhalten sein?

                  Danke,
                  Micha

                  Kommentar


                    #24
                    Gesamtzeit wird nur während der aktiven Sequenz hochgezählt, nicht vorberechnet, dann müsste das plugin nämlich auf alle Dauer-ga's hören.

                    Das korrekte handling, wenn keine ga für Sperre definiert ist, fehlt ebenso.

                    Dein log mit Zeit 0 verstehe ich aber nicht. Sind die ga's in visu und plugin gleich?

                    Lg
                    Robert

                    Kommentar


                      #25
                      Zitat von Robert_Mini Beitrag anzeigen
                      Dein log mit Zeit 0 verstehe ich aber nicht. Sind die ga's in visu und plugin gleich?
                      Ich denke schon. Hier mal die Ausschnitte aus der Config. Kannst du evtl nochmal drüber schauen? Oder stimmt irgendwas mit den DPTs nicht?

                      visu:
                      Code:
                        <page name="Bewaesserung" visible="false" shownavbar-left="false">
                              <group name="Einstellungen">
                                <layout colspan="12"/>
                                <switch mapping="OnOff" styling="GreyGreen">
                                  <layout colspan="4"/>
                                  <label><icon name="temp_temperature"/>Freigabe gesamt</label>
                                  <address transform="DPT:1.001" mode="readwrite">5/4/100</address>
                                </switch>
                                <infotrigger uplabel="+" downlabel="-" upvalue="1" downvalue="-1" align="left" infoposition="right" format="%.0f mm" change="absolute" min="0" max="30">
                                  <layout colspan="4"/>
                                  <label><icon name="temp_temperature"/>Regenlimit 24h</label>
                                  <address transform="DPT:9.001" mode="readwrite">5/4/101</address>
                                </infotrigger>
                                <infotrigger uplabel="+" downlabel="-" upvalue="0.1" downvalue="-0.1" align="left" infoposition="right" format="%.1f x" change="absolute" min="0.5" max="2">
                                  <layout colspan="4"/>
                                  <label><icon name="temp_temperature"/>Globaler Zeitfaktor</label>
                                  <address transform="DPT:9.001" mode="readwrite">9/6/5</address>
                                </infotrigger>
                              </group>         
                              <group name="Manuelle Bedienung">
                                <layout colspan="6"/>
                                <switch mapping="OnOff" styling="GreyGreen">
                                  <layout colspan="4"/>
                                  <label><icon name="sani_sprinkling"/>Bewässerungs starten</label>
                                  <address transform="DPT:1.001" mode="readwrite">9/6/1</address>
                      			<!--            <address transform="DPT:1.001" mode="read">9/6/2</address>-->
                                </switch>
                                <info format="%.1f min">
                                  <layout colspan="2"/>
                                  <label><icon name="time_timer"/>Gesamt</label>
                                  <address transform="DPT:9.001" mode="read">9/6/3</address>
                                </info> 
                                <switch mapping="OnOff" styling="GreyGreen">
                                  <layout colspan="4"/>
                                  <label><icon name="sani_sprinkling"/>Kreis 1 - Ost</label>
                                  <address transform="DPT:1.001" mode="readwrite">9/6/10</address>
                                </switch>
                                <info format="%.1f min">
                                  <layout colspan="2"/>
                                  <label><icon name="time_timer"/>Restzeit</label>
                                  <address transform="DPT:9.001" mode="readwrite">9/6/13</address>
                                </info>   
                                <switch mapping="OnOff" styling="GreyGreen">
                                  <layout colspan="4"/>
                                  <label><icon name="sani_sprinkling"/>Kreis 2 - Süd</label>
                                  <address transform="DPT:1.001" mode="readwrite">9/6/20</address>
                      			<!--
                                  <address transform="DPT:1.001" mode="read">5/4/117</address>-->
                                </switch>
                                <info format="%.1f min">
                                  <layout colspan="2"/>
                                  <label><icon name="time_timer"/>Restzeit</label>
                                  <address transform="DPT:9.001" mode="readwrite">9/6/23</address>
                                </info>
                              </group> 
                              <group name="Parameter Bewässerungskreise">
                                <trigger value="1">
                                  <layout colspan="4"/>
                                  <label>Standardzeiten reset</label>
                                  <address transform="DPT:1.001" mode="readwrite">9/6/4</address>
                                </trigger>
                                <trigger value="0" mapping="Freigeben">
                                  <layout colspan="2"/>
                                  <address transform="DPT:1.001" mode="readwrite">5/4/107</address>
                                </trigger>
                                <infotrigger uplabel="+" downlabel="-" upvalue="1" downvalue="-1" align="left" infoposition="right" format="%.0f min" change="absolute" min="0" max="20">
                                  <layout colspan="4"/>
                                  <label><icon name="time_timer"/>Dauer Soll</label>
                                  <address transform="DPT:9.001" mode="readwrite">9/6/12</address>
                                </infotrigger>
                                <switch mapping="Sperre" styling="GreenRed">
                                  <layout colspan="2"/>
                                  <label></label>
                                  <address transform="DPT:1.001" mode="readwrite">9/6/14</address>
                                </switch>
                                <infotrigger uplabel="+" downlabel="-" upvalue="1" downvalue="-1" align="left" infoposition="right" format="%.0f min" change="absolute" min="0" max="20">
                                  <layout colspan="4"/>
                                  <label><icon name="time_timer"/>Dauer Soll</label>
                                  <address transform="DPT:9.001" mode="readwrite">9/6/22</address>
                                </infotrigger>
                                <switch mapping="Sperre" styling="GreenRed">
                                  <layout colspan="2"/>
                                  <label></label>
                                  <address transform="DPT:1.001" mode="readwrite">9/6/24</address>
                                </switch>        
                              </group>         
                            </page>
                      bewaesserung.pl:
                      Code:
                      my $ga_plugintrigger = "9/6/1";     # Start/Stop der Beregnungs-Sequenz
                      my $ga_pluginstatus  = "9/6/2";     # Status, ob Sequenz aktiv/inaktiv (1/0)
                      my $ga_gesamtzeit  = "9/6/3";     # Status, ob Sequenz aktiv/inaktiv (1/0)
                      my $ga_zeitfaktor = "9/6/5";
                      my $ga_resetdauer = "9/6/4";
                      my $triggercycle = 30;                # Re-Trigger-Intervall  (entspricht max. Über-Bewässerung), 
                                                            # muss kleiner als Treppenlicht-Einstellung des Aktors sein
                      
                      
                      my @Kreise;    # Array für Regnerkreise
                      push @Kreise, {name => "Ostseite", dauer => 900, ga_schalten => '9/6/10', ga_status => '9/6/11', ga_sperre => '9/6/14', ga_restzeit => '9/6/13', ga_dauer => '9/6/12'};
                      push @Kreise, {name => "Suedseite", dauer => 90, ga_schalten => '9/6/20', ga_status => '9/6/21', ga_sperre => '9/6/24', ga_restzeit => '9/6/23', ga_dauer => '9/6/22'};
                      Danke,
                      Micha

                      Kommentar


                        #26
                        Ga's sehen gut aus.
                        War bei deinem log der Kreis ost gesperrt?
                        Die Sollzeit 0 beim Kreis süd weist auf ein knx_read hin, das ohne Rückgabewert endet.
                        Steht auf der Visu ein Wert?

                        Sonst Rücksetzen und Sequenz starten + neues log posten.
                        Ich seh mir das am abend nochmal an.

                        Lg Robert

                        Kommentar


                          #27
                          Hallo zusammen!

                          Ich kämpfe gerade damit, dass das Bewaesserungsplugin teilweise mit Aufrufgrund: BUS ausgeführt wird, obwohl keine GA gesendet wird, die mit subscribe verknüpft ist.
                          Habe extra geprüft, ob noch eine alte GA verbunden ist, allerdings ist das nicht der Fall.

                          Hier das log:
                          Code:
                          2014-07-05 12:32:06.854,Bewaesserungssteuerung,------------------------------------ 
                          2014-07-05 12:32:06.854,Bewaesserungssteuerung,1 (MAIN) Aufrufgrund: cycle 
                          2014-07-05 12:32:06.855,Bewaesserungssteuerung,2 (MAIN) aktueller Status: 1 
                          2014-07-05 12:32:06.867,Bewaesserungssteuerung,3 (SUB beregnung) Beregnung: Index 2 ('Obstgarten'), Trigger 5/4/110, Status 5/4/99, Sperre 0, Zeitfaktor 0.5 
                          2014-07-05 12:32:06.867,Bewaesserungssteuerung,4 (SUB beregnung) Beregnung für Kreis 'Obstgarten' (re-)triggert 
                          2014-07-05 12:32:06.889,Bewaesserungssteuerung,2,0s, 
                          2014-07-05 12:32:36.954,Bewaesserungssteuerung,------------------------------------ 
                          2014-07-05 12:32:36.955,Bewaesserungssteuerung,1 (MAIN) Aufrufgrund: bus 
                          2014-07-05 12:32:36.955,Bewaesserungssteuerung,2 (MAIN) aktueller Status: 1 
                          2014-07-05 12:32:36.955,Bewaesserungssteuerung,3 (BUS) aktueller Status: 1 
                          2014-07-05 12:32:36.962,Bewaesserungssteuerung,2,0s, 
                          2014-07-05 12:33:07.114,Bewaesserungssteuerung,------------------------------------ 
                          2014-07-05 12:33:07.115,Bewaesserungssteuerung,1 (MAIN) Aufrufgrund: bus 
                          2014-07-05 12:33:07.115,Bewaesserungssteuerung,2 (MAIN) aktueller Status: 1 
                          2014-07-05 12:33:07.115,Bewaesserungssteuerung,3 (BUS) aktueller Status: 1 
                          2014-07-05 12:33:07.122,Bewaesserungssteuerung,2,0s, 
                          2014-07-05 12:33:37.369,Bewaesserungssteuerung,------------------------------------ 
                          2014-07-05 12:33:37.370,Bewaesserungssteuerung,1 (MAIN) Aufrufgrund: bus 2014-07-05 
                          12:33:37.370,Bewaesserungssteuerung,2 (MAIN) aktueller Status: 1 
                          2014-07-05 12:33:37.371,Bewaesserungssteuerung,3 (BUS) aktueller Status: 1 
                          2014-07-05 12:33:37.379,Bewaesserungssteuerung,2,0s, 
                          2014-07-05 12:34:08.516,Bewaesserungssteuerung,------------------------------------ 
                          2014-07-05 12:34:08.517,Bewaesserungssteuerung,1 (MAIN) Aufrufgrund: cycle 
                          2014-07-05 12:34:08.517,Bewaesserungssteuerung,2 (MAIN) aktueller Status: 1 
                          2014-07-05 12:34:08.523,Bewaesserungssteuerung,3 (SUB beregnung) Beregnung: Index 2 ('Obstgarten'), Trigger 5/4/110, Status 5/4/99, Sperre 0, Zeitfaktor 0.5 
                          2014-07-05 12:34:08.524,Bewaesserungssteuerung,4 (SUB beregnung) Kreis 'Obstgarten' abgeschlossen 
                          2014-07-05 12:34:08.524,Bewaesserungssteuerung,5 (SUB beregnung) Kreis 'Obstgarten' Dauer: 549 sek. (ist)/450 sek. (soll) 
                          2014-07-05 12:34:08.531,Bewaesserungssteuerung,6 (SUB beregnung) Umschalten auf nächsten Kreis 
                          2014-07-05 12:34:08.538,Bewaesserungssteuerung,7 (SUB beregnung) Beregnung: Index 3 ('Spruehregner'), Trigger 5/4/120, Status 5/4/99, Sperre 0, Zeitfaktor 0.5 
                          2014-07-05 12:34:08.539,Bewaesserungssteuerung,8 (SUB beregnung) Beregnung für Kreis 'Spruehregner' (re-)triggert 
                          2014-07-05 12:34:08.555,Bewaesserungssteuerung,2,0s,
                          Dadurch, dass die Aufrufe als "BUS" interpretiert werden, wird die sub Beregnung nicht aufgerufen und damit verzögert sich das Umschalten => Dauer 549sec anstelle 450sec.

                          Im Gruppenmonitor ist zu dieser Zeit aber nichts zu sehen, außer dass das WG den plugin status sendet.
                          Dies passt damit zusammen, dass der Aufruf als BUS interpretiert wird und im MAIN Teil des plugins das if ($msg{'dst') eq $ga_plugintrigger") nicht erfüllt ist. Damit endet der MAIN Teil ohne aktion (nur status senden, wir im log und Gruppenmonitor sichtbar)
                          und damit auch ohne Re-trigger => siehe die beiden Anhänge.

                          Mein Verdacht ist daher, dass die Abfrage im Plugin:
                          Code:
                          elsif (%msg) {$gv_event = EVENT_BUS;}               # Bustraffic
                          nicht konsistent funktioniert.

                          Die Frage ist daher, wann der Wert für %msg zurückgesetzt wird.
                          Ich vermute, dass hierfür ebenfalls ein 30s Timeout verwendet wird???

                          Kennt hier jemand die Zusamenhänge? (Makki?)

                          Danke für eure Hilfe
                          Robert
                          Angehängte Dateien

                          Kommentar


                            #28
                            Zitat von Robert_Mini Beitrag anzeigen
                            Ich kämpfe gerade damit, dass das Bewaesserungsplugin teilweise mit Aufrufgrund: BUS ausgeführt wird, obwohl keine GA gesendet wird, die mit subscribe verknüpft ist.
                            Ich meine mich zu erinnern, mal von dem Problem gelesen zu haben, dass ein Plugin unter gewissen Umständen auch noch zu "früheren" GAs subscribed ist/bleibt - also jenen GAs die irgendwann mal mit $plugin_subscribe "angemeldet" wurden. Ich glaube ein restart des wiregated brachte Abhilfe. Aber wie gesagt: alles nur eine vage Erinnerung - und wenn, dann sicherlich nur in einer alten Version aufgetreten ...

                            VG
                            Micha

                            Kommentar


                              #29
                              Zitat von Robert_Mini Beitrag anzeigen
                              Ga's sehen gut aus.
                              War bei deinem log der Kreis ost gesperrt?
                              Die Sollzeit 0 beim Kreis süd weist auf ein knx_read hin, das ohne Rückgabewert endet.
                              Steht auf der Visu ein Wert?

                              Sonst Rücksetzen und Sequenz starten + neues log posten.
                              Ich seh mir das am abend nochmal an.

                              Lg Robert
                              So, jetzt nochmal: beide Kreise freigegeben und zurückgesetzt. Zeit für die Kreise wird korrekt angezeigt: siehe Screenshot.

                              Ein Klick auf "Bewässerung starten" führt zu:
                              Code:
                              2014-07-07 22:46:04.846,bewaesserung.pl,------------------------------------
                              2014-07-07 22:46:04.847,bewaesserung.pl,1 (MAIN) Aufrufgrund: bus
                              2014-07-07 22:46:04.848,bewaesserung.pl,2 (MAIN) aktueller Status: 0
                              2014-07-07 22:46:04.848,bewaesserung.pl,3 (BUS) aktueller Status: 0
                              2014-07-07 22:46:04.848,bewaesserung.pl,4 (BUS) EIN-Telegramm empfangen
                              2014-07-07 22:46:04.848,bewaesserung.pl,5 (BUS) Beregnungsprogramm gestartet
                              2014-07-07 22:46:04.871,bewaesserung.pl,6 (SUB beregnung) Beregnung: Index 0 ('Ostseite'), Trigger 9/6/10, Status 9/6/11, Sperre 0, Zeitfaktor 
                              2014-07-07 22:46:04.872,bewaesserung.pl,7 (SUB beregnung) Kreis 'Ostseite' abgeschlossen
                              2014-07-07 22:46:04.872,bewaesserung.pl,8 (SUB beregnung) Kreis 'Ostseite' Dauer:  0 sek. (ist)/0 sek. (soll)
                              2014-07-07 22:46:04.896,bewaesserung.pl,9 (SUB beregnung) Umschalten auf nächsten Kreis
                              2014-07-07 22:46:04.915,bewaesserung.pl,10 (SUB beregnung) Beregnung: Index 1 ('Suedseite'), Trigger 9/6/20, Status 9/6/21, Sperre 0, Zeitfaktor 
                              2014-07-07 22:46:04.915,bewaesserung.pl,11 (SUB beregnung) Kreis 'Suedseite' abgeschlossen
                              2014-07-07 22:46:04.916,bewaesserung.pl,12 (SUB beregnung) Kreis 'Suedseite' Dauer:  0 sek. (ist)/0 sek. (soll)
                              2014-07-07 22:46:04.935,bewaesserung.pl,13 (SUB beregnung) keine weiteren Kreise, Beregnung beendet.
                              2014-07-07 22:46:04.946,bewaesserung.pl,14 (SUB ende) Ventil für 'Ostseite' geschlossen
                              2014-07-07 22:46:04.983,bewaesserung.pl,15 (SUB ende) Ventil für 'Suedseite' geschlossen
                              2014-07-07 22:46:05.043,bewaesserung.pl,2,0.3s,
                              und zu:
                              Code:
                              2014-07-07 22:46:04.601,A_GroupValue_Write,1.1.254,9/6/1,01,1,,1,0,low,7,T_DATA_XXX_REQ,0
                              2014-07-07 22:46:06.683,A_GroupValue_Write,1.1.254,9/6/10,00,0,,1,0,low,7,T_DATA_XXX_REQ,0
                              2014-07-07 22:46:06.760,A_GroupValue_Write,1.1.254,9/6/13,00 00,0,,9,0,low,7,T_DATA_XXX_REQ,0
                              2014-07-07 22:46:06.828,A_GroupValue_Write,1.1.254,9/6/20,00,0,,1,0,low,7,T_DATA_XXX_REQ,0
                              2014-07-07 22:46:06.896,A_GroupValue_Write,1.1.254,9/6/23,00 00,0,,9,0,low,7,T_DATA_XXX_REQ,0
                              2014-07-07 22:46:06.982,A_GroupValue_Write,1.1.254,9/6/3,00 00,0,,9,0,low,7,T_DATA_XXX_REQ,0
                              2014-07-07 22:46:07.064,A_GroupValue_Write,1.1.254,9/6/10,00,0,,1,0,low,7,T_DATA_XXX_REQ,0
                              2014-07-07 22:46:07.154,A_GroupValue_Write,1.1.254,9/6/13,00 00,0,,9,0,low,7,T_DATA_XXX_REQ,0
                              2014-07-07 22:46:07.258,A_GroupValue_Write,1.1.254,9/6/20,00,0,,1,0,low,7,T_DATA_XXX_REQ,0
                              2014-07-07 22:46:07.346,A_GroupValue_Write,1.1.254,9/6/23,00 00,0,,9,0,low,7,T_DATA_XXX_REQ,0
                              2014-07-07 22:46:07.423,A_GroupValue_Write,1.1.254,9/6/2,00,0,,1,0,low,7,T_DATA_XXX_REQ,0
                              (Leider) kein knx_read dabei...

                              Noch irgendwelche Ideen?

                              Danke,
                              Micha

                              Kommentar


                                #30
                                So, nun scheint das erste Problem behoben: der Zeitfaktor war nicht gesetzt. Weder in der Visu noch im Log stand ein korrekter Wert drin. Nachdem ich die +/- Buttons in der Visu bedient habe, wird da jetzt auch was angezeigt :-) Und die Beregnung startet auch :-))

                                Allerdings bin ich gleich über das nächste Problem gestolpert: ich habe die Zeit der beiden Kreise in der Visu reduziert und danach die Beregnung gestartet. Statt der angezeigten Zeit wird für die beiden Kreise aber weiterhin der default-Wert benutzt. Siehe Screenshot und log:

                                Code:
                                2014-07-07 23:04:39.885,bewaesserung.pl,------------------------------------
                                2014-07-07 23:04:39.888,bewaesserung.pl,1 (MAIN) Aufrufgrund: bus
                                2014-07-07 23:04:39.888,bewaesserung.pl,2 (MAIN) aktueller Status: 0
                                2014-07-07 23:04:39.888,bewaesserung.pl,3 (BUS) aktueller Status: 0
                                2014-07-07 23:04:39.892,bewaesserung.pl,4 (BUS) ga_resetdauer aufgerufen
                                2014-07-07 23:04:39.935,bewaesserung.pl,2,0.3s,
                                2014-07-07 23:04:49.089,bewaesserung.pl,------------------------------------
                                2014-07-07 23:04:49.098,bewaesserung.pl,1 (MAIN) Aufrufgrund: bus
                                2014-07-07 23:04:49.098,bewaesserung.pl,2 (MAIN) aktueller Status: 0
                                2014-07-07 23:04:49.098,bewaesserung.pl,3 (BUS) aktueller Status: 0
                                2014-07-07 23:04:49.098,bewaesserung.pl,4 (BUS) EIN-Telegramm empfangen
                                2014-07-07 23:04:49.099,bewaesserung.pl,5 (BUS) Beregnungsprogramm gestartet
                                2014-07-07 23:04:49.116,bewaesserung.pl,6 (SUB beregnung) Beregnung: Index 0 ('Ostseite'), Trigger 9/6/10, Status 9/6/11, Sperre 0, Zeitfaktor 1
                                2014-07-07 23:04:49.117,bewaesserung.pl,7 (SUB beregnung) Beregnung für Kreis 'Ostseite' (re-)triggert
                                Die Einstellung per Zeitfaktor funktioniert jedoch wie erwartet.

                                Danke und viele Grüße,
                                Micha
                                Angehängte Dateien

                                Kommentar

                                Lädt...
                                X