Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Timer mit 3 Tagen Laufzeit funktioniert nicht

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

    [wiregate] - √ - Timer mit 3 Tagen Laufzeit funktioniert nicht

    Hallo,

    da meine Wasserenthärtungsanlage keinen Störausgang hat möchte ich die Überwachung der Anlage (BWT Aqa smart) extern durchführen.
    Die Anlage ist so eingestellt das bei 45% verbleibendem Weichwasservorrat eine Regeneration nachts ausgeführt wird. Dies ist bei uns spätestens alle zwei Tage der Fall.
    Die Anlage hängt an einem Aktor mit Strommessung.
    Mein Plan sieht folgendermaßen aus:
    Bei einer Regeneration steigt die Stromaufnahme von ca. 50mA im Standby auf ca. 150-160mA. Im Schaltaktor habe ich nun eine Lastüberschreitung parametriert welche mir bei überschreiten der Schwelle von 100mA eine 1 setzt. Zeitgleich möchte ich mit unten stehendem Plugin einen Timer starten welcher eine Laufzeit von 3 Tagen hat. Nach Ablauf des Timers, ohne das zwischenzeitlich wieder eine Regeneration stattgefunden hat, soll das Bit auf 0 gesetzt werden welches ich als Störung auswerten möchte.
    Nun ist es so das der Timer zwar gestartet wird, das Bit aber schon vor Ablauf der Zeit auf 0 gesetzt wird. GA 0/0/1 wird zu Testzwecken nur vom Timer verwendet. Waran könnte das liegen?

    Danke schon mal.

    Gruß Plusch

    Code:
    # Timer
    # v 0.1 
    # 2012-11-23 JuMi2006 -> https://knx-user-forum.de
    
    #####################
    ### Konfiguration ###
    #####################
    
    my $ga  = "0/0/1";     #GA
    my $delay = 259200;          #Delay in Sekunden
    my $start_value = 1;    #Timerstart bei 1 -> 1 (Aus-Timer)
                #Timerstart bei 0 -> 0 (An-Timer)
                
    ##########################
    ### Ende Konfiguration ###
    ##########################
    
    $plugin_info{$plugname.'_cycle'} = 0;
    $plugin_subscribe{$ga}{$plugname} = 1;    
    my $val_in = knx_read($ga,300000,1);
    
    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $ga)
    {      
        if ($val_in == $start_value)   # wenn Start von GA erkannt
        {
        plugin_log($plugname,"Timer aktiv");
        $plugin_info{$plugname.'_timer_active'} = 1;# setzt eine Variable zur Fehlervermeidung
        $plugin_info{$plugname.'_last'} = time;
        $plugin_info{$plugname.'_cycle'} = $delay;  # Plugin-Wiederholung nach X Sekunden
        }
        
        if ($val_in == !$start_value)   # wenn Stop von GA erkannt
        {
        $plugin_info{$plugname.'_last'} = time;
        $plugin_info{$plugname.'_cycle'} = 0;          
        $plugin_info{$plugname.'_timer_active'} = 0;    # setzt eine Variable zur Fehlervermeidung
        plugin_log($plugname,"Timer deaktiviert");
        }
    }
    
    else
    
    {
        if ($plugin_info{$plugname.'_timer_active'} == 1)
        {
        knx_write($ga,!$start_value,1);                 # negiert senden
        $plugin_info{$plugname.'_timer_active'} = 0;    # setzt eine Variable zur Fehlervermeidung
        plugin_log($plugname,"Timer abgelaufen");
        $plugin_info{$plugname.'_last'} = time;
        $plugin_info{$plugname.'_cycle'} = 0;
        }
    }
    
    return;

    #2
    Hmm das Plugin ist von mir und für so lange Zeiträume eigentlich ne Krücke ... wenn da der wiregated.pl zwischendrin neustartet ist alles fürn Ar****. Der Bezug richtet sich nämlich auf $plugin_info{$plugname.'_last'} und $plugin_info{$plugname.'_cycle'}. Man müsste das auf periodische Durchläufe und unabhängige persistente Variablen umbauen.

    Vielleicht kann ich da morgen mal drauf schauen, kann ich allerdings nicht versprechen.

    Grüße
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      Stimmt, es ist eben gerade wieder passiert. Habe allerdings auch knapp 50 Plugins in Betrieb. Könnte das daran liegen?

      Edit: miniserv.pl hat immer eine uptime von 0 !? Startet der immer neu?
      Angehängte Dateien

      Kommentar


        #4
        miniserv ist m.W. fürs Webmin, also egal, ja der der startet wohl immer neu.

        Der wiregated wird bei 50 Plugins keine 3 Tage halten .

        Ich glaub ich hab es gefixed ... will ich nur selbst schnell noch testen.
        Umgezogen? Ja! ... Fertig? Nein!
        Baustelle 2.0 !

        Kommentar


          #5
          So ... das sollte nun passen.
          Das einzige was anzufassen ist wäre $ga, $delay und $start_value.
          Probiers mal aus.

          Grüße

          Code:
          # Timer
          # v 0.2 
          # 2013-01-31 JuMi2006 -> https://knx-user-forum.de
          
          #####################
          ### Konfiguration ###
          #####################
          
          my $ga  = "0/0/7";     #GA
          my $delay = 900;          #Delay in Sekunden
          my $start_value = 1;    #Timerstart bei 1 -> 1 (Aus-Timer)
                      #Timerstart bei 0 -> 0 (An-Timer)
                      
          ##########################
          ### Ende Konfiguration ###
          ##########################
          
          $plugin_info{$plugname.'_cycle'} = 60;
          $plugin_subscribe{$ga}{$plugname} = 1;    
          my $val_in = knx_read($ga,300,1);
          my $time = time;
          
          if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $ga)
          {      
              if ($val_in == $start_value)   # wenn Start von GA erkannt
              {
              plugin_log($plugname,"Timer aktiv");
              $plugin_info{$plugname.'_timer_active'} = 1;# setzt eine Variable zur Fehlervermeidung
              $plugin_info{$plugname.'_last_start'} = time;
              }
              
              if ($val_in == !$start_value)   # wenn Stop von GA erkannt
              {       
              $plugin_info{$plugname.'_timer_active'} = 0;    # setzt eine Variable zur Fehlervermeidung
              plugin_log($plugname,"Timer deaktiviert");
              }
          }
          
          else
          
          {
              if (($plugin_info{$plugname.'_timer_active'} == 1) && ($time > ($plugin_info{$plugname.'_last_start'} + $delay)))
              {
              knx_write($ga,!$start_value,1);                 # negiert senden
              $plugin_info{$plugname.'_timer_active'} = 0;    # setzt eine Variable zur Fehlervermeidung
              plugin_log($plugname,"Timer abgelaufen");
              }
          }
          
          return;
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #6
            Prima, danke schon mal vor ab!
            Der Timer läuft gerade ....

            Gruß Plusch

            Kommentar


              #7
              Habe nun festgestellt das über Nacht die Buslast angestiegen ist.
              Der Grund hierfür ist das seit ca. 4 Uhr fast sekündlich ein read auf 0/0/1 (die GA vom Timer) gesendet wird. Hast Du nen Tipp wo ich da noch suchen kann?

              Gruß Plusch
              Angehängte Dateien

              Kommentar


                #8
                Ja, der Status der GA ist nicht auslesbar bzw. der Wert zu alt.
                Das KO der Timer-GA sollte das L-Flag gesetzt bekommen damit der Timer einen wiregated Neustart überlebt.

                Sollte der wiregated zwischendurch nicht neu gestartet haben hilft schonmal folgendes:

                Code:
                my $val_in = knx_read($ga,[B]0[/B],1);
                Einfach die 300 Sekunden auf 0 Sekunden (Alter des Wertes = egal) ändern.
                Umgezogen? Ja! ... Fertig? Nein!
                Baustelle 2.0 !

                Kommentar


                  #9
                  Zitat von JuMi2006 Beitrag anzeigen
                  Einfach die 300 Sekunden auf 0 Sekunden (Alter des Wertes = egal) ändern.
                  Ok, probiere ich mal so aus. Ich hatte als maximales Alter des Wertes 300000 angegeben.

                  Kommentar


                    #10
                    Das würde dann später das Buslastproblem aufrufen.

                    Ich hab das gerade getestet ... Alter=0 ; wiregated neustart ... funktioniert scheinbar.
                    Umgezogen? Ja! ... Fertig? Nein!
                    Baustelle 2.0 !

                    Kommentar


                      #11
                      Zitat von JuMi2006 Beitrag anzeigen
                      Ich hab das gerade getestet ... Alter=0 ; wiregated neustart ... funktioniert scheinbar.
                      Ich denke auch. Bei mir läuft es auch schon.
                      Danke!

                      Gruß Plusch

                      Kommentar


                        #12
                        So ... das sollte das Problem jetzt endgültig lösen.
                        Das Lesen der GA wird auf das Eintreffen eines Telegrammes reduziert.

                        Code:
                        # Timer
                        # v 0.2 
                        # 2013-01-31 JuMi2006 -> https://knx-user-forum.de
                        
                        #####################
                        ### Konfiguration ###
                        #####################
                        
                        my $ga  = "0/0/7";     #GA
                        my $delay = 900;          #Delay in Sekunden
                        my $start_value = 1;    #Timerstart bei 1 -> 1 (Aus-Timer)
                                    #Timerstart bei 0 -> 0 (An-Timer)
                                    
                        ##########################
                        ### Ende Konfiguration ###
                        ##########################
                        
                        $plugin_info{$plugname.'_cycle'} = 60;
                        $plugin_subscribe{$ga}{$plugname} = 1;    
                        my $time = time;
                        
                        if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $ga)
                        {
                            my $val_in = knx_read($ga,0,1);
                            
                            if ($val_in == $start_value)   # wenn Start von GA erkannt
                            {
                            plugin_log($plugname,"Timer aktiv");
                            $plugin_info{$plugname.'_timer_active'} = 1;# setzt eine Variable zur Fehlervermeidung
                            $plugin_info{$plugname.'_last_start'} = time;
                            }
                            
                            if ($val_in == !$start_value)   # wenn Stop von GA erkannt
                            {       
                            $plugin_info{$plugname.'_timer_active'} = 0;    # setzt eine Variable zur Fehlervermeidung
                            plugin_log($plugname,"Timer deaktiviert");
                            }
                        }
                        
                        else
                        
                        {
                            if (($plugin_info{$plugname.'_timer_active'} == 1) && ($time > ($plugin_info{$plugname.'_last_start'} + $delay)))
                            {
                            knx_write($ga,!$start_value,1);                 # negiert senden
                            $plugin_info{$plugname.'_timer_active'} = 0;    # setzt eine Variable zur Fehlervermeidung
                            plugin_log($plugname,"Timer abgelaufen");
                            }
                        }
                        
                        return;
                        Umgezogen? Ja! ... Fertig? Nein!
                        Baustelle 2.0 !

                        Kommentar


                          #13
                          3 Tage bei 50 Plugins?
                          Perl nimmt 15MB zum Frühstück und ab dann wie die Hobbits hobbit-malzeiten (Frühstück, Pippin, Herr der Ringe)
                          Spätestens gegen Nachmittags kommt die gute Fee namens Monit und sagt: abspecken; do it again Sam! Weil wir haben nur 256MB, der moderne Admin löst das natürlich indem er 8GB reinsteckt und dann nur einmal im Monat rebootet

                          Was ich eigentlich sagen wollte: Alle Plugins sollte man dringend so auslegen, das sie restarts problemlos überleben - auch für zukünftiges!

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

                          Kommentar


                            #14
                            Bisher gab es auch kein Problem damit. Außerdem sind auch viele RRD-Plugins dabei. Ich werde trotzdem mal versuchen die Anzahl ein wenig zu reduzieren.
                            Aber grundzätzlich ist es schon richtig Plugins neustartresistent zu erstellen.

                            Das neue Plugin funktioniert prima. Der Timer hält nun drei Tage durch.

                            Edit: habe gerade im monit gesehen das wiregated nun auch schon drei Tage durchläuft.


                            Gruß Plusch

                            Kommentar


                              #15
                              Das gilt im Prinzip übrigens "universal", das jegliche Logik "restart-save" sein sollte, egal in welchem System kommt das vor und ist eine Herausforderung;
                              die Logik zu machen ist ja eher langweilig, viel spannender ist z.B. bei meinem anderen Gerät, was passiert, wenn es durchstartet und evtl. (noch?) falsche Init-Werte hat..

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

                              Kommentar

                              Lädt...
                              X