Edit: aktuelle Version immer auf Github (https://github.com/J-N-K/wgplugin/bl...r/S0Zaehler.pl)
Hallo,
anbei ein neues Plugin. Mein Gaszähler liefert S0-Impulse, die ein MDT-Binäreingang im Zählermodus auf den Bus bringt. Dieses Plugin macht daraus den aktuellen Zählerstand sowie aus der Zeit zwischen den Impulsen den aktuellen Verbrauch.
Hallo,
anbei ein neues Plugin. Mein Gaszähler liefert S0-Impulse, die ein MDT-Binäreingang im Zählermodus auf den Bus bringt. Dieses Plugin macht daraus den aktuellen Zählerstand sowie aus der Zeit zwischen den Impulsen den aktuellen Verbrauch.
Code:
# S0 Zaehler v1.0
#
# Copyright 2016: JNK (https://knx-user-forum.de/members/jnk.html)
# latest version available on https://github.com/J-N-K/wgplugin
#
#
# config starts here
#
my $s0_ga = '5/4/101'; # GA auf der die S0-Impulse ankommen
my $zaehler_ga = '5/4/1'; # GA auf den der Gesamtzaehlerstand gesendet wird
my $verbrauch_ga = '5/4/11'; # GA auf den der aktuelle Verbrauch gesendet wird
my $ctr_offset = 68737500; # Offset des Zaehlers gegenueber den S0 Impulsen
my $s0_scaler = 1000; # Faktor Impulse/Einheit
my $rrdpath = "/var/www/rrd"; #Pfad fuer RRDs
my @countermodes = (5,15,60,1440); #Aufloesungen fuer COUNTER RRDs in Minuten (1440 = Tagesverbrauch)
my $debug = 0; # Debug-Meldungen ausgeben?
#
# config ends here
#
if (($msg{'apci'} eq "A_GroupValue_Write") && ($msg{'dst'} eq $s0_ga)) {
# calculate counter value
my $s0_cts = $msg{'value'};
my $ctr_total = $ctr_offset + $s0_cts;
my $now = time();
# store in RRD
foreach (@countermodes) {
my $counterid = "strom";
my $rrdname = $counterid."_".$_."\.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 $storevalue = int($ctr_total*$_*60);
RRDs::update("$rrdfile", "N:$storevalue");
}
# write to knx
my $ctr_value = $ctr_total/$s0_scaler;
if ($zaehler_ga) {
knx_write($zaehler_ga, $ctr_value);
}
my $verbrauch = ($ctr_total - $plugin_info{$plugname.'_value'})/($now - $plugin_info{$plugname.'_valuelast'});
if ($verbrauch_ga) {
knx_write($verbrauch_ga, $verbrauch);
}
# save last value and timestamp
$plugin_info{$plugname.'_value'} = $ctr_total;
$plugin_info{$plugname.'_valuelast'} = $now;
plugin_log($plugname, "Counts=$s0_cts, Gesamt=$ctr_value, Verbrauch=$verbrauch") if $debug;
} else {
$plugin_subscribe{$s0_ga}{$plugname} = 1;
$plugin_info{$plugname.'_cycle'} = 0;
}
return;



Kommentar