Ankündigung

Einklappen
Keine Ankündigung bisher.

Brenner-Einschaltdauer in ein RRD

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

    [wiregate] Brenner-Einschaltdauer in ein RRD

    Hallo --

    Mein 'klassischer' einstufiger Ölbrenner wird von einer UVR1611 gesteuert, die über das CAN-BC Modul am Bus hängt.

    Da der Ölverbrauch (gemessen) einigermassen proportional zur Brenndauer ist, und bei eingeschaltetem Brenner eine DPT1-GA von 0 auf 1 gesetzt wird, würde ich das Event gerne in einem RRD erfassen, und somit Einschaltdauer/Ölverbrauch auf Tag/Woche/Monat sehen können.

    Nur bin ich momentan etwas verwirrt, was das RRD angeht. Ich bin zwar mit Temperaturen, Prozentwerten etc vertraut, aber kann ein RRD einfach einen 0/1 Wert sehen, und kann es diesen Wert aggregieren? Oder bin ich da ganz auf dem falschen Dampfer und ich sollte das anders lösen?

    #2
    Ja das geht

    EDIT: Total übersehen, eine Summenbildung ist so einfach nicht möglich. Aber Du könntest Dir mit einem Betriebsstundenzähler (hab ich als Plugin ins SVN eingecheckt) und einem manuell angelegten COUNTER RRD sowas basteln. Damit würde das RRD immer die Differenz zum Vorwert addieren und nach einem bestimmten Zeitpunkt (z.B. 1 Tag oder 1 Stunde) die Laufzeit schreiben. Man könnte dann im Plugin sogar einen Multiplikator einbauen (1h Brenner = 0,33l Öl).
    Das "normale" RRD wäre nichts weiter als die Anzeige AN/AUS.
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      Zitat von JuMi2006 Beitrag anzeigen
      Ja das geht

      EDIT: Total übersehen, eine Summenbildung ist so einfach nicht möglich. Aber Du könntest Dir mit einem Betriebsstundenzähler (hab ich als Plugin ins SVN eingecheckt) und einem manuell angelegten COUNTER RRD sowas basteln. Damit würde das RRD immer die Differenz zum Vorwert addieren und nach einem bestimmten Zeitpunkt (z.B. 1 Tag oder 1 Stunde) die Laufzeit schreiben. Man könnte dann im Plugin sogar einen Multiplikator einbauen (1h Brenner = 0,33l Öl).
      Das "normale" RRD wäre nichts weiter als die Anzeige AN/AUS.
      Deinen Betriebsstundenzähler habe ich gefunden, danke. Aber wie ich manuell ein counter rrd anlege, und da dann einen Wert reinpacke, das überblicke ich jetzt noch nicht. Dein Plugin erwähnt ausserdem, dass es keine Ausgabe in eine GA gibt.

      Kommentar


        #4
        Achja das war ich noch schuldig wird nachgereicht.

        Mit dem Counter ist eigentlich relativ einfach, welche Intervalle interessieren dich denn? Stunde und Tag?
        Umgezogen? Ja! ... Fertig? Nein!
        Baustelle 2.0 !

        Kommentar


          #5
          Stunde, Tag, Woche, Monat?

          Kommentar


            #6
            Hier ungetestet weil ich den richtigen DPT nicht mehr finde
            Den muss ich nochmal raussuchen für die Betriebsstunden. Wird aber erst morgen was.

            Also dann das Plugin Betriebsstundenzähler installieren (mach ich morgen noch fertig mit senden auf Bus).

            Dann neues Plugin "Counter-RRD" oder so erstellen mit dem Code hier. Konfiguration müsste klar sein oder?

            Wie gesagt ist jetzt wirklich ungetestet - wichtig ist die GA auch in die eibga.conf einzutragen (Webmin).

            Code:
            #### COUNTER RRDs ERSTELLEN
            
            my $name = "Name" ; #### Name des RRDs
            my $ga = "0/0/0" ; #### Hier GA eintragen
            my $dpt = " " ; #### Hier DPT eintragen
            my $rrdpath = "/var/www/rrd"; #### default
            my @countermodes = (60,1440);	#### Aufloesungen fuer COUNTER RRDs in Minuten (1440 = Tagesverbrauch)
            
            ###### HIER NIX MEHR ####
            
            $plugin_info{$plugname.'_cycle'} = 60;
            
            my $value = knx_read($ga,0,$dpt);
            &rrd_counter ($name,$value);
            
            ####
            sub rrd_counter
            {
            if ($debug==1){print ("COUNTER","\n")};
            foreach (@countermodes)
            {
            my $name = $_[0];
            my $value = $_[1];
            my $rrdname = $name."_".$_."\.rrd";
            my $rrdfile = $rrdpath."\/".$rrdname;
            unless (-e $rrdfile)
            {
            RRDs::create ($rrdfile,"DS:value:COUNTER:".(($_*60)+600).":0:10000000000","RRA:AVERAGE:0.5:1:365","RRA:AVERAGE:0.5:7:300","-s ".($_*60));
            }
            my $countervalue = int($value*$_*60);
            RRDs::update("$rrdfile", "N:$countervalue");
            }
            }
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              #7
              Betriebsstundenzähler:
              Code:
              ###Betriebsstundenzaehler###
              
              # $reset = 1 -> Der Zaehler wird auf den den Startwert $reset_value gesetzt.
              # Dazu einmal Speichern und danach $reset wieder auf 0 setzen und speichern.
              # 
              # Das Plugin zeichnet die Betriebsdauer der $ga auf und kann mit zyklischem senden
              # der Quelladresse umgehen. 0 = Aus und 1 = An
              # 
              # Version: 0.1 (2012-07-04)
              # Lizenz: GPL
              # Autor: JuMi2006 (https://knx-user-forum.de)
              
              
              ###Konfiguration###
              $plugin_info{$plugname.'_cycle'} = 84600;
              my $ga = '1/1/10';  ###überwachen
              my $send_ga = '1/1/11; ###wert senden
              my $reset = '0';
              my $reset_value = '1234';
              
              
              ###Ende Konfiguration###
              
              
              ### Ab hier keine Aenderungen mehr ###
              
              my $time = time();
              my $diff;
              $plugin_subscribe{$ga}{$plugname} = 1;
              
              ### Reset
              if ($reset == 1)
              {
              $plugin_info{$plugname.'_bstunden'} = $reset_value;
              $plugin_info{$plugname.'_last-on'} = '0';
              $plugin_info{$plugname.'_status'} = '0';
              }
              
              else
              {
              
              ### Bei 1 und vorheriger Status = 1
              if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $ga && $msg{'value'} == '1' && $plugin_info{$plugname.'_status'} == '1' )
              {
              if ($plugin_info{$plugname.'_last-on'} <= '0')
              {
              $diff = '0';
              }
              else
              {
              $diff = ($time - $plugin_info{$plugname.'_last-on'});
              }
              $plugin_info{$plugname.'_neustunden'} = ($plugin_info{$plugname.'_bstunden'} + $diff);
              $plugin_info{$plugname.'_bstunden'} = $plugin_info{$plugname.'_neustunden'};
              $plugin_info{$plugname.'_last-on'} = $time;
              $plugin_info{$plugname.'_status'} = '1';
              }
              else
              {}
              
              ### Bei 1 und vorheriger Status = 0
              if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $ga && $msg{'value'} == '1' && $plugin_info{$plugname.'_status'} == '0' )
              {
              $diff = '0';
              $plugin_info{$plugname.'_neustunden'} = ($plugin_info{$plugname.'_bstunden'} + $diff);
              $plugin_info{$plugname.'_bstunden'} = $plugin_info{$plugname.'_neustunden'};
              $plugin_info{$plugname.'_last-on'} = $time;
              $plugin_info{$plugname.'_status'} = '1';
              }
              else
              {}
              
              ### Bei 0 und vorheriger Status = 1
              if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $ga && $msg{'value'} == '0' && $plugin_info{$plugname.'_status'} == '1') 
              {
              my $diff = ($time - $plugin_info{$plugname.'_last-on'});
              $plugin_info{$plugname.'_neustunden'} = ($plugin_info{$plugname.'_bstunden'} + $diff);
              $plugin_info{$plugname.'_bstunden'} = $plugin_info{$plugname.'_neustunden'};
              $plugin_info{$plugname.'_status'} = '0';
              }
              }
              
              ### Ausgabe
              my $sec = int($plugin_info{$plugname.'_bstunden'});
              my $m = int $sec / 60;
              my $s = $sec - ($m * 60);
              my $h = int $m / 60;
              $m = $m - ($h * 60);
              
              knx_write($send_ga,$sec,6.020);
              return "$h:$m:$s";
              RRDs erstellen
              Code:
              #### COUNTER RRDs ERSTELLEN
              
              my $name = "Name" ; #### Name des RRDs
              my $ga = "0/0/0" ; #### Hier GA eintragen
              my $dpt = "6.020" ; 
              my $rrdpath = "/var/www/rrd"; #### default
              my @countermodes = (60,1440);	#### Stunde+Tag - Aufloesungen fuer COUNTER RRDs in Minuten (1440 = Tagesverbrauch)
              
              ###### HIER NIX MEHR ####
              
              $plugin_info{$plugname.'_cycle'} = 60;
              
              my $value = knx_read($ga,0,$dpt);
              &rrd_counter ($name,$value);
              
              ####
              sub rrd_counter
              {
              if ($debug==1){print ("COUNTER","\n")};
              foreach (@countermodes)
              {
              my $name = $_[0];
              my $value = $_[1];
              my $rrdname = $name."_".$_."\.rrd";
              my $rrdfile = $rrdpath."\/".$rrdname;
              unless (-e $rrdfile)
              {
              RRDs::create ($rrdfile,"DS:value:COUNTER:".(($_*60)+600).":0:10000000000","RRA:AVERAGE:0.5:1:365","RRA:AVERAGE:0.5:7:300","-s ".($_*60));
              }
              my $countervalue = int($value*$_*60);
              RRDs::update("$rrdfile", "N:$countervalue");
              }
              }
              Einen Haken hat die Sache, wenn Sie denn so ungetestet läuft. Der Betriebsstundenzähler mag es wenn der Zustand des Gerätes zyklisch gesendet wird, zumindest für die Verwendung beim RRD. Der Betriebsstundenzähler rechnet sonst erst nach einer Statusänderung (AN/AUS) die Laufzeit aus.
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #8
                ABSOLUTE
                is for counters which get reset upon reading.
                statt COUNTER sollte bei einem festen Zyklus da auch klappen.
                Letztlich bleibt COMPUTE, das rrdtool kann in dem Bereich mehr als man denkt Aber lesen muss man selber..

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

                Kommentar


                  #9
                  Hallo JuMi2006,

                  Hat mit dem ersten Test etwas gedauert - so sehr oft wird der Brenner momentan nicht gebraucht ;-)

                  Das RRD-Plugin bleibt direkt hängen, weil es eine $debug Variable nicht kennt. Die habe ich dann mit my $debug="0" initialisiert.

                  Der Brenner lief heute früh einmal an und hatte laut der GA eine Brenndauer von 28 - ich nehme an, das waren Minuten, und das ist prinzipiell glaubhaft.

                  Das rrd mit der Endung _60 wurde erstellt und zeigt einen entsprechenden Peak, das macht also auch Sinn. Allerdings peakt es bei 1200000, ich verstehe nicht ganz, welche Einheit das ist.

                  Das _1440 rrd hat (noch) nichts.

                  Kommentar


                    #10
                    Das 1440er ist klar, da musst du einmal 24 Stunden warten, bzw. aktualisiert sich das Nachts um 2.00 Uhr. Der brauch erstmal einen ganzen Zyklus. -> Bitte frag nicht nach Details

                    Hast Du die GA in der eibga.conf entsprechend dem DPT angelegt?
                    Hilfreich wäre ein Auszug aus rrdtool info /var/www/rrd/filename.rrd oder sogar rrdtool fetch /var/www/rrd/filename.rrd AVERAGE

                    Ehrlich gesagt weiß ich jetzt nicht was der DPT genau angibt, da kann man auch noch mit anderen experimentieren. Soweit ich das im Kopf habe werden die immer mit den Sekunden gefüttert aber vielleicht kann da jemand anderes was zu sagen.

                    Zeigt das Pluginlog nicht die Laufzeit an?
                    Umgezogen? Ja! ... Fertig? Nein!
                    Baustelle 2.0 !

                    Kommentar


                      #11
                      Zitat von JuMi2006 Beitrag anzeigen
                      Hast Du die GA in der eibga.conf entsprechend dem DPT angelegt?
                      Nein, das hatte ich vergessen. in der linknx.xml war's, in der Visu auch. Ist jetzt aber auch in der eibga.conf

                      Hilfreich wäre ein Auszug aus rrdtool info /var/www/rrd/filename.rrd oder sogar rrdtool fetch /var/www/rrd/filename.rrd AVERAGE
                      info:
                      Code:
                      filename = "/var/www/rrd/hours_burner_60.rrd"
                      rrd_version = "0003"
                      step = 3600
                      last_update = 1346434511
                      ds[value].type = "COUNTER"
                      ds[value].minimal_heartbeat = 4200
                      ds[value].min = 0,0000000000e+00
                      ds[value].max = 1,0000000000e+10
                      ds[value].last_ds = "100800"
                      ds[value].value = 0,0000000000e+00
                      ds[value].unknown_sec = 0
                      rra[0].cf = "AVERAGE"
                      rra[0].rows = 365
                      rra[0].cur_row = 89
                      rra[0].pdp_per_row = 1
                      rra[0].xff = 5,0000000000e-01
                      rra[0].cdp_prep[0].value = NaN
                      rra[0].cdp_prep[0].unknown_datapoints = 0
                      rra[1].cf = "AVERAGE"
                      rra[1].rows = 300
                      rra[1].cur_row = 224
                      rra[1].pdp_per_row = 7
                      rra[1].xff = 5,0000000000e-01
                      rra[1].cdp_prep[0].value = 0,0000000000e+00
                      rra[1].cdp_prep[0].unknown_datapoints = 0
                      fetch:
                      Code:
                                                value
                      1346349600: 0,0000000000e+00
                      1346353200: 0,0000000000e+00
                      1346356800: 0,0000000000e+00
                      1346360400: 0,0000000000e+00
                      1346364000: 0,0000000000e+00
                      1346367600: 0,0000000000e+00
                      1346371200: 0,0000000000e+00
                      1346374800: 0,0000000000e+00
                      1346378400: 0,0000000000e+00
                      1346382000: 0,0000000000e+00
                      1346385600: 0,0000000000e+00
                      1346389200: 2,9491525424e+01
                      1346392800: 1,2132553944e+06
                      1346396400: 0,0000000000e+00
                      1346400000: 0,0000000000e+00
                      1346403600: 0,0000000000e+00
                      1346407200: 0,0000000000e+00
                      1346410800: 0,0000000000e+00
                      1346414400: 0,0000000000e+00
                      1346418000: 0,0000000000e+00
                      1346421600: 0,0000000000e+00
                      1346425200: 0,0000000000e+00
                      1346428800: 0,0000000000e+00
                      1346432400: 0,0000000000e+00
                      1346436000: nan

                      Zeigt das Pluginlog nicht die Laufzeit an?
                      Stimmt, tut es. Da stehen 0:26:4.

                      Morgen früh weiss ich welche Zeit die richtige ist (wenn der Brenner heute nicht mehr anspringen sollte), weil die 1611 einen Tageszähler hat.

                      Kommentar


                        #12
                        Ich seh den Fehler grad nicht, ist aber schon wieder 3 Monate her dass ich mich damit beschäftigt habe. Vielleicht kann noch jemand anderes mal raufgucken. Lass uns mal noch ein paar Werte sammeln. Oder mal ein simples Plugin mit my $value = knx_read($ga,0,$dpt); und gucken was das ausgibt...da bin ich grad unsicher.

                        Das RRD wurde richtig angelegt, step = 3600 sek. und hat auch zweimal die Differenz zum Vorwert notiert. Wenn ich recht erinnere dann sollte:

                        Differenz(rrd) = Differenz(zaehler)*step

                        Damit das aber wiederum passt muss der Zählerwert mit step multipliziert werden bevor er ins rrd geschrieben wird. Basis ist immer 1 Sekunde.

                        Richtig? Oder hab ich das jetzt vertüddelt?
                        Umgezogen? Ja! ... Fertig? Nein!
                        Baustelle 2.0 !

                        Kommentar


                          #13
                          Also so falsch ist das nicht, mit ABSOLUTE*sekunden würde man halt noch Laufzeit/Aufrufunterschiede des Plugins komfortabel ausgleichen, ist im konkreten Fall aber vermutlich eher "kosmetik"

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

                          Kommentar


                            #14
                            Der Zähler an sich funktioniert hervorragend: heute früh hatte ich 42m16s auf der Uhr (laut dem Plugin Rückgabewert), und die 1611 zeigte 42m an (die ist nur minutengenau).

                            Allerdings ist die Ausgabe der GA in der Cometvisu unsinnig - da wird wohl der DPT nicht richtig umgerechnet/ausgewertet.

                            Kommentar


                              #15
                              Guck mal was http://wiregatexxx/busmonitor.cgi sagt.
                              DPT richtig in der eibga.conf eingetragen ???
                              Umgezogen? Ja! ... Fertig? Nein!
                              Baustelle 2.0 !

                              Kommentar

                              Lädt...
                              X