Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Verständnisfrage zur Ausführung von Plugins

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

  • Werner V
    antwortet
    Hi!

    Also mit meiner aktuellen Version scheint es so halbwegs zu funktionieren. Schon mal gut so kann ich dann nebenbei mit dem Counter probieren

    Ich hab erstmal den Haken gesetzt

    Danke!

    lg Werner

    Einen Kommentar schreiben:


  • makki
    antwortet
    Also was du willst ist eigentlich COUNTER, genau dafür ist das rrdtool eigentlich gemacht, GAUGE ist je nur ein "Missbrauch"

    Makki

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    SourceForge.net Repository - [openautomation] Contents of /tools/d0-IEC62056-meter/iec62056-meter.pl

    Ab Zeile 133. Ein paar Werte werden aus der "Konfiguration" berechnet. Also die Variable $_ kannst Du mit 1440 (Tagesverbrauch) oder auch mit 60 (Stundenverbrauch) füllen. Die RRDs beziehen sich ja immer auf die Sekunde. Mit dem Stundenverbrauch kann man schon schnell sehen ob es grundsätzlich funktioniert.

    Gruß

    Einen Kommentar schreiben:


  • Werner V
    antwortet
    Hi

    @makki - was ich will ist (eigentlich ) ganz einfach. Ich taste wie gesagt die Scheibe meines Zählers mit der Lichtschranke ab und bekomm jeden Umdrehung einen Impuls auf meinen Binäreingang. Der Binäreingang zählt die Impulse hoch und Impulse dividiert durch 75 sind meine kWh. Somit habe ich auch gleich den Gesamtverbrauch. Jetzt möchte ich den täglichen Verbrauch in einem Diagramm dargestellt bekommen um zb. wochen- oder monatsweise vergleichen zu können - Montag xx kWh, Dienstag xx kWh, Mittwoch xx kWh usw. Du sagst das könnte man auch mit einem normalen 300s Zyklus beim RRD machen?

    @Jumi - Counter hab ich gestern auch gelesen, war mir nur nicht sicher ob das für meine Zwecke das richtige ist. Hab ich nur wieder das Problem mit dem richtigen anlegen

    Danke auf alle Fälle schon mal für eure Hilfe

    lg Werner

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Eine weitere Option ist das COUNTER-RRD.
    Dort schiebst Du (meinetwegen jede Sekunde) den aktuellen Zählerstand rein. Wenn das richtig angelegt ist dann hast Du um 0:00 Uhr (erst nach 2 Tagen ) den Eintrag mit der Differenz zum Vortag.

    Das macht also eigentlich alles ganz alleine. So mach ich das mit dem Zählerstand von meinem eHZ. Alle 2 Minuten wird der abgerufen und in ein RRD geschoben. Am Tagesende zieht rrdtool dann den Vortagswert einfach ab und das RRD zeigt mir die Tagesverbräuche.

    Gruß

    Einen Kommentar schreiben:


  • makki
    antwortet
    Eben da besteht glaube ich das häufigste Missverständniss;
    Das ist wurscht, wie oft der Wert da reingeschrieben wird, zählen tut nur das RRA - und das kann man wunderbar selektiv abfragen.. Minutengenau oder eben pro Tag.. Je nachdem wieviele Details es hergibt (was wiederum alleine vom erstellen abhängt)

    Löse dich einfach von dem Gedanken, das das Aufzeichnungsintervall irgendetwas mit der Auswertung zu tun hat

    Das rrdtool - in Default-config von 300s(!) - liefert dir exakt was du willst, 15J lang, du musst mir nur noch sagen was genau du willst und dann finden wir da eine Lösung - weil die Daten sind da (vergiss bitte das evtl. 90% "umsonst" gespeichert werden, das nenne ich "eh da")
    Optimierungen an dieser Stelle sind meist nicht effektiv; das rrdtool gibts seit (?) 15, 20J, das ist durchoptimiert glaub ich

    Makki

    Einen Kommentar schreiben:


  • Werner V
    antwortet
    Hi makki,

    ich möchte damit nicht punktgenau aufzeichnen, nur eben einmal pro Tag an ungefähr der selben Uhrzeit damit ich den Tagesverbrauch der Pumpe in ein RRD bekomm und das dann so in einem Diagramm darstellen kann.

    Das plugin-subscribe hatte ich bei den ersten tests mit dem Plugin drinnen, dass würde dann auch erklären warum die Ticks hochgehen.

    Mal schauen obs jetzt damit läuft

    lg Werner

    Einen Kommentar schreiben:


  • Werner V
    antwortet
    Hi,

    soooo mal ein wenig probiert, zur Zeit siehts so aus:

    Code:
    ###################################################################################### 
    # 
    # Plugin zur Aufzeichnung des Stromverbrauchs der Wärmepumpe
    # V0.2 2013-01-19 
    # by Werner V - [URL="http://www.knx-user-forum.de"]www.knx-user-forum.de[/URL]
    #
    ######################################################################################
    ######################### 
    ### BEGINN DEFINITION ### 
    ######################### 
    # Aufruf-Zyklus auf einmal täglich setzen
    $plugin_info{$plugname.'_cycle'} = 86400;
    my $file = '/var/www/plugins/kwh_counter.txt';
    my $counter_ga = '5/0/200';
    ######################### 
    ###  ENDE DEFINITION  ### 
    ######################### 
    use RRDs;
    use Time::Local;
    # Datum berechnen
    my $sec; #Sekunde
    my $min; # Minute
    my $hour; #Stunde
    my $mday; #Monatstag
    my $mon; #Monatsnummer
    my $year; #Jahr
    my $wday; #Wochentag 0-6
    my $yday; #Tag ab 01.01.xxxx
    my $isdst;
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
    $year += 1900;
    $mon += 1;
    my $vortag = $mday . "." . $mon . "." . $year;
    my $heute = $mday . "." . $mon . "." . $year;
    # Hauptverarbeitung
    my $vortag_work = $plugin_info{$plugname.'_vortag'};
    if ($vortag_work == $heute){
    # nichts machen
    } else {
    # neuen Stand einlesen
    my $wert_neu = knx_read($counter_ga,300,13);
    # alten Stand einlesen
    open(File,'</var/www/plugins/kwh_counter.txt');
    my $wert_alt = <File>;
    close File;
    # Differenz gestern zu heute ausrechnen und in kWh umrechnen
    my $diff = $wert_neu - $wert_alt;
    my $diff_kwh = $diff / 75;
    # RRD mit neuem Verbrauch beschreiben
    if (!-e '/var/www/rrd/waermepumpe_tagesverbrauch.rrd') {
    RRDs::create('/var/www/rrd/waermepumpe_tagesverbrauch.rrd',
                 '--step' => 86400, 
                 'DS:value:GAUGE:88000:0:10000000000', 
                 'RRA:AVERAGE:0.5:1:365', 'RRA:AVERAGE:0.5:7:300');
    }      
    update_rrd("waermepumpe_tagesverbrauch","",$diff_kwh);
    # File mit neuem Wert beschreiben
    open(File,'>/var/www/plugins/kwh_counter.txt');
    print File $wert_neu;
    close File;
    # Datum für die nächste Berechnung in plugin_info speichern
    $plugin_info{$plugname.'_vortag'} = $heute;
    }
    return;
    obs funktioniert kann ich in ein paar Tagen sagen

    lg Werner

    Einen Kommentar schreiben:


  • makki
    antwortet
    Das "last" bezieht sich auf (seit PL30 oder so) zuletzt ausgeführt durch cycle - das ist kann man blöd finden, ist aber gerade so..
    d.h. das Plugin kann durch "plugin-subscribe" auf einen socket oder eine GA durchaus öfter/später ausgeführt worden sein.
    Das macht dem RRD aber rein garnichts, wenn es "zu oft" aktualisiert wird, schlecht ist nur wenns zu selten passiert..

    -> Also wo genau das Problem liegt ist mir noch nicht klar: Wenn man unbedingt meint, Werte Punktgenau aufzeichnen zu müssen -> ist rrdtool schlicht das falsche (siehe z.B. rsslog aus der CV, zigfache Datenmenge aber eben eine Zeile pro Aktion in der sqlite-DB.. gut, wenn man das wirklich will..)

    Makki

    Einen Kommentar schreiben:


  • Werner V
    antwortet
    Hey,

    hab im ETU Plugin mal geschaut da wird das ähnlich gemacht

    Code:
    RRDs::create(    $DirRrd.$value_URI_RRDdaycount_mapping{$value->{uri}}.".rrd",
                                    '--step' => 86400, 
                                    'DS:value:COUNTER:86500:0:10000000000', 
                                    'RRA:AVERAGE:0.5:1:365', 'RRA:AVERAGE:0.5:7:300');
    Werd mir morgen mal anschauen für was die DS:value und RRA:AVERAGE sind bzw. was ich da beim Anlegen verweden muss - danke schon mal

    lg Werner

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    @netzkind, genau das meinte ich.

    Ich würde heartbeat aber immer deutlich über dem eigentlichen Intervall ansetzen, sonst ist der Wert bei einer Verzögerung dahin. Die Probleme hatte ich zumindest bei einem Counter-RRD.

    Im wiregated ist bei Intervall 300s der Heartbeat auch bei 900 Sekunden.

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Das geht klar auch direkt im Plugin, als Counter RRD gibts da Beispiele im SVN (ETU Pelletkessel Plugin und IEC Meter unter tools). Das ist dann ein einfacher Konsolenbefehl der aus dem Plugin gesendet wird.

    RRD-tool ist mächtig und gut dokumentiert, aber nicht in 3 Zeilen erklärt.

    Der Trick von Patrick sollte hier aber funktionieren.

    Gruß

    Einen Kommentar schreiben:


  • netzkind
    antwortet
    Schön ist was anderes, aber mit diesem Code hier in einem Plugin habe ich mir ein RRD erzeugen lassen, das 60 Minuten als Heartbeat hat (--step 3600).
    Wozu der Rest der Parameter da ist weiß ich nicht mehr so genau, aber dazu findet man in der RRD-Dokumentation mehr.

    Code:
    # Wirkleistung 60min-Summe
    if (!-e '/var/www/rrd/Stromzaehler_Wirkleistung_60min.rrd') {
          RRDs::create('/var/www/rrd/Stromzaehler_Wirkleistung_60min.rrd',
            '--step' => 3600,
            'DS:value:GAUGE:10800:-55:255000',
            'RRA:AVERAGE:0.5:1:2160','RRA:AVERAGE:0.5:5:2016','RRA:AVERAGE:0.5:15:2880','RRA:AVERAGE:0.5:180:8760',
            'RRA:MIN:0.5:1:2160','RRA:MIN:0.5:5:2016','RRA:MIN:0.5:15:2880','RRA:MIN:0.5:180:8760',
            'RRA:MAX:0.5:1:2160','RRA:MAX:0.5:5:2016','RRA:MAX:0.5:15:2880','RRA:MAX:0.5:180:8760');
    }
    update_rrd("Stromzaehler_", "Wirkleistung_60min", knx_read("7/7/7", 60*60));

    Einen Kommentar schreiben:


  • swiss
    antwortet
    Hallo Werner.

    Du kannst ein RRD auch so erzeugen, dass nur 1 Wert pro Tag gelogt wird. Aber das geht AFAIK nur mit einem Trick. Dazu müsste ich aber eine ganze Anleitung schreiben. Vieleicht kennt jemand eine schnellere Variante z.B. mit einem Befehl in der Konsole...

    @jumi: ja man kann den intervall beeinflussen aber nicht per Update RRD... Wenn man vor dem erzeugen den default von 300 auf (1Tag) erhöht. Dann muss man nach dem erzeugen wieder auf 300 zurückstellen für folgende RRD's

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Das Beschreiben des RRDs soll doch die if-Bedingung abfangen bzw. nur einmal am Tag zulassen. Der kürzere Ausführungszyklus sorgt für den regelmässigen timestamp im RRD. Das RRD wird dann immer zwischen 0:00 und 0:05 gefüllt.
    Dies erfordert aber, egal wie Du es umsetzt, ein spezielles RRD da sonst der Heartbeat des RRDs denkt die Datenquelle ist tot (keine Daten innerhalb von 900s beim Wiregate).

    Da muss makki mal was zu sagen ob das mit update_rrd geht.

    Gruß

    Einen Kommentar schreiben:

Lädt...
X