Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - COUNTER-RRD mit Boardmitteln?

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

    [wiregate] - √ - COUNTER-RRD mit Boardmitteln?

    Ist es möglich mit einem erweiterten update_rrd () ein Counter RRD zu erstellen?

    Was kann man alles mit update_rrd an das rrdtool durchreichen ?

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

    #2
    Ich würde behaupten, bisher nicht. Ich habe mich in den letzten Tagen ein bisschen damit beschäftigt, um die Verbrauchswerte (Zähler) von Wärmemengenzählern und Stromzählern dauerhaft aufzuzeichnen.

    Auch wenn der »Overhead« nicht so riesig ist:
    1. im Prinzip prüfen, ob die RRD-Datei vorhanden ist
      1. falls nein, mit den entsprechenden Einstellungen anlegen

    2. die RRD-Datei updaten

    wäre es einen Feature-Request wert, allerdings nicht so ganz ohne, aufgrund der Freiheitsgrade von RRD::create().


    ACHTUNG: ohne Anspruch auf eine korrekte Lösung!

    Auf Basis diverser Plugins hatte ich mir folgendes gebaut (15 Minuten Aktualisierung mit Stunden-, Tages- und Wochenwerten):
    PHP-Code:
      # RRD ggf. anlegen
      
    if (!-e $rrdFile)
      {
        
    RRDs::create($rrdFile,
          
    '--step' => 900,  # 15 Minuten
          
    'DS:value:COUNTER:2700:0:2147483647',
          
    # 15 min (für 7,5 d)      1 h (für 35 d)           24 h (für 5 y)            7 d (für 25 y)
          
    'RRA:AVERAGE:0.5:1:720''RRA:AVERAGE:0.5:4:840''RRA:AVERAGE:0.5:96:1826''RRA:AVERAGE:0.5:672:1300',
          
    'RRA:MIN:0.5:1:720',     'RRA:MIN:0.5:4:840',     'RRA:MIN:0.5:96:1826',     'RRA:MIN:0.5:672:1300',
          
    'RRA:MAX:0.5:1:720',     'RRA:MAX:0.5:4:840',     'RRA:MAX:0.5:96:1826',     'RRA:MAX:0.5:672:1300'
        
    );

        if (
    RRDs::error) {
          
    plugin_log($plugname"Create COUNTER-RRDs failed for $rrdFile: ".RRDs::error);
        } else {
          
    plugin_log($plugname"Created COUNTER-RRD for $rrdFile");
        }
      }

      
    # RRD Update
      
    update_rrd($rrd""$msg{value} * 900"COUNTER"); 
    $rrdFile ist dabei der komplette Pfad mit dem Dateinamen und ».rrd« Extender.


    Für reine Tageswerte habe ich folgendes Konstrukt verwendet:
    PHP-Code:
      # RRD ggf. anlegen
      
    if (!-e $rrdFile)
      {
        
    RRDs::create($rrdFile,
          
    '--step' => 86400,  # 24 h
          
    'DS:value:COUNTER:90000:0:2147483647',
          
    # 1 d (für 5 y)            7 d (für 25 y)
          
    'RRA:AVERAGE:0.5:1:1826''RRA:AVERAGE:0.5:7:1300',
          
    'RRA:MIN:0.5:1:1826',     'RRA:MIN:0.5:7:1300',
          
    'RRA:MAX:0.5:1:1826',     'RRA:MAX:0.5:7:1300',
        );

        if (
    RRDs::error) {
          
    plugin_log($plugname"Create COUNTER-RRDs failed for $rrdFile: ".RRDs::error);
        } else {
          
    plugin_log($plugname"Created COUNTER-RRD for $rrdFile");
        }
      }

      
    # RRD Update
      
    update_rrd($rrd""$msg{value} * 86400"COUNTER"); 
    Der Wert kommt jeweils aus $msg{value}, d.h. ich melde in dem Plugin alle GAs an, auf die zirkulär die Werte gesendet werden. Es wird also nur bei Bedarf aufgerufen und dann wird geschaut welches RRD aktualisiert werden muss.
    Bisher scheint es soweit zu laufen.

    Mit was gebt ihr denn die Counter-RRDs als Grafiken aus. Über den normalen Grafikgenerator (.../wiregate/graph2.cgi)?
    Kann man dem beibringen auch nur die Tages- oder Wochenwerte anzuzeigen?
    KNX: MDT, Gira TS3, Berker, Theben, PEAR, Preussen BWM, B.E.G., BMS Quadra, WireGate, Timberwolf 2500 | Baublog

    Kommentar


      #3
      Ja grundsätzlich funktioniert das bei mir auch.
      Ich hab da aber nur Tageswerte drin. Ich löse es momentan auch so. Hatte mir das damals bei haegars und greentuxs Pellet-Plugin geklaut .

      Ich mach das als eigene sub:

      Code:
      my $rrdpath = "/var/www/rrd";
      ...
      rrd_counter ("WP_Energieertrag",$val);
      
      sub rrd_counter
      {
      my $rrdname = $_[0];
      my $value = $_[1];
      $rrdname = $rrdname."\.rrd";
      my $rrdfile = $rrdpath."\/".$rrdname;
      unless (-e $rrdfile)
      {
      RRDs::create ($rrdfile,"DS:value:COUNTER:".((1440*60)+600).":0:10000000000","RRA:AVERAGE:0.5:1:365","RRA:AVERAGE:0.5:7:300","-s ".(1440*60));
      }
      my $countervalue = int($value*1440*60);
      RRDs::update("$rrdfile", "N:$countervalue");
      }
      Damit wird ein RRD erstellt das nach 1440 Minuten einen Wert schreibt. Eben direkt aus dem Zählerstand. Das funktioniert so jetzt knapp ein Jahr ohne Probleme. Stundenwerte brauche ich nicht, Wochenwerte wären interessant und relativ einfach zu realisieren. Du müsstest nur die 1440 Minuten des Tages durch die entsprechende Anzahl der Woche (*7) ersetzen.

      Man könnte das auch simpel mit an die Sub übergeben.

      Ob diese Sub jetzt wirklich funktioniert sehe ich erst in 2 Tagen ich hab die aus meinem anderen Script und da noch was verändert. Bin da aber guter Dinge. Da sie so ähnlich ja schon einige Monate läuft. Der Vorteil der sub ist eben dass man sie im Plugin leicht mehrfach und dynamisch für hunderte Werte verwenden kann. Ein Beispiel dafür hier: SourceForge.net Repository - [openautomation] Contents of /tools/d0-IEC62056-meter/iec62056-meter.pl

      Angezeigt wird das ganze einfach in der CometVisu oder mit drraw.

      Grüße
      Angehängte Dateien
      Umgezogen? Ja! ... Fertig? Nein!
      Baustelle 2.0 !

      Kommentar


        #4
        Geht, steht ausnahmsweise sogar fast vollständig in der Online-Hilfe
        update_rrd("Name","Suffix",Wert,"Wert-Typ")
        Beispiel: update_rrd("Zaehler1","",20,"COUNTER");
        Greift natürlich nur beim anlegen.

        Makki

        Und PS: Es geht natürlich aber auch "direkt"..
        EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
        -> Bitte KEINE PNs!

        Kommentar


          #5
          @makki: hilft aber nicht, wenn man beim Counter z.B. »step« oder die RRAs anders definieren möchte.
          KNX: MDT, Gira TS3, Berker, Theben, PEAR, Preussen BWM, B.E.G., BMS Quadra, WireGate, Timberwolf 2500 | Baublog

          Kommentar


            #6
            Kein fertiger Patch (bin mit dem wiregated nicht auf aktuellem PL) aber hier die entsprechende Sub.

            @makki:
            Wenn Du das übernehmen willst hier kurz was zu Nutzung:

            update_rrd ("NAME","",$Zaehlerstand,"COUNTER",Step_in_Stunden )

            update_rrd ("Tagesverbrauch","",$zaehlerstand,"COUNTER",24 )

            Für den Tagesverbrauch eben 24 und pro Stunde dann 1.

            EDIT2:
            Scheint doch zu funktionieren. Hatte mir da nen Fehler im Plugin eingebaut.
            Die Patchdatei ist ja schon fertig.
            Wenn es wirklich funktioniert lad ich die noch mit hoch.

            Code:
            sub update_rrd {
              my ($key,$suffix,$value,$valtype,$stephours) = @_;
              return unless defined $value;
              $valtype = "GAUGE" unless $valtype;
              if (!-d $rrd_dir) { mkdir($rrd_dir); }
                if (!-e $rrd_dir . $key . $suffix .'.rrd') {
                  # Checkvalue-type for boundries?
                  # Create RRD
              if ($valtype eq "GAUGE"){
                  my $heartbeat = $wg_config{''}{'rrd_interval'} * 3;
                  $wg_config{$key}{'rra_1_interval_rows'} = $wg_config{''}{'rra_1_interval_rows'} unless $wg_config{$key}{'rra_1_interval_rows'};
                  $wg_config{$key}{'rra_5_interval_rows'} = $wg_config{''}{'rra_5_interval_rows'} unless $wg_config{$key}{'rra_5_interval_rows'};
                  $wg_config{$key}{'rra_15_interval_rows'} = $wg_config{''}{'rra_15_interval_rows'} unless $wg_config{$key}{'rra_15_interval_rows'};
                  $wg_config{$key}{'rra_180_interval_rows'} = $wg_config{''}{'rra_180_interval_rows'} unless $wg_config{$key}{'rra_180_interval_rows'};
                  RRDs::create($rrd_dir.$key.$suffix .'.rrd',
                    '--step' => $wg_config{''}{'rrd_interval'},
                    'DS:value:'.$valtype.':'.$heartbeat.':-55:255000', 
                    'RRA:AVERAGE:0.5:1:'.$wg_config{$key}{'rra_1_interval_rows'},'RRA:AVERAGE:0.5:5:'.$wg_config{$key}{'rra_5_interval_rows'},'RRA:AVERAGE:0.5:15:'.$wg_config{$key}{'rra_15_interval_rows'},'RRA:AVERAGE:0.5:180:'.$wg_config{$key}{'rra_180_interval_rows'}, 
                    'RRA:MIN:0.5:1:'.$wg_config{$key}{'rra_1_interval_rows'},'RRA:MIN:0.5:5:'.$wg_config{$key}{'rra_5_interval_rows'},'RRA:MIN:0.5:15:'.$wg_config{$key}{'rra_15_interval_rows'},'RRA:MIN:0.5:180:'.$wg_config{$key}{'rra_180_interval_rows'},
                    'RRA:MAX:0.5:1:'.$wg_config{$key}{'rra_1_interval_rows'},'RRA:MAX:0.5:5:'.$wg_config{$key}{'rra_5_interval_rows'},'RRA:MAX:0.5:15:'.$wg_config{$key}{'rra_15_interval_rows'},'RRA:MAX:0.5:180:'.$wg_config{$key}{'rra_180_interval_rows'});
                       if (RRDs::error) {
                          LOGGER('INFO',"Create RRDs failed for $key$suffix :".RRDs::error);
                       } else {
                          LOGGER('INFO',"Created RRD for $key$suffix");
                       }
              }
              if ($valtype eq "COUNTER"){
                RRDs::create ($rrd_dir.$key.$suffix .'.rrd',
                    'DS:value:'.$valtype.':'.(($stephours*3600)+600).':0:10000000000',
                    'RRA:AVERAGE:0.5:1:1826', 'RRA:AVERAGE:0.5:7:1300',
                    'RRA:MIN:0.5:1:1826',     'RRA:MIN:0.5:7:1300',
                    'RRA:MAX:0.5:1:1826',     'RRA:MAX:0.5:7:1300',
                    '-s '.($stephours*3600));
                        if (RRDs::error) {
                          LOGGER('INFO',"Create RRDs failed for $key$suffix :".RRDs::error);
                       } else {
                          LOGGER('INFO',"Created RRD for $key$suffix");
                       }
                }
              }
                # Update values
                if ($valtype eq "COUNTER"){
                $value = int($stephours*3600*$value);
                RRDs::update($rrd_dir.$key.$suffix.'.rrd','N:'.$value);
                } else {
                RRDs::update($rrd_dir.$key.$suffix.'.rrd','N:'.$value);
                }
                if (RRDs::error) {
                    LOGGER('INFO',"Update of RRDs failed for $key$suffix/$value:".RRDs::error);
                    # FIXME: Check if error comes from update-value or from rrd-file! 
                    #rename ($rrd_dir.$key.$suffix.'.rrd',$rrd_dir.$key.$suffix.'.rrd.old');
                 } else {
                    LOGGER('DEBUG',"Updated RRD for $key$suffix/$value");
                 }
            }
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              #7
              So, das passt.
              Patch für den wiregated.pl.
              Angehängte Dateien
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #8
                Zitat von dombn Beitrag anzeigen
                @makki: hilft aber nicht, wenn man beim Counter z.B. »step« oder die RRAs anders definieren möchte.
                Und?
                Das darf ja jeder ganz direkt via RRDs.pm, wenn ers denn nun mag und kann, ohne jeglichen Umweg machen, wie er will!

                @Jumi: ich werde deinen Patch gerne anwenden aber für PL35 ist Feature-Freeze (und wir sind leider nicht Mozilla, Microsoft oder Google..)
                Sinn macht es jedoch keinen, jedwede API des rrdtool nachzubauen!
                Das kann man direkt benutzen, update_rrd ist ja nur eine "Behelfs-Ausfahrt" für Leute die sich nicht damit beschäftigen wollen/können

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

                Kommentar


                  #9
                  @jumi und makki

                  Evtl. wäre es noch gut, einen weiteren Parameter bei Jumis Funktion hinzuzufügen, und zwar für das zweite RRA, das zur Zeit fest auf 7 Steps steht. Das macht bei 24 Stunden ja auch Sinn, wenn aber jemand es auf stündlich stellt (oder alle 2, …) macht die 7 im Prinzip nicht mehr wirklich Sinn. Da wäre es ggf. gut dafür auch noch einen Parameter zu erlauben.

                  Mein Vorschlag wäre dann wie folgt:
                  PHP-Code:

                    sub update_rrd 
                  {
                    
                  my ($key,$suffix,$value,$valtype,$stephours,$rrasteps) = @_;
                    return 
                  unless defined $value;
                    
                  $valtype "GAUGE" unless $valtype;
                    
                  $stephours 24 unless $stephours;
                    
                    if (!-
                  d $rrd_dir) { mkdir($rrd_dir); }
                      if (!-
                  e $rrd_dir $key $suffix .'.rrd') {
                        
                  # Checkvalue-type for boundries?
                        # Create RRD
                    
                  if ($valtype eq "GAUGE"){
                        
                  my $heartbeat $wg_config{''}{'rrd_interval'} * 3;
                        
                  $wg_config{$key}{'rra_1_interval_rows'} = $wg_config{''}{'rra_1_interval_rows'unless $wg_config{$key}{'rra_1_interval_rows'};
                        
                  $wg_config{$key}{'rra_5_interval_rows'} = $wg_config{''}{'rra_5_interval_rows'unless $wg_config{$key}{'rra_5_interval_rows'};
                        
                  $wg_config{$key}{'rra_15_interval_rows'} = $wg_config{''}{'rra_15_interval_rows'unless $wg_config{$key}{'rra_15_interval_rows'};
                        
                  $wg_config{$key}{'rra_180_interval_rows'} = $wg_config{''}{'rra_180_interval_rows'unless $wg_config{$key}{'rra_180_interval_rows'};
                        
                  RRDs::create($rrd_dir.$key.$suffix .'.rrd',
                          
                  '--step' => $wg_config{''}{'rrd_interval'},
                          
                  'DS:value:'.$valtype.':'.$heartbeat.':-55:255000'
                          
                  'RRA:AVERAGE:0.5:1:'.$wg_config{$key}{'rra_1_interval_rows'},'RRA:AVERAGE:0.5:5:'.$wg_config{$key}{'rra_5_interval_rows'},'RRA:AVERAGE:0.5:15:'.$wg_config{$key}{'rra_15_interval_rows'},'RRA:AVERAGE:0.5:180:'.$wg_config{$key}{'rra_180_interval_rows'}, 
                          
                  'RRA:MIN:0.5:1:'.$wg_config{$key}{'rra_1_interval_rows'},'RRA:MIN:0.5:5:'.$wg_config{$key}{'rra_5_interval_rows'},'RRA:MIN:0.5:15:'.$wg_config{$key}{'rra_15_interval_rows'},'RRA:MIN:0.5:180:'.$wg_config{$key}{'rra_180_interval_rows'},
                          
                  'RRA:MAX:0.5:1:'.$wg_config{$key}{'rra_1_interval_rows'},'RRA:MAX:0.5:5:'.$wg_config{$key}{'rra_5_interval_rows'},'RRA:MAX:0.5:15:'.$wg_config{$key}{'rra_15_interval_rows'},'RRA:MAX:0.5:180:'.$wg_config{$key}{'rra_180_interval_rows'});
                             if (
                  RRDs::error) {
                                
                  LOGGER('INFO',"Create RRDs failed for $key$suffix :".RRDs::error);
                             } else {
                                
                  LOGGER('INFO',"Created RRD for $key$suffix");
                             }
                    }
                    
                  elsif ($valtype eq "COUNTER"){
                      
                  $rrasteps 7 unless $rrasteps;
                      
                  RRDs::create ($rrd_dir.$key.$suffix .'.rrd',
                          
                  'DS:value:'.$valtype.':'.(($stephours*3600)+600).':0:10000000000',
                          
                  'RRA:AVERAGE:0.5:1:1826''RRA:AVERAGE:0.5:'.$rrasteps.':1300',
                          
                  'RRA:MIN:0.5:1:1826',     'RRA:MIN:0.5:'.$rrasteps.':1300',
                          
                  'RRA:MAX:0.5:1:1826',     'RRA:MAX:0.5:'.$rrasteps.':1300',
                          
                  '-s '.($stephours*3600));
                              if (
                  RRDs::error) {
                                
                  LOGGER('INFO',"Create RRDs failed for $key$suffix :".RRDs::error);
                             } else {
                                
                  LOGGER('INFO',"Created RRD for $key$suffix");
                             }
                      }
                    }
                    
                      
                  # Update values
                      
                  $value int($stephours*3600*$value) if ($valtype eq "COUNTER");
                      
                  RRDs::update($rrd_dir.$key.$suffix.'.rrd','N:'.$value);
                      
                      if (
                  RRDs::error) {
                          
                  LOGGER('INFO',"Update of RRDs failed for $key$suffix/$value:".RRDs::error);
                          
                  # FIXME: Check if error comes from update-value or from rrd-file! 
                          #rename ($rrd_dir.$key.$suffix.'.rrd',$rrd_dir.$key.$suffix.'.rrd.old');
                       
                  } else {
                          
                  LOGGER('DEBUG',"Updated RRD for $key$suffix/$value");
                       }

                  Das nur als Vorschlag. Geändert:
                  - neuer Parameter $rrasteps (Defaultwert: 7)
                  - Defaultwert für $stephours: 24
                  - RRAs verwenden $rrasteps
                  - if => elsif für ($valtype eq "COUNTER")
                  - Redundanz bei RRDs::update(...) aufgehoben

                  Ich hoffe, dass es Jumi soweit zusagt. Eingebaut und testen konnte ich es jetzt leider nicht, sorry.
                  KNX: MDT, Gira TS3, Berker, Theben, PEAR, Preussen BWM, B.E.G., BMS Quadra, WireGate, Timberwolf 2500 | Baublog

                  Kommentar


                    #10
                    Mir persönlich ist es egal ob/wann ihr das mit aufnehmt ich wollte es bloß gemeldet haben.

                    Eins ist jedoch sicher, das was update_rrd ("name","suffix",WERT,"COUNTER") in der aktuellen Version im wiregated macht ist schlichtweg falsch/unsinnig.
                    1. Macht ein 5 Minuten Counter wohl den wenigsten Sinn, aber das sei erstmal egal.

                    2. Wird das int($value) viel zu früh angewendet und schafft damit eine absolute Unschärfe. Der nach 5 Minuten eh schon kaum geänderte Wert wird wieder auf eine Ganzzahl reduziert.

                    3. Fehlt die Multiplikation des Wertes mit --step. Doku RRD-Tool: "The counter is stored as a per-second rate."
                      Nach der Multiplikation wäre die passende Stelle für int($value), wobei das i.d.R. dann eh schon ganze Zahlen sind - aber sicher ist sicher.


                    De facto kommt derzeit mit update_rrd"("name","suffix",WERT,"COUNTER") einfach nur ein unsinniges Diagramm bei raus. Nutzwert = 0.


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

                    Kommentar


                      #11
                      @Dominik: Sieht sauberer aus als mein Code .

                      Alles gute Einwände, vor allem die defaults machen Sinn. Mal abwarten.

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

                      Kommentar


                        #12
                        Ehrlich, schiebts ins SVN, darf ja jeder!
                        Ich finds unsinnig, an dieser Stelle die API zu erweitern - weil dann kann man das RRD auch gleich per dokumentierter RRDs-API direkt selbst anlegen (und trotzdem per rrd_update Werte eintragen!)

                        Natürlich ist das verglichen mit den Möglichkeiten eines rrdtool "limitiert" aber mal ehrlich: 99% der Otto-Normal bekomme ich das ned ansatzweise erklärt und als "nicht-otto" habt ihr doch alle Möglichkeiten zu machen was auch immer euch beliebt?!

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

                        Kommentar


                          #13
                          Hallo zusammen,

                          ich bräuchte da mal Eure Hilfe:
                          Ich habe nach DOMBN Vorlage eine Counter - RRD erstellt.


                          Standardmäßig kann ich nun auf die 15-min Werte zugreifen:

                          Code:
                          http://wiregatexxx/graph.pl?--start=-48h;--end=now;-X=0;-W=WireGate;--slope-mode;-h=400;-w=650;--full-size-mode;--vertical-label=Liter;--title=Gasverbrauch;-c=BACK%23000000;-c=CANVAS%23000000;-c=SHADEA%23000000;-c=SHADEB%23000000;-c=GRID%23960000;-c=MGRID%236B4F42;-c=FONT%23FFFFFF;-c=AXIS%23000000;-c=FRAME%23000000;-c=ARROW%23000080;DEF:ds0=Gaszaehler.rrd:value:AVERAGE;LINE1:ds0%23FF0000:Gaszaehler.rrd;
                          Wie kann ich eigenlich auf die weiteren RRDs zugreifen? Ich hätte gerne 1 Wert pro Tag. IMHO wurde die RRD für die Tageswerte ja erstellt.

                          Gibts auch eine Lösung für die Comet -Visu?

                          vG
                          Wolfgang

                          Kommentar


                            #14
                            Hallo Wolfgang,

                            womit genau erstellt?
                            Schade dass es immer noch so umständlich ist und der patch noch keinen Einzug in den wiregated gefunden hat.

                            Daher wäre es also ratsam einfach mal das Plugin zu posten in dem Du die RRDs erstellst und füllst.
                            Umgezogen? Ja! ... Fertig? Nein!
                            Baustelle 2.0 !

                            Kommentar


                              #15
                              Hallo JuMi2006,

                              ich hab mir ein Plugin geschrieben, welches den Zählerstand meines Gaszählers in RRDs schreibt. Den Code habe ich hier https://knx-user-forum.de/288215-post2.html abgekupfert:
                              Code:
                              #return 0;
                              my $rrdFile="/var/www/rrd/Gaszaehler.rrd";
                              my $rrd="Gaszaehler";
                              my $Gaszaehler_ga="15/2/50";
                              my $Gasvolumen_ga="15/2/52";
                              
                              $plugin_info{$plugname . '_cycle'} = 0; # Aufrufzyklus - never
                              
                              
                              if ($msg{'apci'} eq "A_GroupValue_Write") { # Telegramm eingetroffen
                                      if ($msg{'dst'} eq $Gaszaehler_ga) {
                                      update_rrd($rrd, "", knx_read($Gaszaehler_ga,0,13) * 900, "COUNTER");
                                      knx_write($Gasvolumen_ga,knx_read($Gaszaehler_ga,0,13)/100,14);
                                      plugin_log($plugname,"Zählerstand: ".knx_read($Gaszaehler_ga,0,13));
                                      }
                              } else { # zyklischer Aufruf/initialisierung
                                #subscribe GAs
                                $plugin_subscribe{$Gaszaehler_ga}{$plugname} = 1;
                              
                                # RRD ggf. anlegen
                                if (!-e $rrdFile)
                                {
                                  RRDs::create($rrdFile,
                                    '--step' => 900,  # 15 Minuten
                                    'DS:value:COUNTER:2700:0:2147483647',
                                    # 15 min (für 7,5 d)      1 h (für 35 d)           24 h (für 5 y)            7 d (für 25 y)
                                    'RRA:AVERAGE:0.5:1:720', 'RRA:AVERAGE:0.5:4:840', 'RRA:AVERAGE:0.5:96:1826', 'RRA:AVERAGE:0.5:672:1300',
                                    'RRA:MIN:0.5:1:720',     'RRA:MIN:0.5:4:840',     'RRA:MIN:0.5:96:1826',     'RRA:MIN:0.5:672:1300',
                                    'RRA:MAX:0.5:1:720',     'RRA:MAX:0.5:4:840',     'RRA:MAX:0.5:96:1826',     'RRA:MAX:0.5:672:1300'
                                  );
                              
                                  if (RRDs::error) {
                                    plugin_log($plugname, "Create COUNTER-RRDs failed for $rrdFile: ".RRDs::error);
                                  } else {
                                    plugin_log($plugname, "Created COUNTER-RRD for $rrdFile");
                                  }
                                }
                              }
                              return;
                              Wenn ich nun in der CV den Zählerstand anschaue:
                              Code:
                                      <diagram legend="popup" series="day" refresh="300" popup="true" previewlabels="false" legendposition="nw" period="2" datasource="AVERAGE">
                                        <label>Gaszähler</label>
                                        <axis unit="Impulse">Load</axis>
                                        <rrd color="#FA5858" steps="true">Gaszaehler</rrd>
                                      </diagram>
                              kommt folgendes Diagramm raus:


                              Ich würde allerdings auch gerne den Verbrauch pro Tag ansehen. Es sollte ja auch ein RRD 24h / für 5Y angelegt sein. Also in de CV series=month
                              Code:
                                      <diagram legend="popup" series="month" refresh="300" popup="true" previewlabels="false" legendposition="nw" datasource="AVERAGE">
                                        <label>Gaszähler</label>
                                        <axis unit="Impulse">Load</axis>
                                        <rrd color="#FA5858" steps="true">Gaszaehler</rrd>
                                      </diagram>
                              Dann kommt folgendes raus:




                              Ich würde allerdings der Verbrauch pro Tag ansehehn wollen, also etwa so wie bei Dir:




                              Gut, ich könnte eine 2 RRD anlegen wie Du vorgeschlagen hast. Allerdings müßte das doch auch aus einer RRD funktionieren.

                              vG
                              Wolfgang
                              Angehängte Dateien

                              Kommentar

                              Lädt...
                              X