
Ankündigung
Einklappen
Keine Ankündigung bisher.
Zählerabfrage als Wiregate Plugin
Einklappen
Dieses Thema ist geschlossen.
X
X
-
Versuchs mal hiermit....klingt nach SML-Protokoll, oder den Thread mal nach SML durchsuchen.
Open Automation / Code / [r1702] /tools/sml-meter/sml_meter.pl
Einen Kommentar schreiben:
-
@mikeeyy
Ich habe gestern den Volkszähler zusammengebastelt und der Einfachheit halber das letzte gepostete Script von Dir, mikeeyy verwendet. Es funktioniert nicht, da die if-Abfrage nie zutrifft, obwohl Zählernummer und ID passen. Wenn ich die Daten als hex ausgebe, sehe ich Daten, die ich mit der Hilfe unter Volkszähler sinnvoll dekodieren kann.
Ich kann nur rudimentär Perl, aber ich verstehe nicht, wie die If-abfrage "matchen" soll.
Die Daten haben binäre Form, aber es wird gegen einen ASCII-String verglichen? D.h. einerseits binär "0x01 0x08 0x01" aber dagegen ein Text "1.8.1"? Oder ist die Mustersuche schlauer, als ich denke?
Code:... push @obis,{znr => "1-0", obis=>"1.8.1", ga =>"0/7/201", dpt => 12 , rrd_name => "Name1",}; ... if ($line =~ m/$obis->{obis}/ && $line =~ m/$obis->{znr}/){ ...
Einen Kommentar schreiben:
-
Zitat von JuMi2006 Beitrag anzeigen@mikey:
Ich hab schon ein paar mal draufgeschaut, sehe aber keinen Fehler warum das Parsing dermaßen schief läuft.
danke für die Rückinfo. Kruder Zufall. Klappt seit heute wieder. Die letzten Tage wurde nix am WG geändert. Als ob der Zähler nicht ganz korrekt die Werte geliefert hat. Da das Teil ja über einen GSM Empfänger verfügt, über den die Zählerdaten an meine Stadtwerke übermittelt werden, kann der vielleicht auch aus der Ferne aktualisiert werden. Vielleicht wurde hier aus der Ferne was "gebastelt"
Beste Grüße,
Mike
Einen Kommentar schreiben:
-
ok danke für die Info. Würde da auch ein Synology NAS DS412 reichen? Ist meiner Meinaung auch Linux drauf.
Hab gerade von Lingg + Janke die eHZ KNX Schnittstelle gesehen, Könnte das für meinen Zähler auch funktionieren?
Einen Kommentar schreiben:
-
@mikey:
Ich hab schon ein paar mal draufgeschaut, sehe aber keinen Fehler warum das Parsing dermaßen schief läuft.
@Holyham:
Du benötigst dazu zwingend einen Linux-PC (WireGate, RaspberryPi oder halt irgendwas das mit Linux läuft). Von da aus dann über Netzwerk/KNX.
Die Kombination Lesekopf<->BJ6186 funktioniert nicht.
Einen Kommentar schreiben:
-
Guten Abend,
Sorry wenn ich mich einfach in die Diskussion reinhänge. Ich hätte da mal ne Frage zu meinem Zähler Elster AS1440. Das ich eine Infrarot Schnittstelle brauche weiß ich von der Volkszähler Seite. Werde ich mir auch bestellen, nur weiß ich nicht, mit welchen Ausgang (USB oder RS232).
Wie kriege ich die Daten auf mein KNX Bus? Ich habe leider kein Wiregate. Ich hätte da noch eine RS232 KNX Schnittstelle (Busch Jäger 6186/20), kann ich die dazu missbrauchen?
Kann da jemand helfen?
Oder muss ich die Daten per USB auf meinen Rechner kriegen und dann über LAN in den Bus jagen? Leider bin ich nicht so fortgeschritten, um mir das alles selber zu beantworten.
Würde mir das gerne auf meiner zukünftigen Xhome Visu darstellen.
Danke vorab
Einen Kommentar schreiben:
-
Hallo zusammen,
ich habe seit heute auch ein etwas krudes Phänomen. Und zwar liest das Script die Daten vom Zähler korrekt aus, verarbeitet diese seit heute aber nicht mehr korrekt. So werden die Werte auf die GAs geschrieben, allerdings scheinbar zweimal, so dass der zuerst korrekt geschriebene Wert mit einer falschen Info überschrieben wird. Siehe auch die Ausgaben anbei.
Ausgabe vom Zähler mittes Script
Endzeichen war dabei
RUNS = 1
Endzeichen war dabei
RUNS = 2
!
/ACE5ACE4KGPRS
0-0:96.1.0*255()
1-0:1.8.0*255(005458.922*kWh)
1-0:1.8.1*255(001058.285*kWh)
1-0:1.8.2*255(004400.637*kWh)
1-0:2.8.0*255(000000.226*kWh)
1-0:2.8.1*255(000000.226*kWh)
1-0:2.8.2*255(000000.000*kWh)
0-0:96.14.0*255(01)
1-0:15.7.0*255(000000*W)
0-0:17.0.0*255(0085*A)
0-0:96.3.10*255(1)
0-1:96.1.0*255(0505514284426548)
1-1:1.8.0*255(002571.858*kWh)(13-11-01 11:00:23)
1-1:1.8.1*255(002571.858*kWh)(13-11-01 11:00:23)
1-1:1.8.2*255(000000.000*kWh)(13-11-01 11:00:23)
1-1:1.8.3*255(000000.000*kWh)(13-11-01 11:00:23)
1-1:1.8.4*255(000000.000*kWh)(13-11-01 11:00:23)
1-1:2.8.0*255(000000.000*kWh)(13-11-01 11:00:23)
1-1:2.8.1*255(000000.000*kWh)(13-11-01 11:00:23)
1-1:2.8.2*255(000000.000*kWh)(13-11-01 11:00:23)
1-1:2.8.3*255(000000.000*kWh)(13-11-01 11:00:23)
1-1:2.8.4*255(000000.000*kWh)(13-11-01 11:00:23)
0-1:96.14.0*255(01)(13-11-01 11:00:23)
1-1:15.7.0*255(000000*W)(13-11-01 11:00:23)
0-1:17.0.0*255(0000*A)
0-1:96.3.10*255(1)
!
Zähler 1-0 Kennzahl 1.8.1 Wert: 001058.285 kWh.
COUNTER
Name1 obisname
001058.285 value
Name1_5.rrd
Name1 obisname
001058.285 value
Name1_15.rrd
Name1 obisname
001058.285 value
Name1_60.rrd
Name1 obisname
001058.285 value
Name1_1440.rrd
Name1 obisname
001058.285 value
Name1_10080.rrd
GA:0/7/201 Wert:001058.285 DPT:12
Zähler 1-0 Kennzahl 1.8.2 Wert: 004400.637 kWh.
COUNTER
Name2 obisname
004400.637 value
Name2_5.rrd
Name2 obisname
004400.637 value
Name2_15.rrd
Name2 obisname
004400.637 value
Name2_60.rrd
Name2 obisname
004400.637 value
Name2_1440.rrd
Name2 obisname
004400.637 value
Name2_10080.rrd
GA:0/7/202 Wert:004400.637 DPT:12
Zähler 1-0 Kennzahl 1.8.1 Wert: 002571.858 kWh.
COUNTER
Name1 obisname
002571.858 value
Name1_5.rrd
Name1 obisname
002571.858 value
Name1_15.rrd
Name1 obisname
002571.858 value
Name1_60.rrd
Name1 obisname
002571.858 value
Name1_1440.rrd
Name1 obisname
002571.858 value
Name1_10080.rrd
GA:0/7/201 Wert:002571.858 DPT:12
Zähler 1-1 Kennzahl 1.8.1 Wert: 002571.858 kWh.
COUNTER
Name3 obisname
002571.858 value
Name3_5.rrd
Name3 obisname
002571.858 value
Name3_15.rrd
Name3 obisname
002571.858 value
Name3_60.rrd
Name3 obisname
002571.858 value
Name3_1440.rrd
Name3 obisname
002571.858 value
Name3_10080.rrd
GA:0/7/203 Wert:002571.858 DPT:12
Zähler 1-0 Kennzahl 1.8.2 Wert: 000000.000 kWh.
COUNTER
Name2 obisname
000000.000 value
Name2_5.rrd
Name2 obisname
000000.000 value
Name2_15.rrd
Name2 obisname
000000.000 value
Name2_60.rrd
Name2 obisname
000000.000 value
Name2_1440.rrd
Name2 obisname
000000.000 value
Name2_10080.rrd
GA:0/7/202 Wert:000000.000 DPT:12
Der Code vom Script lautet
Code:#!/usr/bin/perl # Autor: JuMi2006 / www.knx-user-forum.de # knx_write sub: makki / www.knx-user-forum.de # Version: für Mikeyy / www.knx-user-forum.de # Datum: 20.02.2013 # Ein Zähler nach IEC 62056 der Werte von 2 Zählern übermittelt und ähnlich SML selbstständig sendet # INCREDIBLE !!! ;) use warnings; use strict; use Device::SerialPort; use feature "switch"; use EIBConnection; use RRDs; ### KONFIGURATION ### my $eib_url = "local:/tmp/eib"; #for local eibd "local:/tmp/eib" for eibd in LAN: "ip:192.168.2.220:6720" my $rrdpath = "/var/www/rrd"; my $debug = "1"; my $device = "/dev/ttyS0"; #Port my $endsign = "!"; #Letztes Zeichen im Protokoll vom Zaehler my @zaehler = ("1-1","1-0","0-0"); #Auszulesende Zähler my @obis; #push @obis,{znr => "0-0", obis=>"17.0.0", ga =>"0/7/200", dpt => 9 , rrd_name => "Name0",}; push @obis,{znr => "1-0", obis=>"1.8.1", ga =>"0/7/201", dpt => 12 , rrd_name => "Name1",}; push @obis,{znr => "1-0", obis=>"1.8.2", ga =>"0/7/202", dpt => 12 , rrd_name => "Name2",}; push @obis,{znr => "1-1", obis=>"1.8.1", ga =>"0/7/203", dpt => 12 , rrd_name => "Name3",}; my @countermodes = (5,15,60,1440,10080); #Aufloesungen fuer COUNTER RRDs in Minuten (1440 = Tagesverbrauch) ### ENDE KONFIGURATION ### ### EINLESEN #my $file = "/root/mike"; #open (IN,'<',$file); #my @data = <IN>; ### Seriellen Port initialisieren ####START 300baud my $port = new Device::SerialPort($device) || die "can't open $device: $!"; $port->baudrate(9600) || die 'fail setting baudrate'; $port->databits(7) || die 'fail setting databits'; $port->stopbits(1) || die 'fail setting stopbits'; $port->parity("even") || die 'fail setting parity'; $port->dtr_active(1); $port->rts_active(1); $port->read_char_time(500); # 0.5 seconds for each character $port->read_const_time(1000); # 1 second per unfulfilled "read" call $port->write_settings || die 'fail write settings'; ### AUSLESEN my $STALL_DEFAULT=15; # how many seconds to wait for new input my $timeout=$STALL_DEFAULT; my $chars=0; my $runs = 0; my $buffer=""; while ($runs < 2 or $timeout < 0) { my ($count,$saw)=$port->read(25); # Liest 25 Zeichen je Durchlauf aus if ($count > 0) { $chars+=$count; $buffer.=$saw; #print ("saw: ".$saw."\n"); # Ausgabe der eingelesenen Daten if ($saw =~ /\Q$endsign\E/) # \Q \E entwertet alle Sonderzeichen dazwischen { print "\n Endzeichen war dabei \n"; $runs++; print "\n RUNS = $runs \n"; } } else { $timeout--; } if ($timeout<=0) { print "Waited $STALL_DEFAULT seconds and never saw what I wanted\n"; last;} } $port->close || die "can't close $device: $!"; #$buffer =~ m/$endsign(.*?)$endsign/; $buffer =~ /($endsign(.*?)$endsign)/s; $buffer = $1; if ($debug==1){print $buffer."\n\n\n"}; #Nur zur Kontrolle my @data = split(/\r?\n/,$buffer); ############ ### MAIN ### ############ foreach my $line (@data){ chomp $line; foreach my $obis (@obis){ if ($line =~ m/$obis->{obis}/ && $line =~ m/$obis->{znr}/){ chomp $line; $line =~ m/[^(]+\(([^*]+)\*([^)]+)/; my $val = $1; my $unit = $2; if ($debug==1){print "Zähler $obis->{znr} Kennzahl $obis->{obis} Wert: $val $unit. \n"}; #RRDS if ($unit =~ /\Qh\E/) { &rrd_counter ($obis->{rrd_name},$val) } else { &rrd_gauge ($obis->{rrd_name},$val) } #KNX &knx_write ($obis->{ga},$val,$obis->{dpt}); if ($debug==1){print "GA:".$obis->{ga}." Wert:".$val." DPT:".$obis->{dpt}."\n"}; } } } ### SUBS ### sub rrd_counter { if ($debug==1){print ("COUNTER","\n")}; foreach (@countermodes) { my $obisname = $_[0]; if ($debug==1){print $obisname." obisname \n";} my $value = $_[1]; if ($debug==1){print $value." value \n";} my $rrdname = $obisname."_".$_."\.rrd"; if ($debug==1){print ($rrdname,"\n")}; 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"); } } sub rrd_gauge { if ($debug==1){print ("GAUGE","\n")}; my $obisname = $_[0]; if ($debug==1){print $obisname." obisname \n";} my $value = $_[1]; if ($debug==1){print $value." value \n";} my $rrdname = $obisname."\.rrd"; if ($debug==1){print ($rrdname,"\n")}; my $rrdfile = $rrdpath."\/".$rrdname; unless (-e $rrdfile) { RRDs::create ($rrdfile,"DS:value:GAUGE:900:0:10000000000","RRA:AVERAGE:0.5:1:2160","RRA:AVERAGE:0.5:5:2016","RRA:AVERAGE:0.5:15:2880","RRA:AVERAGE:0.5:60:8760"); } RRDs::update("$rrdfile", "N:$value"); } sub knx_write { my ($dst,$value,$dpt,$response,$dbgmsg) = @_; my $bytes; my $apci = ($response) ? 0x40 : 0x80; # 0x40=response, 0x80=write # DPT 1 (1 bit) = EIS 1/7 (move=DPT 1.8, step=DPT 1.7) # DPT 2 (1 bit controlled) = EIS 8 # DPT 3 (3 bit controlled) = EIS 2 # DPT 4 (Character) = EIS 13 # DPT 5 (8 bit unsigned value) = EIS 6 (DPT 5.1) oder EIS 14.001 (DPT 5.10) # DPT 6 (8 bit signed value) = EIS 14.000 # DPT 7 (2 byte unsigned value) = EIS 10.000 # DPT 8 (2 byte signed value) = EIS 10.001 # DPT 9 (2 byte float value) = EIS 5 # DPT 10 (Time) = EIS 3 # DPT 11 (Date) = EIS 4 # DPT 12 (4 byte unsigned value) = EIS 11.000 # DPT 13 (4 byte signed value) = EIS 11.001 # DPT 14 (4 byte float value) = EIS 9 # DPT 15 (Entrance access) = EIS 12 # DPT 16 (Character string) = EIS 15 # $dpt = $eibgaconf{$dst}{'DPTSubId'} unless $dpt; # read dpt from eibgaconf if existing given ($dpt) { when (/^12/) { $bytes = pack ("CCL>", 0, $apci, $value); } #EIS11.000/DPT12 (4 byte unsigned) when (/^13/) { $bytes = pack ("CCl>", 0, $apci, $value); } when (/^14/) { $bytes = pack ("CCf>", 0, $apci, $value); } when (/^16/) { $bytes = pack ("CCa14", 0, $apci, $value); } when (/^17/) { $bytes = pack ("CCC", 0, $apci, $value & 0x3F); } when (/^20/) { $bytes = pack ("CCC", 0, $apci, $value); } when (/^\d\d/) { return; } # other DPT XX 15 are unhandled when (/^[1,2,3]/) { $bytes = pack ("CC", 0, $apci | ($value & 0x3f)); } #send 6bit small when (/^4/) { $bytes = pack ("CCc", 0, $apci, ord($value)); } when ([5,5.001]) { $bytes = pack ("CCC", 0, $apci, encode_dpt5($value)); } #EIS 6/DPT5.001 1byte when ([5.004,5.005,5.010]) { $bytes = pack ("CCC", 0, $apci, $value); } when (/^5/) { $bytes = pack ("CCC", 0, $apci, $value); } when (/^6/) { $bytes = pack ("CCc", 0, $apci, $value); } when (/^7/) { $bytes = pack ("CCS>", 0, $apci, $value); } when (/^8/) { $bytes = pack ("CCs>", 0, $apci, $value); } when (/^9/) { $bytes = pack ("CCCC", 0, $apci, encode_dpt9($value)); } #EIS5/DPT9 2byte float default { LOGGER('WARN',"None or unsupported DPT: $dpt sent to $dst value $value"); return; } } my $leibcon = EIBConnection->EIBSocketURL($eib_url) or return("Error opening con: $!"); if ($leibcon->EIBOpenT_Group(str2addr($dst),1) == -1) { return("Error opening group: $!"); } my $res=$leibcon->EIBSendAPDU($bytes); $leibcon->EIBClose(); return $res; # str2addr: Convert an EIB address string in the form "1/2/3" or "1.2.3" to an integer sub str2addr { my $str = $_[0]; if ($str =~ /(\d+)\/(\d+)\/(\d+)/) { # logical address return ($1 << 11) | ($2 << 8) | $3; } elsif ($str =~ /(\d+)\.(\d+)\.(\d+)/) { # physical address return ($1 << 12) | ($2 << 8) | $3; } else { #bad return; } } } sub encode_dpt9 { # 2byte signed float my $state = shift; my $data; my $sign = ($state <0 ? 0x8000 : 0); my $exp = 0; my $mant = 0; $mant = int($state * 100.0); while (abs($mant) > 2047) { $mant /= 2; $exp++; } $data = $sign | ($exp << 11) | ($mant & 0x07ff); return $data >> 8, $data & 0xff; }
2013-11-01 10:45:32.281,A_GroupValue_Write,1.1.254,0/7/201,00 00 04 22,1058,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:45:32.357,A_GroupValue_Write,1.1.254,0/7/201,00 00 04 22,1058,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:45:32.397,A_GroupValue_Write,1.1.254,0/7/201,00 00 04 22,1058,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:45:32.426,A_GroupValue_Write,1.1.254,0/7/201,00 00 04 22,1058,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:45:32.872,A_GroupValue_Write,1.1.254,0/7/201,00 00 0A 0B,2571,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:54.892,A_GroupValue_Write,1.1.254,0/7/201,00 00 04 22,1058,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.539,A_GroupValue_Write,1.1.254,0/7/201,00 00 0A 0B,2571,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.712,A_GroupValue_Write,1.1.254,0/7/201,00 00 0A 0B,2571,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:55:17.581,A_GroupValue_Write,1.1.254,0/7/201,00 00 04 22,1058,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:55:18.205,A_GroupValue_Write,1.1.254,0/7/201,00 00 0A 0B,2571,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:55:18.294,A_GroupValue_Write,1.1.254,0/7/201,00 00 0A 0B,2571,,12.001,1,low,7,T_DATA_XXX_REQ,0
2013-11-01 10:45:32.548,A_GroupValue_Write,1.1.254,0/7/202,00 00 11 30,4400,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:45:33.047,A_GroupValue_Write,1.1.254,0/7/202,00 00 00 00,0,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.139,A_GroupValue_Write,1.1.254,0/7/202,00 00 11 30,4400,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.231,A_GroupValue_Write,1.1.254,0/7/202,00 00 11 30,4400,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.267,A_GroupValue_Write,1.1.254,0/7/202,00 00 11 30,4400,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.301,A_GroupValue_Write,1.1.254,0/7/202,00 00 11 30,4400,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.769,A_GroupValue_Write,1.1.254,0/7/202,00 00 00 00,0,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:55:17.759,A_GroupValue_Write,1.1.254,0/7/202,00 00 11 30,4400,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:55:17.799,A_GroupValue_Write,1.1.254,0/7/202,00 00 11 30,4400,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:55:18.355,A_GroupValue_Write,1.1.254,0/7/202,00 00 00 00,0,,12.001,0,low,7,T_DATA_XXX_REQ,0
2013-11-01 10:45:32.981,A_GroupValue_Write,1.1.254,0/7/203,00 00 0A 0B,2571,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.464,A_GroupValue_Write,1.1.254,0/7/203,00 00 0A 0B,2571,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:55:18.076,A_GroupValue_Write,1.1.254,0/7/203,00 00 0A 0B,2571,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:56:01.164,A_GroupValue_Write,1.1.254,0/7/203,00 00 0A 0B,2571,,12.001,0,low,7,T_DATA_XXX_REQ,0
Hat jemand eine Idee? :-)
Danke & Grüße,
Mike
Einen Kommentar schreiben:
-
Kannst Du das mal weiter beobachten? Ich habe hier seit knapp 1.5 Jahren keine Probleme damit. Mich würde interessieren ob das reproduzierbar ist.
Einen Kommentar schreiben:
-
Schönen Guten Morgen!
Also, der Fehler mit dem Ausreißer ist die Nacht wieder aufgetreten.
Im logfile war nichts auffällig. Kein Wert der irgendwie nach oben weggedriftet ist.
Also habe ich mir mal parallel den DERIVE Graphen anzeigen lassen. Und siehe da, hier ist alles in bester Ordnung.
Nun, wo mag der Fehler herkommen?
dd
Auf der Seite RRDtool steht zu COUNTER folgendes:
The COUNTER data source assumes that the counter never decreases, except when a counter overflows. The update function takes the overflow into account. The counter is stored as a per-second rate. When the counter overflows, RRDtool checks if the overflow happened at the 32bit or 64bit border and acts accordingly by adding an appropriate value to the result.
Internally, derive works exactly like COUNTER but without overflow checks. So if your counter does not reset at 32 or 64 bit you might want to use DERIVE and combine it with a MIN value of 0.
NOTE on COUNTER vs DERIVE
by Don Baarda <don.baarda@baesystems.com>
If you cannot tolerate ever mistaking the occasional counter reset for a legitimate counter wrap, and would prefer "Unknowns" for all legitimate counter wraps and resets, always use DERIVE with min=0. Otherwise, using COUNTER with a suitable max will return correct values for all legitimate counter wraps, mark some counter resets as "Unknown", but can mistake some counter resets for a legitimate counter wrap.
For a 5 minute step and 32-bit counter, the probability of mistaking a counter reset for a legitimate wrap is arguably about 0.8% per 1Mbps of maximum bandwidth. Note that this equates to 80% for 100Mbps interfaces, so for high bandwidth interfaces and a 32bit counter, DERIVE with min=0 is probably preferable. If you are using a 64bit counter, just about any max setting will eliminate the possibility of mistaking a reset for a counter wrap.
Einen Kommentar schreiben:
-
mal noch eine andere Frage:
Ich benutzte den volkszähler.org Lesekopf.
Wie lange darf denn das Kabel vom Lesekopf bis zum RS232-Wandler sein?
sind 2,5m zu lange?
Kann es sein, dass es daran liegt?
Danke und GRüße,
Lio
Einen Kommentar schreiben:
-
mit /home/user/killsml.sh
läuft es-manuell in cron gestartet ein mal durch (also<1Minute)-So beobachte ich das im Busmonitor.
Was muss ich nun machen, damit es ständig läuft?
Danke und Grüße,
Lio
Einen Kommentar schreiben:
-
Ich warte jetzt mal das log ab. Hoffentlich tritt der Fehler noch mal auf. Es gibt nichts besch***eideneres als nicht reproduzierbare Fehler.
Aber wenn es an einem unsinnigen Wert liegt, kann man das ganze wahrscheinlich mit einer einfachen "wenn > x dann ignoriere" Abfrage lösen.
Inzwischen habe ich einfach die sinnlosen Werte aus dem rrd gelöscht.
rrdtool dump -n ${rrd} >/tmp/${rrdname}.xml
rrdtool restore -f /tmp/${rrdname}.xml ${rrd}
Einen Kommentar schreiben:
-
Hi,
ich habe das gleiche "Feature". Da ich die Stromwerte direktauf den Bus schreibe und dort grafisch darstelle, kann ich bestätigen dass der Wert schon vorher falsch ist.
Ich vermute auch einen Parse-Fehler. Vermutlich liefert der Zähler ab und an Müll. Einen sinnvollen Weg um das abzufangen, habe ich leider noch nicht gefunden.
Grüße
Gunnar
Einen Kommentar schreiben:
-
Für die Erstellung der COUNTER-RRDs würde ich meine Hand ins Feuer legen ;D. Das passt garantiert und die machen keine Fehler ... ich nutze das mehrfach und habe es selbst nach python so portiert.
Ich tippe auf Fehler beim Parsen bzw. der Kommunikation mit dem Zähler.
Einen Kommentar schreiben:
Einen Kommentar schreiben: